aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md1
-rw-r--r--application/LinkDB.php2
-rw-r--r--doc/Home.html137
-rw-r--r--doc/Home.md125
-rw-r--r--doc/Ideas-for-plugins.html26
-rw-r--r--doc/Ideas-for-plugins.md11
-rw-r--r--doc/Running-unit-tests.html143
-rw-r--r--doc/Running-unit-tests.md127
-rw-r--r--doc/_Sidebar.html70
-rw-r--r--doc/_Sidebar.md37
-rw-r--r--doc/images/firefoxshare.pngbin0 -> 757 bytes
-rw-r--r--inc/awesomplete.css1
-rw-r--r--inc/shaarli.css5
-rw-r--r--tpl/editlink.html2
14 files changed, 452 insertions, 235 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 054b9a3f..b1be656a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -43,6 +43,7 @@ git checkout -b testing
43git merge cool-new-feature 43git merge cool-new-feature
44git merge bugfix 44git merge bugfix
45``` 45```
46Or see [Checkout Github Pull Requests locally](https://gist.github.com/piscisaureus/3342247)
46 47
47Please report any problem you might find. 48Please report any problem you might find.
48 49
diff --git a/application/LinkDB.php b/application/LinkDB.php
index 7e29ee8e..ff82446f 100644
--- a/application/LinkDB.php
+++ b/application/LinkDB.php
@@ -310,7 +310,7 @@ class LinkDB implements Iterator, Countable, ArrayAccess
310 // FIXME: accept double-quotes to search for a string "as is"? 310 // FIXME: accept double-quotes to search for a string "as is"?
311 $filtered = array(); 311 $filtered = array();
312 $search = mb_convert_case($searchterms, MB_CASE_LOWER, 'UTF-8'); 312 $search = mb_convert_case($searchterms, MB_CASE_LOWER, 'UTF-8');
313 $keys = ['title', 'description', 'url', 'tags']; 313 $keys = array('title', 'description', 'url', 'tags');
314 314
315 foreach ($this->links as $link) { 315 foreach ($this->links as $link) {
316 $found = false; 316 $found = false;
diff --git a/doc/Home.html b/doc/Home.html
index e4d117f1..2cb54c86 100644
--- a/doc/Home.html
+++ b/doc/Home.html
@@ -14,8 +14,7 @@
14<body> 14<body>
15<h1 id="shaarli-wiki">Shaarli wiki</h1> 15<h1 id="shaarli-wiki">Shaarli wiki</h1>
16<p>Welcome to the <a href="https://github.com/shaarli/Shaarli/">Shaarli</a> wiki! Here you can find some info on how to use, configure, tweak and solve problems with your Shaarli. For general info, read the <a href="https://github.com/shaarli/Shaarli/blob/master/README.md">README</a>.</p> 16<p>Welcome to the <a href="https://github.com/shaarli/Shaarli/">Shaarli</a> wiki! Here you can find some info on how to use, configure, tweak and solve problems with your Shaarli. For general info, read the <a href="https://github.com/shaarli/Shaarli/blob/master/README.md">README</a>.</p>
17<p>If you have any questions or ideas, please join the <a href="https://gitter.im/shaarli/Shaarli">chat</a> (also reachable via <a href="https://irc.gitter.im/">IRC</a>), post them in our <a href="https://github.com/shaarli/Shaarli/issues/44">general discussion</a> or read the current <a href="https://github.com/shaarli/Shaarli/issues">issues</a>. If you've found a bug, please create a <a href="https://github.com/shaarli/Shaarli/issues/new">new issue</a>.</p> 17<p>If you have any questions or ideas, please join the <a href="https://gitter.im/shaarli/Shaarli">chat</a> (also reachable via <a href="https://irc.gitter.im/">IRC</a>), post them in our <a href="https://github.com/shaarli/Shaarli/issues/44">general discussion</a> or read the current <a href="https://github.com/shaarli/Shaarli/issues">issues</a>. If you've found a bug, please create a <a href="https://github.com/shaarli/Shaarli/issues/new">new issue</a>. If you would like a feature added to Shaarli, check the issues labeled <a href="https://github.com/shaarli/Shaarli/labels/feature"><code>feature</code></a>, <a href="https://github.com/shaarli/Shaarli/labels/enhancement"><code>enhancement</code></a>, and <a href="https://github.com/shaarli/Shaarli/labels/plugin"><code>plugin</code></a>.</p>
18<p>If you'd like a feature added, see if it fits in the list of <a href="Ideas-for-plugins">Ideas for Plugins</a> and update the corresponding bug report.</p>
19<p><em>Note: This documentation is available online at <a href="https://github.com/shaarli/Shaarli/wiki">https://github.com/shaarli/Shaarli/wiki</a>, and locally in the <code>doc/</code> directory of your Shaarli installation.</em></p> 18<p><em>Note: This documentation is available online at <a href="https://github.com/shaarli/Shaarli/wiki">https://github.com/shaarli/Shaarli/wiki</a>, and locally in the <code>doc/</code> directory of your Shaarli installation.</em></p>
20<hr /> 19<hr />
21<!-- MarkdownTOC depth=3 --> 20<!-- MarkdownTOC depth=3 -->
@@ -25,7 +24,9 @@
25<li><p><a href="#basic-usage">Basic Usage</a></p> 24<li><p><a href="#basic-usage">Basic Usage</a></p>
26<ul> 25<ul>
27<li><a href="#add-the-sharing-button-_bookmarklet_-to-your-browser">Add the sharing button (<em>bookmarklet</em>) to your browser</a><br /></li> 26<li><a href="#add-the-sharing-button-_bookmarklet_-to-your-browser">Add the sharing button (<em>bookmarklet</em>) to your browser</a><br /></li>
27<li><a href="#add-shaarli-as-a-sharing-service-to-firefox">Add Shaarli as a sharing service to Firefox</a><br /></li>
28<li><a href="#share-links-using-the-_bookmarklet_">Share links using the <em>bookmarklet</em></a><br /></li> 28<li><a href="#share-links-using-the-_bookmarklet_">Share links using the <em>bookmarklet</em></a><br /></li>
29<li><a href="#sharing-links-using-firefox-share">Sharing links using Firefox share</a><br /></li>
29</ul></li> 30</ul></li>
30<li><p><a href="#other-usage-examples">Other usage examples</a></p> 31<li><p><a href="#other-usage-examples">Other usage examples</a></p>
31<ul> 32<ul>
@@ -59,7 +60,14 @@
59<li><a href="#various-hacks">Various hacks</a><br /></li> 60<li><a href="#various-hacks">Various hacks</a><br /></li>
60<li><a href="#changing-timestamp-for-a-link">Changing timestamp for a link</a><br /></li> 61<li><a href="#changing-timestamp-for-a-link">Changing timestamp for a link</a><br /></li>
61</ul></li> 62</ul></li>
62<li><a href="#related-software">Related software</a><br /></li> 63<li><p><a href="#related-software">Related software</a></p>
64<ul>
65<li><a href="#server-apps">Server apps</a><br /></li>
66<li><a href="#android-apps">Android apps</a><br /></li>
67<li><a href="#themes--templates">Themes &amp; templates</a><br /></li>
68<li><a href="#integrate-shaarli-with-other-platforms">Integrate Shaarli with other platforms</a><br /></li>
69<li><a href="#alternative-to-shaarli">Alternative to Shaarli</a><br /></li>
70</ul></li>
63<li><a href="#other-links">Other links</a><br /></li> 71<li><a href="#other-links">Other links</a><br /></li>
64<li><p><a href="#faq">FAQ</a></p> 72<li><p><a href="#faq">FAQ</a></p>
65<ul> 73<ul>
@@ -70,6 +78,7 @@
70<li><p><a href="#technical-details">Technical details</a></p> 78<li><p><a href="#technical-details">Technical details</a></p>
71<ul> 79<ul>
72<li><a href="#directory-structure">Directory structure</a><br /></li> 80<li><a href="#directory-structure">Directory structure</a><br /></li>
81<li><a href="#development">Development</a><br /></li>
73<li><a href="#why-not-use-a-real-database--files-are-slow-">Why not use a real database ? Files are slow !</a><br /></li> 82<li><a href="#why-not-use-a-real-database--files-are-slow-">Why not use a real database ? Files are slow !</a><br /></li>
74</ul></li> 83</ul></li>
75<li><p><a href="#wiki---todo">Wiki - TODO</a></p></li> 84<li><p><a href="#wiki---todo">Wiki - TODO</a></p></li>
@@ -89,6 +98,12 @@
89</ul> 98</ul>
90<p><em>This bookmarklet button in compatible with Firefox, Opera, Chrome and Safari. Under Opera, you can't drag'n drop the button: You have to right-click on it and add a bookmark to your personal toolbar.</em></p> 99<p><em>This bookmarklet button in compatible with Firefox, Opera, Chrome and Safari. Under Opera, you can't drag'n drop the button: You have to right-click on it and add a bookmark to your personal toolbar.</em></p>
91<p><img src="images/bookmarklet.png" /></p> 100<p><img src="images/bookmarklet.png" /></p>
101<h3 id="add-shaarli-as-a-sharing-service-to-firefox">Add Shaarli as a sharing service to Firefox</h3>
102<ul>
103<li>Open your Shaarli and <code>Login</code><br /></li>
104<li>Click the <code>Tools</code> button in the top bar<br /></li>
105<li>Click the <code>✚Add to Firefox social</code> button and accept the activation.</li>
106</ul>
92<h3 id="share-links-using-the-bookmarklet">Share links using the <em>bookmarklet</em></h3> 107<h3 id="share-links-using-the-bookmarklet">Share links using the <em>bookmarklet</em></h3>
93<ul> 108<ul>
94<li>When you are visiting a webpage you would like to share with Shaarli, click the <em>bookmarklet</em> you just added.<br /></li> 109<li>When you are visiting a webpage you would like to share with Shaarli, click the <em>bookmarklet</em> you just added.<br /></li>
@@ -98,6 +113,12 @@
98<li>You can also check the “Private” box so that the link is saved but only visible to you.<br /></li> 113<li>You can also check the “Private” box so that the link is saved but only visible to you.<br /></li>
99<li>Click <code>Save</code>.<strong>Voila! Your link is now shared.</strong></li> 114<li>Click <code>Save</code>.<strong>Voila! Your link is now shared.</strong></li>
100</ul> 115</ul>
116<h3 id="sharing-links-using-firefox-share">Sharing links using Firefox share</h3>
117<ul>
118<li>Add the sharing service as described above<br /></li>
119<li>When you are visiting a webpage you would like to share with Shaarli, click the Firefox <em>Share</em> button [[images/firefoxshare.png]]<br /></li>
120<li>You can edit your link before and after saving, just like the bookmarklet above.</li>
121</ul>
101<h1 id="other-usage-examples">Other usage examples</h1> 122<h1 id="other-usage-examples">Other usage examples</h1>
102<p>Shaarli can be used:</p> 123<p>Shaarli can be used:</p>
103<ul> 124<ul>
@@ -134,7 +155,7 @@
134<li>The same method <strong>also works for a full-text search</strong> (<em>Search</em> box) <strong>and for the Picture Wall</strong> (want to only see pictures about <code>nature</code>?)<br /></li> 155<li>The same method <strong>also works for a full-text search</strong> (<em>Search</em> box) <strong>and for the Picture Wall</strong> (want to only see pictures about <code>nature</code>?)<br /></li>
135<li>You can also build the URL manually: <code>https://my.shaarli.domain/?do=rss&amp;searchtags=nature</code>, <code>https://my.shaarli.domain/links/?do=picwall&amp;searchterm=poney</code></li> 156<li>You can also build the URL manually: <code>https://my.shaarli.domain/?do=rss&amp;searchtags=nature</code>, <code>https://my.shaarli.domain/links/?do=picwall&amp;searchterm=poney</code></li>
136</ul> 157</ul>
137<p><img src="rss-filter-1.png" /> <img src="rss-filter-2.png" /></p> 158<p><img src="images/rss-filter-1.png" /> <img src="images/rss-filter-2.png" /></p>
138<h1 id="configuration">Configuration</h1> 159<h1 id="configuration">Configuration</h1>
139<h3 id="main-dataoptions.php-file">Main data/options.php file</h3> 160<h3 id="main-dataoptions.php-file">Main data/options.php file</h3>
140<p>To change the configuration, create the file <code>data/options.php</code>, example:</p> 161<p>To change the configuration, create the file <code>data/options.php</code>, example:</p>
@@ -153,10 +174,10 @@
153<li><code>BAN_AFTER (4)</code> : An IP address will be banned after this many failed login attempts.<br /></li> 174<li><code>BAN_AFTER (4)</code> : An IP address will be banned after this many failed login attempts.<br /></li>
154<li><code>BAN_DURATION (1800)</code> : Duration of ban (in seconds). (1800 seconds = 30 minutes)<br /></li> 175<li><code>BAN_DURATION (1800)</code> : Duration of ban (in seconds). (1800 seconds = 30 minutes)<br /></li>
155<li><code>OPEN_SHAARLI (false)</code> : If you set this option to true, anyone will be able to add/modify/delete/import/exports links without having to login.<br /></li> 176<li><code>OPEN_SHAARLI (false)</code> : If you set this option to true, anyone will be able to add/modify/delete/import/exports links without having to login.<br /></li>
156<li><code>HIDE_TIMESTAMPS (false)</code> : If you set this option to true, the date/time of each link will not be displayed (including in RSS Feed).<br /></li> 177<li><code>HIDE_TIMESTAMPS (false)</code> : If you set this option to true, the date/time of each link will not be displayed (including in RSS Feed).#related-software<br /></li>
157<li><code>ENABLE_THUMBNAILS (true)</code> : Enable/disable thumbnails.<br /></li> 178<li><code>ENABLE_THUMBNAILS (true)</code> : Enable/disable thumbnails.<br /></li>
158<li><code>RAINTPL_TMP (tmp/)</code> : Raintpl cache directory (keep the trailing slash!)<br /></li> 179<li><code>RAINTPL_TMP (tmp/)</code> : Raintpl cache directory (keep the trailing slash!)<br /></li>
159<li>`RAINTPL_TPL (tpl/) : Raintpl template directory (keep the trailing slash!). Edit this option if you want to change the rendering template (page structure) used by Shaarli. See <a href="#changing-template">Changing template</a><br /></li> 180<li><code>RAINTPL_TPL (tpl/)</code> : Raintpl template directory (keep the trailing slash!). Edit this option if you want to change the rendering template (page structure) used by Shaarli. See <a href="#changing-template">Changing template</a><br /></li>
160<li><code>CACHEDIR ('cache')</code> : Directory where the thumbnails are stored.<br /></li> 181<li><code>CACHEDIR ('cache')</code> : Directory where the thumbnails are stored.<br /></li>
161<li><code>ENABLE_LOCALCACHE (true)</code> : If you have a limited quota on your webspace, you can set this option to false: Shaarli will not generate thumbnails which need to be cached locally (vimeo, flickr, etc.). Thumbnails will still be visible for the services which do not use the local cache (youtube.com, imgur.com, dailymotion.com, imageshack.us)<br /></li> 182<li><code>ENABLE_LOCALCACHE (true)</code> : If you have a limited quota on your webspace, you can set this option to false: Shaarli will not generate thumbnails which need to be cached locally (vimeo, flickr, etc.). Thumbnails will still be visible for the services which do not use the local cache (youtube.com, imgur.com, dailymotion.com, imageshack.us)<br /></li>
162<li><code>UPDATECHECK_FILENAME ($GLOBALS['config']['DATADIR'].'/lastupdatecheck.txt')</code> : name of the file used to store available shaarli version.<br /></li> 183<li><code>UPDATECHECK_FILENAME ($GLOBALS['config']['DATADIR'].'/lastupdatecheck.txt')</code> : name of the file used to store available shaarli version.<br /></li>
@@ -164,7 +185,8 @@
164<li><code>ENABLE_UPDATECHECK</code>: Determines whether Shaarli check for new releases at <a href="https://github.com/shaarli/Shaarli">https://github.com/shaarli/Shaarli</a><br /></li> 185<li><code>ENABLE_UPDATECHECK</code>: Determines whether Shaarli check for new releases at <a href="https://github.com/shaarli/Shaarli">https://github.com/shaarli/Shaarli</a><br /></li>
165<li><code>SHOW_ATOM (false)</code> : Show an <code>ATOM Feed</code> button next to the <code>Subscribe</code> (RSS) button. ATOM feeds are available at the address <code>?do=atom</code> regardless of this option.<br /></li> 186<li><code>SHOW_ATOM (false)</code> : Show an <code>ATOM Feed</code> button next to the <code>Subscribe</code> (RSS) button. ATOM feeds are available at the address <code>?do=atom</code> regardless of this option.<br /></li>
166<li><code>ARCHIVE_ORG (false)</code> : For each link, display a link to an archived version on archive.org<br /></li> 187<li><code>ARCHIVE_ORG (false)</code> : For each link, display a link to an archived version on archive.org<br /></li>
167<li><code>ENABLE_RSS_PERMALINKS (true)</code>: choose whether the RSS item title link points directly to the link, or to the entry on Shaarli (permalink). <code>true</code> is the original Shaarli bahevior (point directly to the link)</li> 188<li><code>ENABLE_RSS_PERMALINKS (true)</code>: choose whether the RSS item title link points directly to the link, or to the entry on Shaarli (permalink). <code>true</code> is the original Shaarli bahevior (point directly to the link)<br /></li>
189<li><code>HIDE_PUBLIC_LINKS (false)</code>: setting this to true hides all links, even public ones, for non-logged in users.</li>
168</ul> 190</ul>
169<h3 id="changing-theme">Changing theme</h3> 191<h3 id="changing-theme">Changing theme</h3>
170<ul> 192<ul>
@@ -177,14 +199,14 @@
177<li><a href="https://github.com/shaarli/Shaarli/wiki/Download-CSS-styles-for-shaarlis-listed-in-an-opml-file">Download CSS styles for shaarlis listed in an opml file</a></li> 199<li><a href="https://github.com/shaarli/Shaarli/wiki/Download-CSS-styles-for-shaarlis-listed-in-an-opml-file">Download CSS styles for shaarlis listed in an opml file</a></li>
178</ul> 200</ul>
179<h3 id="changing-template">Changing template</h3> 201<h3 id="changing-template">Changing template</h3>
180<p>| 💥 | This feature is currently being worked on and will be improved in the next releases. Experimental. |<br />|---------|---------|</p> 202<p>| WARNING | This feature is currently being worked on and will be improved in the next releases. Experimental. |<br />|---------|---------|</p>
181<ul> 203<ul>
182<li>Find the template you'd like to install. See the list of available templates (TODO). Find it's git clone URL or download the zip archive for the template.<br /></li> 204<li>Find the template you'd like to install. See the list of available templates (TODO). Find it's git clone URL or download the zip archive for the template.<br /></li>
183<li>In your Shaarli <code>tpl/</code> directory, run <code>git clone https://url/of/my-template/</code> or unpack the zip archive. There should now be a <code>my-template/</code> directory under the <code>tpl/</code> dir, containing directly all the template files.<br /></li> 205<li>In your Shaarli <code>tpl/</code> directory, run <code>git clone https://url/of/my-template/</code> or unpack the zip archive. There should now be a <code>my-template/</code> directory under the <code>tpl/</code> dir, containing directly all the template files.<br /></li>
184<li>Edit <code>data/options.php</code> to have Shaarli use this template. Eg.</li> 206<li>Edit <code>data/options.php</code> to have Shaarli use this template. Eg.</li>
185</ul> 207</ul>
186<p><code>$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/my-template/' ;</code></p> 208<p><code>$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/my-template/' ;</code></p>
187<p>You can find a list of compatible templates in <a href="#Related-software">Related Software</a></p> 209<p>You can find a list of compatible templates in <a href="#related-software">Related Software</a></p>
188<h1 id="backup">Backup</h1> 210<h1 id="backup">Backup</h1>
189<p>You have two ways of backing up your database:</p> 211<p>You have two ways of backing up your database:</p>
190<ul> 212<ul>
@@ -248,7 +270,14 @@ SetEnv PHP_VER 5</code></pre>
248<ul> 270<ul>
249<li><a href="Example-patch---add-new-via-field-for-links">Example patch: add a new &quot;via&quot; field for links</a><br /></li> 271<li><a href="Example-patch---add-new-via-field-for-links">Example patch: add a new &quot;via&quot; field for links</a><br /></li>
250<li><a href="Copy-a-Shaarli-installation-over-SSH-SCP,-serve-it-locally-with-php-cli">Copy a Shaarli installation over SSH SCP, serve it locally with php cli</a><br /></li> 272<li><a href="Copy-a-Shaarli-installation-over-SSH-SCP,-serve-it-locally-with-php-cli">Copy a Shaarli installation over SSH SCP, serve it locally with php cli</a><br /></li>
251<li>To display the array representing the data saved in datastore.php, use the following snippet (TODO where is it gone?)</li> 273<li><p>To display the array representing the data saved in datastore.php, use the following snippet</p>
274<pre><code>$data = &quot;tZNdb9MwFIb... &lt;Commented content inside datastore.php&gt;&quot;;
275$out = unserialize(gzinflate(base64_decode($data)));
276echo &quot;&lt;pre&gt;&quot;; // Pretty printing is love, pretty printing is life
277print_r($out);
278echo &quot;&lt;/pre&gt;&quot;;
279exit;</code></pre>
280<p>This will output the internal representation of the datastore, &quot;unobfuscated&quot; (if this can really be considered obfuscation)</p></li>
252</ul> 281</ul>
253<h3 id="changing-timestamp-for-a-link">Changing timestamp for a link</h3> 282<h3 id="changing-timestamp-for-a-link">Changing timestamp for a link</h3>
254<ul> 283<ul>
@@ -256,33 +285,39 @@ SetEnv PHP_VER 5</code></pre>
256<li>Remove <code>type=&quot;hidden&quot;</code> from this line<br /></li> 285<li>Remove <code>type=&quot;hidden&quot;</code> from this line<br /></li>
257<li>A new date/time field becomes available in the edit/new link dialog. You can set the timestamp manually by entering it in the format <code>YYYMMDD_HHMMS</code>.</li> 286<li>A new date/time field becomes available in the edit/new link dialog. You can set the timestamp manually by entering it in the format <code>YYYMMDD_HHMMS</code>.</li>
258</ul> 287</ul>
259<pre><code>$data = &quot;tZNdb9MwFIb... &lt;Commented content inside datastore.php&gt;&quot;;
260$out = unserialize(gzinflate(base64_decode($data)));
261echo &quot;&lt;pre&gt;&quot;; // Pretty printing is love, pretty printing is life
262print_r($out);
263echo &quot;&lt;/pre&gt;&quot;;
264exit;</code></pre>
265<p>This will output the internal representation of the datastore, &quot;unobfuscated&quot; (if this can really be considered obfuscation)</p>
266<h1 id="related-software">Related software</h1> 288<h1 id="related-software">Related software</h1>
267<p>Unofficial but relatedd work on Shaarli. If you maintain one of these, please get in touch with us to help us find a way to adapt your work to our fork. <strong>TODO</strong> contact repos owners to see if they'd like to standardize their work for the community fork.</p> 289<p>Unofficial but relatedd work on Shaarli. If you maintain one of these, please get in touch with us to help us find a way to adapt your work to our fork. <strong>TODO</strong> contact repos owners to see if they'd like to standardize their work for the community fork.</p>
290<h3 id="server-apps">Server apps</h3>
268<ul> 291<ul>
269<li><a href="https://github.com/nodiscc/shaarchiver">shaarchiver</a> - Archive your Shaarli bookmarks and their content<br /></li> 292<li><a href="https://github.com/nodiscc/shaarchiver">shaarchiver</a> - Archive your Shaarli bookmarks and their content<br /></li>
293<li><a href="https://github.com/mknexen/shaarli-river">shaarli-river</a> - An aggregator for shaarlis with many features<br /></li>
294<li><a href="https://github.com/DMeloni/shaarlo">Shaarlo</a> - An aggregator for shaarlis with many features (a very popular running instance among french shaarliers: <a href="http://shaarli.fr/">shaarli.fr</a>)<br /></li>
295<li><a href="https://github.com/BoboTiG/shaarlimages">Shaarlimages</a> - An image-oriented aggregator for Shaarlis<br /></li>
296<li><a href="https://github.com/mknexen/shaarli-api">mknexen/shaarli-api</a> - A REST API for Shaarli</li>
297</ul>
298<h3 id="android-apps">Android apps</h3>
299<ul>
270<li><a href="http://sebsauvage.net/links/?ZAyDzg">Shaarli for Android</a> - Android application that adds Shaarli as a sharing provider<br /></li> 300<li><a href="http://sebsauvage.net/links/?ZAyDzg">Shaarli for Android</a> - Android application that adds Shaarli as a sharing provider<br /></li>
271<li><a href="https://play.google.com/store/apps/details?id=com.dimtion.shaarlier">Shaarlier for Android</a> - Android application to simply add links directly into your Shaarli<br /></li> 301<li><a href="https://github.com/dimtion/Shaarlier">Shaarlier for Android</a> - Android application to simply add links directly into your Shaarli</li>
272<li><a href="https://github.com/mknexen/shaarli-river">shaarli-river</a> - an aggregator for shaarlis with many features<br /></li> 302</ul>
273<li><a href="https://github.com/DMeloni/shaarlo">Shaarlo</a> - an aggregator for shaarlis with many features (<a href="http://shaarli.fr/">Demo</a>)<br /></li> 303<h3 id="themes-templates">Themes &amp; templates</h3>
304<ul>
305<li><a href="https://github.com/AkibaTech/Shaarli---SuperHero-Theme">AkibaTech/Shaarli Superhero Theme</a> - A template/theme for Shaarli<br /></li>
306<li><a href="https://github.com/alexisju/albinomouse-template">alexisju/albinomouse-template</a> - A full template for Shaarli<br /></li>
307<li><a href="https://github.com/dhoko/ShaarliTemplate">dhoko/ShaarliTemplate</a> - A template/theme for Shaarli<br /></li>
274<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<br /></li> 308<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<br /></li>
275<li><a href="https://github.com/kalvn/Shaarli-Material">kalvn/Shaarli-Material</a> -<br />A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone.<br /></li> 309<li><a href="https://github.com/kalvn/Shaarli-Material">kalvn/Shaarli-Material</a> - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone.<br /></li>
310<li><a href="https://github.com/misterair/limonade">misterair/Limonade</a> - A fork of (legacy) Shaarli with a new template<br /></li>
276<li><a href="https://github.com/Vinm/Blue-theme-for-Shaarli">Vinm/Blue-theme-for Shaarli</a> - A template/theme for Shaarli (<a href="https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2">unmaintained</a>, compatibility unknown)<br /></li> 311<li><a href="https://github.com/Vinm/Blue-theme-for-Shaarli">Vinm/Blue-theme-for Shaarli</a> - A template/theme for Shaarli (<a href="https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2">unmaintained</a>, compatibility unknown)<br /></li>
277<li><a href="https://github.com/vivienhaese/shaarlitheme">vivienhaese/shaarlitheme</a> - A Shaarli fork meant to be run in an openshift instance<br /></li> 312<li><a href="https://github.com/vivienhaese/shaarlitheme">vivienhaese/shaarlitheme</a> - A Shaarli fork meant to be run in an openshift instance</li>
313</ul>
314<h3 id="integrate-shaarli-with-other-platforms">Integrate Shaarli with other platforms</h3>
315<ul>
278<li><a href="https://github.com/jcsaaddupuy/tt-rss-shaarli">tt-rss-shaarli</a> - <a href="http://tt-rss.org/">TinyTiny RSS</a> plugin that adds support for sharing articles with Shaarli<br /></li> 316<li><a href="https://github.com/jcsaaddupuy/tt-rss-shaarli">tt-rss-shaarli</a> - <a href="http://tt-rss.org/">TinyTiny RSS</a> plugin that adds support for sharing articles with Shaarli<br /></li>
279<li><a href="https://github.com/dhoko/ShaarliTemplate">dhoko/ShaarliTemplate</a> - A template/theme for Shaarli<br /></li> 317<li><a href="https://github.com/ahmet2mir/octopress-shaarli">octopress-shaarli</a> - octoprress plugin to retrieve SHaarli links on the sidebara</li>
280<li><a href="https://github.com/mknexen/shaarli-api">mknexen/shaarli-api</a> - a REST API for Shaarli<br /></li> 318</ul>
281<li><a href="https://github.com/alexisju/albinomouse-template">Albinomouse</a> - A full template for Shaarli<br /></li> 319<h3 id="alternative-to-shaarli">Alternative to Shaarli</h3>
282<li><a href="https://github.com/BoboTiG/shaarlimages">Shaarlimages</a> - An image-oriented aggregator for Shaarlis<br /></li> 320<ul>
283<li><a href="https://github.com/AkibaTech/Shaarli---SuperHero-Theme">Shaarli Superhero Theme</a> - A template/theme for Shaarli<br /></li>
284<li><a href="https://github.com/misterair/limonade">Limonade</a> - A fork of Shaarli with a new template<br /></li>
285<li><a href="https://github.com/ahmet2mir/octopress-shaarli">octopress-shaarli</a> - octoprress plugin to retrieve SHaarli links on the sidebara<br /></li>
286<li><a href="https://github.com/bookieio/bookie">Bookie</a> - Another self-hostable, Free bookmark sharing software, written in Python<br /></li> 321<li><a href="https://github.com/bookieio/bookie">Bookie</a> - Another self-hostable, Free bookmark sharing software, written in Python<br /></li>
287<li><a href="https://github.com/plainmade/unmark">Unmark</a> - An open source to do app for bookmarks (<a href="https://unmark.it/">Homepage</a>)</li> 322<li><a href="https://github.com/plainmade/unmark">Unmark</a> - An open source to do app for bookmarks (<a href="https://unmark.it/">Homepage</a>)</li>
288</ul> 323</ul>
@@ -333,36 +368,48 @@ exit;</code></pre>
333<h3 id="directory-structure">Directory structure</h3> 368<h3 id="directory-structure">Directory structure</h3>
334<p>Here is the directory structure of Shaarli and the purpose of the different files:</p> 369<p>Here is the directory structure of Shaarli and the purpose of the different files:</p>
335<pre><code> index.php : Main program. 370<pre><code> index.php : Main program.
371 application/ : Shaarli classes
372 ├── LinkDB.php
373 └── Utils.php
374 tests/ : Shaarli unitary &amp; functional tests
375 ├── LinkDBTest.php
376 ├── utils # utilities to ease testing
377 │ └── ReferenceLinkDB.php
378 └── UtilsTest.php
336 COPYING : Shaarli license. 379 COPYING : Shaarli license.
337 inc/ : Includes (libraries, CSS…) 380 inc/ : Includes (libraries, CSS…)
338 shaarli.css : Shaarli stylesheet. 381 ├── awesomplete.*: tags autocompletion library
339 jquery.min.js : jQuery javascript library. 382 ├── blazy.*: picture wall lazy image loading library
340 jquery-ui.min.js : jQuery-UI javascript library. 383 ├── shaarli.css, reset.css : Shaarli stylesheet.
341 jquery-MIT-LICENSE.txt: jQuery license. 384 ├── qr.* : qr code generation library
342 jquery.lazyload.min.js: LazyLoad javascript library. 385 └──rain.tpl.class.php : RainTPL templating library.
343 rain.tpl.class.php : RainTPL templating library.
344 tpl/ : RainTPL templates for Shaarli. They are used to build the pages. 386 tpl/ : RainTPL templates for Shaarli. They are used to build the pages.
345 images/ : Images and icons used in Shaarli. 387 images/ : Images and icons used in Shaarli.
346 data/ : Directory where data is stored (bookmark database, configuration, logs, banlist…) 388 data/ : Directory where data is stored (bookmark database, configuration, logs, banlist…)
347 config.php : Shaarli configuration (login, password, timezone, title…) 389 ├── config.php : Shaarli configuration (login, password, timezone, title…)
348 datastore.php : Your link database (compressed). 390 ├── datastore.php : Your link database (compressed).
349 ipban.php : IP address ban system data. 391 ├── ipban.php : IP address ban system data.
350 lastupdatecheck.txt : Update check timestamp file (used to check every 24 hours if a new version of Shaarli is available). 392 ├── lastupdatecheck.txt : Update check timestamp file (used to check every 24 hours if a new version of Shaarli is available).
351 log.txt : login/IPban log. 393 └──log.txt : login/IPban log.
352 cache/ : Directory containing the thumbnails cache. This directory is automatically created. You can erase it anytime you want. 394 cache/ : Directory containing the thumbnails cache. This directory is automatically created. You can erase it anytime you want.
353 tmp/ : Temporary directory for compiled RainTPL templates. This directory is automatically created. You can erase it anytime you want.</code></pre> 395 tmp/ : Temporary directory for compiled RainTPL templates. This directory is automatically created. You can erase it anytime you want.</code></pre>
396<h3 id="development">Development</h3>
397<ul>
398<li><a href="https://github.com/shaarli/Shaarli/tree/master/CONTRIBUTING.md">Contributing to Shaarli</a><br /></li>
399<li><a href="Running-unit-tests">Running unit tests</a><br /></li>
400<li>Patches should try to stick to the <a href="http://www.php-fig.org/psr/">PHP Standard Recommendations</a> (PSR), especially:<br /></li>
401<li><a href="http://www.php-fig.org/psr/psr-1/">PSR-1</a> - Basic Coding Standard<br /></li>
402<li><a href="http://www.php-fig.org/psr/psr-2/">PSR-2</a> - Coding Style Guide</li>
403</ul>
354<h3 id="why-not-use-a-real-database-files-are-slow">Why not use a real database ? Files are slow !</h3> 404<h3 id="why-not-use-a-real-database-files-are-slow">Why not use a real database ? Files are slow !</h3>
355<p>Does browsing <a href="http://sebsauvage.net/links/">this page</a> feel slow ? Try browsing older pages, too.</p> 405<p>Does browsing <a href="http://sebsauvage.net/links/">this page</a> feel slow ? Try browsing older pages, too.</p>
356<p>It's not slow at all, is it ? And don't forget the database contains more than 16000 links, and it's on a shared host, with 32000 visitors/day for my website alone. And it's still damn fast. Why ?</p> 406<p>It's not slow at all, is it ? And don't forget the database contains more than 16000 links, and it's on a shared host, with 32000 visitors/day for my website alone. And it's still damn fast. Why ?</p>
357<p>The data file is only 3.7 Mb. It's read 99% of the time, and is probably already in the operation system disk cache. So generating a page involves no I/O at all most of the time.</p> 407<p>The data file is only 3.7 Mb. It's read 99% of the time, and is probably already in the operation system disk cache. So generating a page involves no I/O at all most of the time.</p>
358<h1 id="wiki---todo">Wiki - TODO</h1> 408<h1 id="wiki---todo">Wiki - TODO</h1>
359<ul> 409<ul>
360<li>Translate (new page can be called Home.fr, Home.es ...) and linked from Home<br /></li> 410<li>translate (new page can be called Home.fr, Home.es ... and linked from Home)<br /></li>
361<li>add more screenshots<br /></li> 411<li>add more screenshots<br /></li>
362<li>add developer documentation (storage architecture, classes and functions, security handling, ...)<br /></li> 412<li>add developer documentation (storage architecture, classes and functions, security handling, ...)</li>
363<li>Contact related projects<br /></li>
364<li>Add a Table of Contents to the wiki (can be added to the sidebar)</li>
365</ul> 413</ul>
366<p>...</p>
367</body> 414</body>
368</html> 415</html>
diff --git a/doc/Home.md b/doc/Home.md
index bbece989..b5d9c396 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -2,9 +2,7 @@
2 2
3Welcome to the [Shaarli](https://github.com/shaarli/Shaarli/) wiki! Here you can find some info on how to use, configure, tweak and solve problems with your Shaarli. For general info, read the [README](https://github.com/shaarli/Shaarli/blob/master/README.md). 3Welcome to the [Shaarli](https://github.com/shaarli/Shaarli/) wiki! Here you can find some info on how to use, configure, tweak and solve problems with your Shaarli. For general info, read the [README](https://github.com/shaarli/Shaarli/blob/master/README.md).
4 4
5If you have any questions or ideas, please join the [chat](https://gitter.im/shaarli/Shaarli) (also reachable via [IRC](https://irc.gitter.im/)), post them in our [general discussion](https://github.com/shaarli/Shaarli/issues/44) or read the current [issues](https://github.com/shaarli/Shaarli/issues). If you've found a bug, please create a [new issue](https://github.com/shaarli/Shaarli/issues/new). 5If you have any questions or ideas, please join the [chat](https://gitter.im/shaarli/Shaarli) (also reachable via [IRC](https://irc.gitter.im/)), post them in our [general discussion](https://github.com/shaarli/Shaarli/issues/44) or read the current [issues](https://github.com/shaarli/Shaarli/issues). If you've found a bug, please create a [new issue](https://github.com/shaarli/Shaarli/issues/new). If you would like a feature added to Shaarli, check the issues labeled [`feature`](https://github.com/shaarli/Shaarli/labels/feature), [`enhancement`](https://github.com/shaarli/Shaarli/labels/enhancement), and [`plugin`](https://github.com/shaarli/Shaarli/labels/plugin).
6
7If you'd like a feature added, see if it fits in the list of [Ideas for Plugins](Ideas-for-plugins) and update the corresponding bug report.
8 6
9_Note: This documentation is available online at https://github.com/shaarli/Shaarli/wiki, and locally in the `doc/` directory of your Shaarli installation._ 7_Note: This documentation is available online at https://github.com/shaarli/Shaarli/wiki, and locally in the `doc/` directory of your Shaarli installation._
10 8
@@ -14,7 +12,9 @@ _Note: This documentation is available online at https://github.com/shaarli/Shaa
14 12
15- [Basic Usage](#basic-usage) 13- [Basic Usage](#basic-usage)
16 - [Add the sharing button (_bookmarklet_) to your browser](#add-the-sharing-button-_bookmarklet_-to-your-browser) 14 - [Add the sharing button (_bookmarklet_) to your browser](#add-the-sharing-button-_bookmarklet_-to-your-browser)
15 - [Add Shaarli as a sharing service to Firefox](#add-shaarli-as-a-sharing-service-to-firefox)
17 - [Share links using the _bookmarklet_](#share-links-using-the-_bookmarklet_) 16 - [Share links using the _bookmarklet_](#share-links-using-the-_bookmarklet_)
17 - [Sharing links using Firefox share](#sharing-links-using-firefox-share)
18- [Other usage examples](#other-usage-examples) 18- [Other usage examples](#other-usage-examples)
19 - [Using Shaarli as a blog, notepad, pastebin...](#using-shaarli-as-a-blog-notepad-pastebin) 19 - [Using Shaarli as a blog, notepad, pastebin...](#using-shaarli-as-a-blog-notepad-pastebin)
20 - [RSS Feeds or Picture Wall for a specific search/tag](#rss-feeds-or-picture-wall-for-a-specific-searchtag) 20 - [RSS Feeds or Picture Wall for a specific search/tag](#rss-feeds-or-picture-wall-for-a-specific-searchtag)
@@ -40,6 +40,11 @@ _Note: This documentation is available online at https://github.com/shaarli/Shaa
40 - [Various hacks](#various-hacks) 40 - [Various hacks](#various-hacks)
41 - [Changing timestamp for a link](#changing-timestamp-for-a-link) 41 - [Changing timestamp for a link](#changing-timestamp-for-a-link)
42- [Related software](#related-software) 42- [Related software](#related-software)
43 - [Server apps](#server-apps)
44 - [Android apps](#android-apps)
45 - [Themes & templates](#themes--templates)
46 - [Integrate Shaarli with other platforms](#integrate-shaarli-with-other-platforms)
47 - [Alternative to Shaarli](#alternative-to-shaarli)
43- [Other links](#other-links) 48- [Other links](#other-links)
44- [FAQ](#faq) 49- [FAQ](#faq)
45 - [Why did you create Shaarli ?](#why-did-you-create-shaarli-) 50 - [Why did you create Shaarli ?](#why-did-you-create-shaarli-)
@@ -47,6 +52,7 @@ _Note: This documentation is available online at https://github.com/shaarli/Shaa
47 - [What does Shaarli mean ?](#what-does-shaarli-mean-) 52 - [What does Shaarli mean ?](#what-does-shaarli-mean-)
48- [Technical details](#technical-details) 53- [Technical details](#technical-details)
49 - [Directory structure](#directory-structure) 54 - [Directory structure](#directory-structure)
55 - [Development](#development)
50 - [Why not use a real database ? Files are slow !](#why-not-use-a-real-database--files-are-slow-) 56 - [Why not use a real database ? Files are slow !](#why-not-use-a-real-database--files-are-slow-)
51- [Wiki - TODO](#wiki---todo) 57- [Wiki - TODO](#wiki---todo)
52 58
@@ -68,6 +74,14 @@ _This bookmarklet button in compatible with Firefox, Opera, Chrome and Safari. U
68 74
69![](images/bookmarklet.png) 75![](images/bookmarklet.png)
70 76
77
78### Add Shaarli as a sharing service to Firefox
79
80 * Open your Shaarli and `Login`
81 * Click the `Tools` button in the top bar
82 * Click the `✚Add to Firefox social` button and accept the activation.
83
84
71### Share links using the _bookmarklet_ 85### Share links using the _bookmarklet_
72 86
73 * When you are visiting a webpage you would like to share with Shaarli, click the _bookmarklet_ you just added. 87 * When you are visiting a webpage you would like to share with Shaarli, click the _bookmarklet_ you just added.
@@ -78,6 +92,11 @@ _This bookmarklet button in compatible with Firefox, Opera, Chrome and Safari. U
78 * Click `Save`.**Voila! Your link is now shared.** 92 * Click `Save`.**Voila! Your link is now shared.**
79 93
80 94
95### Sharing links using Firefox share
96
97 * Add the sharing service as described above
98 * When you are visiting a webpage you would like to share with Shaarli, click the Firefox _Share_ button [[images/firefoxshare.png]]
99 * You can edit your link before and after saving, just like the bookmarklet above.
81 100
82 101
83# Other usage examples 102# Other usage examples
@@ -116,7 +135,7 @@ It is possible to filter RSS/ATOM feeds and Picture Wall on a Shaarli to **only
116 * The same method **also works for a full-text search** (_Search_ box) **and for the Picture Wall** (want to only see pictures about `nature`?) 135 * The same method **also works for a full-text search** (_Search_ box) **and for the Picture Wall** (want to only see pictures about `nature`?)
117 * You can also build the URL manually: `https://my.shaarli.domain/?do=rss&searchtags=nature`, `https://my.shaarli.domain/links/?do=picwall&searchterm=poney` 136 * You can also build the URL manually: `https://my.shaarli.domain/?do=rss&searchtags=nature`, `https://my.shaarli.domain/links/?do=picwall&searchterm=poney`
118 137
119![](rss-filter-1.png) ![](rss-filter-2.png) 138![](images/rss-filter-1.png) ![](images/rss-filter-2.png)
120 139
121# Configuration 140# Configuration
122 141
@@ -141,10 +160,10 @@ To change the configuration, create the file `data/options.php`, example:
141 * `BAN_AFTER (4)` : An IP address will be banned after this many failed login attempts. 160 * `BAN_AFTER (4)` : An IP address will be banned after this many failed login attempts.
142 * `BAN_DURATION (1800)` : Duration of ban (in seconds). (1800 seconds = 30 minutes) 161 * `BAN_DURATION (1800)` : Duration of ban (in seconds). (1800 seconds = 30 minutes)
143 * `OPEN_SHAARLI (false)` : If you set this option to true, anyone will be able to add/modify/delete/import/exports links without having to login. 162 * `OPEN_SHAARLI (false)` : If you set this option to true, anyone will be able to add/modify/delete/import/exports links without having to login.
144 * `HIDE_TIMESTAMPS (false)` : If you set this option to true, the date/time of each link will not be displayed (including in RSS Feed). 163 * `HIDE_TIMESTAMPS (false)` : If you set this option to true, the date/time of each link will not be displayed (including in RSS Feed).#related-software
145 * `ENABLE_THUMBNAILS (true)` : Enable/disable thumbnails. 164 * `ENABLE_THUMBNAILS (true)` : Enable/disable thumbnails.
146 * `RAINTPL_TMP (tmp/)` : Raintpl cache directory (keep the trailing slash!) 165 * `RAINTPL_TMP (tmp/)` : Raintpl cache directory (keep the trailing slash!)
147 * `RAINTPL_TPL (tpl/) : Raintpl template directory (keep the trailing slash!). Edit this option if you want to change the rendering template (page structure) used by Shaarli. See [Changing template](#changing-template) 166 * `RAINTPL_TPL (tpl/)` : Raintpl template directory (keep the trailing slash!). Edit this option if you want to change the rendering template (page structure) used by Shaarli. See [Changing template](#changing-template)
148 * `CACHEDIR ('cache')` : Directory where the thumbnails are stored. 167 * `CACHEDIR ('cache')` : Directory where the thumbnails are stored.
149 * `ENABLE_LOCALCACHE (true)` : If you have a limited quota on your webspace, you can set this option to false: Shaarli will not generate thumbnails which need to be cached locally (vimeo, flickr, etc.). Thumbnails will still be visible for the services which do not use the local cache (youtube.com, imgur.com, dailymotion.com, imageshack.us) 168 * `ENABLE_LOCALCACHE (true)` : If you have a limited quota on your webspace, you can set this option to false: Shaarli will not generate thumbnails which need to be cached locally (vimeo, flickr, etc.). Thumbnails will still be visible for the services which do not use the local cache (youtube.com, imgur.com, dailymotion.com, imageshack.us)
150 * `UPDATECHECK_FILENAME ($GLOBALS['config']['DATADIR'].'/lastupdatecheck.txt')` : name of the file used to store available shaarli version. 169 * `UPDATECHECK_FILENAME ($GLOBALS['config']['DATADIR'].'/lastupdatecheck.txt')` : name of the file used to store available shaarli version.
@@ -153,6 +172,7 @@ To change the configuration, create the file `data/options.php`, example:
153 * `SHOW_ATOM (false)` : Show an `ATOM Feed` button next to the `Subscribe` (RSS) button. ATOM feeds are available at the address `?do=atom` regardless of this option. 172 * `SHOW_ATOM (false)` : Show an `ATOM Feed` button next to the `Subscribe` (RSS) button. ATOM feeds are available at the address `?do=atom` regardless of this option.
154 * `ARCHIVE_ORG (false)` : For each link, display a link to an archived version on archive.org 173 * `ARCHIVE_ORG (false)` : For each link, display a link to an archived version on archive.org
155 * `ENABLE_RSS_PERMALINKS (true)`: choose whether the RSS item title link points directly to the link, or to the entry on Shaarli (permalink). `true` is the original Shaarli bahevior (point directly to the link) 174 * `ENABLE_RSS_PERMALINKS (true)`: choose whether the RSS item title link points directly to the link, or to the entry on Shaarli (permalink). `true` is the original Shaarli bahevior (point directly to the link)
175 * `HIDE_PUBLIC_LINKS (false)`: setting this to true hides all links, even public ones, for non-logged in users.
156 176
157 177
158### Changing theme 178### Changing theme
@@ -165,7 +185,7 @@ See also:
165 185
166### Changing template 186### Changing template
167 187
168| 💥 | This feature is currently being worked on and will be improved in the next releases. Experimental. | 188| WARNING | This feature is currently being worked on and will be improved in the next releases. Experimental. |
169|---------|---------| 189|---------|---------|
170 190
171 * Find the template you'd like to install. See the list of available templates (TODO). Find it's git clone URL or download the zip archive for the template. 191 * Find the template you'd like to install. See the list of available templates (TODO). Find it's git clone URL or download the zip archive for the template.
@@ -174,7 +194,7 @@ See also:
174 194
175`$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/my-template/' ;` 195`$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/my-template/' ;`
176 196
177You can find a list of compatible templates in [Related Software](#Related-software) 197You can find a list of compatible templates in [Related Software](#related-software)
178 198
179# Backup 199# Backup
180 200
@@ -267,13 +287,7 @@ Download [publisher.php](https://pubsubhubbub.googlecode.com/git/publisher_clien
267 287
268 * [Example patch: add a new "via" field for links](Example-patch---add-new-via-field-for-links) 288 * [Example patch: add a new "via" field for links](Example-patch---add-new-via-field-for-links)
269 * [Copy a Shaarli installation over SSH SCP, serve it locally with php cli](Copy-a-Shaarli-installation-over-SSH-SCP,-serve-it-locally-with-php-cli) 289 * [Copy a Shaarli installation over SSH SCP, serve it locally with php cli](Copy-a-Shaarli-installation-over-SSH-SCP,-serve-it-locally-with-php-cli)
270 * To display the array representing the data saved in datastore.php, use the following snippet (TODO where is it gone?) 290 * To display the array representing the data saved in datastore.php, use the following snippet
271
272### Changing timestamp for a link
273 * Look for `<input type="hidden" name="lf_linkdate" value="{$link.linkdate}">` in `tpl/editlink.tpl` (line 14)
274 * Remove `type="hidden"` from this line
275 * A new date/time field becomes available in the edit/new link dialog. You can set the timestamp manually by entering it in the format `YYYMMDD_HHMMS`.
276
277``` 291```
278$data = "tZNdb9MwFIb... <Commented content inside datastore.php>"; 292$data = "tZNdb9MwFIb... <Commented content inside datastore.php>";
279$out = unserialize(gzinflate(base64_decode($data))); 293$out = unserialize(gzinflate(base64_decode($data)));
@@ -284,28 +298,40 @@ exit;
284``` 298```
285This will output the internal representation of the datastore, "unobfuscated" (if this can really be considered obfuscation) 299This will output the internal representation of the datastore, "unobfuscated" (if this can really be considered obfuscation)
286 300
301### Changing timestamp for a link
302 * Look for `<input type="hidden" name="lf_linkdate" value="{$link.linkdate}">` in `tpl/editlink.tpl` (line 14)
303 * Remove `type="hidden"` from this line
304 * A new date/time field becomes available in the edit/new link dialog. You can set the timestamp manually by entering it in the format `YYYMMDD_HHMMS`.
305
287 306
288# Related software 307# Related software
289Unofficial but relatedd work on Shaarli. If you maintain one of these, please get in touch with us to help us find a way to adapt your work to our fork. **TODO** contact repos owners to see if they'd like to standardize their work for the community fork. 308Unofficial but relatedd work on Shaarli. If you maintain one of these, please get in touch with us to help us find a way to adapt your work to our fork. **TODO** contact repos owners to see if they'd like to standardize their work for the community fork.
290 309### Server apps
291 * [shaarchiver](https://github.com/nodiscc/shaarchiver) - Archive your Shaarli bookmarks and their content 310 * [shaarchiver](https://github.com/nodiscc/shaarchiver) - Archive your Shaarli bookmarks and their content
311 * [shaarli-river](https://github.com/mknexen/shaarli-river) - An aggregator for shaarlis with many features
312 * [Shaarlo](https://github.com/DMeloni/shaarlo) - An aggregator for shaarlis with many features (a very popular running instance among french shaarliers: [shaarli.fr](http://shaarli.fr/))
313 * [Shaarlimages](https://github.com/BoboTiG/shaarlimages) - An image-oriented aggregator for Shaarlis
314 * [mknexen/shaarli-api](https://github.com/mknexen/shaarli-api) - A REST API for Shaarli
315
316### Android apps
292 * [Shaarli for Android](http://sebsauvage.net/links/?ZAyDzg) - Android application that adds Shaarli as a sharing provider 317 * [Shaarli for Android](http://sebsauvage.net/links/?ZAyDzg) - Android application that adds Shaarli as a sharing provider
293 * [Shaarlier for Android](https://play.google.com/store/apps/details?id=com.dimtion.shaarlier) - Android application to simply add links directly into your Shaarli 318 * [Shaarlier for Android](https://github.com/dimtion/Shaarlier) - Android application to simply add links directly into your Shaarli
294 * [shaarli-river](https://github.com/mknexen/shaarli-river) - an aggregator for shaarlis with many features 319
295 * [Shaarlo](https://github.com/DMeloni/shaarlo) - an aggregator for shaarlis with many features ([Demo](http://shaarli.fr/)) 320### Themes & templates
321 * [AkibaTech/Shaarli Superhero Theme](https://github.com/AkibaTech/Shaarli---SuperHero-Theme) - A template/theme for Shaarli
322 * [alexisju/albinomouse-template](https://github.com/alexisju/albinomouse-template) - A full template for Shaarli
323 * [dhoko/ShaarliTemplate](https://github.com/dhoko/ShaarliTemplate) - A template/theme for Shaarli
296 * [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli 324 * [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli
297 * [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - 325 * [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone.
298A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone. 326 * [misterair/Limonade](https://github.com/misterair/limonade) - A fork of (legacy) Shaarli with a new template
299 * [Vinm/Blue-theme-for Shaarli](https://github.com/Vinm/Blue-theme-for-Shaarli) - A template/theme for Shaarli ([unmaintained](https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2), compatibility unknown) 327 * [Vinm/Blue-theme-for Shaarli](https://github.com/Vinm/Blue-theme-for-Shaarli) - A template/theme for Shaarli ([unmaintained](https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2), compatibility unknown)
300 * [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance 328 * [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance
329
330### Integrate Shaarli with other platforms
301 * [tt-rss-shaarli](https://github.com/jcsaaddupuy/tt-rss-shaarli) - [TinyTiny RSS](http://tt-rss.org/) plugin that adds support for sharing articles with Shaarli 331 * [tt-rss-shaarli](https://github.com/jcsaaddupuy/tt-rss-shaarli) - [TinyTiny RSS](http://tt-rss.org/) plugin that adds support for sharing articles with Shaarli
302 * [dhoko/ShaarliTemplate](https://github.com/dhoko/ShaarliTemplate) - A template/theme for Shaarli
303 * [mknexen/shaarli-api](https://github.com/mknexen/shaarli-api) - a REST API for Shaarli
304 * [Albinomouse](https://github.com/alexisju/albinomouse-template) - A full template for Shaarli
305 * [Shaarlimages](https://github.com/BoboTiG/shaarlimages) - An image-oriented aggregator for Shaarlis
306 * [Shaarli Superhero Theme](https://github.com/AkibaTech/Shaarli---SuperHero-Theme) - A template/theme for Shaarli
307 * [Limonade](https://github.com/misterair/limonade) - A fork of Shaarli with a new template
308 * [octopress-shaarli](https://github.com/ahmet2mir/octopress-shaarli) - octoprress plugin to retrieve SHaarli links on the sidebara 332 * [octopress-shaarli](https://github.com/ahmet2mir/octopress-shaarli) - octoprress plugin to retrieve SHaarli links on the sidebara
333
334### Alternative to Shaarli
309 * [Bookie](https://github.com/bookieio/bookie) - Another self-hostable, Free bookmark sharing software, written in Python 335 * [Bookie](https://github.com/bookieio/bookie) - Another self-hostable, Free bookmark sharing software, written in Python
310 * [Unmark](https://github.com/plainmade/unmark) - An open source to do app for bookmarks ([Homepage](https://unmark.it/)) 336 * [Unmark](https://github.com/plainmade/unmark) - An open source to do app for bookmarks ([Homepage](https://unmark.it/))
311 337
@@ -374,26 +400,41 @@ Here is the directory structure of Shaarli and the purpose of the different file
374 400
375``` 401```
376 index.php : Main program. 402 index.php : Main program.
403 application/ : Shaarli classes
404 ├── LinkDB.php
405 └── Utils.php
406 tests/ : Shaarli unitary & functional tests
407 ├── LinkDBTest.php
408 ├── utils # utilities to ease testing
409 │ └── ReferenceLinkDB.php
410 └── UtilsTest.php
377 COPYING : Shaarli license. 411 COPYING : Shaarli license.
378 inc/ : Includes (libraries, CSS…) 412 inc/ : Includes (libraries, CSS…)
379 shaarli.css : Shaarli stylesheet. 413 ├── awesomplete.*: tags autocompletion library
380 jquery.min.js : jQuery javascript library. 414 ├── blazy.*: picture wall lazy image loading library
381 jquery-ui.min.js : jQuery-UI javascript library. 415 ├── shaarli.css, reset.css : Shaarli stylesheet.
382 jquery-MIT-LICENSE.txt: jQuery license. 416 ├── qr.* : qr code generation library
383 jquery.lazyload.min.js: LazyLoad javascript library. 417 └──rain.tpl.class.php : RainTPL templating library.
384 rain.tpl.class.php : RainTPL templating library.
385 tpl/ : RainTPL templates for Shaarli. They are used to build the pages. 418 tpl/ : RainTPL templates for Shaarli. They are used to build the pages.
386 images/ : Images and icons used in Shaarli. 419 images/ : Images and icons used in Shaarli.
387 data/ : Directory where data is stored (bookmark database, configuration, logs, banlist…) 420 data/ : Directory where data is stored (bookmark database, configuration, logs, banlist…)
388 config.php : Shaarli configuration (login, password, timezone, title…) 421 ├── config.php : Shaarli configuration (login, password, timezone, title…)
389 datastore.php : Your link database (compressed). 422 ├── datastore.php : Your link database (compressed).
390 ipban.php : IP address ban system data. 423 ├── ipban.php : IP address ban system data.
391 lastupdatecheck.txt : Update check timestamp file (used to check every 24 hours if a new version of Shaarli is available). 424 ├── lastupdatecheck.txt : Update check timestamp file (used to check every 24 hours if a new version of Shaarli is available).
392 log.txt : login/IPban log. 425 └──log.txt : login/IPban log.
393 cache/ : Directory containing the thumbnails cache. This directory is automatically created. You can erase it anytime you want. 426 cache/ : Directory containing the thumbnails cache. This directory is automatically created. You can erase it anytime you want.
394 tmp/ : Temporary directory for compiled RainTPL templates. This directory is automatically created. You can erase it anytime you want. 427 tmp/ : Temporary directory for compiled RainTPL templates. This directory is automatically created. You can erase it anytime you want.
395``` 428```
396 429
430### Development
431
432 * [Contributing to Shaarli](https://github.com/shaarli/Shaarli/tree/master/CONTRIBUTING.md)
433 * [Running unit tests](Running-unit-tests)
434 * Patches should try to stick to the [PHP Standard Recommendations](http://www.php-fig.org/psr/) (PSR), especially:
435 * [PSR-1](http://www.php-fig.org/psr/psr-1/) - Basic Coding Standard
436 * [PSR-2](http://www.php-fig.org/psr/psr-2/) - Coding Style Guide
437
397### Why not use a real database ? Files are slow ! 438### Why not use a real database ? Files are slow !
398 439
399Does browsing [this page](http://sebsauvage.net/links/) feel slow ? Try browsing older pages, too. 440Does browsing [this page](http://sebsauvage.net/links/) feel slow ? Try browsing older pages, too.
@@ -403,10 +444,6 @@ It's not slow at all, is it ? And don't forget the database contains more than 1
403The data file is only 3.7 Mb. It's read 99% of the time, and is probably already in the operation system disk cache. So generating a page involves no I/O at all most of the time. 444The data file is only 3.7 Mb. It's read 99% of the time, and is probably already in the operation system disk cache. So generating a page involves no I/O at all most of the time.
404 445
405# Wiki - TODO 446# Wiki - TODO
406 * Translate (new page can be called Home.fr, Home.es ...) and linked from Home 447 * translate (new page can be called Home.fr, Home.es ... and linked from Home)
407 * add more screenshots 448 * add more screenshots
408 * add developer documentation (storage architecture, classes and functions, security handling, ...) 449 * add developer documentation (storage architecture, classes and functions, security handling, ...) \ No newline at end of file
409 * Contact related projects
410 * Add a Table of Contents to the wiki (can be added to the sidebar)
411
412... \ No newline at end of file
diff --git a/doc/Ideas-for-plugins.html b/doc/Ideas-for-plugins.html
deleted file mode 100644
index 8ca3572c..00000000
--- a/doc/Ideas-for-plugins.html
+++ /dev/null
@@ -1,26 +0,0 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title></title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <!--[if lt IE 9]>
10 <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11 <![endif]-->
12 <link rel="stylesheet" href="github-markdown.css">
13</head>
14<body>
15<p>Please list here ideas for potential plugins. Do not include lengthy discussion about why/how the plugin should work, but link instead to an issue where this would have been discussed.<br />By listing these ideas here, we can keep the issues list a bit more clean, and have a centralized place where people wanting to contribute can find potential enhancement ideas.<br />Also have a look at <a href="https://github.com/shaarli/Shaarli/issues/14">https://github.com/shaarli/Shaarli/issues/14</a> for other suggestions.</p>
16<ul>
17<li><a href="https://github.com/shaarli/Shaarli/issues/101">Mozilla Social API integration</a><br /></li>
18<li><a href="https://github.com/shaarli/Shaarli/issues/58">File sharing/Upload service integration</a><br /></li>
19<li><a href="https://github.com/sebsauvage/Shaarli/pull/70">Publish to social media services (twitter, facebook, ...)</a><br /></li>
20<li><a href="https://github.com/sebsauvage/Shaarli/issues/170">Comment system</a><br /></li>
21<li><a href="https://github.com/sebsauvage/Shaarli/pull/144">Syntax highlighting support</a><br /></li>
22<li><a href="https://github.com/sebsauvage/Shaarli/issues/81">Piwik tracking code integration</a><br /></li>
23<li><a href="https://github.com/sebsauvage/Shaarli/issues/75">Pingback support</a></li>
24</ul>
25</body>
26</html>
diff --git a/doc/Ideas-for-plugins.md b/doc/Ideas-for-plugins.md
deleted file mode 100644
index 9c3ffb07..00000000
--- a/doc/Ideas-for-plugins.md
+++ /dev/null
@@ -1,11 +0,0 @@
1Please list here ideas for potential plugins. Do not include lengthy discussion about why/how the plugin should work, but link instead to an issue where this would have been discussed.
2By listing these ideas here, we can keep the issues list a bit more clean, and have a centralized place where people wanting to contribute can find potential enhancement ideas.
3Also have a look at https://github.com/shaarli/Shaarli/issues/14 for other suggestions.
4
5* [Mozilla Social API integration](https://github.com/shaarli/Shaarli/issues/101)
6* [File sharing/Upload service integration](https://github.com/shaarli/Shaarli/issues/58)
7* [Publish to social media services (twitter, facebook, ...)](https://github.com/sebsauvage/Shaarli/pull/70)
8* [Comment system](https://github.com/sebsauvage/Shaarli/issues/170)
9* [Syntax highlighting support](https://github.com/sebsauvage/Shaarli/pull/144)
10* [Piwik tracking code integration](https://github.com/sebsauvage/Shaarli/issues/81)
11* [Pingback support](https://github.com/sebsauvage/Shaarli/issues/75) \ No newline at end of file
diff --git a/doc/Running-unit-tests.html b/doc/Running-unit-tests.html
new file mode 100644
index 00000000..43423bc7
--- /dev/null
+++ b/doc/Running-unit-tests.html
@@ -0,0 +1,143 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title></title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <!--[if lt IE 9]>
10 <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11 <![endif]-->
12 <style type="text/css">
13table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
14 margin: 0; padding: 0; vertical-align: baseline; border: none; }
15table.sourceCode { width: 100%; line-height: 100%; }
16td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
17td.sourceCode { padding-left: 5px; }
18code > span.kw { color: #007020; font-weight: bold; }
19code > span.dt { color: #902000; }
20code > span.dv { color: #40a070; }
21code > span.bn { color: #40a070; }
22code > span.fl { color: #40a070; }
23code > span.ch { color: #4070a0; }
24code > span.st { color: #4070a0; }
25code > span.co { color: #60a0b0; font-style: italic; }
26code > span.ot { color: #007020; }
27code > span.al { color: #ff0000; font-weight: bold; }
28code > span.fu { color: #06287e; }
29code > span.er { color: #ff0000; font-weight: bold; }
30 </style>
31 <link rel="stylesheet" href="github-markdown.css">
32</head>
33<body>
34<h3 id="setup-your-environment-for-tests">Setup your environment for tests</h3>
35<p>The framework used is <a href="https://phpunit.de/">PHPUnit</a>; it can be installed with <a href="https://getcomposer.org/">Composer</a>, which is a dependency management tool.</p>
36<p>Regarding Composer, you can either use:</p>
37<ul>
38<li>a system-wide version, e.g. installed through your distro's package manager<br /></li>
39<li>a local version, downloadable <a href="https://getcomposer.org/download/">here</a></li>
40</ul>
41<h4 id="sample-usage">Sample usage</h4>
42<pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># system-wide version</span>
43$ <span class="kw">composer</span> install
44$ <span class="kw">composer</span> update
45
46<span class="co"># local version</span>
47$ <span class="kw">php</span> composer.phar self-update
48$ <span class="kw">php</span> composer.phar install
49$ <span class="kw">php</span> composer.phar update</code></pre>
50<h4 id="install-shaarli-dev-dependencies">Install Shaarli dev dependencies</h4>
51<pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">cd</span> /path/to/shaarli
52$ <span class="kw">composer</span> update</code></pre>
53<h4 id="install-and-enable-xdebug-to-generate-phpunit-coverage-reports">Install and enable Xdebug to generate PHPUnit coverage reports</h4>
54<p>For Debian-based distros:</p>
55<pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">aptitude</span> install php5-xdebug</code></pre>
56<p>For ArchLinux:</p>
57<pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">pacman</span> -S xdebug</code></pre>
58<p>Then add the following line to <code>/etc/php/php.ini</code>:</p>
59<pre class="sourceCode ini"><code class="sourceCode ini"><span class="dt">zend_extension</span><span class="ot">=</span><span class="st">xdebug.so</span></code></pre>
60<h4 id="run-unit-tests">Run unit tests</h4>
61<p>Successful test suite:</p>
62<pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">make</span> test
63
64<span class="kw">-------</span>
65<span class="kw">PHPUNIT</span>
66<span class="kw">-------</span>
67<span class="kw">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors.
68
69<span class="kw">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml
70
71<span class="kw">....................................</span>
72
73<span class="kw">Time</span>: 759 ms, Memory: 8.25Mb
74
75<span class="kw">OK</span> (36 tests, 65 assertions)</code></pre>
76<p>Test suite with failures and errors:</p>
77<pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">make</span> test
78<span class="kw">-------</span>
79<span class="kw">PHPUNIT</span>
80<span class="kw">-------</span>
81<span class="kw">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors.
82
83<span class="kw">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml
84
85<span class="kw">E..FF...............................</span>
86
87<span class="kw">Time</span>: 802 ms, Memory: 8.25Mb
88
89<span class="kw">There</span> was 1 error:
90
91<span class="kw">1</span>) <span class="kw">LinkDBTest</span>::testConstructLoggedIn
92<span class="kw">Missing</span> argument 2 for LinkDB::__construct(), <span class="kw">called</span> in /home/virtualtam/public_html/shaarli/tests/Link\
93<span class="kw">DBTest.php</span> on line 79 and defined
94
95<span class="kw">/home/virtualtam/public_html/shaarli/application</span>/LinkDB.php:<span class="kw">58</span>
96<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">79</span>
97
98<span class="kw">--</span>
99
100<span class="kw">There</span> were 2 failures:
101
102<span class="kw">1</span>) <span class="kw">LinkDBTest</span>::testCheckDBNew
103<span class="kw">Failed</span> asserting that two strings are equal.
104<span class="kw">---</span> Expected
105<span class="kw">+++</span> Actual
106<span class="kw">@@</span> @@
107<span class="kw">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span>
108<span class="kw">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span>
109
110<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">121</span>
111
112<span class="kw">2</span>) <span class="kw">LinkDBTest</span>::testCheckDBLoad
113<span class="kw">Failed</span> asserting that two strings are equal.
114<span class="kw">---</span> Expected
115<span class="kw">+++</span> Actual
116<span class="kw">@@</span> @@
117<span class="kw">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span>
118<span class="kw">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span>
119
120<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">133</span>
121
122<span class="kw">FAILURES</span>!
123<span class="kw">Tests</span>: 36, Assertions: 63, Errors: 1, Failures: 2.</code></pre>
124<h4 id="test-results-and-coverage">Test results and coverage</h4>
125<p>By default, PHPUnit will run all suitable tests found under the <code>tests</code> directory.</p>
126<p>Each test has 3 possible outcomes:</p>
127<ul>
128<li><code>.</code> - success<br /></li>
129<li><code>F</code> - failure: the test was run but its results are invalid<br /></li>
130<li>the code does not behave as expected<br /></li>
131<li>dependencies to external elements: globals, session, cache...<br /></li>
132<li><code>E</code> - error: something went wrong and the tested code has crashed<br /></li>
133<li>typos in the code, or in the test code<br /></li>
134<li>dependencies to missing external elements</li>
135</ul>
136<p>If Xdebug has been installed and activated, two coverage reports will be generated:</p>
137<ul>
138<li>a summary in the console<br /></li>
139<li>a detailed HTML report with metrics for tested code<br /></li>
140<li>to open it in a web browser: <code>firefox coverage/index.html &amp;</code></li>
141</ul>
142</body>
143</html>
diff --git a/doc/Running-unit-tests.md b/doc/Running-unit-tests.md
new file mode 100644
index 00000000..94e99591
--- /dev/null
+++ b/doc/Running-unit-tests.md
@@ -0,0 +1,127 @@
1
2### Setup your environment for tests
3The framework used is [PHPUnit](https://phpunit.de/); it can be installed with [Composer](https://getcomposer.org/), which is a dependency management tool.
4
5Regarding Composer, you can either use:
6* a system-wide version, e.g. installed through your distro's package manager
7* a local version, downloadable [here](https://getcomposer.org/download/)
8
9#### Sample usage
10```bash
11# system-wide version
12$ composer install
13$ composer update
14
15# local version
16$ php composer.phar self-update
17$ php composer.phar install
18$ php composer.phar update
19```
20
21#### Install Shaarli dev dependencies
22```bash
23$ cd /path/to/shaarli
24$ composer update
25```
26
27#### Install and enable Xdebug to generate PHPUnit coverage reports
28For Debian-based distros:
29```bash
30$ aptitude install php5-xdebug
31```
32For ArchLinux:
33```bash
34$ pacman -S xdebug
35```
36
37Then add the following line to `/etc/php/php.ini`:
38```ini
39zend_extension=xdebug.so
40```
41
42#### Run unit tests
43Successful test suite:
44```bash
45$ make test
46
47-------
48PHPUNIT
49-------
50PHPUnit 4.6.9 by Sebastian Bergmann and contributors.
51
52Configuration read from /home/virtualtam/public_html/shaarli/phpunit.xml
53
54....................................
55
56Time: 759 ms, Memory: 8.25Mb
57
58OK (36 tests, 65 assertions)
59```
60
61Test suite with failures and errors:
62```bash
63$ make test
64-------
65PHPUNIT
66-------
67PHPUnit 4.6.9 by Sebastian Bergmann and contributors.
68
69Configuration read from /home/virtualtam/public_html/shaarli/phpunit.xml
70
71E..FF...............................
72
73Time: 802 ms, Memory: 8.25Mb
74
75There was 1 error:
76
771) LinkDBTest::testConstructLoggedIn
78Missing argument 2 for LinkDB::__construct(), called in /home/virtualtam/public_html/shaarli/tests/Link\
79DBTest.php on line 79 and defined
80
81/home/virtualtam/public_html/shaarli/application/LinkDB.php:58
82/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:79
83
84--
85
86There were 2 failures:
87
881) LinkDBTest::testCheckDBNew
89Failed asserting that two strings are equal.
90--- Expected
91+++ Actual
92@@ @@
93-'e3edea8ea7bb50be4bcb404df53fbb4546a7156e'
94+'85eab0c610d4f68025f6ed6e6b6b5fabd4b55834'
95
96/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:121
97
982) LinkDBTest::testCheckDBLoad
99Failed asserting that two strings are equal.
100--- Expected
101+++ Actual
102@@ @@
103-'e3edea8ea7bb50be4bcb404df53fbb4546a7156e'
104+'85eab0c610d4f68025f6ed6e6b6b5fabd4b55834'
105
106/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:133
107
108FAILURES!
109Tests: 36, Assertions: 63, Errors: 1, Failures: 2.
110```
111
112#### Test results and coverage
113By default, PHPUnit will run all suitable tests found under the `tests` directory.
114
115Each test has 3 possible outcomes:
116* `.` - success
117* `F` - failure: the test was run but its results are invalid
118 * the code does not behave as expected
119 * dependencies to external elements: globals, session, cache...
120* `E` - error: something went wrong and the tested code has crashed
121 * typos in the code, or in the test code
122 * dependencies to missing external elements
123
124If Xdebug has been installed and activated, two coverage reports will be generated:
125* a summary in the console
126* a detailed HTML report with metrics for tested code
127 * to open it in a web browser: `firefox coverage/index.html &` \ No newline at end of file
diff --git a/doc/_Sidebar.html b/doc/_Sidebar.html
deleted file mode 100644
index b9e2ed39..00000000
--- a/doc/_Sidebar.html
+++ /dev/null
@@ -1,70 +0,0 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title></title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <!--[if lt IE 9]>
10 <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11 <![endif]-->
12 <link rel="stylesheet" href="github-markdown.css">
13</head>
14<body>
15<ul>
16<li><p><a href="#basic-usage">Basic Usage</a></p>
17<ul>
18<li><a href="#add-the-sharing-button-_bookmarklet_-to-your-browser">Add the sharing button (<em>bookmarklet</em>) to your browser</a><br /></li>
19<li><a href="#share-links-using-the-_bookmarklet_">Share links using the <em>bookmarklet</em></a><br /></li>
20</ul></li>
21<li><p><a href="#other-usage-examples">Other usage examples</a></p>
22<ul>
23<li><a href="#using-shaarli-as-a-blog-notepad-pastebin">Using Shaarli as a blog, notepad, pastebin...</a><br /></li>
24<li><a href="#rss-feeds-or-picture-wall-for-a-specific-searchtag">RSS Feeds or Picture Wall for a specific search/tag</a><br /></li>
25</ul></li>
26<li><p><a href="#configuration">Configuration</a></p>
27<ul>
28<li><a href="#main-dataoptionsphp-file">Main data/options.php file</a><br /></li>
29<li><a href="#changing-theme">Changing theme</a><br /></li>
30</ul></li>
31<li><a href="#backup">Backup</a><br /></li>
32<li><p><a href="#login-bruteforce-protection">Login bruteforce protection</a></p>
33<ul>
34<li><a href="#list-of-all-login-attempts">List of all login attempts</a><br /></li>
35</ul></li>
36<li><p><a href="#troubleshooting">Troubleshooting</a></p>
37<ul>
38<li><a href="#i-forgot-my-password-">I forgot my password !</a><br /></li>
39<li><a href="#exporting-from-diigo">Exporting from Diigo</a><br /></li>
40<li><a href="#importing-from-semanticscuttle">Importing from SemanticScuttle</a><br /></li>
41<li><a href="#importing-from-mister-wong">Importing from Mister Wong</a><br /></li>
42<li><a href="#hosting-problems">Hosting problems</a><br /></li>
43<li><a href="#dates-are-not-properly-formatted">Dates are not properly formatted</a><br /></li>
44<li><a href="#problems-on-centos-servers">Problems on CentOS servers</a><br /></li>
45<li><a href="#my-session-expires--i-cant-stay-logged-in">My session expires ! I can't stay logged in</a><br /></li>
46<li><a href="#sessions-do-not-seem-to-work-correctly-on-your-server"><code>Sessions do not seem to work correctly on your server</code></a><br /></li>
47<li><a href="#pubsubhubbub-support">pubsubhubbub support</a><br /></li>
48</ul></li>
49<li><p><a href="#notes">Notes</a></p>
50<ul>
51<li><a href="#various-hacks">Various hacks</a><br /></li>
52<li><a href="#changing-timestamp-for-a-link">Changing timestamp for a link</a><br /></li>
53</ul></li>
54<li><a href="#related-software">Related software</a><br /></li>
55<li><a href="#other-links">Other links</a><br /></li>
56<li><p><a href="#faq">FAQ</a></p>
57<ul>
58<li><a href="#why-did-you-create-shaarli-">Why did you create Shaarli ?</a><br /></li>
59<li><a href="#why-use-shaarli-and-not-deliciousdiigo-">Why use Shaarli and not Delicious/Diigo ?</a><br /></li>
60<li><a href="#what-does-shaarli-mean-">What does Shaarli mean ?</a><br /></li>
61</ul></li>
62<li><p><a href="#technical-details">Technical details</a></p>
63<ul>
64<li><a href="#directory-structure">Directory structure</a><br /></li>
65<li><a href="#why-not-use-a-real-database--files-are-slow-">Why not use a real database ? Files are slow !</a><br /></li>
66</ul></li>
67<li><p><a href="#wiki---todo">Wiki - TODO</a></p></li>
68</ul>
69</body>
70</html>
diff --git a/doc/_Sidebar.md b/doc/_Sidebar.md
deleted file mode 100644
index dbe145f1..00000000
--- a/doc/_Sidebar.md
+++ /dev/null
@@ -1,37 +0,0 @@
1
2- [Basic Usage](#basic-usage)
3 - [Add the sharing button (_bookmarklet_) to your browser](#add-the-sharing-button-_bookmarklet_-to-your-browser)
4 - [Share links using the _bookmarklet_](#share-links-using-the-_bookmarklet_)
5- [Other usage examples](#other-usage-examples)
6 - [Using Shaarli as a blog, notepad, pastebin...](#using-shaarli-as-a-blog-notepad-pastebin)
7 - [RSS Feeds or Picture Wall for a specific search/tag](#rss-feeds-or-picture-wall-for-a-specific-searchtag)
8- [Configuration](#configuration)
9 - [Main data/options.php file](#main-dataoptionsphp-file)
10 - [Changing theme](#changing-theme)
11- [Backup](#backup)
12- [Login bruteforce protection](#login-bruteforce-protection)
13 - [List of all login attempts](#list-of-all-login-attempts)
14- [Troubleshooting](#troubleshooting)
15 - [I forgot my password !](#i-forgot-my-password-)
16 - [Exporting from Diigo](#exporting-from-diigo)
17 - [Importing from SemanticScuttle](#importing-from-semanticscuttle)
18 - [Importing from Mister Wong](#importing-from-mister-wong)
19 - [Hosting problems](#hosting-problems)
20 - [Dates are not properly formatted](#dates-are-not-properly-formatted)
21 - [Problems on CentOS servers](#problems-on-centos-servers)
22 - [My session expires ! I can't stay logged in](#my-session-expires--i-cant-stay-logged-in)
23 - [`Sessions do not seem to work correctly on your server`](#sessions-do-not-seem-to-work-correctly-on-your-server)
24 - [pubsubhubbub support](#pubsubhubbub-support)
25- [Notes](#notes)
26 - [Various hacks](#various-hacks)
27 - [Changing timestamp for a link](#changing-timestamp-for-a-link)
28- [Related software](#related-software)
29- [Other links](#other-links)
30- [FAQ](#faq)
31 - [Why did you create Shaarli ?](#why-did-you-create-shaarli-)
32 - [Why use Shaarli and not Delicious/Diigo ?](#why-use-shaarli-and-not-deliciousdiigo-)
33 - [What does Shaarli mean ?](#what-does-shaarli-mean-)
34- [Technical details](#technical-details)
35 - [Directory structure](#directory-structure)
36 - [Why not use a real database ? Files are slow !](#why-not-use-a-real-database--files-are-slow-)
37- [Wiki - TODO](#wiki---todo) \ No newline at end of file
diff --git a/doc/images/firefoxshare.png b/doc/images/firefoxshare.png
new file mode 100644
index 00000000..98c2fdd3
--- /dev/null
+++ b/doc/images/firefoxshare.png
Binary files differ
diff --git a/inc/awesomplete.css b/inc/awesomplete.css
index 0382e139..47c1928f 100644
--- a/inc/awesomplete.css
+++ b/inc/awesomplete.css
@@ -8,6 +8,7 @@
8div.awesomplete { 8div.awesomplete {
9 display: inline-block; 9 display: inline-block;
10 position: relative; 10 position: relative;
11 width: 100%;
11} 12}
12 13
13div.awesomplete > input { 14div.awesomplete > input {
diff --git a/inc/shaarli.css b/inc/shaarli.css
index 95732da8..78bcfd34 100644
--- a/inc/shaarli.css
+++ b/inc/shaarli.css
@@ -221,6 +221,10 @@ h1 {
221 margin-left:24px; 221 margin-left:24px;
222} 222}
223 223
224.tagfilter div.awesomplete {
225 width: 15%;
226}
227
224.tagfilter #tagfilter_value { 228.tagfilter #tagfilter_value {
225 display: inline; 229 display: inline;
226} 230}
@@ -374,6 +378,7 @@ h1 {
374} 378}
375 379
376#editlinkform label { 380#editlinkform label {
381 cursor: pointer;
377 color: #ffffff; 382 color: #ffffff;
378} 383}
379 384
diff --git a/tpl/editlink.html b/tpl/editlink.html
index 6737c412..a32748ab 100644
--- a/tpl/editlink.html
+++ b/tpl/editlink.html
@@ -19,7 +19,7 @@
19 <label for="lf_title"><i>Title</i></label><br><input type="text" name="lf_title" id="lf_title" value="{$link.title}" class="lf_input"><br> 19 <label for="lf_title"><i>Title</i></label><br><input type="text" name="lf_title" id="lf_title" value="{$link.title}" class="lf_input"><br>
20 <label for="lf_description"><i>Description</i></label><br><textarea name="lf_description" id="lf_description" rows="4" cols="25">{$link.description}</textarea><br> 20 <label for="lf_description"><i>Description</i></label><br><textarea name="lf_description" id="lf_description" rows="4" cols="25">{$link.description}</textarea><br>
21 <label for="lf_tags"><i>Tags</i></label><br> 21 <label for="lf_tags"><i>Tags</i></label><br>
22 <input type="text" id="lf_tags" name="lf_tags" id="lf_tags" value="{$link.tags}" class="lf_input" 22 <input type="text" name="lf_tags" id="lf_tags" value="{$link.tags}" class="lf_input"
23 data-list="{loop="$tags"}{$key}, {/loop}" data-multiple autocomplete="off" ><br> 23 data-list="{loop="$tags"}{$key}, {/loop}" data-multiple autocomplete="off" ><br>
24 {if="($link_is_new && $GLOBALS['privateLinkByDefault']==true) || $link.private == true"} 24 {if="($link_is_new && $GLOBALS['privateLinkByDefault']==true) || $link.private == true"}
25 <input type="checkbox" checked="checked" name="lf_private" id="lf_private"> 25 <input type="checkbox" checked="checked" name="lf_private" id="lf_private">