diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/AUTHORS | 37 | ||||
-rw-r--r-- | doc/ChangeLog | 438 | ||||
-rw-r--r-- | doc/INSTALL.txt | 148 | ||||
-rw-r--r-- | doc/LICENSE.txt | 340 | ||||
-rw-r--r-- | doc/README.rst | 67 | ||||
-rw-r--r-- | doc/UPGRADE.txt | 172 | ||||
-rw-r--r-- | doc/allinone.rst | 31 | ||||
-rw-r--r-- | doc/authentication.rst | 216 | ||||
-rw-r--r-- | doc/configuration.rst | 98 | ||||
-rw-r--r-- | doc/developers/TODO.rst | 104 | ||||
-rw-r--r-- | doc/developers/api.rst | 10 | ||||
-rw-r--r-- | doc/developers/debugging.rst | 24 | ||||
-rw-r--r-- | doc/developers/doc-TODO.rst | 9 | ||||
-rw-r--r-- | doc/developers/release-new-version.rst | 31 | ||||
-rw-r--r-- | doc/developers/rules.rst | 30 | ||||
-rw-r--r-- | doc/developers/running-unit-tests.rst | 31 | ||||
-rw-r--r-- | doc/developers/translation.rst | 47 | ||||
-rw-r--r-- | doc/index.rst | 50 | ||||
-rw-r--r-- | doc/ssl-client-certificates.rst | 181 | ||||
-rw-r--r-- | doc/themes.rst | 58 | ||||
-rw-r--r-- | doc/tools.rst | 44 |
21 files changed, 2166 insertions, 0 deletions
diff --git a/doc/AUTHORS b/doc/AUTHORS new file mode 100644 index 0000000..633c49c --- /dev/null +++ b/doc/AUTHORS @@ -0,0 +1,37 @@ +SemanticScuttle developers: + Eric Dane <ericdane@users.sourceforge.net> + Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> + Christian Weiske <cweiske@cweiske.de> + + +SemanticScuttle is a fork of Scuttle. + http://sourceforge.net/projects/scuttle/ + +Scuttle and SemanticScuttle contain code from the following applications: + +------------ +GPL Licenced +------------ + +phpBB2 (database abstraction layer) + http://www.phpbb.com/ + +php-gettext + Danilo Segan <danilo@kvota.net> + http://savannah.nongnu.org/projects/php-gettext/ + +UTF8 Helper Functions + Andreas Gohr <andi@splitbrain.org> + +XSPF Web Music Player (Flash) + http://musicplayer.sourceforge.net/ + + +---- + +Patches were realised by : + +* Simple Admin-Interface for deleting unwanted users + Idea of the patch from Andreas Jaggi, for details visit: + http://sourceforge.net/tracker/index.php?func=detail&aid=1543065&group_id=134378&atid=729862 + Adaptation by Andreas Keller (aka Arakel) http://akeller.eu for Takuya Misawa. diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 0000000..52d3322 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,438 @@ +ChangeLog for SemanticScuttle +============================= + +.. contents:: + +0.98.6 - 2013-XX-XX +------------------- +- Fix bug #161: URLs broken on 1&1 server + + +0.98.5 - 2013-03-20 +------------------- +- Fix bug #109: preserve privacy setting from Delicious export files + (Thanks to David Glenck) +- Fix bug #110: Document solution for "searching slashes" +- Fix bug #111: Comments in config.php mention \*.inc.php files + (José María Mateos [rinze]) +- Fix bug: Do not use eregi functions anymore + + +0.98.4 - 2012-01-21 +------------------- +- Fix bug #3439729: URLs were escaped too often in bookmark list +- Fix bug: Subtitle was not escaped +- Fix bug #3388219: Incorrect URL when cancelling tag2tag-actions +- Fix bug #3393951: Logo images missing on bookmark page +- Fix bug #3399815: PHP error in opensearch API in 0.98.3 +- Fix bug #3407728: Can't delete users from admin page +- Fix bug #3431742: open_basedir problems with /etc/ config files +- Fix bug #3436624: Wrong URL for Delicious API when importing +- Fix bug #3463481: RSS feed show warnings in feedvalidator.org +- Fix bug #3384416: Use URL with protocol in bookmarklet +- Fix bug: Invalid HTML when website thumbnails are activated +- Fix bug #3413459: Thumbnails not in one line +- Fix bug #3468293: Delicious import does not preserve private links +- Fix bug #3396727: Title of http://lesscss.org/ not loaded +- Fix bug #3111254: getIdFromUser() always returns an integer now (part 2) +- Implement request #3403609: fr_CA translation update +- Implement patch #3476011: PostgreSQL tables can not be initialized + (Frédéric Fauberteau [triaxx]) + + +0.98.3 - 2011-08-09 +------------------- +- Fix bug #3388456: Missing scripts/fix-unfiled-tags.php + +The script was only missing in the .zip file; the PEAR package +contained it - thus no 0.98.3 PEAR package. + + +0.98.2 - 2011-08-08 +------------------- +- Fix bug #3385724: Rename tag ends with XML Parsing Error +- Fix bug #3386178: "system:unfiled" secret tag does not work +- Fix bug #3384416: Update documentation to explain HTTP/HTTPS root problem +- Fix bug #3382126: Linked tags does not work for tags with spaces +- Fix delicious API help page link + +Run ``scripts/fix-unfiled-tags.php`` to fix old bookmarks that miss the +``system:unfiled`` tags. + + +0.98.1 - 2011-08-01 +------------------- +- Fix bug #3375635: XML parsing problem in top.inc.php +- Fix bug #3375428: Forgot to remove some old dojo files +- Fix bug #3160512: Make SemanticScuttle work with FastCGI +- Fix bug #3376618: Broken tag completion for private bookmarks + + +0.98.0 - 2011-07-21 +------------------- +- Switch to jQuery and drop dojo +- Implement request #2928950: Private keys for RSS feeds (Mark Pemberton) +- Implement request #3164348: Configurable default privacy (Brett Dee) +- Implement request #1989987: Theming support +- Implement request #3054906: Show user's full name instead of nickname +- Implement patch #3059829: update ``FR_CA`` translation +- Fix bug #3187177: Wrong URL / Export XML Bookmarks +- Fix bug #3097187: Using opensearch with two tags does not work in Firefox +- Fix bug #3251877: French translation JavaScript Bug when editing bookmarks +- Fix bug #3168521: Title of tag-filtered RSS Feed is broken +- Fix bug #2853627: Javascript warning +- Fix bug in ``getTagsForBookmarks()`` that fetched all tags +- Fix privacy issue when fetching tags of several users +- Fix Google custom search XML +- Show error message on mysqli connection errors +- Update php-gettext library to 1.0.10 +- ``api/posts/add`` respects the "replace" parameter now +- Only URLs with an allowed protocol may be added to the database +- Support HTTPS connections when ``$root`` is not configured +- SQL schema version table to ease future database upgrades +- Documentation is written with rST (reStructuredText) now +- Support per-host configuration files + + +0.97.2 - 2011-02-17 +------------------- +- Fix bug #3178597: Broken link to context in gsearch admin index page +- Fix bug #3074816: French translation breaks edit javascript +- Fix bug #3111254: Search in my_watchlist results in error +- Fix bug #3073215: Updating bookmark time does not work +- Fix bug #3065284: AjaxVote problem with Webkit browsers + + +0.97.1 - 2010-09-30 +------------------- +This is a security release! We do highly recommend to update +your SemanticScuttle installations! + +- Fix bug #3077187: Permission problem when deleting bookmarks + + +0.97.0 - 2010-06-09 +------------------- +- Many SQL optimizations - SemanticScuttle shows bookmarks 4 times faster now +- New config option to skip "SET NAMES UTF8" call: $dbneedssetnames +- Do not highlight admin bookmarks when $enableAdminColors is disabled +- Add russian translation +- Make HTML export follow the specifications a bit better +- Fix bug #2953732: faulty error message for duplicate bookmarks +- Fix bug #2960663: do not send content-type headers twice for ajax/api scripts +- Fix bug #2976593: fr_FR locale is vietnamese + + +0.96.1 - 2010-02-09 +------------------- +- Fix bug #2948410: API is broken in 0.96.0 + + +0.96.0 - 2010-02-08 +------------------- +- Fix bug #2843523: ArtViper thumbnail license change + reflected by using the javascript backlink +- Fix bug #2887063: Common tag combination description feels broken +- Fix bug #2928905: API was broken when no user was logged in +- Fix bug #2934891: RSS XML was sometimes invalid because + special characters did not get escaped. +- Fix bug #2936833: api fix: shared=no + Patch by fnorder@users.sourceforge.net +- Fix bug #2899515: Bookmarklet broken when site title contains quote +- Fix several SQL injection possibilities +- Fix E_NOTICE when calling alltags.php without any parameter +- Implement part of request #2928950: + + - User adjustable entry count: rss.php?count=20 + - Fix HTTP content type header for RSS + - Add config option to allow sorting by bookmark creation date + instead of modification date + + - Implement request #2833793: Export to avahi config files + - we support zeroconf networking! +- Implement request #2934868: Do not display full redirection URL + Patch by fnorder@users.sourceforge.net +- Implement request #2934872: Option to set the "no description" + description. Patch by fnorder@users.sourceforge.net +- Implement request #2830234: Support for external authentication + services via PEAR's Auth package +- Add special header file for shell scripts (header-standalone.php) +- Fix some problems when using mysqli database driver. +- Make it easy to have www/ in any location one wants it to have +- Send HTTP status code 500 when site has not been configured yet. + + +0.95.2 - 2010-01-16 +------------------- +This is a security release! We do highly recommend to update +your SemanticScuttle installations! + +- Fix several SQL injection possibilities related to tagging + + +0.94.2 - 2010-01-16 +------------------- +This is a security release! We do highly recommend to update +your SemanticScuttle installations! + +- Fix several SQL injection possibilities related to tagging + + +0.95.1 - 2009-11-16 +------------------- +- Fix bug: admin tags were not shown because javascript include was broken. + Thanks, Jean-Luc! + + +0.95 - 2009-11-10 +----------------- +- Implement request #2878169: Voting system with two layouts +- Fix bug #2881886: PHP notice when viewing tags +- Configuration option to disable registration +- Implement request #2874049: "Feeling lucky" button + just add "?lucky=1" as parameter to search page +- Hide bookmarks with vote < $threshold from users (not admins) +- Fix many more unfreed mysql results, but there are still many left +- Improve documentation of many service methods +- All unit tests run now +- Update German translation to 100% +- Helper scripts for translators and translation documentation +- Beginning of developer documentation +- Fix gettext/translation on 64bit systems +- Fix OpenSearch file +- Re-add de_AT which is a rather ugly "official-style" german + translation. Choose the translation you like most. + + +0.94.1 - 2009-10-29 +------------------- +This is a security release! We do highly recommend to update +your SemanticScuttle installations! + +- Fix several XSS possibilities + + +0.94 - 2009-10-02 +----------------- +- Fix bug #2834070: unfreed sql results +- Fix bug #2834077: .htaccess on virtual masshosted apaches +- Fix bug #2834097: Errors when using search without terms +- Fix bug #2834293: E_NOTICE when referer is missing +- Fix bug #2834118: Undefined variable in search.inc.php when not logged on +- Fix bug #2847580: short open tag <? in import.php +- Fix bug #2674961: editAllowed optimization - make less queries for each bookmark +- Fix bug #2829642: PATH_INFO undefined +- Fix bug: mysqli did not work at all +- Fix bug: 404 - api/posts/all not found +- Fix bug: PATH_INFO used when not needed +- Fix bug: htmlentities not always escaped +- Fix bug: Not all pages are valid XHTML +- Fix bug: Hide welcome message if it is empty +- Fix bug: allow deleting links between tags when deleting a user. +- Fix bug: some parse errors +- Interface fix: put linkedtags box on bookmarks page. + +- Implement request #2834111: Detect if cookies are enabled +- Translation updates +- Updated German translation (de_DE), removed de_AT +- New configuration file system +- Add INSTALL.txt and ChangeLog + + +0.93 - 2009-05-26 +----------------- + + +0.92 - 2009-02-11 +----------------- +- Database stores data in UTF-8 now, leading to better + search results for accented characters +- Several Internet Explorer bugs fixed +- clean URLs are back +- Improved page titles + + +0.91 - 2008-11-14 +----------------- +- Major Refactoring: add a tag cache improving query processing + (knowledge inference on tag relations) [DB modified] +- Interface fix: allows to remove a tag from the selection into + subtitle bar thanks to a \*. +- New Feature: authorizes anchors with brackets into descriptions + of bookmark. For example: "[city]Paris[/city]". + This text between anchors will be highlighted when the + corresponding bookmark will be displayed. +- Interface Fix: transforms description field into textarea +- Interface fix: make longer description field [DB modified] +- Interface fix: takes dModified field instead of bDatetime one + (to sort bookmarks) +- Interface fix: add link to gsearch/ forlder on normal search + page and correct gsearch feature. +- New Translation: SemanticScuttle is now available in German, + formal and gender-neutral version (thanks Elmar H. Beer) +- New Feature: admin can check urls validity (in his/her admin page) +- Bug fix: correct ROOT declaration +- Bug fix: correct DOJO completion in tags edition +- Interface fix: add tags cloud from all users into add bookmark + window (orouk proposition) +- New Feature: possibility to import a structure of + hierarchical tags from a file +- Minor fix: improve import from Netscape files + (now takes tags into account) +- Interface fix: add an hyperlink from bookmark edition + page to collaborative edition of the same bookmark +- Bug fix: correct admin CSRF vulnerability (thank you Etienne Z.) +- Major refactoring: transform users row into object, define + page parameters (POST and GET) as constants, simplify + debugging ... [Config file modified: $debugMode] +- New feature: Dynamic tree of tags using Dojo toolkit + (used by a menu2 sidebar box) [Config file modified: $menu2Tags] +- Bug fix: prevent from CSRF vulnerabilities on profile page + (thank you Etienne Z.) +- Bug fix: correct AJAX deleting of bookmarks (thank you Ricco) + + +0.90 - 2008-06-05 +----------------- +The main improvements of this new version are: + +- menu tags (tags which are included into the "menu" tag and + thus which appear on the main page) +- connexion with Google Custom Search Engine which allows to + use the Google Engine to look into your SemanticScuttle + bookmarks (http://www.google.com/coop/cse/). + + +All the changes: + +- New feature: add Google Custom Search Engine into + gsearch/ folder and looking into all bookmarks [Config modified] +- Interface design: antispam question is hidden when + focussed (Thanks to Lifty) +- Interface fix: move welcome message to index page +- Interface fix: displays an error message if the + config.inc.php file has not been created +- Interface design: improve tags presentation, menu box, + popup size, redirection after adding a bookmark, RSS link position +- Interface design: hide searchs with no results into search history box +- New feature: private descriptions for tags [DB modified] +- Refactoring: rename sc_tags into sc_bookmarks2tags + (and services, codes...) [DB modified] +- Interface design: shorten too long URLs in the displayed bookmarks +- Bug fix: correct mutual logins for several installations on the same host +- New feature: menu box which displays tags included into the + special tag "menu" [Config modified] +- New feature: export URL for Google Custom Search (api/export/gcs) +- New feature: add admins profile [Config modified: $admin_users] +- New feature: template sidebar customized in configuration + file [Config modified] +- New feature: export bookmarks into html file for import into + browsers (Thanks to warenhaus) +- Interface design: add export option through API into the profile page +- Bug fix: del.icio.us bookmarks (in .xml format) import 0K +- Bug fix: correct authentification for API with CGI +- Interface fix: correct few links and translations on the about page +- Interface design: copy description and tags (when creating a + bookmark from another one) +- Feature improvement: make rename tags more consistent + (with regards to linked tags) +- Interface design fix: improve visualisation of structuredtags box +- Interface design: improve tag2tag link edition (add item in + Actions menu and improve tag2tagedit page) +- New feature: Save search history: what, by who, when, number of + results and display "last searches" box [DB & config modified] +- Bug fix: correct counting result for history page +- Bug fix: correct counting for unified bookmarks +- Interface fix: improve visualisation in history if no descriptions + for bookmarks +- Interface design: display number of resources in results +- Interface design: improve navigation between tags + (clickable ">") +- Bug fix: delete thumbnail when ajax delete + + +0.88 - 2008-03-12 +----------------- +The main change of this release is the possibility to preview websites +through thumbnails (thanks to artviper.net). + +All the changes: + +- Interface design: display SemanticScuttle version number + on "about" page +- Bug fix: allow clean urls thanks to .htaccess +- New feature: add website preview/thumbnail (based on + artviper.net) [Config file modified] +- Interface fix: add About link for logged users +- Interface fix: hide "structured box" when no linked tags +- Interface fix: make more consistent the general navigation between + personal and common spaces +- Interface fix: add a link to last editor profile in common description. + Moreover, don't count a change if a user saves with no modifications. +- Bug fixes: prevent from adding special characters + (like " or ') into tags +- Upgrade: from Scuttle 0.7.2 to SemanticScuttle 0.87. + + +0.87 - 2008-02-14 +----------------- +This new version brings two major features to SemanticScuttle: + +1) You can now create a synonym link between tags. + For example, by linking the tags "monument" and "monuments", + you can find resources tagged with the first one when you navigate + through the second one. More important, this link works with + the inclusion link already implemented. +2) Users can create commune descriptions for tags and bookmarks. + In a small community, the idea is to bring gradually people to work + together (if they want it). From a research perspective, we explore + the bridge between individual actions (easy to do) and collaborative + ones (more difficult but more powerful). + +All the changes: + +- Interface design: allow to access to users' bookmarks from last + user sidebox. (Currently, we can just access to their profiles). +- Interface design: hide multiple URLs repeated into history page +- Interface design: hide About link for logged users +- New feature: Collaborative spaces (like wiki) for descriptions + of tags and bookmarks +- Interface fix: improve the creation of structured links +- New feature: Allow the creation of synonym links between tags + + +0.86 - 2008-01-24 +----------------- +- Bug fix: correct antispam question feature +- Interface design: normalize URL when adding + (remove final "/") +- Interface design: group similar URL +- Interface bug fix: improve linked relations into structured links box +- Interface bug fix: improve display of structured tags into alltags + and populartags page (problem of div size) + + +0.85 - 2008-01-22 +----------------- +- New feature: Add stats (nb children, nb descendants, depth, + nb update) to structured tags + + - Allow to visualize structured tags according to stats + - Add admin page to update stats from the existing structured + tags in the database + +- Translation: improve French translation (add missing translations, + transform "labels" into "tags") +- New feature: List all users in a users page and users block on + the front page +- Interface design: Transform recent bookmarks into last bookmarks + on front page (to avoid blank front page) +- Interface design: Add structured tags in a right box on the front page +- New feature: Antispam question to register +- New feature: Allowing a subtitle message, managable in the + configuration file. +- Interface design: Redesign menu (search box, sort buttons, top + and right menu) +- Interface design: Make URLs appear under bookmarks +- Debug: correcting a problem to log out (bugs from Scuttle). + diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt new file mode 100644 index 0000000..c911740 --- /dev/null +++ b/doc/INSTALL.txt @@ -0,0 +1,148 @@ +============================ +SemanticScuttle installation +============================ + +.. contents:: + +Prerequisites +============= +To run SemanticScuttle, you need: + +- PHP5 with filter functions enabled +- A web server, for example Apache + + +Standard installation instructions +================================== +If you've downloaded a ``SemanticScuttle-x.y.z.zip`` file from SourceForge, +then this instructions are for you. + +1. Create a new MySQL/PostgreSQL database +2. Import ``data/tables.sql`` into that database, i.e. + run :: + + $ mysql -umyusername -p mydatabasename < data/tables.sql + + on the shell. + + If you run PostgreSQL, use ``tables-postgresql.sql``:: + + $ psql mydatabasename myusername < data/tables-postgresql.sql + +3. Copy ``data/config.php.dist`` to ``data/config.php`` and modify it as + necessary. See configuration_ for more information. +4. Make the cache directory writable by your web server. + For example, run :: + + $ chmod 0777 cache + + on the shell. +5. Set the ``www/`` directory as document root in your web server, + restart the web server. +6. That's all! Visit your SemanticScuttle installation web site now + with your browser. +7. Register a user and add bookmarks. + + +.. _configuration: configuration.html + + +Ugly www directory in URLs +-------------------------- +In case point 5 of the installation instructions cannot be put into +practice by you because you are not able to change the web server +configuration, you are not lost! There is a way to get rid of +``www/`` in your URL! + +Imagine following directory layout: :: + + /home/customer123/ + www/ + subdomain1/ + subdomain2/ + subdomain3/ + +Create a SemanticScuttle directory somewhere outside ``www`` if possible +and put all directories except ``www/`` in there. Move all files and +directories from ``www/`` into your subdomain directory. Then modify +``subdomain/www-header.php`` to include the correct file path. + +The new directory layout should look that way: :: + + /home/customer123/ + semanticscuttle/ + doc/ + data/ + src/ + www/ + subdomain1/ + subdomain2/ (this is the semanticscuttle subdomain) + about.php + admin.php + .. + www-header.php + subdomain3/ + +Now open www-header.php and replace :: + + require_once '../src/SemanticScuttle/header.php'; + +with :: + + require_once '../../semanticscuttle/src/SemanticScuttle/header.php'; + + + +PEAR package installation +========================= +Apart from the normal installation, you may install the SemanticScuttle PEAR +package - it gives you the ability to upgrade to the next version with a single +command, without manually unzipping files. + +0. The SemanticScuttle PEAR channel is available at + http://semanticscuttle.sourceforge.net/pirum.html + +1. Make sure you have the PEAR installer (or Pyrus) available and working. + You can check that by running :: + + $ pear version + PEAR Version: 1.9.2 + PHP Version: 5.3.6-13ubuntu3.2 + Zend Engine Version: 2.3.0 + Running on: Linux bogo 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 + +2. Discover the channel if you haven't done so yet:: + + $ pear channel-discover semanticscuttle.sourceforge.net + + Verify that the channel has been added with:: + + $ pear list-channels + Registered Channels: + ==================== + Channel Alias Summary + ... + semanticscuttle.sourceforge.net sc SemanticScuttle PEAR channel + ... + +3. Install SemanticScuttle:: + + $ pear install sc/semanticscuttle-beta + +4. Find out where it got installed to:: + + $ pear list-files sc/semanticscuttle + +5. Generally, the directory you need to point your web server's ``DocumentRoot`` to + is the *PEAR www directory* + ``/SemanticScuttle/``. Find the www directory with:: + + $ pear config-get www_dir + /usr/share/php/htdocs + +6. The configuration file is located in *PEAR's data directory* + ``/SemanticScuttle/``:: + + $ pear config-get data_dir + /usr/share/php/data + + In ``$data_dir/SemanticScuttle/``, copy ``config.php.dist`` to + ``config.php`` and continue with configuration_. diff --git a/doc/LICENSE.txt b/doc/LICENSE.txt new file mode 100644 index 0000000..72188c3 --- /dev/null +++ b/doc/LICENSE.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License.
\ No newline at end of file diff --git a/doc/README.rst b/doc/README.rst new file mode 100644 index 0000000..ed41a38 --- /dev/null +++ b/doc/README.rst @@ -0,0 +1,67 @@ +====================== +SemanticScuttle 0.98.5 +====================== +A social bookmarking tool experimenting with new features +like structured tags or collaborative descriptions of tags. + +- Home page: http://semanticscuttle.sourceforge.net/ +- Project page: https://sourceforge.net/projects/semanticscuttle/ +- Demo: http://semanticscuttle.sourceforge.net/demo/ + +Available under the GNU General Public License + + +Installation +============ +See `INSTALL.rst`__ + + +__ INSTALL.html + + +Upgrading from a previous version +================================= +See `UPGRADE.txt`__ + +__ UPGRADE.html + + +Public API +========== +SemanticScuttle supports most of the `del.icio.us API`__. +Almost all of the neat tools made for that system can be modified +to work with your SemanticScuttle installation. If you find a tool +that won't let you change the API address, ask the creator to add +this setting. You never know, they might just do it. + +__ http://del.icio.us/doc/api + + + +Links +----- +- `further documentation`__ +- `support and help questions`__ +- `development mailing list instructions`__ +- `suggestions`_ for SemanticScuttle +- `bug reports`_ +- `feature requests`_ + +__ http://semanticscuttle.wiki.sourceforge.net/ +__ http://sourceforge.net/forum/forum.php?forum_id=759510 +__ https://sourceforge.net/mailarchive/forum.php?forum_name=semanticscuttle-devel +.. _suggestions: http://sourceforge.net/forum/forum.php?forum_id=759511 +.. _bug reports: http://sourceforge.net/tracker/?group_id=211356&atid=1017430 +.. _feature requests: https://sourceforge.net/tracker/?group_id=211356&atid=1017433 + + + + +Known issues +============ + +Number of bookmarks always 0: "0 bookmark(s)" +--------------------------------------------- +This issue occurs when debug mode is enabled. +Technically, this is because the database layers ``DEBUG_EXTRA`` gets +enabled through debug mode. diff --git a/doc/UPGRADE.txt b/doc/UPGRADE.txt new file mode 100644 index 0000000..511748e --- /dev/null +++ b/doc/UPGRADE.txt @@ -0,0 +1,172 @@ +================================================= +Upgrading SemanticScuttle from a previous version +================================================= + +.. contents:: + +From version 0.94-0.98.1 to 0.98.3 +================================== +Run ``scripts/fix-unfiled-tags.php`` to fix old bookmarks that miss the +``system:unfiled`` tags. + + +From version 0.97 to 0.98 +========================= +Database updates +---------------- +Apply ``data/schema/6.sql`` + + ALTER TABLE `sc_users` ADD `privateKey` VARCHAR(33) NULL; + CREATE UNIQUE INDEX `privateKey` ON `sc_users` (`privateKey`); + + +From version 0.96 to 0.97 +========================= +No database changes necessary. + + +From version 0.95 to 0.96 +========================= +Database updates +---------------- +Apply ``data/schema/5.sql`` + +API +--- +The method signatures of ``addBookmark()`` and ``updateBookmark()`` +changed due to the addition of the ``$short`` parameter. + +We got complaints about the changed file structure, and people told +us that they just cannot set the document root to ``www/``, because they +are not admins on their HTTP server. This is a valid point, and +with 0.96.0 you can easily change it. See `INSTALL.txt`_ for more information +about moving ``www/``. + +.. _INSTALL.txt: INSTALL.html + + +From version 0.94 to 0.95 +========================= +The file structure completely changed in 0.95.0 compared +to previous versions. We recommend that you start with a +fresh installation, just copying over your ``config.php`` file. +Set your web server document root directory to ``www/``. + +Yes, we kind of lost the ability to run SemanticScuttle +in a subdirectory of a hostname. This functionality will +be back in one of the next releases, but for now, you have +to live with it. + +Update your database +-------------------- +Apply ``data/schema/4.sql``. + +Currently, only MySQL can be used as database backend. +All other DBMS (database management systems) have not been +tested except for PostgreSQL, and SemanticScuttle fails there. + +Translation +----------- +The ``de_AT`` translation has been re-added. This is because +``de_AT`` provides a rather ugly "official German" style, +while the normal ``de_DE`` is friendlier. Choose what you like. + + +From version 0.93 to 0.94 +========================= + +- Nothing changed except for the default configuration file. + It is recommended to start with a fresh config file, + but not neccesary. Old config files still work. +- If you used translation ``de_AT``, please switch to ``de_DE``. + ``de_AT`` was moved to ``de_DE`` and ``de_AT`` has been removed. + + +From version 0.92 to 0.93 +========================= + +- Backup your database +- Make a copy from your SemanticScuttle Web directory +- Upgrade your current configuration file (``config.inc.php``) with respect to ``config.inc.php.example`` :: + + $footerMessage = ''; #HTML message appearing at the bottom of the page (just above SemanticScuttle credits) + $sidebarTopMessage = ''; #HTML message appearing at the top of the sidebar + $sidebarBottomMessage = ''; #HTML message appearing at the bottom of the sidebar + $adminsCanModifyBookmarksFromOtherUsers = true; # 'true' if admin users can edit or delete bookmarks belonging to other users. Else 'false'. + $adminsAreAdvisedTagsFromOtherAdmins = false; # 'true' if tags from other admins are proposed to each admin (in add/edit a bookmark page). Else 'false'. + $defaultPerPageForAdmins = 20; # default number of bookmarks per page for admins (-1 means no limit) + + +From version 0.91 to 0.92 +========================= +Message: this version modifies the database to UTF-8 charset. The idea is to convert the content (through BLOB type) and then to change the tables' charsets. + +- Backup your database +- Make a copy from your SemanticScuttle Web directory +- Upgrade your database by applying ``data/schema/3.sql`` +- Upgrade your current configuration file (``config.inc.php``) with respect to ``config.inc.php.example`` + + - Add variable :: + + $descriptionAnchors = array("author", "isbn", "address"=>"[address][street][/street][city][/city][/address]"); #add a possible anchor (structured content) for bookmarks' description field + + - Add variable :: + + $enableCommonTagDescriptionEditedByAll = true; #true mean everybody can edit common description. Else just the admins can do it. + - Add variable :: + + $googleAnalyticsCode = ''; #Allow GoogleAnalytics tracker https://www.google.com/analytics/ + + +From version 0.90 to 0.91 +========================= +- Backup you database +- Make a copy from your SemanticScuttle Web directory +- Upgrade your database by applying ``data/schema/2.sql`` +- Upgrade your current configuration file (``config.inc.php``) with respect to ``config.inc.php.example`` + + - Delete last line :: + + include_once('debug.inc.php'); + + - Add variable:: + + $menu2Tags = array('example', 'of', 'menu', 'tags'); + + - Add variable:: + + $debugMode = true; # if true, show debug messages + + +From version 0.89 to 0.90 +========================= + +- Backup you database +- Make a copy from your SemanticScuttle Web directory + +- Upgrade your current configuration file (config.inc.php) with respect to config.inc.php.example + + add these lines under ``$enableWebsiteThumbnails = false; # enableWebsiteThumbnails {true|false}``:: + + $thumbnailsUserId = ''; + $thumbnailsKey = ''; + + +From version 0.88 to 0.89 +========================= + +- Backup you database +- Make a copy from your SemanticScuttle Web directory +- Upgrade your database by applying ``data/schema/1.sql`` +- Upgrade your current configuration file (``config.inc.php``) with respect to ``config.inc.php.example`` + + - add line:: + + $sizeSearchHistory = 10; + + - add sidebar block index line:: + + $index_sidebar_blocks = array('search','menu','users','popular'); + + - add line:: + $enableGoogleCustomSearch = true; diff --git a/doc/allinone.rst b/doc/allinone.rst new file mode 100644 index 0000000..e5ca3c7 --- /dev/null +++ b/doc/allinone.rst @@ -0,0 +1,31 @@ +============================= +SemanticScuttle documentation +============================= + +.. contents:: + +First reads +=========== +.. include:: README.rst +.. include:: INSTALL.txt +.. include:: UPGRADE.txt + + + +Features +======== +.. include:: authentication.rst +.. include:: ssl-client-certificates.rst +.. include:: themes.rst + + + +Developer documentation +======================= +.. include:: developers/rules.rst +.. include:: developers/api.rst +.. include:: developers/debugging.rst +.. include:: developers/release-new-version.rst +.. include:: developers/running-unit-tests.rst +.. include:: developers/translation.rst +.. include:: ChangeLog diff --git a/doc/authentication.rst b/doc/authentication.rst new file mode 100644 index 0000000..d9d5066 --- /dev/null +++ b/doc/authentication.rst @@ -0,0 +1,216 @@ +============================================ +External authentication with SemanticScuttle +============================================ + +Most times, one piece of software is only a part in the big puzzle +that makes the software landscape of a company or organization. +SemanticScuttle is not different and should integrate as nicely as +possible with all other systems. + +One of the basic tasks of integration is user authentication against +a central database - be it a central user database, an LDAP or a +active directory server. + +Since version 0.96, SemanticScuttle supports user authentication against +external systems. To provide a wide range of supported systems, we chose +to utilize PEAR's `Authentication package`__. +It does this by providing different "`authentication containers`__", +for example Database, IMAP, LDAP, POP3, RADIUS, SAP and SOAP. + +Please be aware of the fact that, after successful authentication, the user +and his scrambled password are stored in the SemanticScuttle database. +This is required for proper functioning of the software. It does not mean +that you will be able to login if your external authentication provider +is offline - you won't, execpt you switch it off in the SemanticScuttle +configuration. + + +__ http://pear.php.net/package/Auth +__ http://pear.php.net/manual/en/package.authentication.auth.intro-storage.php + + +Basic configuration +=================== +The default configuration file ``data/config.default.php`` has an own section +on auth options and an explanation of the single entries. + +To utilize the external authentication, you need to install the +PEAR Auth package: :: + + $ pear install auth + +If you do not have a PEAR installation available, you can try to manually +install the files in the src/ directory. If you choose to do that, the +src/ directory should look similar to that: :: + + src/ + Auth.php + Auth/ + Anonymous.php + Container.php + Container/ + .. + SemanticScuttle/ + header.php + .. + +After that, modify your ``data/config.php`` file. The most important change +is to use :: + + $serviceoverrides['User'] = 'SemanticScuttle_Service_AuthUser'; + +which tells SemanticScuttle to switch to the special authentication service. + +Now that's done, you can configure the single auth options: + +``$authType = 'MDB2';`` + selects the authentication container. + +``$authOptions`` + is an array of options specific to the authentication container. Please + consult the PEAR Auth documentation for more information. + +``$authDebug = true;`` + should be used when setup fails, since it may give important hints + where it fails. + + Please note that login will seem to fail with + debugging activated. Going back to the main page after that will + show that you are logged in. + + + +Authentication examples +======================= + +General database authentification +--------------------------------- +Here you also need the PEAR `MDB2 package`_. +The "``new_link``" option is important! + +``config.php`` settings: :: + + $serviceoverrides['User'] = 'SemanticScuttle_Service_AuthUser'; + $authType = 'MDB2'; + $authOptions = array( + 'dsn' => array( + 'phptype' => 'mysql', + 'hostspec' => 'FIXME', + 'username' => 'FIXME', + 'password' => 'FIXME', + 'database' => 'FIXME', + 'new_link' => true, + ), + 'table' => 'usersFIXME', + 'usernamecol' => 'usernameFIXME', + 'passwordcol' => 'passwordFIXME', + 'cryptType' => 'md5', + ); + + +Mantis Bugtracker +----------------- +Here you also need the PEAR `MDB2 package`_. + +``config.php`` settings: :: + + $serviceoverrides['User'] = 'SemanticScuttle_Service_AuthUser'; + $authType = 'MDB2'; + $authOptions = array( + 'dsn' => array( + 'phptype' => 'mysql', + 'hostspec' => 'FIXME', + 'username' => 'FIXME', + 'password' => 'FIXME', + 'database' => 'FIXME', + 'new_link' => true, + ), + 'table' => 'mantis_user_table', + 'usernamecol' => 'username', + 'passwordcol' => 'password', + 'cryptType' => 'md5', + ); + +.. _MDB2 package: http://pear.php.net/package/MDB2 + + +MediaWiki +--------- +Unfortunately, the password column does not contain a simple hashed +password - for good reasons as described on +http://www.mediawiki.org/wiki/Manual_talk:User_table#user_password_column + +If you configure your MediaWiki_ to use passwords without salt, you +can make it work nevertheless: + +MediaWiki ``LocalSettings.php``: :: + + $wgPasswordSalt = false; + +\- after that, users need to change/update their passwords to get them +unsalted in the database. You can verify if the passwords are unhashed +if you do :: + + SELECT CAST( user_password AS CHAR ) FROM user + +on your MediaWiki database. Passwords prefixed with "``:A:``" can be used. + +Another problem is that mediawiki user names begin with an uppercase letter. +You need to modify ``www/login.php`` and remove the "``utf8_strtolower``" function +call: :: + + $posteduser = trim(utf8_strtolower(POST_USERNAME)); + +becomes :: + + $posteduser = trim(POST_USERNAME); + + +``config.php`` settings: :: + + $serviceoverrides['User'] = 'SemanticScuttle_Service_AuthUser'; + $authType = 'MDB2'; + $authOptions = array( + 'dsn' => array( + 'phptype' => 'mysql', + 'hostspec' => 'FIXME', + 'username' => 'FIXME', + 'password' => 'FIXME', + 'database' => 'FIXME', + 'new_link' => true, + ), + 'table' => 'user', + 'usernamecol' => 'user_name', + 'passwordcol' => 'user_password', + 'cryptType' => 'md5_mediawiki', + ); + function md5_mediawiki($password) { + return ':A:' . md5($password); + } + + +.. _MediaWiki: http://www.mediawiki.org/wiki/MediaWiki + +Active Directory / LDAP +----------------------- +Here we authenticate against an active directory server. + +``config.php`` settings: :: + + $serviceoverrides['User'] = 'SemanticScuttle_Service_AuthUser'; + $authType = 'LDAP'; + $authOptions = array( + 'host' => '192.168.1.4', + 'version' => 3, + 'basedn' => 'DC=EXAMPLE,DC=ORG', + 'binddn' => 'readuser', + 'bindpw' => 'readuser', + 'userattr' => 'sAMAccountName', + 'userfilter' => '(objectClass=user)', + 'attributes' => array(''), + ); + $authEmailSuffix = '@example.org'; + +More LDAP options can be found in the `PEAR manual`__. + +__ http://pear.php.net/manual/en/package.authentication.auth.storage.ldap.php diff --git a/doc/configuration.rst b/doc/configuration.rst new file mode 100644 index 0000000..dd0fb5e --- /dev/null +++ b/doc/configuration.rst @@ -0,0 +1,98 @@ +=================== +Configuration files +=================== + +.. contents:: + +SemanticScuttle uses at least two configuration files: + +1. Default configuration file ``config.default.php`` +2. Custom configuration file ``config.php`` + + +The **default configuration** file contains sensible defaults for most users +that do not need to be changed to get started. + +Never change it - it will get overwritten with the next update. +If you want to change values in it, copy them into your personal +``config.php`` file - updates to SemanticScuttle will not change that one. + +The **custom configuration** file, ``config.php`` is created by copying the +shipped ``config.php.dist`` file and modifying the values in there. + +It consists of the configuration directives that should be set on every +fresh installation. + + + +Configuration scenarios +======================= + +Simple installation +------------------- +Put your configuration file in ``data/config.php``. +If you installed SemanticScuttle's PEAR package, use:: + + $ pear config-get data_dir + /usr/share/php/data + +to find the data directory location and append ``SemanticScuttle/`` to it. +In this case, the configuration file has to be in:: + + /usr/share/php/data/SemanticScuttle/config.php + + +The configuration file may also be saved into:: + + /etc/semanticscuttle/config.php + + +Multiple SemanticScuttle instances +---------------------------------- +The files of one single SemanticScuttle installation may be shared +for several SemanticScuttle instances. + +To be able to configure them differently, SemanticScuttle supports +per-host configuration files: + +- ``data/config.$hostname.php`` +- ``/etc/semanticscuttle/config.$hostname.php`` + + + +Configuration options +===================== +``$root`` URL +------------- +Normally, this configuration setting is detected automatically and will +work for both HTTP and HTTPS installations. + +If your installation is available on **HTTP only**, then you need to configure +it. + +The value is the full URL to your installation, including a trailing +slash:: + + $root = "http://homepage.example.org/semanticscuttle/"; + +or:: + + $root = "http://bookmarks.example.org/"; + + +Common problems +=============== +Searching for words with slashes "/" does not work +-------------------------------------------------- +When searching for a phrase with a slash in it, like "foo/bar", you +may get a 404 error. + +In that case, you need to enable AllowEncodedSlashes__ in your Apache +virtual host configuration:: + + AllowEncodedSlashes NoDecode + +Restart apache after changing the vhost config file. +Searching will work now. + +__ http://httpd.apache.org/docs/2.2/mod/core.html#allowencodedslashes diff --git a/doc/developers/TODO.rst b/doc/developers/TODO.rst new file mode 100644 index 0000000..59dd655 --- /dev/null +++ b/doc/developers/TODO.rst @@ -0,0 +1,104 @@ +- SemanticScuttle_Filter + -> class with static filter functions to filter + ids, usernames, passwords, sorting etc. +- when a user gets deleted from database, he should not be + logged in anymore (name not shown on top right) +- Make users inactive by default when registered newly + - have to be activated by admins +- Add RDFa to user profile page +- use recaptcha or alike -> quickform +- tutorial about sidebar +- update php-gettext +- index on bookmarks->modified, since created is not used in selects/sort + - how to optimize sorts, to prevent mysql filesort? -> index enough? + - how to optimize DISTINCT bHash + + +Tracker items: +#1908041 - klick counter + a counter how many people klicked one link +#1964906 - Page numbers list / alternative pagination + I would love to have page numbers like for example google has for terms + with many hits. You can have a look at what exactly I'm talking about here: + http://www.jenst.se/wp-content/uploads/2008/04/wp-page-numbers-themes.gif . + With this you can more easily browse through the pages by clicking the + numbers and not those 'next' and 'previous' buttons. +#1989984 - Branding Improvements + Create an ability to brand the installed site on several levels: + Level 1 - add a logo and text to the header + Level 2 - add a logo and text to the top header and add html (logos, text, + flickr widgets, youtube widgets, etc.) to the left and right side bars + through an interface similar to the theme editor on Wordpress. Also + include easy interface to Google AdWords. + Level 3 - add the items in Level 2 plus a banner ad manager. + Requirements: + - add comments to the CSS to allow for the novice to edit the CSS based on + known widget or image size. This is an important addition. +#1969682 - private bookmarks + I think the handling of private bookmarks could be improved. Now it is so + that you just see a smaller amount of bookmarks as a visitor as you would + see when you are logged in as a member (and if had added some private + bookmarks to the site). + There should be a separate count of this private bookmarks to indicate that + there are some. Something like '80 public/total bookmark(s) - 5 private + bookmarks(s)'. It also should be easier to find them. Maybe the above + mentioned line counting the private bookmarks could be a link to a page + listing them. +#2035563 - Delete bookmarks based on user votes + I'm using Semantic Scuttle for ONE topic based bookmarks sharing. Sometimes + I, as admin is not sure if the bookmark submitted is right for or not. + I'l like to propose a function, where 5 (numbers can be selected)of top + users (or sub admins if they can be created) of the site marks the bookmark + not applicable to the site, then that bookmark is deleted. +#2862548 - Disable email TLD verification + It should be possible to disable the top level domain verification in the + email verification for new users. Use cases are + a) new top level domains (TLD) that are created in the future + b) company-internal non-standard TLDs +#2830219 - Edit by other people + We use SemanticScruttle to share bookmarks in the company I work for. + It'd be helpful if there was a way all people could edit public bookmarks. +#1969705 - adjustable thumbnail height and width in config.inc.php + I put two vars in the config file to adjust the size of the thumbnails and + accordingly changed the bookmarks.tpl.php file: + bookmarks.tpl.php + $websiteThumbnailsWidth = 90; # width of thumbnails in pixel, max value + 240 + $websiteThumbnailsHeight = 68; # height of thumbnails in pixel, max value + 180 +#1933227 - custom maximum number of items in RSS-feeds + for Mozilla Firefox's Live Bookmarks feature, the current 15 items + delivered by RSS may not be enough. + note: by changing getPerPageCount() in functions.inc.php in a similar + manner, it should be possible to make the max-entries-per-page + customizable +#1926991 - Admin Approval of New Users + Create a way for admins to select if they have to approve all new users. + Then have the following methods for new user approval: + - by email to selected admin on a per instance basis + - through an admin panel on a per instance basis + - through an admin panel on a batch basis + - through an admin panel by setting up rules for approval (for example: + user admin must have a specific domain - helpful for big companies) + This would help reduce the amount of spam for some users. +#1932109 - tag counting: count each URL only once + I don't know if it's only me, but I have would prefer another way of + calculating a tag's weight: + current behaviour: + existing tags are currently counted by summing up the entries in the system + that have that tag. + example: + one user added youtube.com with the tag "videos". + one user added video.google.com with the tag "videos". + ten users added amazon.com with the tag "books". + the tags are now weighed like this: 2 videos, 10 books. + although there are more unique URLs in the system with the tag "videos". + preferred behaviour: + for tag-weighing, count the unique URLs, instead of the entries. + in the example above: count 2 for "videos", one for "books". +#2830224 - Shorturl/tinyurl service + It would be cool if SemanticScruttle could be used as shorturl service with + configurable short urls. + So I'd define "freddy" as short url name in the bookmark, and anyone could + access it e.g. via our-bookmarks.com/s/freddy and get redirected to the + real url. Useful to get permanent URLs to moving targets. diff --git a/doc/developers/api.rst b/doc/developers/api.rst new file mode 100644 index 0000000..efa05fe --- /dev/null +++ b/doc/developers/api.rst @@ -0,0 +1,10 @@ +SemanticScuttle API +=================== + +SemanticScuttle tries to implement the delicious API v1 as closely as sensible. + +Where it makes sense and the delicious API just does things plainly wrong +(i.e. when returning a wrong status code on an error), we do it better. + +- http://www.delicious.com/help/api +- http://support.delicious.com/forum/comments.php?DiscussionID=5286&page=1 diff --git a/doc/developers/debugging.rst b/doc/developers/debugging.rst new file mode 100644 index 0000000..6bee309 --- /dev/null +++ b/doc/developers/debugging.rst @@ -0,0 +1,24 @@ +How to debug SemanticScuttle +============================ + + +Database queries +---------------- + +In ``data/config.php``, enable ``debugMode``. +Further, add the following afterwards: :: + + register_shutdown_function( + create_function('', <<<FNC + \$GLOBALS['db'] = SemanticScuttle_Service_Factory::getDb(); + \$GLOBALS['db']->sql_report('display'); + FNC + ) + ); + + +To see database queries in SemanticScuttle, add :: + + ?explain=1 + +to your URL. diff --git a/doc/developers/doc-TODO.rst b/doc/developers/doc-TODO.rst new file mode 100644 index 0000000..4fac4ab --- /dev/null +++ b/doc/developers/doc-TODO.rst @@ -0,0 +1,9 @@ +- Bookmarklets: Text selection is used as description +- Tag nesting: Paris > France > World +- Tag alias: Deutschland = Germany + + +- Which fields are searched? + title, description, private note, username, tags + +- What are [isbn] and so for? diff --git a/doc/developers/release-new-version.rst b/doc/developers/release-new-version.rst new file mode 100644 index 0000000..de2c4e3 --- /dev/null +++ b/doc/developers/release-new-version.rst @@ -0,0 +1,31 @@ +How to release a new version of SemanticScuttle +=============================================== + +0. Run unit tests and verify that all of them pass +1. Update ``doc/ChangeLog`` +2. Update ``doc/UPGRADE.txt`` +3. Update version in ``data/templates/default/about.tpl.php``, + ``build.xml`` and ``doc/README.rst`` +4. Create a release zip file via the build script: + Just type "``phing``". +5. Make a test installation from your zip file with a fresh + database. Register a user, add bookmarks etc. +6. When all is fine, it's time to release. + The build script takes care for most of the + tasks. + Run "``phing release``", and it will upload the release to + sourceforge. +7. Create a git tag and push it +8. Create the PEAR package and test it: + Run ``phing package``, then + ``pear upgrade dist/pear/SemanticScuttle-0.xx.tgz`` +9. Publish the PEAR package: ``phing deploy-sf-pear`` +10. Publish the documentation: ``phing deploy-docs`` +11. Write announcement mail to the SemanticScuttle mailing list + semanticscuttle-devel@lists.sourceforge.net +12. Announce the new release in the sourceforge project news + https://sourceforge.net/news/submit.php?group_id=211356 + Help about the process is available in + https://sourceforge.net/apps/trac/sourceforge/wiki/News +13. Set the default file in + https://sourceforge.net/projects/semanticscuttle/files/SemanticScuttle/ diff --git a/doc/developers/rules.rst b/doc/developers/rules.rst new file mode 100644 index 0000000..701a215 --- /dev/null +++ b/doc/developers/rules.rst @@ -0,0 +1,30 @@ +Rules for developers +==================== + +1. Coding style +--------------- +SemanticScuttle uses the PEAR Coding Standards. +While quite some parts still do not follow them, all of the +code will be coverted to them. When developing new code, +adhere to it. + +A helpful tool to check your coding style is PHP CodeSniffer, +http://pear.php.net/package/PHP_CodeSniffer + + +2. Unit tests +------------- +At least the service and model classes have unit tests. +If you fix things in there, make sure you +a) do not break the tests or +b) fix the tests if the old behavior was broken + + +3. Keep security in mind +------------------------ +As a web application, there are several attack vectors to SemanticScuttle. +When processing user input (form variables, URL parameters) +be sure to convert and validate them. If you expect a bookmark id, +there is no reason not to cast the variable to (int). + +Filter input, escape output. diff --git a/doc/developers/running-unit-tests.rst b/doc/developers/running-unit-tests.rst new file mode 100644 index 0000000..f75cb81 --- /dev/null +++ b/doc/developers/running-unit-tests.rst @@ -0,0 +1,31 @@ +Running unit tests +================== +The tests are dependent on the pear packages HTTP_Request2 and Stream_Var. + +Install them with: :: + $ pear install HTTP_Request2 + $ pear install Stream_Var + +Go to the SemanticScuttle ``tests`` directory and run ``phpunit``:: + + $ cd tests + $ phpunit . + +also remember the ``--verbose`` parameter to PHPUnit. + +If you want to run a specific test class only: :: + + $ cd tests + $ phpunit BookmarksTest.php + +If you need to test one method only: :: + + $ cd tests + $ phpunit --filter BookmarkTest::testUnificationOfBookmarks tests/BookmarkTest.php + + +Caveats +------- +Having debugging enabled and database driver "``mysql4``" activated +will lead to failing tests because of ``FOUND_ROWS()`` usage, which +does not work nicely with database debugging. diff --git a/doc/developers/translation.rst b/doc/developers/translation.rst new file mode 100644 index 0000000..008f66e --- /dev/null +++ b/doc/developers/translation.rst @@ -0,0 +1,47 @@ +=========================== +Translating SemanticScuttle +=========================== + +SemanticScuttle uses gnu gettext for translation. It does not +rely on the php extension but ships with a pure php implementation, +php-gettext_. + +Using gettext from within the code is really easy: +Enclose the string you want to translate in a "``T_``" function call. + +For example, to translate:: + + echo "Vote for"; + +just write :: + + echo T_("Vote for"); + +.. _php-gettext: https://launchpad.net/php-gettext/ + +Translation basics +================== + +We keep one base translation file, ``data/locales/messages.po``. +This file is auto-generated via ``xgettext`` from all our php source files. +In case you added a new string to the code that needs translation, +update the base translation file by running :: + + $ php scripts/update-translation-base.php + +After that has been done, the changes to the base ``messages.po`` file +need to be merged into the single language translation files, +for example ``data/locales/de_DE/LC_MESSAGES/messages.po``. + +Updating them from the master file is as easy as running:: + + $ php scripts/update-translation.php de_DE + +When the translation is ready, the ``.po`` file needs to be compiled +in a machine-readable ``.mo`` file. Use :: + + $ php scripts/compile-translation.php de_DE + +to achieve that. + + diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..678c102 --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,50 @@ +============================= +SemanticScuttle documentation +============================= + + +First reads +=========== +- README_ +- `installation guide`_ +- `upgrade instructions`_ + +.. _README: README.html +.. _installation guide: INSTALL.html +.. _upgrade instructions: UPGRADE.html + + + +Features +======== +- `Custom user authentication`__ +- `SSL Client certificates`__ +- Themes__ +- `Configuration files`__ +- Tools__ + +__ authentication.html +__ ssl-client-certificates.html +__ themes.html +__ configuration.html +__ tools.html + + + +Developer documentation +======================= +- `General development rules`__ +- `Delicious API`__ +- `Debugging HowTo`__ +- `How to release a new version`__ +- `Running unit testes`__ +- `How to translate SemanticScuttle`__ +- `ChangeLog`__ + +__ developers/rules.html +__ developers/api.html +__ developers/debugging.html +__ developers/release-new-version.html +__ developers/running-unit-tests.html +__ developers/translation.html +__ ChangeLog.html diff --git a/doc/ssl-client-certificates.rst b/doc/ssl-client-certificates.rst new file mode 100644 index 0000000..7abf17a --- /dev/null +++ b/doc/ssl-client-certificates.rst @@ -0,0 +1,181 @@ +======================= +SSL client certificates +======================= + +By using SSL client certificates, you get automatically logged into +SemanticScuttle without using a password or submitting a login form. + +Any number of certificates can be registered with a user account, +making it easy to login to the same installation from home and from +work - without risking to use the same certificate on both machines. + + +Usage scenarios +=============== +The scenarios assume that the web server is configured_ properly +to request client certificates. + +.. _configured: `Configuring your web server`_ + + +Registering a certificate with an existing account +-------------------------------------------------- +You already have an account and want to associate a SSL client certificate +with it. + +1. Visit your profile page +2. Click "Register current certificate to automatically login." + +That's it. Now logout and click "Home". You will be logged in again +automatically. + + +Registering a certificate with a new account +-------------------------------------------- +When you do not have an user account yet, just visit the registration +page. Your email address will already be filled in, using the information +from the SSL certificate. + +Provide the rest of the data and submit the form. +The certificate will automatically be associated to your account, +and the user name will also be set for you. + + + +Configuring your web server +=========================== + +Getting SSL certificates +------------------------ +You need both a server certificate for normal HTTPS mode, as well as a client +certificate in your browser. + +CAcert.org is a good place to obtain both. +You are of course free to generate your own certificate with i.e. openssl +or buy a certificate from another certificate authority, but this is out +of this document's scope. + +Server certificate +'''''''''''''''''' +First, generate a Certificate Signing Request with the `CSR generator`__. +Store the key file under :: + + /etc/ssl/private/bookmarks.cweiske.de.key + +Use the the .csr file and the CAcert web interface to generate a signed +certificate. Store it as :: + + /etc/ssl/private/bookmarks.cweiske.de-cacert.pem + +Now fetch both official CAcert certificates (root and class 3) and put both +together into :: + + /etc/ssl/private/cacert-1and3.crt + +.. _CSR: http://wiki.cacert.org/CSRGenerator +__ CSR_ + + +Client certificate +'''''''''''''''''' +CAcert also offers to create client certificates. You do not need a +certificate sign request but just can create it on their web page. + +After creation, you can simply install it in your browser by clicking +on the appropriate link on the CAcert page. + +Once you got the certificate installed in your browser, you can transfer +it to other browsers by exporting it in the `PKCS #12` format +(with private key included) and importing it in any other browsers +you use. + + + +Apache configuration +-------------------- +To make use of SSL client certificates, you need to deliver SemanticScuttle +via HTTPS. + +Note that you can equip several virtual hosts with SSL certificates +and keep them on the same, standard SSL port by using SNI - +`Server Name Indication`__. + +.. _SNI: http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI +__ SNI_ + +A basic virtual host configuration with SSL looks like this: + +:: + + <VirtualHost *:443> + ServerName bookmarks.cweiske.de + + LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon + CustomLog /var/log/apache2/access_log vcommon + + VirtualDocumentRoot /home/cweiske/Dev/html/hosts/bookmarks.cweiske.de + <Directory "/home/cweiske/Dev/html/hosts/bookmarks.cweiske.de"> + AllowOverride all + </Directory> + + SSLEngine On + SSLCertificateFile /etc/ssl/private/bookmarks.cweiske.de-cacert.pem + SSLCertificateKeyFile /etc/ssl/private/bookmarks.cweiske.de.key + + SSLCACertificateFile /etc/ssl/private/cacert-1and3.crt + </VirtualHost> + +Apart from that, you might need to enable the SSL module in your webserver, +i.e. by executing :: + + $ a2enmod ssl + + +Now that SSL works, you can configure your web server to request client +certificates. + +:: + + ... + </Directory> + + SSLVerifyClient optional + SSLVerifyDepth 1 + SSLOptions +StdEnvVars + </VirtualHost> + +There are several options you need to set: + + +``SSLVerifyClient optional`` + You may choose ``optional`` or ``required`` here. + ``optional`` asks the browser for a client certificate but accepts + if the browser (the user) does choose not to send any certificate. + This is the best option if you want to be able to login with and + without a certificate. + + Setting ``required`` makes the web server terminate the connection + when no client certificate is sent by the browser. + This option may be used when all users have their client certificate set. + +``SSLVerifyDepth 1`` + Your client certificate is signed by a certificate authority (CA), + and your web server trusts the CA specified in ``SSLCACertificateFile``. + CA certificates itself may be signed by another authority, i.e. like :: + + CAcert >> your own CA >> your client certificate + + In this case, you have a higher depth. For most cases, 1 is enough. + +``SSLOptions +StdEnvVars`` + This makes your web server pass the SSL environment variables to PHP, + so that SemanticScuttle can detect that a client certificate is available + and read its data. + + In case you need the complete certificate + \- which SemanticScuttle does *not* need - you have to add ``+ExportCertData`` + to the line. + + +That's it. Restart your web server and visit your SemanticScuttle installation. +Continue reading the `Usage scenarios`_. diff --git a/doc/themes.rst b/doc/themes.rst new file mode 100644 index 0000000..895f1a0 --- /dev/null +++ b/doc/themes.rst @@ -0,0 +1,58 @@ +====================== +SemanticScuttle Themes +====================== +SemanticScuttle may be changed visually by supplying custom "themes" (skins) +that modify the visual appearance. + + +Changing the current theme +========================== +In ``data/config.php``, set your theme like this: :: + + $theme = 'darkmood'; + +The available themes are the folders in ``www/themes/``. +By default, SemanticScuttle ships only one usable theme ("default") and one +to demonstrate how to create your own theme ("testdummy"). + + +Creating your own theme +======================= +Have a look at the "testdummy" theme in ``www/themes/testdummy/``. + +CSS and image files +------------------- +Since both file types need to be accessible via the web server directly, +they are located in the ``www/`` folder: :: + + www/themes/$themename/ + +The main CSS file that automatically gets included is :: + + www/themes/$themename/scuttle.css + +Several template files in SemanticScuttle include image files. If they do not +exist in your theme, the default ones are used automatically. +Note that this is not true for images that are specified in the CSS files. + + +Template files +-------------- +The templates of the default file are located in :: + + data/templates/default/ + +You may put your theme template files into :: + + data/templates/$themename/ + + +Existing themes +=============== + +* `Flat`__ by Roman Lehnhof. See the `introduction blog post`__ +* `sscuttlizr`__ + +__ https://github.com/rlehnhof/flat +__ http://lehnhof.net/2013/08/semantic-scuttle-new-flat-interface-theme-template/ +__ https://github.com/jonrandoem/sscuttlizr diff --git a/doc/tools.rst b/doc/tools.rst new file mode 100644 index 0000000..3c3ad04 --- /dev/null +++ b/doc/tools.rst @@ -0,0 +1,44 @@ +================================= +Tools to use with SemanticScuttle +================================= + +Scuttleoid +========== +Scuttloid is an android client for managing your bookmarks that are +stored on a Semantic Scuttle server. +It allows to list/search your personal bookmarks, add and edit existing +bookmarks, and share them to other applications. + +Installable via `f-droid`__. +Also see the `source code`__. + +__ https://f-droid.org/repository/browse/?fdid=gr.ndre.scuttloid +__ https://github.com/ilesinge/scuttloid + + +Scuttle for Android +=================== +Scuttle for Android is a client for the Scuttle bookmarking software. +Enter your Scuttle login information and you will presented with a list of your +bookmarks. +Touching a bookmark will load that web page in the browser. +Use the browser's "Share" menu option to add bookmarks to your Scuttle. + +See the homepage__ and `source code`__. + +__ http://slideme.org/application/scuttle-android +__ https://github.com/shadybrooksoftware/Scuttle-For-Android + + +ttrss2scuttle +============= +Announced in a `blog post`__, the plugin for the feed reader `Tiny Tiny RSS`__ +allows you to bookmark any of the articles in your own SemanticScuttle +instance. + +Source code and installation instructions are on the +`ttrss2scuttle github page`__. + +__ http://www.versvs.net/anotacion/plugin-tiny-tiny-rss-semanticscuttle +__ http://tt-rss.org/ +__ https://github.com/versvs/ttrss2scuttle |