aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2017-05-07 18:44:05 +0200
committerArthurHoaro <arthur@hoa.ro>2017-05-07 18:44:05 +0200
commitb230bf207df576fa2ad165702184edf21f674ce7 (patch)
tree90af6fbddda19c22c1bd21e2fc6ed135116cce48
parentf501caed215bd12caced5106f9226638b2b15fb4 (diff)
downloadShaarli-b230bf207df576fa2ad165702184edf21f674ce7.tar.gz
Shaarli-b230bf207df576fa2ad165702184edf21f674ce7.tar.zst
Shaarli-b230bf207df576fa2ad165702184edf21f674ce7.zip
Bump version to v0.9.0
Signed-off-by: ArthurHoaro <arthur@hoa.ro>
-rw-r--r--AUTHORS7
-rw-r--r--doc/3rd-party-libraries.html2
-rw-r--r--doc/Backup,-restore,-import-and-export.html2
-rw-r--r--doc/Browsing-and-searching.html4
-rw-r--r--doc/Browsing-and-searching.md4
-rw-r--r--doc/Coding-guidelines.html2
-rw-r--r--doc/Community-&-Related-software.html10
-rw-r--r--doc/Community-&-Related-software.md6
-rw-r--r--doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html2
-rw-r--r--doc/Create-and-serve-multiple-Shaarlis-(farm).html2
-rw-r--r--doc/Datastore-hacks.html2
-rw-r--r--doc/Development.html2
-rw-r--r--doc/Directory-structure.html42
-rw-r--r--doc/Docker.html13
-rw-r--r--doc/Docker.md1
-rw-r--r--doc/Download-CSS-styles-from-an-OPML-list.html4
-rw-r--r--doc/Download-and-Installation.html18
-rw-r--r--doc/Download-and-Installation.md16
-rw-r--r--doc/Example-patch---add-new-via-field-for-links.html2
-rw-r--r--doc/FAQ.html2
-rw-r--r--doc/Firefox-share.html2
-rw-r--r--doc/GnuPG-signature.html2
-rw-r--r--doc/Home.html2
-rw-r--r--doc/Plugin-System.html117
-rw-r--r--doc/Plugin-System.md130
-rw-r--r--doc/Plugins.html3
-rw-r--r--doc/Plugins.md1
-rw-r--r--doc/REST-API.html169
-rw-r--r--doc/REST-API.md105
-rw-r--r--doc/RSS-feeds.html2
-rw-r--r--doc/Release-Shaarli.html4
-rw-r--r--doc/Release-Shaarli.md3
-rw-r--r--doc/Security.html2
-rw-r--r--doc/Server-configuration.html16
-rw-r--r--doc/Server-configuration.md15
-rw-r--r--doc/Server-requirements.html25
-rw-r--r--doc/Server-requirements.md3
-rw-r--r--doc/Server-security.html2
-rw-r--r--doc/Shaarli-configuration.html3
-rw-r--r--doc/Shaarli-configuration.md1
-rw-r--r--doc/Sharing-button.html2
-rw-r--r--doc/Static-analysis.html2
-rw-r--r--doc/Theming.html58
-rw-r--r--doc/Theming.md54
-rw-r--r--doc/Troubleshooting.html4
-rw-r--r--doc/Unit-tests.html14
-rw-r--r--doc/Unit-tests.md19
-rw-r--r--doc/Upgrade-and-migration.html37
-rw-r--r--doc/Upgrade-and-migration.md41
-rw-r--r--doc/Usage.html2
-rw-r--r--doc/Versioning-and-Branches.html156
-rw-r--r--doc/Versioning-and-Branches.md76
-rw-r--r--doc/_Footer.html2
-rw-r--r--doc/_Sidebar.html4
-rw-r--r--doc/_Sidebar.md2
-rw-r--r--doc/sidebar.html2
56 files changed, 1090 insertions, 135 deletions
diff --git a/AUTHORS b/AUTHORS
index aa041ae9..c0e35949 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,11 +1,11 @@
1 327 ArthurHoaro <arthur@hoa.ro> 1 472 ArthurHoaro <arthur@hoa.ro>
2 188 VirtualTam <virtualtam@flibidi.net> 2 201 VirtualTam <virtualtam@flibidi.net>
3 132 nodiscc <nodiscc@gmail.com> 3 132 nodiscc <nodiscc@gmail.com>
4 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> 4 56 Sébastien Sauvage <sebsauvage@sebsauvage.net>
5 15 Florian Eula <eula.florian@gmail.com> 5 15 Florian Eula <eula.florian@gmail.com>
6 13 Emilien Klein <emilien@klein.st> 6 13 Emilien Klein <emilien@klein.st>
7 12 Nicolas Danelon <hi@nicolasmd.com.ar> 7 12 Nicolas Danelon <hi@nicolasmd.com.ar>
8 7 Christophe HENRY <christophe.henry@sbgodin.fr> 8 8 Christophe HENRY <christophe.henry@sbgodin.fr>
9 4 Alexandre Alapetite <alexandre@alapetite.fr> 9 4 Alexandre Alapetite <alexandre@alapetite.fr>
10 4 David Sferruzza <david.sferruzza@gmail.com> 10 4 David Sferruzza <david.sferruzza@gmail.com>
11 3 Teromene <teromene@teromene.fr> 11 3 Teromene <teromene@teromene.fr>
@@ -38,3 +38,4 @@
38 1 Sbgodin <Sbgodin@users.noreply.github.com> 38 1 Sbgodin <Sbgodin@users.noreply.github.com>
39 1 TsT <tst2005@gmail.com> 39 1 TsT <tst2005@gmail.com>
40 1 dimtion <zizou.xena@gmail.com> 40 1 dimtion <zizou.xena@gmail.com>
41 1 philipp-r <philipp-r@users.noreply.github.com>
diff --git a/doc/3rd-party-libraries.html b/doc/3rd-party-libraries.html
index 946ca037..50aba6c0 100644
--- a/doc/3rd-party-libraries.html
+++ b/doc/3rd-party-libraries.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Backup,-restore,-import-and-export.html b/doc/Backup,-restore,-import-and-export.html
index a4a48ad7..3c168824 100644
--- a/doc/Backup,-restore,-import-and-export.html
+++ b/doc/Backup,-restore,-import-and-export.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Browsing-and-searching.html b/doc/Browsing-and-searching.html
index 23001bcb..ef5b5245 100644
--- a/doc/Browsing-and-searching.html
+++ b/doc/Browsing-and-searching.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
@@ -64,7 +66,6 @@
64</div> 66</div>
65<h1 id="browsing-and-searching">Browsing and searching</h1> 67<h1 id="browsing-and-searching">Browsing and searching</h1>
66<h1 id="browsing-and-searching-1">Browsing and Searching</h1> 68<h1 id="browsing-and-searching-1">Browsing and Searching</h1>
67<p>Status: DRAFT</p>
68<p><embed src="(http://pix.toile-libre.org/upload/original/1455571378.png).html" /></p> 69<p><embed src="(http://pix.toile-libre.org/upload/original/1455571378.png).html" /></p>
69<h2 id="plain-text-search">Plain text search</h2> 70<h2 id="plain-text-search">Plain text search</h2>
70<p>Use the <code>Search text</code> field to search in <em>any</em> of the fields of all links (Title, URL, Description...)</p> 71<p>Use the <code>Search text</code> field to search in <em>any</em> of the fields of all links (Title, URL, Description...)</p>
@@ -75,6 +76,7 @@
75<p>Use the <code>Filter by tags</code> field to restrict displayed links to entries tagged with one or multiple tags (use space to separate tags).</p> 76<p>Use the <code>Filter by tags</code> field to restrict displayed links to entries tagged with one or multiple tags (use space to separate tags).</p>
76<p><strong>Hidden tags:</strong> Tags starting with a dot <code>.</code> (example <code>.secret</code>) are private. They can only be seen and searched when logged in.</p> 77<p><strong>Hidden tags:</strong> Tags starting with a dot <code>.</code> (example <code>.secret</code>) are private. They can only be seen and searched when logged in.</p>
77<p>Alternatively you can use the <code>Tag cloud</code> to discover all tags and click on any of them to display related links.</p> 78<p>Alternatively you can use the <code>Tag cloud</code> to discover all tags and click on any of them to display related links.</p>
79<p>To search for links that are not tagged, enter <code>&quot;&quot;</code> in the tag search field.</p>
78<h2 id="filtering-rss-feedspicture-wall">Filtering RSS feeds/Picture wall</h2> 80<h2 id="filtering-rss-feedspicture-wall">Filtering RSS feeds/Picture wall</h2>
79<p>RSS feeds can also be restricted to only return items matching a text/tag search: see <a href="RSS-feeds.html">RSS feeds</a>.</p> 81<p>RSS feeds can also be restricted to only return items matching a text/tag search: see <a href="RSS-feeds.html">RSS feeds</a>.</p>
80</body> 82</body>
diff --git a/doc/Browsing-and-searching.md b/doc/Browsing-and-searching.md
index 187fe447..854b6b60 100644
--- a/doc/Browsing-and-searching.md
+++ b/doc/Browsing-and-searching.md
@@ -1,8 +1,6 @@
1#Browsing and searching 1#Browsing and searching
2# Browsing and Searching 2# Browsing and Searching
3 3
4Status: DRAFT
5
6![(http://pix.toile-libre.org/upload/original/1455571378.png)]((http://pix.toile-libre.org/upload/original/1455571378.png).html) 4![(http://pix.toile-libre.org/upload/original/1455571378.png)]((http://pix.toile-libre.org/upload/original/1455571378.png).html)
7 5
8## Plain text search 6## Plain text search
@@ -23,6 +21,8 @@ Use the `Filter by tags` field to restrict displayed links to entries tagged wit
23 21
24Alternatively you can use the `Tag cloud` to discover all tags and click on any of them to display related links. 22Alternatively you can use the `Tag cloud` to discover all tags and click on any of them to display related links.
25 23
24To search for links that are not tagged, enter `""` in the tag search field.
25
26## Filtering RSS feeds/Picture wall 26## Filtering RSS feeds/Picture wall
27 27
28RSS feeds can also be restricted to only return items matching a text/tag search: see [RSS feeds](RSS-feeds.html). 28RSS feeds can also be restricted to only return items matching a text/tag search: see [RSS feeds](RSS-feeds.html).
diff --git a/doc/Coding-guidelines.html b/doc/Coding-guidelines.html
index 1a2a9351..8df12182 100644
--- a/doc/Coding-guidelines.html
+++ b/doc/Coding-guidelines.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Community-&-Related-software.html b/doc/Community-&-Related-software.html
index cbc73d54..28b96185 100644
--- a/doc/Community-&-Related-software.html
+++ b/doc/Community-&-Related-software.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
@@ -77,12 +79,20 @@
77<li><a href="http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history">Original revisions history</a><a href=".html"></a></li> 79<li><a href="http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history">Original revisions history</a><a href=".html"></a></li>
78<li><a href="https://www.shaarli.fr/my.php">Shaarli.fr/my</a> - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of <a href="https://github.com/DMeloni">DMeloni</a><a href=".html"></a></li> 80<li><a href="https://www.shaarli.fr/my.php">Shaarli.fr/my</a> - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of <a href="https://github.com/DMeloni">DMeloni</a><a href=".html"></a></li>
79</ul> 81</ul>
82<h3 id="articles-and-social-media-discussions">Articles and social media discussions</h3>
83<ul>
84<li>2016-09-22 - Hacker News - <a href="https://news.ycombinator.com/item?id=12552176" class="uri">https://news.ycombinator.com/item?id=12552176</a></li>
85<li>2015-08-15 - Reddit - <a href="https://www.reddit.com/r/selfhosted/comments/3h3zwh/question_about_migrating_from_wordpress_to_shaarli/">Question about migrating from WordPress to Shaarli.</a><a href=".html"></a></li>
86<li>2015-06-22 - Hacker News - <a href="https://news.ycombinator.com/item?id=9755366" class="uri">https://news.ycombinator.com/item?id=9755366</a></li>
87<li>2015-05-12 - Reddit - <a href="https://www.reddit.com/r/selfhosted/comments/35pkkc/shaarli_self_hosted_bookmarking_delicious_php/">shaarli - Self hosted Bookmarking / Delicious (PHP, MySQL)</a><a href=".html"></a></li>
88</ul>
80<h3 id="third-party-plugins">Third party plugins</h3> 89<h3 id="third-party-plugins">Third party plugins</h3>
81<ul> 90<ul>
82<li><a href="https://github.com/kalvn/shaarli-plugin-autosave">autosave</a> by <a href="https://github.com/kalvn">@kalvn</a>: Automatically saves data when editing a link to avoid any loss in case of crash or unexpected shutdown.<a href=".html"></a></li> 91<li><a href="https://github.com/kalvn/shaarli-plugin-autosave">autosave</a> by <a href="https://github.com/kalvn">@kalvn</a>: Automatically saves data when editing a link to avoid any loss in case of crash or unexpected shutdown.<a href=".html"></a></li>
83<li><a href="https://github.com/ArthurHoaro/code-coloration">Code Coloration</a> by <a href="https://github.com/ArthurHoaro">@ArthurHoaro</a>: client side code syntax highlighter.<a href=".html"></a></li> 92<li><a href="https://github.com/ArthurHoaro/code-coloration">Code Coloration</a> by <a href="https://github.com/ArthurHoaro">@ArthurHoaro</a>: client side code syntax highlighter.<a href=".html"></a></li>
84<li><a href="https://github.com/kalvn/shaarli-plugin-disqus">Disqus</a> by <a href="https://github.com/kalvn">@kalvn</a>: Adds Disqus comment system to your Shaarli.<a href=".html"></a></li> 93<li><a href="https://github.com/kalvn/shaarli-plugin-disqus">Disqus</a> by <a href="https://github.com/kalvn">@kalvn</a>: Adds Disqus comment system to your Shaarli.<a href=".html"></a></li>
85<li><a href="https://github.com/NerosTie/emojione">emojione</a> by <a href="https://github.com/NerosTie">@NerosTie</a>: Add colorful emojis to your Shaarli.<a href=".html"></a></li> 94<li><a href="https://github.com/NerosTie/emojione">emojione</a> by <a href="https://github.com/NerosTie">@NerosTie</a>: Add colorful emojis to your Shaarli.<a href=".html"></a></li>
95<li><a href="https://github.com/ericjuden/Shaarli-Google-Analytics-Plugin">google analytics</a> by <a href="http://github.com/ericjuden">@ericjuden</a>: Adds Google Analytics tracking support<a href=".html"></a></li>
86<li><a href="https://github.com/ArthurHoaro/launch-plugin">launch</a> - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.<a href=".html"></a></li> 96<li><a href="https://github.com/ArthurHoaro/launch-plugin">launch</a> - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.<a href=".html"></a></li>
87<li><a href="https://github.com/alexisju/social">social</a> by <a href="https://github.com/alexisju">@alexisju</a>: share links to social networks.<a href=".html"></a></li> 97<li><a href="https://github.com/alexisju/social">social</a> by <a href="https://github.com/alexisju">@alexisju</a>: share links to social networks.<a href=".html"></a></li>
88<li><a href="https://github.com/ArthurHoaro/shaarli2twitter">shaarli2twitter</a> by <a href="https://github.com/ArthurHoaro">@ArthurHoaro</a> - Automatically tweet your shared links from Shaarli<a href=".html"></a></li> 98<li><a href="https://github.com/ArthurHoaro/shaarli2twitter">shaarli2twitter</a> by <a href="https://github.com/ArthurHoaro">@ArthurHoaro</a> - Automatically tweet your shared links from Shaarli<a href=".html"></a></li>
diff --git a/doc/Community-&-Related-software.md b/doc/Community-&-Related-software.md
index 291bf643..52123a1e 100644
--- a/doc/Community-&-Related-software.md
+++ b/doc/Community-&-Related-software.md
@@ -14,6 +14,11 @@ _TODO: contact repos owners to see if they'd like to standardize their work with
14- [Original revisions history](http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history)[](.html) 14- [Original revisions history](http://sebsauvage.net/wiki/doku.php?id=php:shaarli:history)[](.html)
15- [Shaarli.fr/my](https://www.shaarli.fr/my.php) - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of [DMeloni](https://github.com/DMeloni)[](.html) 15- [Shaarli.fr/my](https://www.shaarli.fr/my.php) - Unofficial, unsupported (old fork) hosted Shaarlis provider, courtesy of [DMeloni](https://github.com/DMeloni)[](.html)
16 16
17### Articles and social media discussions
18- 2016-09-22 - Hacker News - https://news.ycombinator.com/item?id=12552176
19- 2015-08-15 - Reddit - [Question about migrating from WordPress to Shaarli.](https://www.reddit.com/r/selfhosted/comments/3h3zwh/question_about_migrating_from_wordpress_to_shaarli/)[](.html)
20- 2015-06-22 - Hacker News - https://news.ycombinator.com/item?id=9755366
21- 2015-05-12 - Reddit - [shaarli - Self hosted Bookmarking / Delicious (PHP, MySQL)](https://www.reddit.com/r/selfhosted/comments/35pkkc/shaarli_self_hosted_bookmarking_delicious_php/)[](.html)
17 22
18### Third party plugins 23### Third party plugins
19 24
@@ -22,6 +27,7 @@ _TODO: contact repos owners to see if they'd like to standardize their work with
22 * [Code Coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter.[](.html) 27 * [Code Coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter.[](.html)
23 * [Disqus](https://github.com/kalvn/shaarli-plugin-disqus) by [@kalvn](https://github.com/kalvn): Adds Disqus comment system to your Shaarli.[](.html) 28 * [Disqus](https://github.com/kalvn/shaarli-plugin-disqus) by [@kalvn](https://github.com/kalvn): Adds Disqus comment system to your Shaarli.[](.html)
24 * [emojione](https://github.com/NerosTie/emojione) by [@NerosTie](https://github.com/NerosTie): Add colorful emojis to your Shaarli.[](.html) 29 * [emojione](https://github.com/NerosTie/emojione) by [@NerosTie](https://github.com/NerosTie): Add colorful emojis to your Shaarli.[](.html)
30 * [google analytics](https://github.com/ericjuden/Shaarli-Google-Analytics-Plugin) by [@ericjuden](http://github.com/ericjuden): Adds Google Analytics tracking support[](.html)
25 * [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.[](.html) 31 * [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.[](.html)
26 * [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks.[](.html) 32 * [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks.[](.html)
27 * [shaarli2twitter](https://github.com/ArthurHoaro/shaarli2twitter) by [@ArthurHoaro](https://github.com/ArthurHoaro) - Automatically tweet your shared links from Shaarli[](.html) 33 * [shaarli2twitter](https://github.com/ArthurHoaro/shaarli2twitter) by [@ArthurHoaro](https://github.com/ArthurHoaro) - Automatically tweet your shared links from Shaarli[](.html)
diff --git a/doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html b/doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html
index 9efb1ad6..d6b76add 100644
--- a/doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html
+++ b/doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Create-and-serve-multiple-Shaarlis-(farm).html b/doc/Create-and-serve-multiple-Shaarlis-(farm).html
index 672e4bf3..0be81d56 100644
--- a/doc/Create-and-serve-multiple-Shaarlis-(farm).html
+++ b/doc/Create-and-serve-multiple-Shaarlis-(farm).html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Datastore-hacks.html b/doc/Datastore-hacks.html
index 15da09d4..ef3e17bb 100644
--- a/doc/Datastore-hacks.html
+++ b/doc/Datastore-hacks.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Development.html b/doc/Development.html
index c5776413..8a2be413 100644
--- a/doc/Development.html
+++ b/doc/Development.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Directory-structure.html b/doc/Directory-structure.html
index 404ff7c8..3f75db8e 100644
--- a/doc/Directory-structure.html
+++ b/doc/Directory-structure.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -101,33 +103,33 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
101</div> 103</div>
102<h1 id="directory-structure">Directory structure</h1> 104<h1 id="directory-structure">Directory structure</h1>
103<p>Here is the directory structure of Shaarli and the purpose of the different files:</p> 105<p>Here is the directory structure of Shaarli and the purpose of the different files:</p>
104<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"> <span class="ex">index.php</span> <span class="co"># Main program</span> 106<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"> <span class="ex">index.php</span> # Main program
105 <span class="ex">application/</span> <span class="co"># Shaarli classes</span> 107 <span class="ex">application/</span> # Shaarli classes
106 ├── <span class="ex">LinkDB.php</span> 108 ├── <span class="ex">LinkDB.php</span>
107 └── <span class="ex">Utils.php</span> 109 └── <span class="ex">Utils.php</span>
108 <span class="ex">tests/</span> <span class="co"># Shaarli unitary &amp; functional tests</span> 110 <span class="ex">tests/</span> # Shaarli unitary <span class="kw">&amp;</span> <span class="ex">functional</span> tests
109 ├── <span class="ex">LinkDBTest.php</span> 111 ├── <span class="ex">LinkDBTest.php</span>
110 ├── <span class="ex">utils</span> <span class="co"># utilities to ease testing</span> 112 ├── <span class="ex">utils</span> # utilities to ease testing
111 │ └── <span class="ex">ReferenceLinkDB.php</span> 113 │ └── <span class="ex">ReferenceLinkDB.php</span>
112 └── <span class="ex">UtilsTest.php</span> 114 └── <span class="ex">UtilsTest.php</span>
113 <span class="ex">COPYING</span> <span class="co"># Shaarli license</span> 115 <span class="ex">COPYING</span> # Shaarli license
114 <span class="ex">inc/</span> <span class="co"># static assets and 3rd party libraries</span> 116 <span class="ex">inc/</span> # static assets and 3rd party libraries
115 ├── <span class="ex">awesomplete.*</span> <span class="co"># tags autocompletion library</span> 117 ├── <span class="ex">awesomplete.*</span> # tags autocompletion library
116 ├── <span class="ex">blazy.*</span> <span class="co"># picture wall lazy image loading library</span> 118 ├── <span class="ex">blazy.*</span> # picture wall lazy image loading library
117 ├── <span class="ex">shaarli.css</span>, reset.css <span class="co"># Shaarli stylesheet.</span> 119 ├── <span class="ex">shaarli.css</span>, reset.css <span class="co"># Shaarli stylesheet.</span>
118 ├── <span class="ex">qr.*</span> <span class="co"># qr code generation library</span> 120 ├── <span class="ex">qr.*</span> # qr code generation library
119 └──<span class="ex">rain.tpl.class.php</span> <span class="co"># RainTPL templating library</span> 121 └──<span class="ex">rain.tpl.class.php</span> # RainTPL templating library
120 <span class="ex">tpl/</span> <span class="co"># RainTPL templates for Shaarli. They are used to build the pages.</span> 122 <span class="ex">tpl/</span> # RainTPL templates for Shaarli. They are used to build the pages.
121 <span class="ex">images/</span> <span class="co"># Images and icons used in Shaarli</span> 123 <span class="ex">images/</span> # Images and icons used in Shaarli
122 <span class="ex">data/</span> <span class="co"># data storage: bookmark database, configuration, logs, banlist…</span> 124 <span class="ex">data/</span> # data storage: bookmark database, configuration, logs, banlist…
123 ├── <span class="ex">config.php</span> <span class="co"># Shaarli configuration (login, password, timezone, title…)</span> 125 ├── <span class="ex">config.php</span> # Shaarli configuration (login, password, timezone, title…)
124 ├── <span class="ex">datastore.php</span> <span class="co"># Your link database (compressed).</span> 126 ├── <span class="ex">datastore.php</span> # Your link database (compressed)<span class="ex">.</span>
125 ├── <span class="ex">ipban.php</span> <span class="co"># IP address ban system data</span> 127 ├── <span class="ex">ipban.php</span> # IP address ban system data
126 ├── <span class="ex">lastupdatecheck.txt</span> <span class="co"># Update check timestamp file</span> 128 ├── <span class="ex">lastupdatecheck.txt</span> # Update check timestamp file
127 └──<span class="ex">log.txt</span> <span class="co"># login/IPban log.</span> 129 └──<span class="ex">log.txt</span> # login/IPban log.
128 <span class="ex">cache/</span> <span class="co"># thumbnails cache</span> 130 <span class="ex">cache/</span> # thumbnails cache
129 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span> 131 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span>
130 <span class="ex">tmp/</span> <span class="co"># Temporary directory for compiled RainTPL templates.</span> 132 <span class="ex">tmp/</span> # Temporary directory for compiled RainTPL templates.
131 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span></code></pre></div> 133 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span></code></pre></div>
132</body> 134</body>
133</html> 135</html>
diff --git a/doc/Docker.html b/doc/Docker.html
index e89c90fb..fd0dec4b 100644
--- a/doc/Docker.html
+++ b/doc/Docker.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -200,7 +202,7 @@ $ <span class="ex">docker</span> ps
200<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES 202<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES
201<span class="ex">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 15 seconds ago Up 4 seconds 0.0.0.0:8000-<span class="op">&gt;</span>80/tcp backstabbing_galileo</code></pre></div> 203<span class="ex">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 15 seconds ago Up 4 seconds 0.0.0.0:8000-<span class="op">&gt;</span>80/tcp backstabbing_galileo</code></pre></div>
202<h3 id="stop-and-destroy-a-container">Stop and destroy a container</h3> 204<h3 id="stop-and-destroy-a-container">Stop and destroy a container</h3>
203<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">docker</span> stop backstabbing_galileo <span class="co"># those docker guys are really rude to physicists!</span> 205<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">docker</span> stop backstabbing_galileo # those docker guys are really rude to physicists!
204<span class="ex">backstabbing_galileo</span> 206<span class="ex">backstabbing_galileo</span>
205 207
206<span class="co"># check the container is stopped</span> 208<span class="co"># check the container is stopped</span>
@@ -213,14 +215,15 @@ $ <span class="ex">docker</span> ps -a
213<span class="ex">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 5 minutes ago Exited (0) <span class="ex">48</span> seconds ago backstabbing_galileo 215<span class="ex">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 5 minutes ago Exited (0) <span class="ex">48</span> seconds ago backstabbing_galileo
214 216
215<span class="co"># destroy the container</span> 217<span class="co"># destroy the container</span>
216$ <span class="ex">docker</span> rm backstabbing_galileo <span class="co"># let&#39;s put an end to these barbarian practices</span> 218$ <span class="ex">docker</span> rm backstabbing_galileo # let<span class="st">&#39;s put an end to these barbarian practices</span>
217<span class="ex">backstabbing_galileo</span> 219<span class="st">backstabbing_galileo</span>
218 220
219$ <span class="ex">docker</span> ps -a 221<span class="st">$ docker ps -a</span>
220<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code></pre></div> 222<span class="st">CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</span></code></pre></div>
221<h2 id="resources">Resources</h2> 223<h2 id="resources">Resources</h2>
222<h3 id="docker-1">Docker</h3> 224<h3 id="docker-1">Docker</h3>
223<ul> 225<ul>
226<li><a href="https://www.katacoda.com/courses/docker/">Interactive Docker training portal</a> on <a href="https://www.katacoda.com/">Katakoda</a><a href=".html"></a></li>
224<li><a href="http://blog.thoward37.me/articles/where-are-docker-images-stored/">Where are Docker images stored?</a><a href=".html"></a></li> 227<li><a href="http://blog.thoward37.me/articles/where-are-docker-images-stored/">Where are Docker images stored?</a><a href=".html"></a></li>
225<li><a href="https://docs.docker.com/reference/builder/">Dockerfile reference</a><a href=".html"></a></li> 228<li><a href="https://docs.docker.com/reference/builder/">Dockerfile reference</a><a href=".html"></a></li>
226<li><a href="https://docs.docker.com/articles/dockerfile_best-practices/">Dockerfile best practices</a><a href=".html"></a></li> 229<li><a href="https://docs.docker.com/articles/dockerfile_best-practices/">Dockerfile best practices</a><a href=".html"></a></li>
diff --git a/doc/Docker.md b/doc/Docker.md
index 1faa7904..a7d2efb5 100644
--- a/doc/Docker.md
+++ b/doc/Docker.md
@@ -141,6 +141,7 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS
141 141
142## Resources 142## Resources
143### Docker 143### Docker
144- [Interactive Docker training portal](https://www.katacoda.com/courses/docker/) on [Katakoda](https://www.katacoda.com/)[](.html)
144- [Where are Docker images stored?](http://blog.thoward37.me/articles/where-are-docker-images-stored/)[](.html) 145- [Where are Docker images stored?](http://blog.thoward37.me/articles/where-are-docker-images-stored/)[](.html)
145- [Dockerfile reference](https://docs.docker.com/reference/builder/)[](.html) 146- [Dockerfile reference](https://docs.docker.com/reference/builder/)[](.html)
146- [Dockerfile best practices](https://docs.docker.com/articles/dockerfile_best-practices/)[](.html) 147- [Dockerfile best practices](https://docs.docker.com/articles/dockerfile_best-practices/)[](.html)
diff --git a/doc/Download-CSS-styles-from-an-OPML-list.html b/doc/Download-CSS-styles-from-an-OPML-list.html
index a4f68ac6..18cc5d9a 100644
--- a/doc/Download-CSS-styles-from-an-OPML-list.html
+++ b/doc/Download-CSS-styles-from-an-OPML-list.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -155,7 +157,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
155<span class="kw">function</span> copyUserStyleFrom<span class="ot">(</span><span class="kw">$url</span><span class="ot">,</span> <span class="kw">$name</span><span class="ot">,</span> <span class="kw">$knownStyles</span><span class="ot">)</span> { 157<span class="kw">function</span> copyUserStyleFrom<span class="ot">(</span><span class="kw">$url</span><span class="ot">,</span> <span class="kw">$name</span><span class="ot">,</span> <span class="kw">$knownStyles</span><span class="ot">)</span> {
156 <span class="kw">$userStyle</span> = <span class="kw">$url</span>.<span class="st">&quot;inc/user.css&quot;</span><span class="ot">;</span> 158 <span class="kw">$userStyle</span> = <span class="kw">$url</span>.<span class="st">&quot;inc/user.css&quot;</span><span class="ot">;</span>
157 <span class="kw">if</span><span class="ot">(</span><span class="fu">in_array</span><span class="ot">(</span><span class="kw">$url</span><span class="ot">,</span> <span class="kw">$knownStyles</span><span class="ot">))</span> { 159 <span class="kw">if</span><span class="ot">(</span><span class="fu">in_array</span><span class="ot">(</span><span class="kw">$url</span><span class="ot">,</span> <span class="kw">$knownStyles</span><span class="ot">))</span> {
158 <span class="co">// TODO add log message</span> 160 <span class="co">// </span><span class="al">TODO</span><span class="co"> add log message</span>
159 } <span class="kw">else</span> { 161 } <span class="kw">else</span> {
160 <span class="kw">$statusCode</span> = get_http_response_code<span class="ot">(</span><span class="kw">$userStyle</span><span class="ot">);</span> 162 <span class="kw">$statusCode</span> = get_http_response_code<span class="ot">(</span><span class="kw">$userStyle</span><span class="ot">);</span>
161 <span class="kw">if</span><span class="ot">(</span><span class="fu">intval</span><span class="ot">(</span><span class="kw">$statusCode</span><span class="ot">)</span>&lt;<span class="dv">300</span><span class="ot">)</span> { 163 <span class="kw">if</span><span class="ot">(</span><span class="fu">intval</span><span class="ot">(</span><span class="kw">$statusCode</span><span class="ot">)</span>&lt;<span class="dv">300</span><span class="ot">)</span> {
diff --git a/doc/Download-and-Installation.html b/doc/Download-and-Installation.html
index b9cac360..2c5b3be2 100644
--- a/doc/Download-and-Installation.html
+++ b/doc/Download-and-Installation.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -108,10 +110,10 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
108<h3 id="download-as-an-archive">Download as an archive</h3> 110<h3 id="download-as-an-archive">Download as an archive</h3>
109<p>Get the latest released version from the <a href="https://github.com/shaarli/Shaarli/releases">releases</a> page.<a href=".html"></a></p> 111<p>Get the latest released version from the <a href="https://github.com/shaarli/Shaarli/releases">releases</a> page.<a href=".html"></a></p>
110<p><strong>Download our <em>shaarli-full</em> archive</strong> to include dependencies.</p> 112<p><strong>Download our <em>shaarli-full</em> archive</strong> to include dependencies.</p>
111<p>The current latest released version is <code>v0.8.0</code></p> 113<p>The current latest released version is <code>v0.8.4</code></p>
112<p>Or in command lines:</p> 114<p>Or in command lines:</p>
113<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">wget</span> https://github.com/shaarli/Shaarli/releases/download/v0.8.0/shaarli-v0.8.0-full.zip 115<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">wget</span> https://github.com/shaarli/Shaarli/releases/download/v0.8.4/shaarli-v0.8.4-full.zip
114$ <span class="fu">unzip</span> shaarli-v0.8.0-full.zip 116$ <span class="fu">unzip</span> shaarli-v0.8.4-full.zip
115$ <span class="fu">mv</span> Shaarli /path/to/shaarli/</code></pre></div> 117$ <span class="fu">mv</span> Shaarli /path/to/shaarli/</code></pre></div>
116<table style="width:46%;"> 118<table style="width:46%;">
117<colgroup> 119<colgroup>
@@ -129,8 +131,8 @@ $ <span class="fu">mv</span> Shaarli /path/to/shaarli/</code></pre></div>
129</table> 131</table>
130<h3 id="using-git">Using git</h3> 132<h3 id="using-git">Using git</h3>
131<pre><code>mkdir -p /path/to/shaarli &amp;&amp; cd /path/to/shaarli/ 133<pre><code>mkdir -p /path/to/shaarli &amp;&amp; cd /path/to/shaarli/
132git clone -b v0.8.0 https://github.com/shaarli/Shaarli.git . 134git clone -b v0.8 https://github.com/shaarli/Shaarli.git .
133composer update --no-dev</code></pre> 135composer install --no-dev</code></pre>
134<hr /> 136<hr />
135<h2 id="stable-version">Stable version</h2> 137<h2 id="stable-version">Stable version</h2>
136<p>The stable version has been experienced by Shaarli users, and will receive security updates.</p> 138<p>The stable version has been experienced by Shaarli users, and will receive security updates.</p>
@@ -148,16 +150,16 @@ $ <span class="fu">mv</span> Shaarli-stable /path/to/shaarli/</code></pre></div>
148<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/ 150<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/
149<span class="co"># install/update third-party dependencies</span> 151<span class="co"># install/update third-party dependencies</span>
150$ <span class="bu">cd</span> /path/to/shaarli/ 152$ <span class="bu">cd</span> /path/to/shaarli/
151$ <span class="ex">composer</span> update --no-dev</code></pre></div> 153$ <span class="ex">composer</span> install --no-dev</code></pre></div>
152<hr /> 154<hr />
153<h2 id="development-version-mainline">Development version (mainline)</h2> 155<h2 id="development-version-mainline">Development version (mainline)</h2>
154<p><em>Use at your own risk!</em></p> 156<p><em>Use at your own risk!</em></p>
155<p>To get the latest changes from the <code>master</code> branch:</p> 157<p>To get the latest changes from the <code>master</code> branch:</p>
156<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># clone the repository </span> 158<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># clone the repository </span>
157$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git master /path/to/shaarli/ 159$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git -b master /path/to/shaarli/
158<span class="co"># install/update third-party dependencies</span> 160<span class="co"># install/update third-party dependencies</span>
159$ <span class="bu">cd</span> /path/to/shaarli 161$ <span class="bu">cd</span> /path/to/shaarli
160$ <span class="ex">composer</span> update --no-dev</code></pre></div> 162$ <span class="ex">composer</span> install --no-dev</code></pre></div>
161<hr /> 163<hr />
162<h2 id="finish-installation">Finish Installation</h2> 164<h2 id="finish-installation">Finish Installation</h2>
163<p>Once Shaarli is downloaded and files have been placed at the correct location, open it this location your favorite browser.</p> 165<p>Once Shaarli is downloaded and files have been placed at the correct location, open it this location your favorite browser.</p>
diff --git a/doc/Download-and-Installation.md b/doc/Download-and-Installation.md
index 32df8984..970144a5 100644
--- a/doc/Download-and-Installation.md
+++ b/doc/Download-and-Installation.md
@@ -13,13 +13,13 @@ Get the latest released version from the [releases](https://github.com/shaarli/S
13 13
14**Download our *shaarli-full* archive** to include dependencies. 14**Download our *shaarli-full* archive** to include dependencies.
15 15
16The current latest released version is `v0.8.0` 16The current latest released version is `v0.8.4`
17 17
18Or in command lines: 18Or in command lines:
19 19
20```bash 20```bash
21$ wget https://github.com/shaarli/Shaarli/releases/download/v0.8.0/shaarli-v0.8.0-full.zip 21$ wget https://github.com/shaarli/Shaarli/releases/download/v0.8.4/shaarli-v0.8.4-full.zip
22$ unzip shaarli-v0.8.0-full.zip 22$ unzip shaarli-v0.8.4-full.zip
23$ mv Shaarli /path/to/shaarli/ 23$ mv Shaarli /path/to/shaarli/
24``` 24```
25 25
@@ -30,8 +30,8 @@ $ mv Shaarli /path/to/shaarli/
30 30
31``` 31```
32mkdir -p /path/to/shaarli && cd /path/to/shaarli/ 32mkdir -p /path/to/shaarli && cd /path/to/shaarli/
33git clone -b v0.8.0 https://github.com/shaarli/Shaarli.git . 33git clone -b v0.8 https://github.com/shaarli/Shaarli.git .
34composer update --no-dev 34composer install --no-dev
35``` 35```
36 36
37-------------------------------------------------------- 37--------------------------------------------------------
@@ -66,7 +66,7 @@ $ mv Shaarli-stable /path/to/shaarli/
66$ git clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/ 66$ git clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/
67# install/update third-party dependencies 67# install/update third-party dependencies
68$ cd /path/to/shaarli/ 68$ cd /path/to/shaarli/
69$ composer update --no-dev 69$ composer install --no-dev
70``` 70```
71 71
72-------------------------------------------------------- 72--------------------------------------------------------
@@ -79,10 +79,10 @@ To get the latest changes from the `master` branch:
79 79
80```bash 80```bash
81# clone the repository 81# clone the repository
82$ git clone https://github.com/shaarli/Shaarli.git master /path/to/shaarli/ 82$ git clone https://github.com/shaarli/Shaarli.git -b master /path/to/shaarli/
83# install/update third-party dependencies 83# install/update third-party dependencies
84$ cd /path/to/shaarli 84$ cd /path/to/shaarli
85$ composer update --no-dev 85$ composer install --no-dev
86``` 86```
87 87
88-------------------------------------------------------- 88--------------------------------------------------------
diff --git a/doc/Example-patch---add-new-via-field-for-links.html b/doc/Example-patch---add-new-via-field-for-links.html
index 133224e2..49036a74 100644
--- a/doc/Example-patch---add-new-via-field-for-links.html
+++ b/doc/Example-patch---add-new-via-field-for-links.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/FAQ.html b/doc/FAQ.html
index 61f3475f..25584f22 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Firefox-share.html b/doc/Firefox-share.html
index d7dcc282..707119a6 100644
--- a/doc/Firefox-share.html
+++ b/doc/Firefox-share.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/GnuPG-signature.html b/doc/GnuPG-signature.html
index 50b904d5..182a71d4 100644
--- a/doc/GnuPG-signature.html
+++ b/doc/GnuPG-signature.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Home.html b/doc/Home.html
index 970f547e..7f51b93b 100644
--- a/doc/Home.html
+++ b/doc/Home.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Plugin-System.html b/doc/Plugin-System.html
index 655536c6..123bf106 100644
--- a/doc/Plugin-System.html
+++ b/doc/Plugin-System.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -100,9 +102,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
100</ul> 102</ul>
101</div> 103</div>
102<h1 id="plugin-system">Plugin System</h1> 104<h1 id="plugin-system">Plugin System</h1>
103<blockquote>
104<p>Note: Plugin current status - in development (not merged into master).</p>
105</blockquote>
106<p><a href="#developer-api"><strong>I am a developer.</strong> Developer API.</a><a href=".html"></a></p> 105<p><a href="#developer-api"><strong>I am a developer.</strong> Developer API.</a><a href=".html"></a></p>
107<p><a href="#guide-for-template-designer"><strong>I am a template designer.</strong> Guide for template designer.</a><a href=".html"></a></p> 106<p><a href="#guide-for-template-designer"><strong>I am a template designer.</strong> Guide for template designer.</a><a href=".html"></a></p>
108<h2 id="developer-api">Developer API</h2> 107<h2 id="developer-api">Developer API</h2>
@@ -121,12 +120,21 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
121| plugins/ 120| plugins/
122|---| demo_plugin/ 121|---| demo_plugin/
123| |---| demo_plugin.php</code></pre> 122| |---| demo_plugin.php</code></pre>
123<h3 id="plugin-initialization">Plugin initialization</h3>
124<p>At the beginning of Shaarli execution, all enabled plugins are loaded. At this point, the plugin system looks for an <code>init()</code> function to execute and run it if it exists. This function must be named this way, and takes the <code>ConfigManager</code> as parameter.</p>
125<pre><code>&lt;plugin_name&gt;_init($conf)</code></pre>
126<p>This function can be used to create initial data, load default settings, etc. But also to set <em>plugin errors</em>. If the initialization function returns an array of strings, they will be understand as errors, and displayed in the header to logged in users.</p>
124<h3 id="understanding-hooks">Understanding hooks</h3> 127<h3 id="understanding-hooks">Understanding hooks</h3>
125<p>A plugin is a set of functions. Each function will be triggered by the plugin system at certain point in Shaarli execution.</p> 128<p>A plugin is a set of functions. Each function will be triggered by the plugin system at certain point in Shaarli execution.</p>
126<p>These functions need to be named with this pattern:</p> 129<p>These functions need to be named with this pattern:</p>
127<pre><code>hook_&lt;plugin_name&gt;_&lt;hook_name&gt;</code></pre> 130<pre><code>hook_&lt;plugin_name&gt;_&lt;hook_name&gt;($data, $conf)</code></pre>
131<p>Parameters:</p>
132<ul>
133<li>data: see <a href="https://github.com/shaarli/Shaarli/wiki/Plugin-System#plugins-data">$data section</a><a href=".html"></a></li>
134<li>conf: the <code>ConfigManager</code> instance.</li>
135</ul>
128<p>For exemple, if my plugin want to add data to the header, this function is needed:</p> 136<p>For exemple, if my plugin want to add data to the header, this function is needed:</p>
129<pre><code>hook_demo_plugin_render_header()</code></pre> 137<pre><code>hook_demo_plugin_render_header</code></pre>
130<p>If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header.</p> 138<p>If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header.</p>
131<h3 id="plugins-data">Plugin's data</h3> 139<h3 id="plugins-data">Plugin's data</h3>
132<h4 id="parameters">Parameters</h4> 140<h4 id="parameters">Parameters</h4>
@@ -159,6 +167,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
159<ul> 167<ul>
160<li><code>description</code>: plugin description</li> 168<li><code>description</code>: plugin description</li>
161<li><code>parameters</code>: user parameter names, separated by a <code>;</code>.</li> 169<li><code>parameters</code>: user parameter names, separated by a <code>;</code>.</li>
170<li><code>parameter.&lt;PARAMETER_NAME&gt;</code>: add a text description the specified parameter.</li>
162</ul> 171</ul>
163<blockquote> 172<blockquote>
164<p>Note: In PHP, <code>parse_ini_file()</code> seems to want strings to be between by quotes <code>&quot;</code> in the ini file.</p> 173<p>Note: In PHP, <code>parse_ini_file()</code> seems to want strings to be between by quotes <code>&quot;</code> in the ini file.</p>
@@ -209,16 +218,28 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
209</tr> 218</tr>
210<tr class="even"> 219<tr class="even">
211<td><a href="#render_tagcloud">render_tagcloud</a></td> 220<td><a href="#render_tagcloud">render_tagcloud</a></td>
212<td style="text-align: center;">Allow to add content at the top and bottom of the page.</td> 221<td style="text-align: center;">Allow to add content at the top and bottom of the page, and after all tags.</td>
213</tr> 222</tr>
214<tr class="odd"> 223<tr class="odd">
224<td><a href="#render_taglist">render_taglist</a></td>
225<td style="text-align: center;">Allow to add content at the top and bottom of the page, and after all tags.</td>
226</tr>
227<tr class="even">
215<td><a href="#render_daily">render_daily</a></td> 228<td><a href="#render_daily">render_daily</a></td>
216<td style="text-align: center;">Allow to add content at the top and bottom of the page, the bottom of each link and to alter data.</td> 229<td style="text-align: center;">Allow to add content at the top and bottom of the page, the bottom of each link and to alter data.</td>
217</tr> 230</tr>
231<tr class="odd">
232<td><a href="#render_feed">render_feed</a></td>
233<td style="text-align: center;">Allow to do add tags in RSS and ATOM feeds.</td>
234</tr>
218<tr class="even"> 235<tr class="even">
219<td><a href="#savelink">savelink</a></td> 236<td><a href="#save_link">save_link</a></td>
220<td style="text-align: center;">Allow to alter the link being saved in the datastore.</td> 237<td style="text-align: center;">Allow to alter the link being saved in the datastore.</td>
221</tr> 238</tr>
239<tr class="odd">
240<td><a href="#delete_link">delete_link</a></td>
241<td style="text-align: center;">Allow to do an action before a link is deleted from the datastore.</td>
242</tr>
222</tbody> 243</tbody>
223</table> 244</table>
224<h4 id="render_header">render_header</h4> 245<h4 id="render_header">render_header</h4>
@@ -376,17 +397,41 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
376<li><p><code>plugin_start_zone</code>: before displaying the template content.</p></li> 397<li><p><code>plugin_start_zone</code>: before displaying the template content.</p></li>
377<li><p><code>plugin_end_zone</code>: after displaying the template content.</p></li> 398<li><p><code>plugin_end_zone</code>: after displaying the template content.</p></li>
378</ul> 399</ul>
400<p>For each tag, the following placeholder can be used:</p>
401<ul>
402<li><code>tag_plugin</code>: after each tag</li>
403</ul>
379<p><img src="http://i.imgur.com/vHmyT3a.png" alt="plugin_start_end_zone_example" /><a href=".html"></a></p> 404<p><img src="http://i.imgur.com/vHmyT3a.png" alt="plugin_start_end_zone_example" /><a href=".html"></a></p>
405<h4 id="render_taglist">render_taglist</h4>
406<p>Triggered when taglist is displayed.</p>
407<p>Allow to add content at the top and bottom of the page.</p>
408<h5 id="data-8">Data</h5>
409<p><code>$data</code> is an array containing:</p>
410<ul>
411<li><code>_LOGGEDIN_</code>: true if user is logged in, false otherwise.</li>
412<li>All templates data.</li>
413</ul>
414<h5 id="template-placeholders-8">Template placeholders</h5>
415<p>Items can be displayed in templates by adding an entry in <code>$data['&lt;placeholder&gt;']</code> array.<a href=".html"></a></p>
416<p>List of placeholders:</p>
417<ul>
418<li><p><code>plugin_start_zone</code>: before displaying the template content.</p></li>
419<li><p><code>plugin_end_zone</code>: after displaying the template content.</p></li>
420</ul>
421<p>For each tag, the following placeholder can be used:</p>
422<ul>
423<li><code>tag_plugin</code>: after each tag</li>
424</ul>
380<h4 id="render_daily">render_daily</h4> 425<h4 id="render_daily">render_daily</h4>
381<p>Triggered when tagcloud is displayed.</p> 426<p>Triggered when tagcloud is displayed.</p>
382<p>Allow to add content at the top and bottom of the page, the bottom of each link and to alter data.</p> 427<p>Allow to add content at the top and bottom of the page, the bottom of each link and to alter data.</p>
383<h5 id="data-8">Data</h5> 428<h5 id="data-9">Data</h5>
384<p><code>$data</code> is an array containing:</p> 429<p><code>$data</code> is an array containing:</p>
385<ul> 430<ul>
386<li><code>_LOGGEDIN_</code>: true if user is logged in, false otherwise.</li> 431<li><code>_LOGGEDIN_</code>: true if user is logged in, false otherwise.</li>
387<li>All templates data, including links.</li> 432<li>All templates data, including links.</li>
388</ul> 433</ul>
389<h5 id="template-placeholders-8">Template placeholders</h5> 434<h5 id="template-placeholders-9">Template placeholders</h5>
390<p>Items can be displayed in templates by adding an entry in <code>$data['&lt;placeholder&gt;']</code> array.<a href=".html"></a></p> 435<p>Items can be displayed in templates by adding an entry in <code>$data['&lt;placeholder&gt;']</code> array.<a href=".html"></a></p>
391<p>List of placeholders:</p> 436<p>List of placeholders:</p>
392<ul> 437<ul>
@@ -397,18 +442,57 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
397<li><p><code>plugin_start_zone</code>: before displaying the template content.</p></li> 442<li><p><code>plugin_start_zone</code>: before displaying the template content.</p></li>
398<li><p><code>plugin_end_zone</code>: after displaying the template content.</p></li> 443<li><p><code>plugin_end_zone</code>: after displaying the template content.</p></li>
399</ul> 444</ul>
400<h4 id="savelink">savelink</h4> 445<h4 id="render_feed">render_feed</h4>
446<p>Triggered when the ATOM or RSS feed is displayed.</p>
447<p>Allow to add tags in the feed, either in the header or for each items. Items (links) can also be altered before being rendered.</p>
448<h5 id="data-10">Data</h5>
449<p><code>$data</code> is an array containing:</p>
450<ul>
451<li><code>_LOGGEDIN_</code>: true if user is logged in, false otherwise.</li>
452<li><code>_PAGE_</code>: containing either <code>rss</code> or <code>atom</code>.</li>
453<li>All templates data, including links.</li>
454</ul>
455<h5 id="template-placeholders-10">Template placeholders</h5>
456<p>Tags can be added in feeds by adding an entry in <code>$data['&lt;placeholder&gt;']</code> array.<a href=".html"></a></p>
457<p>List of placeholders:</p>
458<ul>
459<li><code>feed_plugins_header</code>: used as a header tag in the feed.</li>
460</ul>
461<p>For each links:</p>
462<ul>
463<li><code>feed_plugins</code>: additional tag for every link entry.</li>
464</ul>
465<h4 id="save_link">save_link</h4>
401<p>Triggered when a link is save (new link or edit).</p> 466<p>Triggered when a link is save (new link or edit).</p>
402<p>Allow to alter the link being saved in the datastore.</p> 467<p>Allow to alter the link being saved in the datastore.</p>
403<h5 id="data-9">Data</h5> 468<h5 id="data-11">Data</h5>
404<p><code>$data</code> is an array containing the link being saved:</p> 469<p><code>$data</code> is an array containing the link being saved:</p>
405<ul> 470<ul>
471<li>id</li>
406<li>title</li> 472<li>title</li>
407<li>url</li> 473<li>url</li>
474<li>shorturl</li>
408<li>description</li> 475<li>description</li>
409<li>linkdate</li>
410<li>private</li> 476<li>private</li>
411<li>tags</li> 477<li>tags</li>
478<li>created</li>
479<li>updated</li>
480</ul>
481<h4 id="delete_link">delete_link</h4>
482<p>Triggered when a link is deleted.</p>
483<p>Allow to execute any action before the link is actually removed from the datastore</p>
484<h5 id="data-12">Data</h5>
485<p><code>$data</code> is an array containing the link being saved:</p>
486<ul>
487<li>id</li>
488<li>title</li>
489<li>url</li>
490<li>shorturl</li>
491<li>description</li>
492<li>private</li>
493<li>tags</li>
494<li>created</li>
495<li>updated</li>
412</ul> 496</ul>
413<h2 id="guide-for-template-designer">Guide for template designer</h2> 497<h2 id="guide-for-template-designer">Guide for template designer</h2>
414<h3 id="plugin-administration">Plugin administration</h3> 498<h3 id="plugin-administration">Plugin administration</h3>
@@ -537,5 +621,14 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
537 {$value} 621 {$value}
538 {/loop} 622 {/loop}
539<span class="kw">&lt;/div&gt;</span></code></pre></div> 623<span class="kw">&lt;/div&gt;</span></code></pre></div>
624<p><strong>feed.atom.xml</strong> and <strong>feed.rss.xml</strong>:</p>
625<p>In headers tags section:</p>
626<div class="sourceCode"><pre class="sourceCode xml"><code class="sourceCode xml">{loop=&quot;$feed_plugins_header&quot;}
627 {$value}
628{/loop}</code></pre></div>
629<p>After each entry:</p>
630<div class="sourceCode"><pre class="sourceCode xml"><code class="sourceCode xml">{loop=&quot;$value.feed_plugins&quot;}
631 {$value}
632{/loop}</code></pre></div>
540</body> 633</body>
541</html> 634</html>
diff --git a/doc/Plugin-System.md b/doc/Plugin-System.md
index 623627dd..addd792d 100644
--- a/doc/Plugin-System.md
+++ b/doc/Plugin-System.md
@@ -1,6 +1,4 @@
1#Plugin System 1#Plugin System
2> Note: Plugin current status - in development (not merged into master).
3
4[**I am a developer.** Developer API.](#developer-api)[](.html) 2[**I am a developer.** Developer API.](#developer-api)[](.html)
5 3
6[**I am a template designer.** Guide for template designer.](#guide-for-template-designer)[](.html) 4[**I am a template designer.** Guide for template designer.](#guide-for-template-designer)[](.html)
@@ -30,6 +28,14 @@ You should have the following tree view:
30| |---| demo_plugin.php 28| |---| demo_plugin.php
31``` 29```
32 30
31### Plugin initialization
32
33At the beginning of Shaarli execution, all enabled plugins are loaded. At this point, the plugin system looks for an `init()` function to execute and run it if it exists. This function must be named this way, and takes the `ConfigManager` as parameter.
34
35 <plugin_name>_init($conf)
36
37This function can be used to create initial data, load default settings, etc. But also to set *plugin errors*. If the initialization function returns an array of strings, they will be understand as errors, and displayed in the header to logged in users.
38
33### Understanding hooks 39### Understanding hooks
34 40
35A plugin is a set of functions. Each function will be triggered by the plugin system at certain point in Shaarli execution. 41A plugin is a set of functions. Each function will be triggered by the plugin system at certain point in Shaarli execution.
@@ -37,12 +43,17 @@ A plugin is a set of functions. Each function will be triggered by the plugin sy
37These functions need to be named with this pattern: 43These functions need to be named with this pattern:
38 44
39``` 45```
40hook_<plugin_name>_<hook_name> 46hook_<plugin_name>_<hook_name>($data, $conf)
41``` 47```
42 48
49Parameters:
50
51 - data: see [$data section](https://github.com/shaarli/Shaarli/wiki/Plugin-System#plugins-data)[](.html)
52 - conf: the `ConfigManager` instance.
53
43For exemple, if my plugin want to add data to the header, this function is needed: 54For exemple, if my plugin want to add data to the header, this function is needed:
44 55
45 hook_demo_plugin_render_header() 56 hook_demo_plugin_render_header
46 57
47If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header. 58If this function is declared, and the plugin enabled, it will be called every time Shaarli is rendering the header.
48 59
@@ -98,6 +109,7 @@ Each file contain two keys:
98 109
99 * `description`: plugin description 110 * `description`: plugin description
100 * `parameters`: user parameter names, separated by a `;`. 111 * `parameters`: user parameter names, separated by a `;`.
112 * `parameter.<PARAMETER_NAME>`: add a text description the specified parameter.
101 113
102> Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file. 114> Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file.
103 115
@@ -118,9 +130,13 @@ If it's still not working, please [open an issue](https://github.com/shaarli/Sha
118| [render_editlink](#render_editlink) | Allow to add fields in the form, or display elements. |[](.html) 130| [render_editlink](#render_editlink) | Allow to add fields in the form, or display elements. |[](.html)
119| [render_tools](#render_tools) | Allow to add content at the end of the page. |[](.html) 131| [render_tools](#render_tools) | Allow to add content at the end of the page. |[](.html)
120| [render_picwall](#render_picwall) | Allow to add content at the top and bottom of the page. |[](.html) 132| [render_picwall](#render_picwall) | Allow to add content at the top and bottom of the page. |[](.html)
121| [render_tagcloud](#render_tagcloud) | Allow to add content at the top and bottom of the page. |[](.html) 133| [render_tagcloud](#render_tagcloud) | Allow to add content at the top and bottom of the page, and after all tags. |[](.html)
134| [render_taglist](#render_taglist) | Allow to add content at the top and bottom of the page, and after all tags. |[](.html)
122| [render_daily](#render_daily) | Allow to add content at the top and bottom of the page, the bottom of each link and to alter data. |[](.html) 135| [render_daily](#render_daily) | Allow to add content at the top and bottom of the page, the bottom of each link and to alter data. |[](.html)
123| [savelink](#savelink) | Allow to alter the link being saved in the datastore. |[](.html) 136| [render_feed](#render_feed) | Allow to do add tags in RSS and ATOM feeds. |[](.html)
137| [save_link](#save_link) | Allow to alter the link being saved in the datastore. |[](.html)
138| [delete_link](#delete_link) | Allow to do an action before a link is deleted from the datastore. |[](.html)
139
124 140
125 141
126#### render_header 142#### render_header
@@ -330,8 +346,40 @@ List of placeholders:
330 346
331 * `plugin_end_zone`: after displaying the template content. 347 * `plugin_end_zone`: after displaying the template content.
332 348
349For each tag, the following placeholder can be used:
350
351 * `tag_plugin`: after each tag
352
333![plugin_start_end_zone_example](http://i.imgur.com/vHmyT3a.png)[](.html) 353![plugin_start_end_zone_example](http://i.imgur.com/vHmyT3a.png)[](.html)
334 354
355
356#### render_taglist
357
358Triggered when taglist is displayed.
359
360Allow to add content at the top and bottom of the page.
361
362##### Data
363
364`$data` is an array containing:
365
366 * `_LOGGEDIN_`: true if user is logged in, false otherwise.
367 * All templates data.
368
369##### Template placeholders
370
371Items can be displayed in templates by adding an entry in `$data['<placeholder>']` array.[](.html)
372
373List of placeholders:
374
375 * `plugin_start_zone`: before displaying the template content.
376
377 * `plugin_end_zone`: after displaying the template content.
378
379For each tag, the following placeholder can be used:
380
381 * `tag_plugin`: after each tag
382
335#### render_daily 383#### render_daily
336 384
337Triggered when tagcloud is displayed. 385Triggered when tagcloud is displayed.
@@ -359,7 +407,33 @@ List of placeholders:
359 407
360 * `plugin_end_zone`: after displaying the template content. 408 * `plugin_end_zone`: after displaying the template content.
361 409
362#### savelink 410#### render_feed
411
412Triggered when the ATOM or RSS feed is displayed.
413
414Allow to add tags in the feed, either in the header or for each items. Items (links) can also be altered before being rendered.
415
416##### Data
417
418`$data` is an array containing:
419
420 * `_LOGGEDIN_`: true if user is logged in, false otherwise.
421 * `_PAGE_`: containing either `rss` or `atom`.
422 * All templates data, including links.
423
424##### Template placeholders
425
426Tags can be added in feeds by adding an entry in `$data['<placeholder>']` array.[](.html)
427
428List of placeholders:
429
430 * `feed_plugins_header`: used as a header tag in the feed.
431
432For each links:
433
434 * `feed_plugins`: additional tag for every link entry.
435
436#### save_link
363 437
364Triggered when a link is save (new link or edit). 438Triggered when a link is save (new link or edit).
365 439
@@ -369,12 +443,36 @@ Allow to alter the link being saved in the datastore.
369 443
370`$data` is an array containing the link being saved: 444`$data` is an array containing the link being saved:
371 445
446 * id
447 * title
448 * url
449 * shorturl
450 * description
451 * private
452 * tags
453 * created
454 * updated
455
456
457#### delete_link
458
459Triggered when a link is deleted.
460
461Allow to execute any action before the link is actually removed from the datastore
462
463##### Data
464
465`$data` is an array containing the link being saved:
466
467 * id
372 * title 468 * title
373 * url 469 * url
470 * shorturl
374 * description 471 * description
375 * linkdate
376 * private 472 * private
377 * tags 473 * tags
474 * created
475 * updated
378 476
379## Guide for template designer 477## Guide for template designer
380 478
@@ -595,3 +693,19 @@ Bottom:
595 {/loop} 693 {/loop}
596</div> 694</div>
597``` 695```
696
697**feed.atom.xml** and **feed.rss.xml**:
698
699In headers tags section:
700```xml
701{loop="$feed_plugins_header"}
702 {$value}
703{/loop}
704```
705
706After each entry:
707```xml
708{loop="$value.feed_plugins"}
709 {$value}
710{/loop}
711```
diff --git a/doc/Plugins.html b/doc/Plugins.html
index 435a836f..08ce8a86 100644
--- a/doc/Plugins.html
+++ b/doc/Plugins.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -145,7 +147,6 @@ Example:</p>
145<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md"><code>markdown</code></a>: Render shaare description with Markdown syntax.<a href=".html"></a></li> 147<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md"><code>markdown</code></a>: Render shaare description with Markdown syntax.<a href=".html"></a></li>
146<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md"><code>playvideos</code></a>: Add a button in the toolbar allowing to watch all videos.<a href=".html"></a></li> 148<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md"><code>playvideos</code></a>: Add a button in the toolbar allowing to watch all videos.<a href=".html"></a></li>
147<li><code>qrcode</code>: For each link, add a QRCode icon.</li> 149<li><code>qrcode</code>: For each link, add a QRCode icon.</li>
148<li><code>readityourself</code>: For each link, add a ReadItYourself icon to save the shaared URL</li>
149<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md"><code>wallabag</code></a>: For each link, add a Wallabag icon to save it in your instance.<a href=".html"></a></li> 150<li><a href="https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md"><code>wallabag</code></a>: For each link, add a Wallabag icon to save it in your instance.<a href=".html"></a></li>
150</ul> 151</ul>
151<h4 id="third-party-plugins">Third party plugins</h4> 152<h4 id="third-party-plugins">Third party plugins</h4>
diff --git a/doc/Plugins.md b/doc/Plugins.md
index 81167fcf..e3192a60 100644
--- a/doc/Plugins.md
+++ b/doc/Plugins.md
@@ -67,7 +67,6 @@ Usage of each plugin is documented in it's README file:
67 * [`markdown`](https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md): Render shaare description with Markdown syntax.[](.html) 67 * [`markdown`](https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md): Render shaare description with Markdown syntax.[](.html)
68 * [`playvideos`](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md): Add a button in the toolbar allowing to watch all videos.[](.html) 68 * [`playvideos`](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md): Add a button in the toolbar allowing to watch all videos.[](.html)
69 * `qrcode`: For each link, add a QRCode icon. 69 * `qrcode`: For each link, add a QRCode icon.
70 * `readityourself`: For each link, add a ReadItYourself icon to save the shaared URL
71 * [`wallabag`](https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md): For each link, add a Wallabag icon to save it in your instance.[](.html) 70 * [`wallabag`](https://github.com/shaarli/Shaarli/blob/master/plugins/wallabag/README.md): For each link, add a Wallabag icon to save it in your instance.[](.html)
72 71
73 72
diff --git a/doc/REST-API.html b/doc/REST-API.html
new file mode 100644
index 00000000..d14c98c9
--- /dev/null
+++ b/doc/REST-API.html
@@ -0,0 +1,169 @@
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>Shaarli – REST API</title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <style type="text/css">
10div.sourceCode { overflow-x: auto; }
11table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
12 margin: 0; padding: 0; vertical-align: baseline; border: none; }
13table.sourceCode { width: 100%; line-height: 100%; }
14td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
15td.sourceCode { padding-left: 5px; }
16code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
17code > span.dt { color: #902000; } /* DataType */
18code > span.dv { color: #40a070; } /* DecVal */
19code > span.bn { color: #40a070; } /* BaseN */
20code > span.fl { color: #40a070; } /* Float */
21code > span.ch { color: #4070a0; } /* Char */
22code > span.st { color: #4070a0; } /* String */
23code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
24code > span.ot { color: #007020; } /* Other */
25code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
26code > span.fu { color: #06287e; } /* Function */
27code > span.er { color: #ff0000; font-weight: bold; } /* Error */
28code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
29code > span.cn { color: #880000; } /* Constant */
30code > span.sc { color: #4070a0; } /* SpecialChar */
31code > span.vs { color: #4070a0; } /* VerbatimString */
32code > span.ss { color: #bb6688; } /* SpecialString */
33code > span.im { } /* Import */
34code > span.va { color: #19177c; } /* Variable */
35code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
36code > span.op { color: #666666; } /* Operator */
37code > span.bu { } /* BuiltIn */
38code > span.ex { } /* Extension */
39code > span.pp { color: #bc7a00; } /* Preprocessor */
40code > span.at { color: #7d9029; } /* Attribute */
41code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
42code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
43code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
44code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
45 </style>
46 <link rel="stylesheet" href="github-markdown.css">
47 <!--[if lt IE 9]>
48 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
49 <![endif]-->
50</head>
51<body>
52<div id="local-sidebar">
53<ul>
54<li><a href="Home.html">Home</a></li>
55<li>Setup
56<ul>
57<li><a href="Download-and-Installation.html">Download and Installation</a></li>
58<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
59<li><a href="Server-requirements.html">Server requirements</a></li>
60<li><a href="Server-configuration.html">Server configuration</a></li>
61<li><a href="Server-security.html">Server security</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li>
65<li><a href="Docker.html">Docker</a></li>
66<li><a href="Usage.html">Usage</a>
67<ul>
68<li><a href="Sharing-button.html">Sharing button</a> (bookmarklet)</li>
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
73</ul></li>
74<li>How To
75<ul>
76<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
77<li><a href="Copy-an-existing-installation-over-SSH-and-serve-it-locally.html">Copy an existing installation over SSH and serve it locally</a></li>
78<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
79<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
80<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
81</ul></li>
82<li><a href="Troubleshooting.html">Troubleshooting</a></li>
83<li><a href="Development.html">Development</a>
84<ul>
85<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
86<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
87<li><a href="Directory-structure.html">Directory structure</a></li>
88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
89<li><a href="Plugin-System.html">Plugin System</a></li>
90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
92<li><a href="Security.html">Security</a></li>
93<li><a href="Static-analysis.html">Static analysis</a></li>
94<li><a href="Theming.html">Theming</a></li>
95<li><a href="Unit-tests.html">Unit tests</a></li>
96</ul></li>
97<li>About
98<ul>
99<li><a href="FAQ.html">FAQ</a></li>
100<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
101</ul></li>
102</ul>
103</div>
104<h1 id="rest-api">REST API</h1>
105<h2 id="usage">Usage</h2>
106<p>See the <a href="http://shaarli.github.io/api-documentation/">REST API documentation</a>.<a href=".html"></a></p>
107<h2 id="authentication">Authentication</h2>
108<p>All requests to Shaarli's API must include a JWT token to verify their authenticity.</p>
109<p>This token has to be included as an HTTP header called <code>Authentication: Bearer &lt;jwt token&gt;</code>.</p>
110<p>JWT resources :</p>
111<ul>
112<li><a href="https://jwt.io">jwt.io</a> (including a list of client per language).<a href=".html"></a></li>
113<li>RFC : <a href="https://tools.ietf.org/html/rfc7519" class="uri">https://tools.ietf.org/html/rfc7519</a></li>
114<li><a href="https://float-middle.com/json-web-tokens-jwt-vs-sessions/" class="uri">https://float-middle.com/json-web-tokens-jwt-vs-sessions/</a></li>
115<li>HackerNews thread: <a href="https://news.ycombinator.com/item?id=11929267" class="uri">https://news.ycombinator.com/item?id=11929267</a></li>
116</ul>
117<h3 id="shaarli-jwt-token">Shaarli JWT Token</h3>
118<p>JWT tokens are composed by three parts, separated by a dot <code>.</code> and encoded in base64:</p>
119<pre><code>[header].[payload].[signature][](.html)</code></pre>
120<h4 id="header">Header</h4>
121<p>Shaarli only allow one hash algorithm, so the header will always be the same:</p>
122<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
123 <span class="dt">&quot;typ&quot;</span><span class="fu">:</span> <span class="st">&quot;JWT&quot;</span><span class="fu">,</span>
124 <span class="dt">&quot;alg&quot;</span><span class="fu">:</span> <span class="st">&quot;HS512&quot;</span>
125<span class="fu">}</span></code></pre></div>
126<p>Encoded in base64, it gives:</p>
127<pre><code>ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ==</code></pre>
128<h4 id="payload">Payload</h4>
129<p><strong>Validity duration</strong></p>
130<p>To avoid infinite token validity, JWT tokens must include their creation date in UNIX timestamp format (timezone independant - UTC) under the key <code>iat</code> (issued at). This token will be accepted during 9 minutes.</p>
131<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
132 <span class="dt">&quot;iat&quot;</span><span class="fu">:</span> <span class="dv">1468663519</span>
133<span class="fu">}</span></code></pre></div>
134<p>See <a href="https://tools.ietf.org/html/rfc7519#section-4.1.6">RFC reference</a>.<a href=".html"></a></p>
135<h4 id="signature">Signature</h4>
136<p>The signature authenticate the token validity. It contains the base64 of the header and the body, separated by a dot <code>.</code>, hashed in SHA512 with the API secret available in Shaarli administration page.</p>
137<p>Signature example with PHP:</p>
138<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="kw">$content</span> = <span class="fu">base64_encode</span><span class="ot">(</span><span class="kw">$header</span><span class="ot">)</span> . <span class="st">&#39;.&#39;</span> . <span class="fu">base64_encode</span><span class="ot">(</span><span class="kw">$payload</span><span class="ot">);</span>
139<span class="kw">$signature</span> = <span class="fu">hash_hmac</span><span class="ot">(</span><span class="st">&#39;sha512&#39;</span><span class="ot">,</span> <span class="kw">$content</span><span class="ot">,</span> <span class="kw">$secret</span><span class="ot">);</span></code></pre></div>
140<h3 id="complete-example">Complete example</h3>
141<h4 id="php">PHP</h4>
142<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="kw">function</span> generateToken<span class="ot">(</span><span class="kw">$secret</span><span class="ot">)</span> {
143 <span class="kw">$header</span> = <span class="fu">base64_encode</span><span class="ot">(</span><span class="st">&#39;{</span>
144<span class="st"> &quot;typ&quot;: &quot;JWT&quot;,</span>
145<span class="st"> &quot;alg&quot;: &quot;HS512&quot;</span>
146<span class="st"> }&#39;</span><span class="ot">);</span>
147 <span class="kw">$payload</span> = <span class="fu">base64_encode</span><span class="ot">(</span><span class="st">&#39;{</span>
148<span class="st"> &quot;iat&quot;: &#39;</span>. <span class="fu">time</span><span class="ot">()</span> .<span class="st">&#39;</span>
149<span class="st"> }&#39;</span><span class="ot">);</span>
150 <span class="kw">$signature</span> = <span class="fu">hash_hmac</span><span class="ot">(</span><span class="st">&#39;sha512&#39;</span><span class="ot">,</span> <span class="kw">$header</span> .<span class="st">&#39;.&#39;</span>. <span class="kw">$payload</span> <span class="ot">,</span> <span class="kw">$secret</span><span class="ot">);</span>
151 <span class="kw">return</span> <span class="kw">$header</span> .<span class="st">&#39;.&#39;</span>. <span class="kw">$payload</span> .<span class="st">&#39;.&#39;</span>. <span class="kw">$signature</span><span class="ot">;</span>
152}
153
154<span class="kw">$secret</span> = <span class="st">&#39;mysecret&#39;</span><span class="ot">;</span>
155<span class="kw">$token</span> = generateToken<span class="ot">(</span><span class="kw">$secret</span><span class="ot">);</span>
156<span class="fu">echo</span> <span class="kw">$token</span><span class="ot">;</span></code></pre></div>
157<blockquote>
158<p><code>ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ==.ewogICAgICAgICJpYXQiOiAxNDY4NjY3MDQ3CiAgICB9.1d2c54fa947daf594fdbf7591796195652c8bc63bffad7f6a6db2a41c313f495a542cbfb595acade79e83f3810d709b4251d7b940bbc10b531a6e6134af63a68</code></p>
159</blockquote>
160<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="kw">$options</span> = <span class="ot">[[](</span>.html<span class="ot">)</span>
161 <span class="st">&#39;http&#39;</span> =&gt; <span class="ot">[[](</span>.html<span class="ot">)</span>
162 <span class="st">&#39;method&#39;</span> =&gt; <span class="st">&#39;GET&#39;</span><span class="ot">,</span>
163 <span class="st">&#39;jwt&#39;</span> =&gt; <span class="kw">$token</span><span class="ot">,</span>
164 <span class="ot">],</span>
165<span class="ot">];</span>
166<span class="kw">$context</span> = <span class="fu">stream_context_create</span><span class="ot">(</span><span class="kw">$options</span><span class="ot">);</span>
167<span class="fu">file_get_contents</span><span class="ot">(</span><span class="kw">$apiEndpoint</span><span class="ot">,</span> <span class="kw">false</span><span class="ot">,</span> <span class="kw">$context</span><span class="ot">);</span></code></pre></div>
168</body>
169</html>
diff --git a/doc/REST-API.md b/doc/REST-API.md
new file mode 100644
index 00000000..d7909978
--- /dev/null
+++ b/doc/REST-API.md
@@ -0,0 +1,105 @@
1#REST API
2## Usage
3
4See the [REST API documentation](http://shaarli.github.io/api-documentation/).[](.html)
5
6## Authentication
7
8All requests to Shaarli's API must include a JWT token to verify their authenticity.
9
10This token has to be included as an HTTP header called `Authentication: Bearer <jwt token>`.
11
12JWT resources :
13
14 * [jwt.io](https://jwt.io) (including a list of client per language).[](.html)
15 * RFC : https://tools.ietf.org/html/rfc7519
16 * https://float-middle.com/json-web-tokens-jwt-vs-sessions/
17 * HackerNews thread: https://news.ycombinator.com/item?id=11929267
18
19
20### Shaarli JWT Token
21
22JWT tokens are composed by three parts, separated by a dot `.` and encoded in base64:
23
24```
25[header].[payload].[signature][](.html)
26```
27
28#### Header
29
30Shaarli only allow one hash algorithm, so the header will always be the same:
31
32```json
33{
34 "typ": "JWT",
35 "alg": "HS512"
36}
37```
38
39Encoded in base64, it gives:
40
41```
42ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ==
43```
44
45#### Payload
46
47**Validity duration**
48
49To avoid infinite token validity, JWT tokens must include their creation date in UNIX timestamp format (timezone independant - UTC) under the key `iat` (issued at). This token will be accepted during 9 minutes.
50
51```json
52{
53 "iat": 1468663519
54}
55```
56
57See [RFC reference](https://tools.ietf.org/html/rfc7519#section-4.1.6).[](.html)
58
59
60#### Signature
61
62The signature authenticate the token validity. It contains the base64 of the header and the body, separated by a dot `.`, hashed in SHA512 with the API secret available in Shaarli administration page.
63
64Signature example with PHP:
65
66```php
67$content = base64_encode($header) . '.' . base64_encode($payload);
68$signature = hash_hmac('sha512', $content, $secret);
69```
70
71
72### Complete example
73
74#### PHP
75
76```php
77function generateToken($secret) {
78 $header = base64_encode('{
79 "typ": "JWT",
80 "alg": "HS512"
81 }');
82 $payload = base64_encode('{
83 "iat": '. time() .'
84 }');
85 $signature = hash_hmac('sha512', $header .'.'. $payload , $secret);
86 return $header .'.'. $payload .'.'. $signature;
87}
88
89$secret = 'mysecret';
90$token = generateToken($secret);
91echo $token;
92```
93
94> `ewogICAgICAgICJ0eXAiOiAiSldUIiwKICAgICAgICAiYWxnIjogIkhTNTEyIgogICAgfQ==.ewogICAgICAgICJpYXQiOiAxNDY4NjY3MDQ3CiAgICB9.1d2c54fa947daf594fdbf7591796195652c8bc63bffad7f6a6db2a41c313f495a542cbfb595acade79e83f3810d709b4251d7b940bbc10b531a6e6134af63a68`
95
96```php
97$options = [[](.html)
98 'http' => [[](.html)
99 'method' => 'GET',
100 'jwt' => $token,
101 ],
102];
103$context = stream_context_create($options);
104file_get_contents($apiEndpoint, false, $context);
105```
diff --git a/doc/RSS-feeds.html b/doc/RSS-feeds.html
index 0f332b3d..0ebfecc6 100644
--- a/doc/RSS-feeds.html
+++ b/doc/RSS-feeds.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Release-Shaarli.html b/doc/Release-Shaarli.html
index 0d9fa3e1..fa690c7c 100644
--- a/doc/Release-Shaarli.html
+++ b/doc/Release-Shaarli.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -192,6 +194,8 @@ $ <span class="fu">git</span> verify-tag f7762cf803f03f5caf4b8078359a63783d0090c
192<span class="ex">gpg</span>: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F 194<span class="ex">gpg</span>: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F
193<span class="ex">gpg</span>: Good signature from <span class="st">&quot;VirtualTam &lt;virtualtam@flibidi.net&gt;&quot;</span> [ultimate][](.html)</code></pre></div> 195<span class="ex">gpg</span>: Good signature from <span class="st">&quot;VirtualTam &lt;virtualtam@flibidi.net&gt;&quot;</span> [ultimate][](.html)</code></pre></div>
194<h2 id="publish-the-github-release">Publish the GitHub release</h2> 196<h2 id="publish-the-github-release">Publish the GitHub release</h2>
197<h3 id="update-release-badges">Update release badges</h3>
198<p>Update <code>README.md</code> so version badges display and point to the newly released Shaarli version(s).</p>
195<h3 id="create-a-github-release-from-a-git-tag">Create a GitHub release from a Git tag</h3> 199<h3 id="create-a-github-release-from-a-git-tag">Create a GitHub release from a Git tag</h3>
196<p>From the previously drafted release:</p> 200<p>From the previously drafted release:</p>
197<ul> 201<ul>
diff --git a/doc/Release-Shaarli.md b/doc/Release-Shaarli.md
index 556a96ee..ced58853 100644
--- a/doc/Release-Shaarli.md
+++ b/doc/Release-Shaarli.md
@@ -103,6 +103,9 @@ gpg: Good signature from "VirtualTam <virtualtam@flibidi.net>" [ultimate][](.htm
103``` 103```
104 104
105## Publish the GitHub release 105## Publish the GitHub release
106### Update release badges
107Update `README.md` so version badges display and point to the newly released Shaarli version(s).
108
106### Create a GitHub release from a Git tag 109### Create a GitHub release from a Git tag
107From the previously drafted release: 110From the previously drafted release:
108- edit the release notes (if needed) 111- edit the release notes (if needed)
diff --git a/doc/Security.html b/doc/Security.html
index cec20590..12b46fa9 100644
--- a/doc/Security.html
+++ b/doc/Security.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Server-configuration.html b/doc/Server-configuration.html
index 2f1c25b5..0e6b220a 100644
--- a/doc/Server-configuration.html
+++ b/doc/Server-configuration.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -196,6 +198,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
196<h3 id="htaccess">.htaccess</h3> 198<h3 id="htaccess">.htaccess</h3>
197<p>Shaarli use <code>.htaccess</code> Apache files to deny access to files that shouldn't be directly accessed (datastore, config, etc.). You need the directive <code>AllowOverride All</code> in your virtual host configuration for them to work.</p> 199<p>Shaarli use <code>.htaccess</code> Apache files to deny access to files that shouldn't be directly accessed (datastore, config, etc.). You need the directive <code>AllowOverride All</code> in your virtual host configuration for them to work.</p>
198<p><strong>Warning</strong>: If you use Apache 2.2 or lower, you need <a href="https://httpd.apache.org/docs/current/mod/mod_version.html">mod_version</a> to be installed and enabled.<a href=".html"></a></p> 200<p><strong>Warning</strong>: If you use Apache 2.2 or lower, you need <a href="https://httpd.apache.org/docs/current/mod/mod_version.html">mod_version</a> to be installed and enabled.<a href=".html"></a></p>
201<p>Apache module <code>mod_rewrite</code> <strong>must</strong> be enabled to use the REST API. URL rewriting rules for the Slim microframework are stated in the root <code>.htaccess</code> file.</p>
199<h2 id="lighthttpd">LightHttpd</h2> 202<h2 id="lighthttpd">LightHttpd</h2>
200<h2 id="nginx">Nginx</h2> 203<h2 id="nginx">Nginx</h2>
201<h3 id="foreword">Foreword</h3> 204<h3 id="foreword">Foreword</h3>
@@ -296,11 +299,14 @@ http {
296 error_log /var/log/nginx/error.log; 299 error_log /var/log/nginx/error.log;
297 300
298 location /shaarli/ { 301 location /shaarli/ {
302 try_files $uri /shaarli/index.php$is_args$args;
299 access_log /var/log/nginx/shaarli.access.log; 303 access_log /var/log/nginx/shaarli.access.log;
300 error_log /var/log/nginx/shaarli.error.log; 304 error_log /var/log/nginx/shaarli.error.log;
301 } 305 }
302 306
303 location ~ (index)\.php$ { 307 location ~ (index)\.php$ {
308 try_files $uri =404;
309 fastcgi_split_path_info ^(.+\.php)(/.+)$;
304 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 310 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
305 fastcgi_index index.php; 311 fastcgi_index index.php;
306 include fastcgi.conf; 312 include fastcgi.conf;
@@ -335,6 +341,10 @@ location ~ ~$ {
335}</code></pre> 341}</code></pre>
336<pre class="nginx"><code># /etc/nginx/php.conf 342<pre class="nginx"><code># /etc/nginx/php.conf
337location ~ (index)\.php$ { 343location ~ (index)\.php$ {
344 # Slim - split URL path into (script_filename, path_info)
345 try_files $uri =404;
346 fastcgi_split_path_info ^(.+\.php)(/.+)$;
347
338 # filter and proxy PHP requests to PHP-FPM 348 # filter and proxy PHP requests to PHP-FPM
339 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 349 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
340 fastcgi_index index.php; 350 fastcgi_index index.php;
@@ -367,6 +377,9 @@ http {
367 server_name my.first.domain.org; 377 server_name my.first.domain.org;
368 378
369 location /shaarli/ { 379 location /shaarli/ {
380 # Slim - rewrite URLs
381 try_files $uri /shaarli/index.php$is_args$args;
382
370 access_log /var/log/nginx/shaarli.access.log; 383 access_log /var/log/nginx/shaarli.access.log;
371 error_log /var/log/nginx/shaarli.error.log; 384 error_log /var/log/nginx/shaarli.error.log;
372 } 385 }
@@ -425,6 +438,9 @@ http {
425 ssl_certificate_key /home/john/ssl/localhost.key; 438 ssl_certificate_key /home/john/ssl/localhost.key;
426 439
427 location /shaarli/ { 440 location /shaarli/ {
441 # Slim - rewrite URLs
442 try_files $uri /index.php$is_args$args;
443
428 access_log /var/log/nginx/shaarli.access.log; 444 access_log /var/log/nginx/shaarli.access.log;
429 error_log /var/log/nginx/shaarli.error.log; 445 error_log /var/log/nginx/shaarli.error.log;
430 } 446 }
diff --git a/doc/Server-configuration.md b/doc/Server-configuration.md
index df10feb2..81cc1a72 100644
--- a/doc/Server-configuration.md
+++ b/doc/Server-configuration.md
@@ -107,6 +107,8 @@ See [Server-side TLS](https://wiki.mozilla.org/Security/Server_Side_TLS#Apache)
107Shaarli use `.htaccess` Apache files to deny access to files that shouldn't be directly accessed (datastore, config, etc.). You need the directive `AllowOverride All` in your virtual host configuration for them to work. 107Shaarli use `.htaccess` Apache files to deny access to files that shouldn't be directly accessed (datastore, config, etc.). You need the directive `AllowOverride All` in your virtual host configuration for them to work.
108 108
109**Warning**: If you use Apache 2.2 or lower, you need [mod_version](https://httpd.apache.org/docs/current/mod/mod_version.html) to be installed and enabled.[](.html) 109**Warning**: If you use Apache 2.2 or lower, you need [mod_version](https://httpd.apache.org/docs/current/mod/mod_version.html) to be installed and enabled.[](.html)
110
111Apache module `mod_rewrite` **must** be enabled to use the REST API. URL rewriting rules for the Slim microframework are stated in the root `.htaccess` file.
110 112
111## LightHttpd 113## LightHttpd
112 114
@@ -218,11 +220,14 @@ http {
218 error_log /var/log/nginx/error.log; 220 error_log /var/log/nginx/error.log;
219 221
220 location /shaarli/ { 222 location /shaarli/ {
223 try_files $uri /shaarli/index.php$is_args$args;
221 access_log /var/log/nginx/shaarli.access.log; 224 access_log /var/log/nginx/shaarli.access.log;
222 error_log /var/log/nginx/shaarli.error.log; 225 error_log /var/log/nginx/shaarli.error.log;
223 } 226 }
224 227
225 location ~ (index)\.php$ { 228 location ~ (index)\.php$ {
229 try_files $uri =404;
230 fastcgi_split_path_info ^(.+\.php)(/.+)$;
226 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 231 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
227 fastcgi_index index.php; 232 fastcgi_index index.php;
228 include fastcgi.conf; 233 include fastcgi.conf;
@@ -261,6 +266,10 @@ location ~ ~$ {
261```nginx 266```nginx
262# /etc/nginx/php.conf 267# /etc/nginx/php.conf
263location ~ (index)\.php$ { 268location ~ (index)\.php$ {
269 # Slim - split URL path into (script_filename, path_info)
270 try_files $uri =404;
271 fastcgi_split_path_info ^(.+\.php)(/.+)$;
272
264 # filter and proxy PHP requests to PHP-FPM 273 # filter and proxy PHP requests to PHP-FPM
265 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 274 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
266 fastcgi_index index.php; 275 fastcgi_index index.php;
@@ -299,6 +308,9 @@ http {
299 server_name my.first.domain.org; 308 server_name my.first.domain.org;
300 309
301 location /shaarli/ { 310 location /shaarli/ {
311 # Slim - rewrite URLs
312 try_files $uri /shaarli/index.php$is_args$args;
313
302 access_log /var/log/nginx/shaarli.access.log; 314 access_log /var/log/nginx/shaarli.access.log;
303 error_log /var/log/nginx/shaarli.error.log; 315 error_log /var/log/nginx/shaarli.error.log;
304 } 316 }
@@ -361,6 +373,9 @@ http {
361 ssl_certificate_key /home/john/ssl/localhost.key; 373 ssl_certificate_key /home/john/ssl/localhost.key;
362 374
363 location /shaarli/ { 375 location /shaarli/ {
376 # Slim - rewrite URLs
377 try_files $uri /index.php$is_args$args;
378
364 access_log /var/log/nginx/shaarli.access.log; 379 access_log /var/log/nginx/shaarli.access.log;
365 error_log /var/log/nginx/shaarli.error.log; 380 error_log /var/log/nginx/shaarli.error.log;
366 } 381 }
diff --git a/doc/Server-requirements.html b/doc/Server-requirements.html
index 2c2545bb..79d74118 100644
--- a/doc/Server-requirements.html
+++ b/doc/Server-requirements.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
@@ -83,26 +85,31 @@
83</thead> 85</thead>
84<tbody> 86<tbody>
85<tr class="odd"> 87<tr class="odd">
88<td style="text-align: center;">7.1</td>
89<td style="text-align: center;">Supported (v0.9.x)</td>
90<td style="text-align: center;">✅</td>
91</tr>
92<tr class="even">
86<td style="text-align: center;">7.0</td> 93<td style="text-align: center;">7.0</td>
87<td style="text-align: center;">Supported</td> 94<td style="text-align: center;">Supported</td>
88<td style="text-align: center;">✅</td> 95<td style="text-align: center;">✅</td>
89</tr> 96</tr>
90<tr class="even"> 97<tr class="odd">
91<td style="text-align: center;">5.6</td> 98<td style="text-align: center;">5.6</td>
92<td style="text-align: center;">Supported</td> 99<td style="text-align: center;">Supported</td>
93<td style="text-align: center;">✅</td> 100<td style="text-align: center;">✅</td>
94</tr> 101</tr>
95<tr class="odd"> 102<tr class="even">
96<td style="text-align: center;">5.5</td> 103<td style="text-align: center;">5.5</td>
97<td style="text-align: center;">EOL: 2016-07-10</td> 104<td style="text-align: center;">EOL: 2016-07-10</td>
98<td style="text-align: center;">✅</td> 105<td style="text-align: center;">✅</td>
99</tr> 106</tr>
100<tr class="even"> 107<tr class="odd">
101<td style="text-align: center;">5.4</td> 108<td style="text-align: center;">5.4</td>
102<td style="text-align: center;">EOL: 2015-09-14</td> 109<td style="text-align: center;">EOL: 2015-09-14</td>
103<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td> 110<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td>
104</tr> 111</tr>
105<tr class="odd"> 112<tr class="even">
106<td style="text-align: center;">5.3</td> 113<td style="text-align: center;">5.3</td>
107<td style="text-align: center;">EOL: 2014-08-14</td> 114<td style="text-align: center;">EOL: 2014-08-14</td>
108<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td> 115<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td>
@@ -130,6 +137,16 @@ download and install third-party PHP dependencies.</p>
130<td style="text-align: center;">All</td> 137<td style="text-align: center;">All</td>
131<td>Import bookmarks from Netscape files<a href=".html"></a></td> 138<td>Import bookmarks from Netscape files<a href=".html"></a></td>
132</tr> 139</tr>
140<tr class="even">
141<td><a href="https://packagist.org/packages/erusev/parsedown"><code>erusev/parsedown</code></a></td>
142<td style="text-align: center;">All</td>
143<td>Parse MarkDown syntax for the MarkDown plugin<a href=".html"></a></td>
144</tr>
145<tr class="odd">
146<td><a href="https://packagist.org/packages/slim/slim"><code>slim/slim</code></a></td>
147<td style="text-align: center;">All</td>
148<td>Handle routes and middleware for the REST API<a href=".html"></a></td>
149</tr>
133</tbody> 150</tbody>
134</table> 151</table>
135<h3 id="extensions">Extensions</h3> 152<h3 id="extensions">Extensions</h3>
diff --git a/doc/Server-requirements.md b/doc/Server-requirements.md
index 4962193e..07e70ab3 100644
--- a/doc/Server-requirements.md
+++ b/doc/Server-requirements.md
@@ -10,6 +10,7 @@
10### Supported versions 10### Supported versions
11Version | Status | Shaarli compatibility 11Version | Status | Shaarli compatibility
12:---:|:---:|:---: 12:---:|:---:|:---:
137.1 | Supported (v0.9.x) | :white_check_mark:
137.0 | Supported | :white_check_mark: 147.0 | Supported | :white_check_mark:
145.6 | Supported | :white_check_mark: 155.6 | Supported | :white_check_mark:
155.5 | EOL: 2016-07-10 | :white_check_mark: 165.5 | EOL: 2016-07-10 | :white_check_mark:
@@ -26,6 +27,8 @@ download and install third-party PHP dependencies.
26Library | Required? | Usage 27Library | Required? | Usage
27---|:---:|--- 28---|:---:|---
28[`shaarli/netscape-bookmark-parser`](https://packagist.org/packages/shaarli/netscape-bookmark-parser) | All | Import bookmarks from Netscape files[](.html) 29[`shaarli/netscape-bookmark-parser`](https://packagist.org/packages/shaarli/netscape-bookmark-parser) | All | Import bookmarks from Netscape files[](.html)
30[`erusev/parsedown`](https://packagist.org/packages/erusev/parsedown) | All | Parse MarkDown syntax for the MarkDown plugin[](.html)
31[`slim/slim`](https://packagist.org/packages/slim/slim) | All | Handle routes and middleware for the REST API[](.html)
29 32
30### Extensions 33### Extensions
31Extension | Required? | Usage 34Extension | Required? | Usage
diff --git a/doc/Server-security.html b/doc/Server-security.html
index 3551deff..4f7ff468 100644
--- a/doc/Server-security.html
+++ b/doc/Server-security.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Shaarli-configuration.html b/doc/Shaarli-configuration.html
index 6d717c65..c696c97c 100644
--- a/doc/Shaarli-configuration.html
+++ b/doc/Shaarli-configuration.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -169,6 +171,7 @@ It might be useful if your IP adress often changes.<br />
169<h3 id="resources">Resources</h3> 171<h3 id="resources">Resources</h3>
170<p><strong>data_dir</strong>: Data directory.<br /> 172<p><strong>data_dir</strong>: Data directory.<br />
171<strong>datastore</strong>: Shaarli's links database file path.<br /> 173<strong>datastore</strong>: Shaarli's links database file path.<br />
174<strong>history</strong>: Shaarli's operation history file path.<br />
172<strong>updates</strong>: File path for the ran updates file.<br /> 175<strong>updates</strong>: File path for the ran updates file.<br />
173<strong>log</strong>: Log file path.<br /> 176<strong>log</strong>: Log file path.<br />
174<strong>update_check</strong>: Last update check file path.<br /> 177<strong>update_check</strong>: Last update check file path.<br />
diff --git a/doc/Shaarli-configuration.md b/doc/Shaarli-configuration.md
index 4a783c0e..25647cb7 100644
--- a/doc/Shaarli-configuration.md
+++ b/doc/Shaarli-configuration.md
@@ -70,6 +70,7 @@ It might be useful if your IP adress often changes.
70 70
71**data_dir**: Data directory. 71**data_dir**: Data directory.
72**datastore**: Shaarli's links database file path. 72**datastore**: Shaarli's links database file path.
73**history**: Shaarli's operation history file path.
73**updates**: File path for the ran updates file. 74**updates**: File path for the ran updates file.
74**log**: Log file path. 75**log**: Log file path.
75**update_check**: Last update check file path. 76**update_check**: Last update check file path.
diff --git a/doc/Sharing-button.html b/doc/Sharing-button.html
index 93710efe..f3682f8c 100644
--- a/doc/Sharing-button.html
+++ b/doc/Sharing-button.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Static-analysis.html b/doc/Static-analysis.html
index d964e917..a95d195e 100644
--- a/doc/Static-analysis.html
+++ b/doc/Static-analysis.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Theming.html b/doc/Theming.html
index 7cbf7aef..6b5dac35 100644
--- a/doc/Theming.html
+++ b/doc/Theming.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -100,42 +102,56 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
100</ul> 102</ul>
101</div> 103</div>
102<h1 id="theming">Theming</h1> 104<h1 id="theming">Theming</h1>
103<h2 id="user-css">User CSS</h2> 105<h2 id="foreword">Foreword</h2>
106<p>There are two ways of customizing how Shaarli looks:</p>
107<ol>
108<li>by using a custom CSS to override Shaarli's CSS</li>
109<li>by using a full theme that provides its own RainTPL templates, CSS and Javascript resources</li>
110</ol>
111<h2 id="custom-css">Custom CSS</h2>
112<p>Shaarli's appearance can be modified by adding CSS rules to:</p>
104<ul> 113<ul>
105<li>Shaarli's apparence can be modified by editing CSS rules in <code>inc/user.css</code>. This file allows to override rules defined in the main <code>inc/shaarli.css</code> (only add changed rules), or define a whole new theme.</li> 114<li>Shaarli &lt; <code>v0.9.0</code>: <code>inc/user.css</code></li>
106<li>Do not edit <code>inc/shaarli.css</code>! Your changes would be overriden when updating Shaarli.</li> 115<li>Shaarli &gt;= <code>v0.9.0</code>: <code>data/user.css</code></li>
107<li>Some themes are available at <a href="https://github.com/shaarli/shaarli-themes" class="uri">https://github.com/shaarli/shaarli-themes</a>.</li>
108</ul> 116</ul>
109<p>See also:</p> 117<p>This file allows overriding rules defined in the template CSS files (only add changed rules), or define a whole new theme.</p>
110<ul> 118<p><strong>Note</strong>: Do not edit <code>tpl/default/css/shaarli.css</code>! Your changes would be overridden when updating Shaarli.</p>
111<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 119<p>See also <a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></p>
112</ul> 120<h2 id="themes">Themes</h2>
113<h2 id="raintpl-template">RainTPL template</h2>
114<p><em>WARNING - This feature is currently being worked on and will be improved in the next releases. Experimental.</em></p> 121<p><em>WARNING - This feature is currently being worked on and will be improved in the next releases. Experimental.</em></p>
122<p>Installation:</p>
115<ul> 123<ul>
116<li>Find the template you'd like to install (see the list of <a href="available-templates%7CTheming#community-themes--templates.html">available templates|Theming#community-themes--templates</a>)</li> 124<li>find a theme you'd like to install</li>
117<li>Find it's git clone URL or download the zip archive for the template.</li> 125<li>copy or clone the theme folder under <code>tpl/&lt;a_sweet_theme&gt;</code></li>
118<li>In your Shaarli <code>tpl/</code> directory, run <code>git clone https://url/of/my-template/</code> or unpack the zip archive. 126<li>enable the theme:
119<ul> 127<ul>
120<li>There should now be a <code>my-template/</code> directory under the <code>tpl/</code> dir, containing directly all the template files.</li> 128<li>Shaarli &lt; <code>v0.9.0</code>: edit <code>data/config.json.php</code> and set the value of <code>raintpl_tpl</code> to the new theme name:<br />
129<code>&quot;raintpl_tpl&quot;: &quot;tpl\/my-template\/&quot;</code></li>
130<li>Shaarli &gt;= <code>v0.9.0</code>: select the theme through the <em>Tools</em> page</li>
121</ul></li> 131</ul></li>
122<li><p>Edit <code>data/config.json.php</code> to have Shaarli use this template, in <code>&quot;resource&quot;</code> e.g.</p>
123<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="er">&quot;raintpl_tpl&quot;:</span> <span class="er">&quot;tpl\/my-template\/&quot;,</span></code></pre></div></li>
124</ul> 132</ul>
125<h2 id="community-themes-templates">Community themes &amp; templates</h2> 133<h2 id="community-css-themes">Community CSS &amp; themes</h2>
134<h3 id="custom-css-1">Custom CSS</h3>
135<ul>
136<li><a href="https://github.com/mrjovanovic/serious-theme-shaarli">mrjovanovic/serious-theme-shaarli</a> - A serious theme for Shaarli<a href=".html"></a></li>
137<li><a href="https://github.com/shaarli/shaarli-themes">shaarli/shaarli-themes</a><a href=".html"></a></li>
138</ul>
139<h3 id="themes-1">Themes</h3>
126<ul> 140<ul>
127<li><a href="https://github.com/AkibaTech/Shaarli---SuperHero-Theme">AkibaTech/Shaarli Superhero Theme</a> - A template/theme for Shaarli<a href=".html"></a></li> 141<li><a href="https://github.com/AkibaTech/Shaarli---SuperHero-Theme">AkibaTech/Shaarli Superhero Theme</a> - A template/theme for Shaarli<a href=".html"></a></li>
128<li><a href="https://github.com/alexisju/albinomouse-template">alexisju/albinomouse-template</a> - A full template for Shaarli<a href=".html"></a></li> 142<li><a href="https://github.com/alexisju/albinomouse-template">alexisju/albinomouse-template</a> - A full template for Shaarli<a href=".html"></a></li>
129<li><a href="https://github.com/ArthurHoaro/shaarli-launch">ArthurHoaro/shaarli-launch</a> - Customizable Shaarli theme.<a href=".html"></a></li> 143<li><a href="https://github.com/ArthurHoaro/shaarli-launch">ArthurHoaro/shaarli-launch</a> - Customizable Shaarli theme<a href=".html"></a></li>
130<li><a href="https://github.com/dhoko/ShaarliTemplate">dhoko/ShaarliTemplate</a> - A template/theme for Shaarli<a href=".html"></a></li> 144<li><a href="https://github.com/dhoko/ShaarliTemplate">dhoko/ShaarliTemplate</a> - A template/theme for Shaarli<a href=".html"></a></li>
131<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<a href=".html"></a></li> 145<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<a href=".html"></a></li>
132<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.<a href=".html"></a></li> 146<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<a href=".html"></a></li>
133<li><a href="https://github.com/ManufacturaInd/shaarli-2004licious-theme">ManufacturaInd/shaarli-2004licious-theme</a> - A template/theme as a humble homage to the early looks of the del.icio.us site.<a href=".html"></a></li> 147<li><a href="https://github.com/ManufacturaInd/shaarli-2004licious-theme">ManufacturaInd/shaarli-2004licious-theme</a> - A template/theme as a humble homage to the early looks of the del.icio.us site<a href=".html"></a></li>
148</ul>
149<h3 id="shaarli-forks">Shaarli forks</h3>
150<ul>
134<li><a href="https://github.com/misterair/limonade">misterair/Limonade</a> - A fork of (legacy) Shaarli with a new template<a href=".html"></a></li> 151<li><a href="https://github.com/misterair/limonade">misterair/Limonade</a> - A fork of (legacy) Shaarli with a new template<a href=".html"></a></li>
135<li><a href="https://github.com/mrjovanovic/serious-theme-shaarli">mrjovanovic/serious-theme-shaarli</a> - A serious theme for SHaarli.<a href=".html"></a></li>
136<li><a href="https://github.com/vivienhaese/shaarlitheme">vivienhaese/shaarlitheme</a> - A Shaarli fork meant to be run in an openshift instance<a href=".html"></a></li> 152<li><a href="https://github.com/vivienhaese/shaarlitheme">vivienhaese/shaarlitheme</a> - A Shaarli fork meant to be run in an openshift instance<a href=".html"></a></li>
137</ul> 153</ul>
138<h3 id="example-installation-albinomouse-template">Example installation: AlbinoMouse template</h3> 154<h2 id="example-installation-albinomouse-theme">Example installation: AlbinoMouse theme</h2>
139<p>With the following configuration:</p> 155<p>With the following configuration:</p>
140<ul> 156<ul>
141<li>Apache 2 / PHP 5.6</li> 157<li>Apache 2 / PHP 5.6</li>
diff --git a/doc/Theming.md b/doc/Theming.md
index a21899c2..23877e5d 100644
--- a/doc/Theming.md
+++ b/doc/Theming.md
@@ -1,39 +1,51 @@
1#Theming 1#Theming
2## User CSS 2## Foreword
3There are two ways of customizing how Shaarli looks:
3 4
4- Shaarli's apparence can be modified by editing CSS rules in `inc/user.css`. This file allows to override rules defined in the main `inc/shaarli.css` (only add changed rules), or define a whole new theme. 51. by using a custom CSS to override Shaarli's CSS
5- Do not edit `inc/shaarli.css`! Your changes would be overriden when updating Shaarli. 62. by using a full theme that provides its own RainTPL templates, CSS and Javascript resources
6- Some themes are available at https://github.com/shaarli/shaarli-themes.
7 7
8See also: 8## Custom CSS
9- [Download CSS styles from an OPML list](Download-CSS-styles-from-an-OPML-list.html) 9Shaarli's appearance can be modified by adding CSS rules to:
10- Shaarli < `v0.9.0`: `inc/user.css`
11- Shaarli >= `v0.9.0`: `data/user.css`
10 12
11## RainTPL template 13This file allows overriding rules defined in the template CSS files (only add changed rules), or define a whole new theme.
12 14
15**Note**: Do not edit `tpl/default/css/shaarli.css`! Your changes would be overridden when updating Shaarli.
16
17See also [Download CSS styles from an OPML list](Download-CSS-styles-from-an-OPML-list.html)
18
19## Themes
13_WARNING - This feature is currently being worked on and will be improved in the next releases. Experimental._ 20_WARNING - This feature is currently being worked on and will be improved in the next releases. Experimental._
14 21
15- Find the template you'd like to install (see the list of [available templates|Theming#community-themes--templates](available-templates|Theming#community-themes--templates.html)) 22Installation:
16- Find it's git clone URL or download the zip archive for the template. 23- find a theme you'd like to install
17- In your Shaarli `tpl/` directory, run `git clone https://url/of/my-template/` or unpack the zip archive. 24- copy or clone the theme folder under `tpl/<a_sweet_theme>`
18 - There should now be a `my-template/` directory under the `tpl/` dir, containing directly all the template files. 25- enable the theme:
19- Edit `data/config.json.php` to have Shaarli use this template, in `"resource"` e.g. 26 - Shaarli < `v0.9.0`: edit `data/config.json.php` and set the value of `raintpl_tpl` to the new theme name:
20```json 27 `"raintpl_tpl": "tpl\/my-template\/"`
21"raintpl_tpl": "tpl\/my-template\/", 28 - Shaarli >= `v0.9.0`: select the theme through the _Tools_ page
22```
23 29
24## Community themes & templates 30## Community CSS & themes
31### Custom CSS
32- [mrjovanovic/serious-theme-shaarli](https://github.com/mrjovanovic/serious-theme-shaarli) - A serious theme for Shaarli[](.html)
33- [shaarli/shaarli-themes](https://github.com/shaarli/shaarli-themes)[](.html)
34
35### Themes
25- [AkibaTech/Shaarli Superhero Theme](https://github.com/AkibaTech/Shaarli---SuperHero-Theme) - A template/theme for Shaarli[](.html) 36- [AkibaTech/Shaarli Superhero Theme](https://github.com/AkibaTech/Shaarli---SuperHero-Theme) - A template/theme for Shaarli[](.html)
26- [alexisju/albinomouse-template](https://github.com/alexisju/albinomouse-template) - A full template for Shaarli[](.html) 37- [alexisju/albinomouse-template](https://github.com/alexisju/albinomouse-template) - A full template for Shaarli[](.html)
27- [ArthurHoaro/shaarli-launch](https://github.com/ArthurHoaro/shaarli-launch) - Customizable Shaarli theme.[](.html) 38- [ArthurHoaro/shaarli-launch](https://github.com/ArthurHoaro/shaarli-launch) - Customizable Shaarli theme[](.html)
28- [dhoko/ShaarliTemplate](https://github.com/dhoko/ShaarliTemplate) - A template/theme for Shaarli[](.html) 39- [dhoko/ShaarliTemplate](https://github.com/dhoko/ShaarliTemplate) - A template/theme for Shaarli[](.html)
29- [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli[](.html) 40- [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli[](.html)
30- [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone.[](.html) 41- [kalvn/Shaarli-Material](https://github.com/kalvn/Shaarli-Material) - A theme (template) based on Google's Material Design for Shaarli, the superfast delicious clone[](.html)
31- [ManufacturaInd/shaarli-2004licious-theme](https://github.com/ManufacturaInd/shaarli-2004licious-theme) - A template/theme as a humble homage to the early looks of the del.icio.us site.[](.html) 42- [ManufacturaInd/shaarli-2004licious-theme](https://github.com/ManufacturaInd/shaarli-2004licious-theme) - A template/theme as a humble homage to the early looks of the del.icio.us site[](.html)
43
44### Shaarli forks
32- [misterair/Limonade](https://github.com/misterair/limonade) - A fork of (legacy) Shaarli with a new template[](.html) 45- [misterair/Limonade](https://github.com/misterair/limonade) - A fork of (legacy) Shaarli with a new template[](.html)
33- [mrjovanovic/serious-theme-shaarli](https://github.com/mrjovanovic/serious-theme-shaarli) - A serious theme for SHaarli.[](.html)
34- [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance[](.html) 46- [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance[](.html)
35 47
36### Example installation: AlbinoMouse template 48## Example installation: AlbinoMouse theme
37With the following configuration: 49With the following configuration:
38- Apache 2 / PHP 5.6 50- Apache 2 / PHP 5.6
39- user sites are enabled, e.g. `/home/user/public_html/somedir` is served as `http://localhost/~user/somedir` 51- user sites are enabled, e.g. `/home/user/public_html/somedir` is served as `http://localhost/~user/somedir`
diff --git a/doc/Troubleshooting.html b/doc/Troubleshooting.html
index ed1c6f09..f43e6ed3 100644
--- a/doc/Troubleshooting.html
+++ b/doc/Troubleshooting.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -172,7 +174,7 @@ Search for <code>failed</code> in this file to look for unauthorized login attem
172<li>If you have the error <code>Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /…/index.php on line xxx</code>, it means that your host has disabled the ability to fetch a file by HTTP in the php config (Typically in 1and1 hosting). Bad host. Change host. Or comment the following lines:<a href=".html"></a></li> 174<li>If you have the error <code>Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /…/index.php on line xxx</code>, it means that your host has disabled the ability to fetch a file by HTTP in the php config (Typically in 1and1 hosting). Bad host. Change host. Or comment the following lines:<a href=".html"></a></li>
173</ul> 175</ul>
174<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="co">//list($status,$headers,$data) = getHTTP($url,4); // Short timeout to keep the application responsive.</span> 176<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="co">//list($status,$headers,$data) = getHTTP($url,4); // Short timeout to keep the application responsive.</span>
175<span class="co">// FIXME: Decode charset according to charset specified in either 1) HTTP response headers or 2) &lt;head&gt; in html </span> 177<span class="co">// </span><span class="al">FIXME</span><span class="co">: Decode charset according to charset specified in either 1) HTTP response headers or 2) &lt;head&gt; in html </span>
176<span class="co">//if (strpos($status,&#39;200 OK&#39;)) $title=html_extract_title($data);</span></code></pre></div> 178<span class="co">//if (strpos($status,&#39;200 OK&#39;)) $title=html_extract_title($data);</span></code></pre></div>
177<ul> 179<ul>
178<li>On hosts which forbid outgoing HTTP requests (such as free.fr), some thumbnails will not work.</li> 180<li>On hosts which forbid outgoing HTTP requests (such as free.fr), some thumbnails will not work.</li>
diff --git a/doc/Unit-tests.html b/doc/Unit-tests.html
index 266fd33a..09611463 100644
--- a/doc/Unit-tests.html
+++ b/doc/Unit-tests.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -208,5 +210,17 @@ DBTest.php on line 79 and defined
208<li>a detailed HTML report with metrics for tested code</li> 210<li>a detailed HTML report with metrics for tested code</li>
209<li>to open it in a web browser: <code>firefox coverage/index.html &amp;</code></li> 211<li>to open it in a web browser: <code>firefox coverage/index.html &amp;</code></li>
210</ul> 212</ul>
213<h3 id="executing-specific-tests">Executing specific tests</h3>
214<p>Add a <a href="https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group"><code>@group</code></a> annotation in a test class or method comment:<a href=".html"></a></p>
215<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="co">/**</span>
216<span class="co"> * Netscape bookmark import</span>
217<span class="co"> * </span><span class="an">@group</span><span class="co"> WIP</span>
218<span class="co"> */</span>
219<span class="kw">class</span> BookmarkImportTest <span class="kw">extends</span> PHPUnit_Framework_TestCase
220{
221 <span class="ot">[</span><span class="st">...</span><span class="ot">][](</span>.html<span class="ot">)</span>
222}</code></pre></div>
223<p>To run all tests annotated with <code>@group WIP</code>:</p>
224<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">vendor/bin/phpunit</span> --group WIP tests/</code></pre></div>
211</body> 225</body>
212</html> 226</html>
diff --git a/doc/Unit-tests.md b/doc/Unit-tests.md
index f2888780..0942ad38 100644
--- a/doc/Unit-tests.md
+++ b/doc/Unit-tests.md
@@ -126,3 +126,22 @@ If Xdebug has been installed and activated, two coverage reports will be generat
126* a summary in the console 126* a summary in the console
127* a detailed HTML report with metrics for tested code 127* a detailed HTML report with metrics for tested code
128 * to open it in a web browser: `firefox coverage/index.html &` 128 * to open it in a web browser: `firefox coverage/index.html &`
129
130### Executing specific tests
131Add a [`@group`](https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group) annotation in a test class or method comment:[](.html)
132
133```php
134/**
135 * Netscape bookmark import
136 * @group WIP
137 */
138class BookmarkImportTest extends PHPUnit_Framework_TestCase
139{
140 [...][](.html)
141}
142```
143
144To run all tests annotated with `@group WIP`:
145```bash
146$ vendor/bin/phpunit --group WIP tests/
147```
diff --git a/doc/Upgrade-and-migration.html b/doc/Upgrade-and-migration.html
index a5b041d5..667215ab 100644
--- a/doc/Upgrade-and-migration.html
+++ b/doc/Upgrade-and-migration.html
@@ -69,6 +69,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li> 70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li> 71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
72</ul></li> 73</ul></li>
73<li>How To 74<li>How To
74<ul> 75<ul>
@@ -87,6 +88,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
87<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
88<li><a href="Plugin-System.html">Plugin System</a></li> 89<li><a href="Plugin-System.html">Plugin System</a></li>
89<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
90<li><a href="Security.html">Security</a></li> 92<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li> 93<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li> 94<li><a href="Theming.html">Theming</a></li>
@@ -101,12 +103,16 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
101</div> 103</div>
102<h1 id="upgrade-and-migration">Upgrade and migration</h1> 104<h1 id="upgrade-and-migration">Upgrade and migration</h1>
103<h2 id="preparation">Preparation</h2> 105<h2 id="preparation">Preparation</h2>
106<h3 id="note-your-current-version">Note your current version</h3>
107<p>If anything goes wrong, it's important for us to know which version you're upgrading from.<br />
108The current version is present in the <code>version.php</code> file.</p>
104<h3 id="backup-your-data">Backup your data</h3> 109<h3 id="backup-your-data">Backup your data</h3>
105<p>Shaarli stores all user data under the <code>data</code> directory:</p> 110<p>Shaarli stores all user data under the <code>data</code> directory:</p>
106<ul> 111<ul>
107<li><code>data/config.php</code> - main configuration file</li> 112<li><code>data/config.php</code> - main configuration file</li>
108<li><code>data/datastore.php</code> - bookmarked links</li> 113<li><code>data/datastore.php</code> - bookmarked links</li>
109<li><code>data/ipbans.php</code> - banned IP addresses</li> 114<li><code>data/ipbans.php</code> - banned IP addresses</li>
115<li><code>data/updates.txt</code> - contains all automatic update to the configuration and datastore files already run</li>
110</ul> 116</ul>
111<p>See <a href="Shaarli-configuration.html">Shaarli configuration</a> for more information about Shaarli resources.</p> 117<p>See <a href="Shaarli-configuration.html">Shaarli configuration</a> for more information about Shaarli resources.</p>
112<p>It is recommended to backup this repository <em>before</em> starting updating/upgrading Shaarli:</p> 118<p>It is recommended to backup this repository <em>before</em> starting updating/upgrading Shaarli:</p>
@@ -125,15 +131,11 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
125</ul></li> 131</ul></li>
126<li>check or restore the <code>data</code> directory</li> 132<li>check or restore the <code>data</code> directory</li>
127</ul> 133</ul>
128<h2 id="upgrading-from-release-archives">Upgrading from release archives</h2> 134<h2 id="recommended-upgrading-from-release-archives">Recommended : Upgrading from release archives</h2>
129<p>All tagged revisions can be downloaded as tarballs or ZIP archives from the <a href="https://github.com/shaarli/Shaarli/releases">releases</a> page.<a href=".html"></a></p> 135<p>All tagged revisions can be downloaded as tarballs or ZIP archives from the <a href="https://github.com/shaarli/Shaarli/releases">releases</a> page.<a href=".html"></a></p>
130<p>We <em>recommend</em> using the releases from the <code>stable</code> branch, which are available as:</p> 136<p>We recommend that you use the latest release tarball with the <code>-full</code> suffix. It contains the dependencies, please read <a href="Download-and-installation.html">Download and installation</a> for <code>git</code> complete instructions.</p>
131<ul> 137<p>Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the content of the <code>data</code> directory!</p>
132<li>gzipped tarball - <a href="https://github.com/shaarli/Shaarli/archive/stable.tar.gz" class="uri">https://github.com/shaarli/Shaarli/archive/stable.tar.gz</a></li> 138<p>After upgrading, access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to <code>data/config.json.php</code> (see <a href="Shaarli-configuration.html">Shaarli configuration</a> for more details).</p>
133<li>ZIP archive - <a href="https://github.com/shaarli/Shaarli/archive/stable.zip" class="uri">https://github.com/shaarli/Shaarli/archive/stable.zip</a></li>
134</ul>
135<p>Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the contents of the <code>data</code> directory!</p>
136<p>After upgrading, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to <code>data/config.php</code> (see <a href="Shaarli-configuration.html">Shaarli configuration</a> for more details).</p>
137<h2 id="upgrading-with-git">Upgrading with Git</h2> 139<h2 id="upgrading-with-git">Upgrading with Git</h2>
138<h3 id="updating-a-community-shaarli">Updating a community Shaarli</h3> 140<h3 id="updating-a-community-shaarli">Updating a community Shaarli</h3>
139<p>If you have installed Shaarli from the <a href="Download#clone-with-git-recommended">community Git repository</a>, simply <a href="https://www.git-scm.com/docs/git-pull">pull new changes</a> from your local clone:<a href=".html"></a></p> 141<p>If you have installed Shaarli from the <a href="Download#clone-with-git-recommended">community Git repository</a>, simply <a href="https://www.git-scm.com/docs/git-pull">pull new changes</a> from your local clone:<a href=".html"></a></p>
@@ -149,7 +151,7 @@ $ <span class="fu">git</span> pull
149 <span class="ex">tests/Url/UrlTest.php</span> <span class="kw">|</span> <span class="ex">1</span> + 151 <span class="ex">tests/Url/UrlTest.php</span> <span class="kw">|</span> <span class="ex">1</span> +
150 <span class="ex">3</span> files changed, 3 insertions(+), <span class="ex">1</span> deletion(-)</code></pre></div> 152 <span class="ex">3</span> files changed, 3 insertions(+), <span class="ex">1</span> deletion(-)</code></pre></div>
151<p>Shaarli &gt;= <code>v0.8.x</code>: install/update third-party PHP dependencies using <a href="https://getcomposer.org/">Composer</a>:<a href=".html"></a></p> 153<p>Shaarli &gt;= <code>v0.8.x</code>: install/update third-party PHP dependencies using <a href="https://getcomposer.org/">Composer</a>:<a href=".html"></a></p>
152<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> update --no-dev 154<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> install --no-dev
153 155
154<span class="ex">Loading</span> composer repositories with package information 156<span class="ex">Loading</span> composer repositories with package information
155<span class="ex">Updating</span> dependencies 157<span class="ex">Updating</span> dependencies
@@ -214,7 +216,7 @@ $ <span class="fu">git</span> branch -vv
214 <span class="ex">master</span> 029f75f [sebsauvage/master] Update README.md[](.html) 216 <span class="ex">master</span> 029f75f [sebsauvage/master] Update README.md[](.html)
215<span class="ex">*</span> stable 890afc3 [origin/stable] Merge pull request <span class="co">#509 from ArthurHoaro/v0.6.5[](.html)</span></code></pre></div> 217<span class="ex">*</span> stable 890afc3 [origin/stable] Merge pull request <span class="co">#509 from ArthurHoaro/v0.6.5[](.html)</span></code></pre></div>
216<p>Shaarli &gt;= <code>v0.8.x</code>: install/update third-party PHP dependencies using <a href="https://getcomposer.org/">Composer</a>:<a href=".html"></a></p> 218<p>Shaarli &gt;= <code>v0.8.x</code>: install/update third-party PHP dependencies using <a href="https://getcomposer.org/">Composer</a>:<a href=".html"></a></p>
217<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> update --no-dev 219<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> install --no-dev
218 220
219<span class="ex">Loading</span> composer repositories with package information 221<span class="ex">Loading</span> composer repositories with package information
220<span class="ex">Updating</span> dependencies 222<span class="ex">Updating</span> dependencies
@@ -238,5 +240,20 @@ $ <span class="fu">git</span> gc
238<span class="ex">Total</span> 3317 (delta 2050), <span class="ex">reused</span> 3301 (delta 2034)<span class="ex">to</span></code></pre></div> 240<span class="ex">Total</span> 3317 (delta 2050), <span class="ex">reused</span> 3301 (delta 2034)<span class="ex">to</span></code></pre></div>
239<h4 id="step-3-configuration">Step 3: configuration</h4> 241<h4 id="step-3-configuration">Step 3: configuration</h4>
240<p>After migrating, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to <code>data/config.php</code> (see <a href="Shaarli-configuration.html">Shaarli configuration</a> for more details).</p> 242<p>After migrating, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to <code>data/config.php</code> (see <a href="Shaarli-configuration.html">Shaarli configuration</a> for more details).</p>
243<h2 id="troubleshooting">Troubleshooting</h2>
244<p>If the solutions provided here doesn't work, please open an issue specifying which version you're upgrading from and to.</p>
245<h3 id="you-must-specify-an-integer-as-a-key">You must specify an integer as a key</h3>
246<p>In <code>v0.8.1</code> we changed how link keys are handled (from timestamps to incremental integers).<br />
247Take a look at <code>data/updates.txt</code> content.</p>
248<h4 id="updates.txt-contains-updatemethoddatastoreids"><code>updates.txt</code> contains <code>updateMethodDatastoreIds</code></h4>
249<p>Try to delete it and refresh your page while being logged in.</p>
250<h4 id="updates.txt-doesnt-exists-or-doesnt-contain-updatemethoddatastoreids"><code>updates.txt</code> doesn't exists or doesn't contain <code>updateMethodDatastoreIds</code></h4>
251<ol>
252<li>Create <code>data/updates.txt</code> if it doesn't exist.</li>
253<li>Paste this string in the update file <code>;updateMethodRenameDashTags;</code></li>
254<li>Login to Shaarli.</li>
255<li>Delete the update file.</li>
256<li>Refresh.</li>
257</ol>
241</body> 258</body>
242</html> 259</html>
diff --git a/doc/Upgrade-and-migration.md b/doc/Upgrade-and-migration.md
index 0bc33824..d36eb862 100644
--- a/doc/Upgrade-and-migration.md
+++ b/doc/Upgrade-and-migration.md
@@ -1,11 +1,17 @@
1#Upgrade and migration 1#Upgrade and migration
2## Preparation 2## Preparation
3### Note your current version
4
5If anything goes wrong, it's important for us to know which version you're upgrading from.
6The current version is present in the `version.php` file.
7
3### Backup your data 8### Backup your data
4 9
5Shaarli stores all user data under the `data` directory: 10Shaarli stores all user data under the `data` directory:
6- `data/config.php` - main configuration file 11- `data/config.php` - main configuration file
7- `data/datastore.php` - bookmarked links 12- `data/datastore.php` - bookmarked links
8- `data/ipbans.php` - banned IP addresses 13- `data/ipbans.php` - banned IP addresses
14- `data/updates.txt` - contains all automatic update to the configuration and datastore files already run
9 15
10See [Shaarli configuration](Shaarli-configuration.html) for more information about Shaarli resources. 16See [Shaarli configuration](Shaarli-configuration.html) for more information about Shaarli resources.
11 17
@@ -22,16 +28,14 @@ As all user data is kept under `data`, this is the only directory you need to wo
22 - update - see the following sections 28 - update - see the following sections
23- check or restore the `data` directory 29- check or restore the `data` directory
24 30
25## Upgrading from release archives 31## Recommended : Upgrading from release archives
26All tagged revisions can be downloaded as tarballs or ZIP archives from the [releases](https://github.com/shaarli/Shaarli/releases) page.[](.html) 32All tagged revisions can be downloaded as tarballs or ZIP archives from the [releases](https://github.com/shaarli/Shaarli/releases) page.[](.html)
27 33
28We _recommend_ using the releases from the `stable` branch, which are available as: 34We recommend that you use the latest release tarball with the `-full` suffix. It contains the dependencies, please read [Download and installation](Download-and-installation.html) for `git` complete instructions.
29- gzipped tarball - https://github.com/shaarli/Shaarli/archive/stable.tar.gz
30- ZIP archive - https://github.com/shaarli/Shaarli/archive/stable.zip
31 35
32Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the contents of the `data` directory! 36Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the content of the `data` directory!
33 37
34After upgrading, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to `data/config.php` (see [Shaarli configuration](Shaarli-configuration.html) for more details). 38After upgrading, access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli-configuration.html) for more details).
35 39
36## Upgrading with Git 40## Upgrading with Git
37### Updating a community Shaarli 41### Updating a community Shaarli
@@ -54,7 +58,7 @@ Fast-forward
54Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html) 58Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html)
55 59
56```bash 60```bash
57$ composer update --no-dev 61$ composer install --no-dev
58 62
59Loading composer repositories with package information 63Loading composer repositories with package information
60Updating dependencies 64Updating dependencies
@@ -129,7 +133,7 @@ $ git branch -vv
129Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html) 133Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html)
130 134
131```bash 135```bash
132$ composer update --no-dev 136$ composer install --no-dev
133 137
134Loading composer repositories with package information 138Loading composer repositories with package information
135Updating dependencies 139Updating dependencies
@@ -159,3 +163,24 @@ Total 3317 (delta 2050), reused 3301 (delta 2034)to
159 163
160#### Step 3: configuration 164#### Step 3: configuration
161After migrating, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to `data/config.php` (see [Shaarli configuration](Shaarli-configuration.html) for more details). 165After migrating, access your fresh Shaarli installation from a web browser; the configuration will then be automatically updated, and new settings added to `data/config.php` (see [Shaarli configuration](Shaarli-configuration.html) for more details).
166
167## Troubleshooting
168
169If the solutions provided here doesn't work, please open an issue specifying which version you're upgrading from and to.
170
171### You must specify an integer as a key
172
173In `v0.8.1` we changed how link keys are handled (from timestamps to incremental integers).
174Take a look at `data/updates.txt` content.
175
176#### `updates.txt` contains `updateMethodDatastoreIds`
177
178Try to delete it and refresh your page while being logged in.
179
180#### `updates.txt` doesn't exists or doesn't contain `updateMethodDatastoreIds`
181
182 1. Create `data/updates.txt` if it doesn't exist.
183 2. Paste this string in the update file `;updateMethodRenameDashTags;`
184 3. Login to Shaarli.
185 4. Delete the update file.
186 5. Refresh.
diff --git a/doc/Usage.html b/doc/Usage.html
index 63f21d93..b5855881 100644
--- a/doc/Usage.html
+++ b/doc/Usage.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/Versioning-and-Branches.html b/doc/Versioning-and-Branches.html
new file mode 100644
index 00000000..4dfe4a91
--- /dev/null
+++ b/doc/Versioning-and-Branches.html
@@ -0,0 +1,156 @@
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>Shaarli – Versioning and Branches</title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <style type="text/css">
10div.sourceCode { overflow-x: auto; }
11table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
12 margin: 0; padding: 0; vertical-align: baseline; border: none; }
13table.sourceCode { width: 100%; line-height: 100%; }
14td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
15td.sourceCode { padding-left: 5px; }
16code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
17code > span.dt { color: #902000; } /* DataType */
18code > span.dv { color: #40a070; } /* DecVal */
19code > span.bn { color: #40a070; } /* BaseN */
20code > span.fl { color: #40a070; } /* Float */
21code > span.ch { color: #4070a0; } /* Char */
22code > span.st { color: #4070a0; } /* String */
23code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
24code > span.ot { color: #007020; } /* Other */
25code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
26code > span.fu { color: #06287e; } /* Function */
27code > span.er { color: #ff0000; font-weight: bold; } /* Error */
28code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
29code > span.cn { color: #880000; } /* Constant */
30code > span.sc { color: #4070a0; } /* SpecialChar */
31code > span.vs { color: #4070a0; } /* VerbatimString */
32code > span.ss { color: #bb6688; } /* SpecialString */
33code > span.im { } /* Import */
34code > span.va { color: #19177c; } /* Variable */
35code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
36code > span.op { color: #666666; } /* Operator */
37code > span.bu { } /* BuiltIn */
38code > span.ex { } /* Extension */
39code > span.pp { color: #bc7a00; } /* Preprocessor */
40code > span.at { color: #7d9029; } /* Attribute */
41code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
42code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
43code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
44code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
45 </style>
46 <link rel="stylesheet" href="github-markdown.css">
47 <!--[if lt IE 9]>
48 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
49 <![endif]-->
50</head>
51<body>
52<div id="local-sidebar">
53<ul>
54<li><a href="Home.html">Home</a></li>
55<li>Setup
56<ul>
57<li><a href="Download-and-Installation.html">Download and Installation</a></li>
58<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
59<li><a href="Server-requirements.html">Server requirements</a></li>
60<li><a href="Server-configuration.html">Server configuration</a></li>
61<li><a href="Server-security.html">Server security</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li>
65<li><a href="Docker.html">Docker</a></li>
66<li><a href="Usage.html">Usage</a>
67<ul>
68<li><a href="Sharing-button.html">Sharing button</a> (bookmarklet)</li>
69<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
70<li><a href="Firefox-share.html">Firefox share</a></li>
71<li><a href="RSS-feeds.html">RSS feeds</a></li>
72<li><a href="REST-API.html">REST API</a></li>
73</ul></li>
74<li>How To
75<ul>
76<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
77<li><a href="Copy-an-existing-installation-over-SSH-and-serve-it-locally.html">Copy an existing installation over SSH and serve it locally</a></li>
78<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
79<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
80<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
81</ul></li>
82<li><a href="Troubleshooting.html">Troubleshooting</a></li>
83<li><a href="Development.html">Development</a>
84<ul>
85<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
86<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
87<li><a href="Directory-structure.html">Directory structure</a></li>
88<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
89<li><a href="Plugin-System.html">Plugin System</a></li>
90<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
91<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
92<li><a href="Security.html">Security</a></li>
93<li><a href="Static-analysis.html">Static analysis</a></li>
94<li><a href="Theming.html">Theming</a></li>
95<li><a href="Unit-tests.html">Unit tests</a></li>
96</ul></li>
97<li>About
98<ul>
99<li><a href="FAQ.html">FAQ</a></li>
100<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
101</ul></li>
102</ul>
103</div>
104<h1 id="versioning-and-branches">Versioning and Branches</h1>
105<p>[<strong>WORK IN PROGRESS</strong>][](.html)</p>
106<p>It's important to understand how Shaarli branches work, especially if you're maintaining a 3rd party tools for Shaarli (theme, plugin, etc.), to be sure stay compatible.</p>
107<h2 id="master-branch"><code>master</code> branch</h2>
108<p>The <code>master</code> branch is the development branch. Any new change MUST go through this branch using Pull Requests.</p>
109<p>Remarks:</p>
110<ul>
111<li>This branch shouldn't be used for production as it isn't necessary stable.</li>
112<li>3rd party aren't required to be compatible with the latest changes.</li>
113<li>Official plugins, themes and libraries (contained within Shaarli organization repos) must be compatible with the master branch.</li>
114<li>The version in this branch is always <code>dev</code>.</li>
115</ul>
116<h2 id="v0.x-branch"><code>v0.x</code> branch</h2>
117<p>This <code>v0.x</code> branch, points to the latest <code>v0.x.y</code> release.</p>
118<p>Explanation:</p>
119<p>When a new version is released, it might contains a major bug which isn't detected right away. For example, a new PHP version is released, containing backward compatibility issue which doesn't work with Shaarli.</p>
120<p>In this case, the issue is fixed in the <code>master</code> branch, and the fix is backported the to the <code>v0.x</code> branch. Then a new release is made from the <code>v0.x</code> branch.</p>
121<p>This workflow allow us to fix any major bug detected, without having to release bleeding edge feature too soon.</p>
122<h2 id="latest-branch"><code>latest</code> branch</h2>
123<p>This branch point the latest release. It recommended to use it to get the latest tested changes.</p>
124<h2 id="stable-branch"><code>stable</code> branch</h2>
125<p>The <code>stable</code> branch doesn't contain any major bug, and is one major digit version behind the latest release.</p>
126<p>For example, the current latest release is <code>v0.8.3</code>, the stable branch is an alias to the latest <code>v0.7.x</code> release. When the <code>v0.9.0</code> version will be released, the stable will move to the latest <code>v0.8.x</code> release.</p>
127<p>Remarks:</p>
128<ul>
129<li>Shaarli release pace isn't fast, and the stable branch might be a few months behind the latest release.</li>
130</ul>
131<h2 id="releases">Releases</h2>
132<p>Releases are always made from the latest <code>v0.x</code> branch.</p>
133<p>Note that for every release, we manually generate a tarball which contains all Shaarli dependencies, making Shaarli's installation only one step.</p>
134<h2 id="advices-on-3rd-party-git-repos-workflow">Advices on 3rd party git repos workflow</h2>
135<h3 id="versioning">Versioning</h3>
136<p>Any time a new Shaarli release is published, you should publish a new release of your repo if the changes affected you since the latest release (take a look at the <a href="https://github.com/shaarli/Shaarli/releases">changelog</a> (<em>Draft</em> means not released yet) and the commit log (like <a href="https://github.com/shaarli/Shaarli/commits/master/tpl/default"><code>tpl</code> folder</a> for themes)). You can either:<a href=".html"></a></p>
137<ul>
138<li>use the Shaarli version number, with your repo version. For example, if Shaarli <code>v0.8.3</code> is released, publish a <code>v0.8.3-1</code> release, where <code>v0.8.3</code> states Shaarli compatibility and <code>-1</code> is your own version digit for the current Shaarli version.</li>
139<li>use your own versioning scheme, and state Shaarli compatibility in the release description.</li>
140</ul>
141<p>Using this, any user will be able to pick the release matching his own Shaarli version.</p>
142<h3 id="major-bugfix-backport-releases">Major bugfix backport releases</h3>
143<p>To be able to support backported fixes, it recommended to use our workflow:</p>
144<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># In master, fix the major bug</span>
145<span class="fu">git</span> commit -m <span class="st">&quot;Katastrophe&quot;</span>
146<span class="fu">git</span> push origin master
147<span class="co"># Get your commit hash</span>
148<span class="fu">git</span> log --format=<span class="st">&quot;%H&quot;</span> -n 1
149<span class="co"># Create a new branch from your latest release, let&#39;s say v0.8.2-1 (the tag name)</span>
150<span class="fu">git</span> checkout -b katastrophe v0.8.2-1
151<span class="co"># Backport the fix commit to your brand new branch</span>
152<span class="fu">git</span> cherry-pick <span class="op">&lt;</span>fix commit hash<span class="op">&gt;</span>
153<span class="fu">git</span> push origin katastrophe
154<span class="co"># Then you just have to make a new release from the `katastrophe` branch tagged `v0.8.3-1`</span></code></pre></div>
155</body>
156</html>
diff --git a/doc/Versioning-and-Branches.md b/doc/Versioning-and-Branches.md
new file mode 100644
index 00000000..bbc7719e
--- /dev/null
+++ b/doc/Versioning-and-Branches.md
@@ -0,0 +1,76 @@
1#Versioning and Branches
2[**WORK IN PROGRESS**][](.html)
3
4It's important to understand how Shaarli branches work, especially if you're maintaining a 3rd party tools for Shaarli (theme, plugin, etc.), to be sure stay compatible.
5
6## `master` branch
7
8The `master` branch is the development branch. Any new change MUST go through this branch using Pull Requests.
9
10Remarks:
11
12 * This branch shouldn't be used for production as it isn't necessary stable.
13 * 3rd party aren't required to be compatible with the latest changes.
14 * Official plugins, themes and libraries (contained within Shaarli organization repos) must be compatible with the master branch.
15 * The version in this branch is always `dev`.
16
17## `v0.x` branch
18
19This `v0.x` branch, points to the latest `v0.x.y` release.
20
21Explanation:
22
23When a new version is released, it might contains a major bug which isn't detected right away. For example, a new PHP version is released, containing backward compatibility issue which doesn't work with Shaarli.
24
25In this case, the issue is fixed in the `master` branch, and the fix is backported the to the `v0.x` branch. Then a new release is made from the `v0.x` branch.
26
27This workflow allow us to fix any major bug detected, without having to release bleeding edge feature too soon.
28
29## `latest` branch
30
31This branch point the latest release. It recommended to use it to get the latest tested changes.
32
33## `stable` branch
34
35The `stable` branch doesn't contain any major bug, and is one major digit version behind the latest release.
36
37For example, the current latest release is `v0.8.3`, the stable branch is an alias to the latest `v0.7.x` release. When the `v0.9.0` version will be released, the stable will move to the latest `v0.8.x` release.
38
39Remarks:
40
41 * Shaarli release pace isn't fast, and the stable branch might be a few months behind the latest release.
42
43## Releases
44
45Releases are always made from the latest `v0.x` branch.
46
47Note that for every release, we manually generate a tarball which contains all Shaarli dependencies, making Shaarli's installation only one step.
48
49## Advices on 3rd party git repos workflow
50
51### Versioning
52
53Any time a new Shaarli release is published, you should publish a new release of your repo if the changes affected you since the latest release (take a look at the [changelog](https://github.com/shaarli/Shaarli/releases) (*Draft* means not released yet) and the commit log (like [`tpl` folder](https://github.com/shaarli/Shaarli/commits/master/tpl/default) for themes)). You can either:[](.html)
54
55 - use the Shaarli version number, with your repo version. For example, if Shaarli `v0.8.3` is released, publish a `v0.8.3-1` release, where `v0.8.3` states Shaarli compatibility and `-1` is your own version digit for the current Shaarli version.
56 - use your own versioning scheme, and state Shaarli compatibility in the release description.
57
58Using this, any user will be able to pick the release matching his own Shaarli version.
59
60### Major bugfix backport releases
61
62To be able to support backported fixes, it recommended to use our workflow:
63
64```bash
65# In master, fix the major bug
66git commit -m "Katastrophe"
67git push origin master
68# Get your commit hash
69git log --format="%H" -n 1
70# Create a new branch from your latest release, let's say v0.8.2-1 (the tag name)
71git checkout -b katastrophe v0.8.2-1
72# Backport the fix commit to your brand new branch
73git cherry-pick <fix commit hash>
74git push origin katastrophe
75# Then you just have to make a new release from the `katastrophe` branch tagged `v0.8.3-1`
76```
diff --git a/doc/_Footer.html b/doc/_Footer.html
index e8a62d2a..09473a38 100644
--- a/doc/_Footer.html
+++ b/doc/_Footer.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/_Sidebar.html b/doc/_Sidebar.html
index bb6dad93..d3f94560 100644
--- a/doc/_Sidebar.html
+++ b/doc/_Sidebar.html
@@ -32,6 +32,7 @@
32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 32<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
33<li><a href="Firefox-share.html">Firefox share</a></li> 33<li><a href="Firefox-share.html">Firefox share</a></li>
34<li><a href="RSS-feeds.html">RSS feeds</a></li> 34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35<li><a href="REST-API.html">REST API</a></li>
35</ul></li> 36</ul></li>
36<li>How To 37<li>How To
37<ul> 38<ul>
@@ -50,6 +51,7 @@
50<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
51<li><a href="Plugin-System.html">Plugin System</a></li> 52<li><a href="Plugin-System.html">Plugin System</a></li>
52<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
53<li><a href="Security.html">Security</a></li> 55<li><a href="Security.html">Security</a></li>
54<li><a href="Static-analysis.html">Static analysis</a></li> 56<li><a href="Static-analysis.html">Static analysis</a></li>
55<li><a href="Theming.html">Theming</a></li> 57<li><a href="Theming.html">Theming</a></li>
@@ -82,6 +84,7 @@
82<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 84<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
83<li><a href="Firefox-share.html">Firefox share</a></li> 85<li><a href="Firefox-share.html">Firefox share</a></li>
84<li><a href="RSS-feeds.html">RSS feeds</a></li> 86<li><a href="RSS-feeds.html">RSS feeds</a></li>
87<li><a href="REST-API.html">REST API</a></li>
85</ul></li> 88</ul></li>
86<li>How To 89<li>How To
87<ul> 90<ul>
@@ -100,6 +103,7 @@
100<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 103<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
101<li><a href="Plugin-System.html">Plugin System</a></li> 104<li><a href="Plugin-System.html">Plugin System</a></li>
102<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 105<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
106<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
103<li><a href="Security.html">Security</a></li> 107<li><a href="Security.html">Security</a></li>
104<li><a href="Static-analysis.html">Static analysis</a></li> 108<li><a href="Static-analysis.html">Static analysis</a></li>
105<li><a href="Theming.html">Theming</a></li> 109<li><a href="Theming.html">Theming</a></li>
diff --git a/doc/_Sidebar.md b/doc/_Sidebar.md
index 1778e3a3..8df2e565 100644
--- a/doc/_Sidebar.md
+++ b/doc/_Sidebar.md
@@ -14,6 +14,7 @@
14 - [Browsing and Searching](Browsing-and-Searching.html) 14 - [Browsing and Searching](Browsing-and-Searching.html)
15 - [Firefox share](Firefox-share.html) 15 - [Firefox share](Firefox-share.html)
16 - [RSS feeds](RSS-feeds.html) 16 - [RSS feeds](RSS-feeds.html)
17 - [REST API](REST-API.html)
17- How To 18- How To
18 - [Backup, restore, import and export](Backup,-restore,-import-and-export.html) 19 - [Backup, restore, import and export](Backup,-restore,-import-and-export.html)
19 - [Copy an existing installation over SSH and serve it locally](Copy-an-existing-installation-over-SSH-and-serve-it-locally.html) 20 - [Copy an existing installation over SSH and serve it locally](Copy-an-existing-installation-over-SSH-and-serve-it-locally.html)
@@ -28,6 +29,7 @@
28 - [3rd party libraries](3rd-party-libraries.html) 29 - [3rd party libraries](3rd-party-libraries.html)
29 - [Plugin System](Plugin-System.html) 30 - [Plugin System](Plugin-System.html)
30 - [Release Shaarli](Release-Shaarli.html) 31 - [Release Shaarli](Release-Shaarli.html)
32 - [Versioning and Branches](Versioning-and-Branches.html)
31 - [Security](Security.html) 33 - [Security](Security.html)
32 - [Static analysis](Static-analysis.html) 34 - [Static analysis](Static-analysis.html)
33 - [Theming](Theming.html) 35 - [Theming](Theming.html)
diff --git a/doc/sidebar.html b/doc/sidebar.html
index 4dad0161..478840d1 100644
--- a/doc/sidebar.html
+++ b/doc/sidebar.html
@@ -18,6 +18,7 @@
18<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li> 18<li><a href="Browsing-and-Searching.html">Browsing and Searching</a></li>
19<li><a href="Firefox-share.html">Firefox share</a></li> 19<li><a href="Firefox-share.html">Firefox share</a></li>
20<li><a href="RSS-feeds.html">RSS feeds</a></li> 20<li><a href="RSS-feeds.html">RSS feeds</a></li>
21<li><a href="REST-API.html">REST API</a></li>
21</ul></li> 22</ul></li>
22<li>How To 23<li>How To
23<ul> 24<ul>
@@ -36,6 +37,7 @@
36<li><a href="3rd-party-libraries.html">3rd party libraries</a></li> 37<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
37<li><a href="Plugin-System.html">Plugin System</a></li> 38<li><a href="Plugin-System.html">Plugin System</a></li>
38<li><a href="Release-Shaarli.html">Release Shaarli</a></li> 39<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
40<li><a href="Versioning-and-Branches.html">Versioning and Branches</a></li>
39<li><a href="Security.html">Security</a></li> 41<li><a href="Security.html">Security</a></li>
40<li><a href="Static-analysis.html">Static analysis</a></li> 42<li><a href="Static-analysis.html">Static analysis</a></li>
41<li><a href="Theming.html">Theming</a></li> 43<li><a href="Theming.html">Theming</a></li>