aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--README.md2
-rw-r--r--application/HttpUtils.php186
-rw-r--r--application/Languages.php21
-rw-r--r--application/NetscapeBookmarkUtils.php141
-rw-r--r--application/PageBuilder.php1
-rw-r--r--application/PluginManager.php8
-rw-r--r--application/Router.php2
-rw-r--r--application/config/ConfigPlugin.php10
-rw-r--r--composer.json8
-rw-r--r--doc/3rd-party-libraries.html9
-rw-r--r--doc/3rd-party-libraries.md1
-rw-r--r--doc/Backup,-restore,-import-and-export.html34
-rw-r--r--doc/Backup,-restore,-import-and-export.md31
-rw-r--r--doc/Browsing-and-searching.html8
-rw-r--r--doc/Coding-guidelines.html8
-rw-r--r--doc/Community-&-Related-software.html11
-rw-r--r--doc/Community-&-Related-software.md3
-rw-r--r--doc/Copy-an-existing-installation-over-SSH-and-serve-it-locally.html58
-rw-r--r--doc/Create-and-serve-multiple-Shaarlis-(farm).html52
-rw-r--r--doc/Datastore-hacks.html8
-rw-r--r--doc/Development.html8
-rw-r--r--doc/Directory-structure.html60
-rw-r--r--doc/Docker.html104
-rw-r--r--doc/Download-CSS-styles-from-an-OPML-list.html12
-rw-r--r--doc/Download-and-Installation.html (renamed from doc/Download.html)88
-rw-r--r--doc/Download-and-Installation.md97
-rw-r--r--doc/Download.md31
-rw-r--r--doc/Example-patch---add-new-via-field-for-links.html8
-rw-r--r--doc/FAQ.html8
-rw-r--r--doc/Firefox-share.html8
-rw-r--r--doc/GnuPG-signature.html58
-rw-r--r--doc/Home.html8
-rw-r--r--doc/Plugin-System.html8
-rw-r--r--doc/Plugins.html8
-rw-r--r--doc/RSS-feeds.html8
-rw-r--r--doc/Release-Shaarli.html69
-rw-r--r--doc/Release-Shaarli.md24
-rw-r--r--doc/Security.html8
-rw-r--r--doc/Server-configuration.html41
-rw-r--r--doc/Server-configuration.md12
-rw-r--r--doc/Server-requirements.html46
-rw-r--r--doc/Server-requirements.md19
-rw-r--r--doc/Server-security.html28
-rw-r--r--doc/Server-security.md14
-rw-r--r--doc/Shaarli-configuration.html277
-rw-r--r--doc/Shaarli-configuration.md298
-rw-r--r--doc/Shaarli-installation.html72
-rw-r--r--doc/Shaarli-installation.md6
-rw-r--r--doc/Sharing-button.html8
-rw-r--r--doc/Static-analysis.html8
-rw-r--r--doc/TODO.html74
-rw-r--r--doc/TODO.md4
-rw-r--r--doc/Theming.html25
-rw-r--r--doc/Theming.md1
-rw-r--r--doc/Troubleshooting.html11
-rw-r--r--doc/Troubleshooting.md3
-rw-r--r--doc/Unit-tests.html110
-rw-r--r--doc/Upgrade-and-migration.html242
-rw-r--r--doc/Upgrade-and-migration.md161
-rw-r--r--doc/Upgrade-from-original-sebsauvage-Shaarli.html74
-rw-r--r--doc/Upgrade-from-original-sebsauvage-Shaarli.md4
-rw-r--r--doc/Usage.html8
-rw-r--r--doc/_Footer.html12
-rw-r--r--doc/_Footer.md2
-rw-r--r--doc/_Sidebar.html16
-rw-r--r--doc/_Sidebar.md8
-rw-r--r--doc/sidebar.html8
-rw-r--r--docker/development/Dockerfile30
-rw-r--r--docker/production/Dockerfile23
-rw-r--r--docker/production/stable/Dockerfile23
-rw-r--r--inc/shaarli.css4
-rw-r--r--index.php176
-rw-r--r--plugins/addlink_toolbar/addlink_toolbar.php2
-rw-r--r--plugins/playvideos/playvideos.php2
-rw-r--r--plugins/wallabag/README.md24
-rw-r--r--plugins/wallabag/wallabag.meta4
-rw-r--r--shaarli_version.php2
-rw-r--r--tests/HttpUtils/GetIpAdressFromProxyTest.php58
-rw-r--r--tests/LanguagesTest.php41
-rw-r--r--tests/NetscapeBookmarkUtils/BookmarkExportTest.php (renamed from tests/NetscapeBookmarkUtilsTest.php)4
-rw-r--r--tests/NetscapeBookmarkUtils/BookmarkImportTest.php546
-rw-r--r--tests/NetscapeBookmarkUtils/input/empty.htm0
-rw-r--r--tests/NetscapeBookmarkUtils/input/internet_explorer_encoding.htm9
-rw-r--r--tests/NetscapeBookmarkUtils/input/netscape_basic.htm11
-rw-r--r--tests/NetscapeBookmarkUtils/input/netscape_nested.htm31
-rw-r--r--tests/NetscapeBookmarkUtils/input/no_doctype.htm7
-rw-r--r--tests/NetscapeBookmarkUtils/input/same_date.htm11
-rw-r--r--tests/PluginManagerTest.php12
-rw-r--r--tests/config/ConfigPluginTest.php12
-rw-r--r--tests/plugins/test/test.meta4
-rw-r--r--tests/utils/config/configInvalid.json.php2
-rw-r--r--tpl/import.html38
-rw-r--r--tpl/pluginsadmin.html5
-rw-r--r--tpl/tools.html2
95 files changed, 2686 insertions, 1207 deletions
diff --git a/.gitattributes b/.gitattributes
index aaf6a39e..d753b1db 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -21,7 +21,6 @@ Dockerfile text
21.gitattributes export-ignore 21.gitattributes export-ignore
22.gitignore export-ignore 22.gitignore export-ignore
23.travis.yml export-ignore 23.travis.yml export-ignore
24composer.json export-ignore
25doc/**/*.json export-ignore 24doc/**/*.json export-ignore
26doc/**/*.md export-ignore 25doc/**/*.md export-ignore
27docker/ export-ignore 26docker/ export-ignore
diff --git a/README.md b/README.md
index d8328d83..5d5b743d 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ It runs the latest development version of Shaarli and is updated/reset daily.
25Login: `demo`; Password: `demo` 25Login: `demo`; Password: `demo`
26 26
27### Installation & upgrade 27### Installation & upgrade
28- [Download](https://github.com/shaarli/Shaarli/wiki/Download) 28- [Download and installation](https://github.com/shaarli/Shaarli/wiki/Download-and-Installation)
29- [Upgrade and migration](https://github.com/shaarli/Shaarli/wiki/Upgrade-and-migration) 29- [Upgrade and migration](https://github.com/shaarli/Shaarli/wiki/Upgrade-and-migration)
30- [Server requirements](https://github.com/shaarli/Shaarli/wiki/Server-requirements) 30- [Server requirements](https://github.com/shaarli/Shaarli/wiki/Server-requirements)
31- [Server configuration](https://github.com/shaarli/Shaarli/wiki/Server-configuration) 31- [Server configuration](https://github.com/shaarli/Shaarli/wiki/Server-configuration)
diff --git a/application/HttpUtils.php b/application/HttpUtils.php
index 2e0792f9..e705cfd6 100644
--- a/application/HttpUtils.php
+++ b/application/HttpUtils.php
@@ -1,6 +1,7 @@
1<?php 1<?php
2/** 2/**
3 * GET an HTTP URL to retrieve its content 3 * GET an HTTP URL to retrieve its content
4 * Uses the cURL library or a fallback method
4 * 5 *
5 * @param string $url URL to get (http://...) 6 * @param string $url URL to get (http://...)
6 * @param int $timeout network timeout (in seconds) 7 * @param int $timeout network timeout (in seconds)
@@ -20,38 +21,177 @@
20 * echo 'There was an error: '.htmlspecialchars($headers[0]); 21 * echo 'There was an error: '.htmlspecialchars($headers[0]);
21 * } 22 * }
22 * 23 *
23 * @see http://php.net/manual/en/function.file-get-contents.php 24 * @see https://secure.php.net/manual/en/ref.curl.php
24 * @see http://php.net/manual/en/function.stream-context-create.php 25 * @see https://secure.php.net/manual/en/functions.anonymous.php
25 * @see http://php.net/manual/en/function.get-headers.php 26 * @see https://secure.php.net/manual/en/function.preg-split.php
27 * @see https://secure.php.net/manual/en/function.explode.php
28 * @see http://stackoverflow.com/q/17641073
29 * @see http://stackoverflow.com/q/9183178
30 * @see http://stackoverflow.com/q/1462720
26 */ 31 */
27function get_http_response($url, $timeout = 30, $maxBytes = 4194304) 32function get_http_response($url, $timeout = 30, $maxBytes = 4194304)
28{ 33{
29 $urlObj = new Url($url); 34 $urlObj = new Url($url);
30 $cleanUrl = $urlObj->idnToAscii(); 35 $cleanUrl = $urlObj->idnToAscii();
31 36
32 if (! filter_var($cleanUrl, FILTER_VALIDATE_URL) || ! $urlObj->isHttp()) { 37 if (!filter_var($cleanUrl, FILTER_VALIDATE_URL) || !$urlObj->isHttp()) {
33 return array(array(0 => 'Invalid HTTP Url'), false); 38 return array(array(0 => 'Invalid HTTP Url'), false);
34 } 39 }
35 40
41 $userAgent =
42 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0)'
43 . ' Gecko/20100101 Firefox/45.0';
44 $acceptLanguage =
45 substr(setlocale(LC_COLLATE, 0), 0, 2) . ',en-US;q=0.7,en;q=0.3';
46 $maxRedirs = 3;
47
48 if (!function_exists('curl_init')) {
49 return get_http_response_fallback(
50 $cleanUrl,
51 $timeout,
52 $maxBytes,
53 $userAgent,
54 $acceptLanguage,
55 $maxRedirs
56 );
57 }
58
59 $ch = curl_init($cleanUrl);
60 if ($ch === false) {
61 return array(array(0 => 'curl_init() error'), false);
62 }
63
64 // General cURL settings
65 curl_setopt($ch, CURLOPT_AUTOREFERER, true);
66 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
67 curl_setopt($ch, CURLOPT_HEADER, true);
68 curl_setopt(
69 $ch,
70 CURLOPT_HTTPHEADER,
71 array('Accept-Language: ' . $acceptLanguage)
72 );
73 curl_setopt($ch, CURLOPT_MAXREDIRS, $maxRedirs);
74 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
75 curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
76 curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
77
78 // Max download size management
79 curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024);
80 curl_setopt($ch, CURLOPT_NOPROGRESS, false);
81 curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,
82 function($arg0, $arg1, $arg2, $arg3, $arg4 = 0) use ($maxBytes)
83 {
84 if (version_compare(phpversion(), '5.5', '<')) {
85 // PHP version lower than 5.5
86 // Callback has 4 arguments
87 $downloaded = $arg1;
88 } else {
89 // Callback has 5 arguments
90 $downloaded = $arg2;
91 }
92 // Non-zero return stops downloading
93 return ($downloaded > $maxBytes) ? 1 : 0;
94 }
95 );
96
97 $response = curl_exec($ch);
98 $errorNo = curl_errno($ch);
99 $errorStr = curl_error($ch);
100 $headSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
101 curl_close($ch);
102
103 if ($response === false) {
104 if ($errorNo == CURLE_COULDNT_RESOLVE_HOST) {
105 /*
106 * Workaround to match fallback method behaviour
107 * Removing this would require updating
108 * GetHttpUrlTest::testGetInvalidRemoteUrl()
109 */
110 return array(false, false);
111 }
112 return array(array(0 => 'curl_exec() error: ' . $errorStr), false);
113 }
114
115 // Formatting output like the fallback method
116 $rawHeaders = substr($response, 0, $headSize);
117
118 // Keep only headers from latest redirection
119 $rawHeadersArrayRedirs = explode("\r\n\r\n", trim($rawHeaders));
120 $rawHeadersLastRedir = end($rawHeadersArrayRedirs);
121
122 $content = substr($response, $headSize);
123 $headers = array();
124 foreach (preg_split('~[\r\n]+~', $rawHeadersLastRedir) as $line) {
125 if (empty($line) or ctype_space($line)) {
126 continue;
127 }
128 $splitLine = explode(': ', $line, 2);
129 if (count($splitLine) > 1) {
130 $key = $splitLine[0];
131 $value = $splitLine[1];
132 if (array_key_exists($key, $headers)) {
133 if (!is_array($headers[$key])) {
134 $headers[$key] = array(0 => $headers[$key]);
135 }
136 $headers[$key][] = $value;
137 } else {
138 $headers[$key] = $value;
139 }
140 } else {
141 $headers[] = $splitLine[0];
142 }
143 }
144
145 return array($headers, $content);
146}
147
148/**
149 * GET an HTTP URL to retrieve its content (fallback method)
150 *
151 * @param string $cleanUrl URL to get (http://... valid and in ASCII form)
152 * @param int $timeout network timeout (in seconds)
153 * @param int $maxBytes maximum downloaded bytes
154 * @param string $userAgent "User-Agent" header
155 * @param string $acceptLanguage "Accept-Language" header
156 * @param int $maxRedr maximum amount of redirections followed
157 *
158 * @return array HTTP response headers, downloaded content
159 *
160 * Output format:
161 * [0] = associative array containing HTTP response headers
162 * [1] = URL content (downloaded data)
163 *
164 * @see http://php.net/manual/en/function.file-get-contents.php
165 * @see http://php.net/manual/en/function.stream-context-create.php
166 * @see http://php.net/manual/en/function.get-headers.php
167 */
168function get_http_response_fallback(
169 $cleanUrl,
170 $timeout,
171 $maxBytes,
172 $userAgent,
173 $acceptLanguage,
174 $maxRedr
175) {
36 $options = array( 176 $options = array(
37 'http' => array( 177 'http' => array(
38 'method' => 'GET', 178 'method' => 'GET',
39 'timeout' => $timeout, 179 'timeout' => $timeout,
40 'user_agent' => 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0)' 180 'user_agent' => $userAgent,
41 .' Gecko/20100101 Firefox/45.0', 181 'header' => "Accept: */*\r\n"
42 'accept_language' => substr(setlocale(LC_COLLATE, 0), 0, 2) . ',en-US;q=0.7,en;q=0.3', 182 . 'Accept-Language: ' . $acceptLanguage
43 ) 183 )
44 ); 184 );
45 185
46 stream_context_set_default($options); 186 stream_context_set_default($options);
47 list($headers, $finalUrl) = get_redirected_headers($cleanUrl); 187 list($headers, $finalUrl) = get_redirected_headers($cleanUrl, $maxRedr);
48 if (! $headers || strpos($headers[0], '200 OK') === false) { 188 if (! $headers || strpos($headers[0], '200 OK') === false) {
49 $options['http']['request_fulluri'] = true; 189 $options['http']['request_fulluri'] = true;
50 stream_context_set_default($options); 190 stream_context_set_default($options);
51 list($headers, $finalUrl) = get_redirected_headers($cleanUrl); 191 list($headers, $finalUrl) = get_redirected_headers($cleanUrl, $maxRedr);
52 } 192 }
53 193
54 if (! $headers || strpos($headers[0], '200 OK') === false) { 194 if (! $headers) {
55 return array($headers, false); 195 return array($headers, false);
56 } 196 }
57 197
@@ -215,3 +355,29 @@ function page_url($server)
215 } 355 }
216 return index_url($server); 356 return index_url($server);
217} 357}
358
359/**
360 * Retrieve the initial IP forwarded by the reverse proxy.
361 *
362 * Inspired from: https://github.com/zendframework/zend-http/blob/master/src/PhpEnvironment/RemoteAddress.php
363 *
364 * @param array $server $_SERVER array which contains HTTP headers.
365 * @param array $trustedIps List of trusted IP from the configuration.
366 *
367 * @return string|bool The forwarded IP, or false if none could be extracted.
368 */
369function getIpAddressFromProxy($server, $trustedIps)
370{
371 $forwardedIpHeader = 'HTTP_X_FORWARDED_FOR';
372 if (empty($server[$forwardedIpHeader])) {
373 return false;
374 }
375
376 $ips = preg_split('/\s*,\s*/', $server[$forwardedIpHeader]);
377 $ips = array_diff($ips, $trustedIps);
378 if (empty($ips)) {
379 return false;
380 }
381
382 return array_pop($ips);
383}
diff --git a/application/Languages.php b/application/Languages.php
new file mode 100644
index 00000000..c8b0a25a
--- /dev/null
+++ b/application/Languages.php
@@ -0,0 +1,21 @@
1<?php
2
3/**
4 * Wrapper function for translation which match the API
5 * of gettext()/_() and ngettext().
6 *
7 * Not doing translation for now.
8 *
9 * @param string $text Text to translate.
10 * @param string $nText The plural message ID.
11 * @param int $nb The number of items for plural forms.
12 *
13 * @return String Text translated.
14 */
15function t($text, $nText = '', $nb = 0) {
16 if (empty($nText)) {
17 return $text;
18 }
19 $actualForm = $nb > 1 ? $nText : $text;
20 return sprintf($actualForm, $nb);
21}
diff --git a/application/NetscapeBookmarkUtils.php b/application/NetscapeBookmarkUtils.php
index fdbb0ad7..c3181254 100644
--- a/application/NetscapeBookmarkUtils.php
+++ b/application/NetscapeBookmarkUtils.php
@@ -51,4 +51,145 @@ class NetscapeBookmarkUtils
51 51
52 return $bookmarkLinks; 52 return $bookmarkLinks;
53 } 53 }
54
55 /**
56 * Generates an import status summary
57 *
58 * @param string $filename name of the file to import
59 * @param int $filesize size of the file to import
60 * @param int $importCount how many links were imported
61 * @param int $overwriteCount how many links were overwritten
62 * @param int $skipCount how many links were skipped
63 *
64 * @return string Summary of the bookmark import status
65 */
66 private static function importStatus(
67 $filename,
68 $filesize,
69 $importCount=0,
70 $overwriteCount=0,
71 $skipCount=0
72 )
73 {
74 $status = 'File '.$filename.' ('.$filesize.' bytes) ';
75 if ($importCount == 0 && $overwriteCount == 0 && $skipCount == 0) {
76 $status .= 'has an unknown file format. Nothing was imported.';
77 } else {
78 $status .= 'was successfully processed: '.$importCount.' links imported, ';
79 $status .= $overwriteCount.' links overwritten, ';
80 $status .= $skipCount.' links skipped.';
81 }
82 return $status;
83 }
84
85 /**
86 * Imports Web bookmarks from an uploaded Netscape bookmark dump
87 *
88 * @param array $post Server $_POST parameters
89 * @param array $file Server $_FILES parameters
90 * @param LinkDB $linkDb Loaded LinkDB instance
91 * @param string $pagecache Page cache
92 *
93 * @return string Summary of the bookmark import status
94 */
95 public static function import($post, $files, $linkDb, $pagecache)
96 {
97 $filename = $files['filetoupload']['name'];
98 $filesize = $files['filetoupload']['size'];
99 $data = file_get_contents($files['filetoupload']['tmp_name']);
100
101 if (strpos($data, '<!DOCTYPE NETSCAPE-Bookmark-file-1>') === false) {
102 return self::importStatus($filename, $filesize);
103 }
104
105 // Overwrite existing links?
106 $overwrite = ! empty($post['overwrite']);
107
108 // Add tags to all imported links?
109 if (empty($post['default_tags'])) {
110 $defaultTags = array();
111 } else {
112 $defaultTags = preg_split(
113 '/[\s,]+/',
114 escape($post['default_tags'])
115 );
116 }
117
118 // links are imported as public by default
119 $defaultPrivacy = 0;
120
121 $parser = new NetscapeBookmarkParser(
122 true, // nested tag support
123 $defaultTags, // additional user-specified tags
124 strval(1 - $defaultPrivacy) // defaultPub = 1 - defaultPrivacy
125 );
126 $bookmarks = $parser->parseString($data);
127
128 $importCount = 0;
129 $overwriteCount = 0;
130 $skipCount = 0;
131
132 foreach ($bookmarks as $bkm) {
133 $private = $defaultPrivacy;
134 if (empty($post['privacy']) || $post['privacy'] == 'default') {
135 // use value from the imported file
136 $private = $bkm['pub'] == '1' ? 0 : 1;
137 } else if ($post['privacy'] == 'private') {
138 // all imported links are private
139 $private = 1;
140 } else if ($post['privacy'] == 'public') {
141 // all imported links are public
142 $private = 0;
143 }
144
145 $newLink = array(
146 'title' => $bkm['title'],
147 'url' => $bkm['uri'],
148 'description' => $bkm['note'],
149 'private' => $private,
150 'linkdate'=> '',
151 'tags' => $bkm['tags']
152 );
153
154 $existingLink = $linkDb->getLinkFromUrl($bkm['uri']);
155
156 if ($existingLink !== false) {
157 if ($overwrite === false) {
158 // Do not overwrite an existing link
159 $skipCount++;
160 continue;
161 }
162
163 // Overwrite an existing link, keep its date
164 $newLink['linkdate'] = $existingLink['linkdate'];
165 $linkDb[$existingLink['linkdate']] = $newLink;
166 $importCount++;
167 $overwriteCount++;
168 continue;
169 }
170
171 // Add a new link
172 $newLinkDate = new DateTime('@'.strval($bkm['time']));
173 while (!empty($linkDb[$newLinkDate->format(LinkDB::LINK_DATE_FORMAT)])) {
174 // Ensure the date/time is not already used
175 // - this hack is necessary as the date/time acts as a primary key
176 // - apply 1 second increments until an unused index is found
177 // See https://github.com/shaarli/Shaarli/issues/351
178 $newLinkDate->add(new DateInterval('PT1S'));
179 }
180 $linkDbDate = $newLinkDate->format(LinkDB::LINK_DATE_FORMAT);
181 $newLink['linkdate'] = $linkDbDate;
182 $linkDb[$linkDbDate] = $newLink;
183 $importCount++;
184 }
185
186 $linkDb->savedb($pagecache);
187 return self::importStatus(
188 $filename,
189 $filesize,
190 $importCount,
191 $overwriteCount,
192 $skipCount
193 );
194 }
54} 195}
diff --git a/application/PageBuilder.php b/application/PageBuilder.php
index 1ca0260a..42932f32 100644
--- a/application/PageBuilder.php
+++ b/application/PageBuilder.php
@@ -80,6 +80,7 @@ class PageBuilder
80 if (!empty($GLOBALS['plugin_errors'])) { 80 if (!empty($GLOBALS['plugin_errors'])) {
81 $this->tpl->assign('plugin_errors', $GLOBALS['plugin_errors']); 81 $this->tpl->assign('plugin_errors', $GLOBALS['plugin_errors']);
82 } 82 }
83 $this->tpl->assign('token', getToken($this->conf));
83 // To be removed with a proper theme configuration. 84 // To be removed with a proper theme configuration.
84 $this->tpl->assign('conf', $this->conf); 85 $this->tpl->assign('conf', $this->conf);
85 } 86 }
diff --git a/application/PluginManager.php b/application/PluginManager.php
index dca7e63e..1e132a7f 100644
--- a/application/PluginManager.php
+++ b/application/PluginManager.php
@@ -185,7 +185,11 @@ class PluginManager
185 continue; 185 continue;
186 } 186 }
187 187
188 $metaData[$plugin]['parameters'][$param] = ''; 188 $metaData[$plugin]['parameters'][$param]['value'] = '';
189 // Optional parameter description in parameter.PARAM_NAME=
190 if (isset($metaData[$plugin]['parameter.'. $param])) {
191 $metaData[$plugin]['parameters'][$param]['desc'] = $metaData[$plugin]['parameter.'. $param];
192 }
189 } 193 }
190 } 194 }
191 195
@@ -210,4 +214,4 @@ class PluginFileNotFoundException extends Exception
210 { 214 {
211 $this->message = 'Plugin "'. $pluginName .'" files not found.'; 215 $this->message = 'Plugin "'. $pluginName .'" files not found.';
212 } 216 }
213} \ No newline at end of file 217}
diff --git a/application/Router.php b/application/Router.php
index 2c3934b0..caed4a28 100644
--- a/application/Router.php
+++ b/application/Router.php
@@ -138,4 +138,4 @@ class Router
138 138
139 return self::$PAGE_LINKLIST; 139 return self::$PAGE_LINKLIST;
140 } 140 }
141} \ No newline at end of file 141}
diff --git a/application/config/ConfigPlugin.php b/application/config/ConfigPlugin.php
index 047d2b03..cb0b6fce 100644
--- a/application/config/ConfigPlugin.php
+++ b/application/config/ConfigPlugin.php
@@ -80,9 +80,13 @@ function validate_plugin_order($formData)
80} 80}
81 81
82/** 82/**
83 * Affect plugin parameters values into plugins array. 83 * Affect plugin parameters values from the ConfigManager into plugins array.
84 * 84 *
85 * @param mixed $plugins Plugins array ($plugins[<plugin_name>]['parameters']['param_name'] = <value>. 85 * @param mixed $plugins Plugins array:
86 * $plugins[<plugin_name>]['parameters'][<param_name>] = [
87 * 'value' => <value>,
88 * 'desc' => <description>
89 * ]
86 * @param mixed $conf Plugins configuration. 90 * @param mixed $conf Plugins configuration.
87 * 91 *
88 * @return mixed Updated $plugins array. 92 * @return mixed Updated $plugins array.
@@ -97,7 +101,7 @@ function load_plugin_parameter_values($plugins, $conf)
97 101
98 foreach ($plugin['parameters'] as $key => $param) { 102 foreach ($plugin['parameters'] as $key => $param) {
99 if (!empty($conf[$key])) { 103 if (!empty($conf[$key])) {
100 $out[$name]['parameters'][$key] = $conf[$key]; 104 $out[$name]['parameters'][$key]['value'] = $conf[$key];
101 } 105 }
102 } 106 }
103 } 107 }
diff --git a/composer.json b/composer.json
index dc1b509e..89a7e446 100644
--- a/composer.json
+++ b/composer.json
@@ -9,15 +9,9 @@
9 "wiki": "https://github.com/shaarli/Shaarli/wiki" 9 "wiki": "https://github.com/shaarli/Shaarli/wiki"
10 }, 10 },
11 "keywords": ["bookmark", "link", "share", "web"], 11 "keywords": ["bookmark", "link", "share", "web"],
12 "repositories": [
13 {
14 "type": "vcs",
15 "url": "https://github.com/shaarli/netscape-bookmark-parser"
16 }
17 ],
18 "require": { 12 "require": {
19 "php": ">=5.3.4", 13 "php": ">=5.3.4",
20 "kafene/netscape-bookmark-parser": "dev-shaarli-stable" 14 "shaarli/netscape-bookmark-parser": "1.*"
21 }, 15 },
22 "require-dev": { 16 "require-dev": {
23 "phpmd/phpmd" : "@stable", 17 "phpmd/phpmd" : "@stable",
diff --git a/doc/3rd-party-libraries.html b/doc/3rd-party-libraries.html
index f6ff4763..946ca037 100644
--- a/doc/3rd-party-libraries.html
+++ b/doc/3rd-party-libraries.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
@@ -81,6 +79,7 @@
81</ul> 79</ul>
82<h2 id="php">PHP</h2> 80<h2 id="php">PHP</h2>
83<ul> 81<ul>
82<li><a href="https://github.com/shaarli/netscape-bookmark-parser">shaarli/netscape-bookmark-parser</a> - Netscape bookmark parser<a href=".html"></a></li>
84<li><a href="https://github.com/rainphp/raintpl">RainTPL</a> - HTML templating for PHP<a href=".html"></a></li> 83<li><a href="https://github.com/rainphp/raintpl">RainTPL</a> - HTML templating for PHP<a href=".html"></a></li>
85</ul> 84</ul>
86</body> 85</body>
diff --git a/doc/3rd-party-libraries.md b/doc/3rd-party-libraries.md
index 3101c90a..e6370549 100644
--- a/doc/3rd-party-libraries.md
+++ b/doc/3rd-party-libraries.md
@@ -10,4 +10,5 @@
10- [qr.js](http://neocotic.com/qr.js/) ([GitHub](https://github.com/neocotic/qr.js)) - QR code generation[](.html) 10- [qr.js](http://neocotic.com/qr.js/) ([GitHub](https://github.com/neocotic/qr.js)) - QR code generation[](.html)
11 11
12## PHP 12## PHP
13- [shaarli/netscape-bookmark-parser](https://github.com/shaarli/netscape-bookmark-parser) - Netscape bookmark parser[](.html)
13- [RainTPL](https://github.com/rainphp/raintpl) - HTML templating for PHP[](.html) 14- [RainTPL](https://github.com/rainphp/raintpl) - HTML templating for PHP[](.html)
diff --git a/doc/Backup,-restore,-import-and-export.html b/doc/Backup,-restore,-import-and-export.html
index 4d72728e..a4a48ad7 100644
--- a/doc/Backup,-restore,-import-and-export.html
+++ b/doc/Backup,-restore,-import-and-export.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,15 +96,21 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="backup-restore-import-and-export">Backup, restore, import and export</h1> 102<h1 id="backup-restore-import-and-export">Backup, restore, import and export</h1>
103<ul>
104<li><a href="#backup-and-restore-the-datastore-file">Backup and restore the datastore file</a><a href=".html"></a></li>
105<li><a href="#export-links-as">Export links as...</a><a href=".html"></a></li>
106<li><a href="#import-links-from">Import links from...</a><a href=".html"></a></li>
107<li><a href="#import-shaarli-links-to-firefox">Import Shaarli links to Firefox</a><a href=".html"></a></li>
108</ul>
109<hr />
105<h2 id="backup-and-restore-the-datastore-file">Backup and restore the datastore file</h2> 110<h2 id="backup-and-restore-the-datastore-file">Backup and restore the datastore file</h2>
106<p>Backup the file <code>data/datastore.php</code> (by FTP or SSH). Restore by putting the file back in place.</p> 111<p>Backup the file <code>data/datastore.php</code> (by FTP or SSH). Restore by putting the file back in place.</p>
107<p>Example command:</p> 112<p>Example command:</p>
108<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">rsync</span> -avzP my.server.com:/var/www/shaarli/data/datastore.php datastore-<span class="ot">$(</span><span class="kw">date</span> +%Y-%m-%d_%H%M<span class="ot">)</span>.php</code></pre></div> 113<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="fu">rsync</span> -avzP my.server.com:/var/www/shaarli/data/datastore.php datastore-<span class="va">$(</span><span class="fu">date</span> +%Y-%m-%d_%H%M<span class="va">)</span>.php</code></pre></div>
109<h2 id="export-links-as...">Export links as...</h2> 114<h2 id="export-links-as...">Export links as...</h2>
110<p>To export links as an HTML file, under <em>Tools &gt; Export</em>, choose:</p> 115<p>To export links as an HTML file, under <em>Tools &gt; Export</em>, choose:</p>
111<ul> 116<ul>
@@ -118,7 +123,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
118<li>This can be done using the <a href="https://github.com/nodiscc/shaarchiver">shaarchiver</a> tool.<a href=".html"></a></li> 123<li>This can be done using the <a href="https://github.com/nodiscc/shaarchiver">shaarchiver</a> tool.<a href=".html"></a></li>
119</ul> 124</ul>
120<p>Example command:</p> 125<p>Example command:</p>
121<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">./export-bookmarks.py</span> --url=https://my.server.com/shaarli --username=myusername --password=mysupersecretpassword --download-dir=./ --type=all</code></pre></div> 126<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="ex">./export-bookmarks.py</span> --url=https://my.server.com/shaarli --username=myusername --password=mysupersecretpassword --download-dir=./ --type=all</code></pre></div>
122<h2 id="import-links-from...">Import links from...</h2> 127<h2 id="import-links-from...">Import links from...</h2>
123<h3 id="diigo">Diigo</h3> 128<h3 id="diigo">Diigo</h3>
124<p>If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.)</p> 129<p>If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.)</p>
@@ -126,5 +131,20 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
126<p>See <a href="https://github.com/sebsauvage/Shaarli/issues/146">this issue</a> for import tweaks.<a href=".html"></a></p> 131<p>See <a href="https://github.com/sebsauvage/Shaarli/issues/146">this issue</a> for import tweaks.<a href=".html"></a></p>
127<h3 id="semanticscuttle">SemanticScuttle</h3> 132<h3 id="semanticscuttle">SemanticScuttle</h3>
128<p>To correctly import the tags from a <a href="http://semanticscuttle.sourceforge.net/">SemanticScuttle</a> HTML export, edit the HTML file before importing and replace all occurences of <code>tags=</code> (lowercase) to <code>TAGS=</code> (uppercase).<a href=".html"></a></p> 133<p>To correctly import the tags from a <a href="http://semanticscuttle.sourceforge.net/">SemanticScuttle</a> HTML export, edit the HTML file before importing and replace all occurences of <code>tags=</code> (lowercase) to <code>TAGS=</code> (uppercase).<a href=".html"></a></p>
134<h3 id="scuttle">Scuttle</h3>
135<p>Shaarli cannot import data directly from <a href="https://github.com/scronide/scuttle">Scuttle</a>. However, you can use this third party tool: <a href="https://github.com/q2apro/scuttle-to-shaarli" class="uri">https://github.com/q2apro/scuttle-to-shaarli</a> to export the Scuttle database to the Netscape HTML format compatible with the Shaarli importer.<a href=".html"></a></p>
136<h2 id="import-shaarli-links-to-firefox">Import Shaarli links to Firefox</h2>
137<ul>
138<li>Export your Shaarli links as described above.</li>
139<li>For compatibility reasons, check <code>Prepend note permalinks with this Shaarli instance's URL (useful to import bookmarks in a web browser)</code></li>
140<li>In Firefox, open the bookmark manager (not the sidebar! <code>Bookmarks menu &gt; Show all bookmarks</code> or <code>Ctrl+Shift+B</code>)</li>
141<li>Select <code>Import and Backup &gt; Import bookmarks in HTML format</code></li>
142</ul>
143<p>Your bookmarks will be imported in Firefox, ready to use, with tags and descriptions retained. &quot;Self&quot; (notes) shaares will still point to the Shaarli instance you exported them from, but the note text can be viewed directly in the bookmark properties inside your browser. Depending on the number of bookmarks, the import can take some time.</p>
144<p>You may be interested in these Firefox addons to manage links imported from Shaarli</p>
145<ul>
146<li><a href="https://addons.mozilla.org/en-US/firefox/addon/bookmark-deduplicator/">Bookmark Deduplicator</a> - provides an easy way to deduplicate your bookmarks<a href=".html"></a></li>
147<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tagsieve/">TagSieve</a> - browse your bookmarks by their tags<a href=".html"></a></li>
148</ul>
129</body> 149</body>
130</html> 150</html>
diff --git a/doc/Backup,-restore,-import-and-export.md b/doc/Backup,-restore,-import-and-export.md
index cf6b9f48..9f5598ef 100644
--- a/doc/Backup,-restore,-import-and-export.md
+++ b/doc/Backup,-restore,-import-and-export.md
@@ -1,4 +1,12 @@
1#Backup, restore, import and export 1#Backup, restore, import and export
2 * [Backup and restore the datastore file](#backup-and-restore-the-datastore-file)[](.html)
3 * [Export links as...](#export-links-as)[](.html)
4 * [Import links from...](#import-links-from)[](.html)
5 * [Import Shaarli links to Firefox](#import-shaarli-links-to-firefox)[](.html)
6
7
8----------------------
9
2## Backup and restore the datastore file 10## Backup and restore the datastore file
3 11
4Backup the file `data/datastore.php` (by FTP or SSH). Restore by putting the file back in place. 12Backup the file `data/datastore.php` (by FTP or SSH). Restore by putting the file back in place.
@@ -9,6 +17,7 @@ rsync -avzP my.server.com:/var/www/shaarli/data/datastore.php datastore-$(date +
9``` 17```
10 18
11## Export links as... 19## Export links as...
20
12To export links as an HTML file, under _Tools > Export_, choose: 21To export links as an HTML file, under _Tools > Export_, choose:
13- _Export all_ to export both public and private links 22- _Export all_ to export both public and private links
14- _Export public_ to export public links only 23- _Export public_ to export public links only
@@ -23,13 +32,35 @@ Example command:
23``` 32```
24 33
25## Import links from... 34## Import links from...
35
36
26### Diigo 37### Diigo
27 38
28If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.) 39If you export your bookmark from Diigo, make sure you use the Delicious export, not the Netscape export. (Their Netscape export is broken, and they don't seem to be interested in fixing it.)
29 40
41
30### Mister Wong 42### Mister Wong
43
31See [this issue](https://github.com/sebsauvage/Shaarli/issues/146) for import tweaks.[](.html) 44See [this issue](https://github.com/sebsauvage/Shaarli/issues/146) for import tweaks.[](.html)
32 45
33### SemanticScuttle 46### SemanticScuttle
34 47
35To correctly import the tags from a [SemanticScuttle](http://semanticscuttle.sourceforge.net/) HTML export, edit the HTML file before importing and replace all occurences of `tags=` (lowercase) to `TAGS=` (uppercase).[](.html) 48To correctly import the tags from a [SemanticScuttle](http://semanticscuttle.sourceforge.net/) HTML export, edit the HTML file before importing and replace all occurences of `tags=` (lowercase) to `TAGS=` (uppercase).[](.html)
49
50### Scuttle
51
52Shaarli cannot import data directly from [Scuttle](https://github.com/scronide/scuttle). However, you can use this third party tool: https://github.com/q2apro/scuttle-to-shaarli to export the Scuttle database to the Netscape HTML format compatible with the Shaarli importer.[](.html)
53
54## Import Shaarli links to Firefox
55
56 * Export your Shaarli links as described above.
57 * For compatibility reasons, check `Prepend note permalinks with this Shaarli instance's URL (useful to import bookmarks in a web browser)`
58 * In Firefox, open the bookmark manager (not the sidebar! `Bookmarks menu > Show all bookmarks` or `Ctrl+Shift+B`)
59 * Select `Import and Backup > Import bookmarks in HTML format`
60
61Your bookmarks will be imported in Firefox, ready to use, with tags and descriptions retained. "Self" (notes) shaares will still point to the Shaarli instance you exported them from, but the note text can be viewed directly in the bookmark properties inside your browser. Depending on the number of bookmarks, the import can take some time.
62
63You may be interested in these Firefox addons to manage links imported from Shaarli
64
65 * [Bookmark Deduplicator](https://addons.mozilla.org/en-US/firefox/addon/bookmark-deduplicator/) - provides an easy way to deduplicate your bookmarks[](.html)
66 * [TagSieve](https://addons.mozilla.org/en-US/firefox/addon/tagsieve/) - browse your bookmarks by their tags[](.html)
diff --git a/doc/Browsing-and-searching.html b/doc/Browsing-and-searching.html
index 39806128..23001bcb 100644
--- a/doc/Browsing-and-searching.html
+++ b/doc/Browsing-and-searching.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Coding-guidelines.html b/doc/Coding-guidelines.html
index add69631..1a2a9351 100644
--- a/doc/Coding-guidelines.html
+++ b/doc/Coding-guidelines.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Community-&-Related-software.html b/doc/Community-&-Related-software.html
index 77b9793f..accbacdc 100644
--- a/doc/Community-&-Related-software.html
+++ b/doc/Community-&-Related-software.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
@@ -84,8 +82,9 @@
84<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> 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>
85<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> 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>
86<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> 84<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>
87<li><a href="https://github.com/NerosTie/emojione">emojione</a> by <a href="https://github.com/NerosTie/emojione">@NerosTie</a>: Add colorful emojis 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>
88<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> 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>
87<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>
89</ul> 88</ul>
90<h3 id="themes">Themes</h3> 89<h3 id="themes">Themes</h3>
91<p>See <a href="Theming.html">Theming</a> for the list of community-contributed themes, and an installation guide.</p> 90<p>See <a href="Theming.html">Theming</a> for the list of community-contributed themes, and an installation guide.</p>
diff --git a/doc/Community-&-Related-software.md b/doc/Community-&-Related-software.md
index 03a3dea9..3945d005 100644
--- a/doc/Community-&-Related-software.md
+++ b/doc/Community-&-Related-software.md
@@ -21,8 +21,9 @@ _TODO: contact repos owners to see if they'd like to standardize their work with
21 * [autosave](https://github.com/kalvn/shaarli-plugin-autosave) by [@kalvn](https://github.com/kalvn): Automatically saves data when editing a link to avoid any loss in case of crash or unexpected shutdown.[](.html) 21 * [autosave](https://github.com/kalvn/shaarli-plugin-autosave) by [@kalvn](https://github.com/kalvn): Automatically saves data when editing a link to avoid any loss in case of crash or unexpected shutdown.[](.html)
22 * [Code Coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter.[](.html) 22 * [Code Coloration](https://github.com/ArthurHoaro/code-coloration) by [@ArthurHoaro](https://github.com/ArthurHoaro): client side code syntax highlighter.[](.html)
23 * [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks.[](.html) 23 * [social](https://github.com/alexisju/social) by [@alexisju](https://github.com/alexisju): share links to social networks.[](.html)
24 * [emojione](https://github.com/NerosTie/emojione) by [@NerosTie](https://github.com/NerosTie/emojione): Add colorful emojis to your Shaarli.[](.html) 24 * [emojione](https://github.com/NerosTie/emojione) by [@NerosTie](https://github.com/NerosTie): Add colorful emojis to your Shaarli.[](.html)
25 * [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.[](.html) 25 * [launch](https://github.com/ArthurHoaro/launch-plugin) - Launch Plugin is a plugin designed to enhance and customize Launch Theme for Shaarli.[](.html)
26 * [Disqus](https://github.com/kalvn/shaarli-plugin-disqus) by [@kalvn](https://github.com/kalvn): Adds Disqus comment system to your Shaarli.[](.html)
26 27
27 28
28### Themes 29### Themes
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 edb1555f..9efb1ad6 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
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -111,55 +109,55 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
111<span class="co">#Usage: ./local-shaarli.sh</span> 109<span class="co">#Usage: ./local-shaarli.sh</span>
112<span class="co">#Author: nodiscc (nodiscc@gmail.com)</span> 110<span class="co">#Author: nodiscc (nodiscc@gmail.com)</span>
113<span class="co">#License: MIT (http://opensource.org/licenses/MIT)</span> 111<span class="co">#License: MIT (http://opensource.org/licenses/MIT)</span>
114<span class="kw">set</span> <span class="kw">-o</span> errexit 112<span class="kw">set</span> <span class="ex">-o</span> errexit
115<span class="kw">set</span> <span class="kw">-o</span> nounset 113<span class="kw">set</span> <span class="ex">-o</span> nounset
116 114
117<span class="co">##### CONFIG #################</span> 115<span class="co">##### CONFIG #################</span>
118<span class="co">#The port used by php&#39;s local server</span> 116<span class="co">#The port used by php&#39;s local server</span>
119<span class="ot">php_local_port=</span>7431 117<span class="va">php_local_port=</span>7431
120 118
121<span class="co">#Name of the SSH server and path where Shaarli is installed</span> 119<span class="co">#Name of the SSH server and path where Shaarli is installed</span>
122<span class="co">#TODO: pass these as command-line arguments</span> 120<span class="co">#TODO: pass these as command-line arguments</span>
123<span class="ot">remotehost=</span><span class="st">&quot;my.ssh.server&quot;</span> 121<span class="va">remotehost=</span><span class="st">&quot;my.ssh.server&quot;</span>
124<span class="ot">remote_shaarli_dir=</span><span class="st">&quot;/var/www/shaarli&quot;</span> 122<span class="va">remote_shaarli_dir=</span><span class="st">&quot;/var/www/shaarli&quot;</span>
125 123
126 124
127<span class="co">###### FUNCTIONS #############</span> 125<span class="co">###### FUNCTIONS #############</span>
128<span class="fu">_main()</span> <span class="kw">{</span> 126<span class="fu">_main()</span> <span class="kw">{</span>
129 <span class="kw">_CBSyncShaarli</span> 127 <span class="ex">_CBSyncShaarli</span>
130 <span class="kw">_CBServeShaarli</span> 128 <span class="ex">_CBServeShaarli</span>
131<span class="kw">}</span> 129<span class="kw">}</span>
132 130
133<span class="fu">_CBSyncShaarli()</span> <span class="kw">{</span> 131<span class="fu">_CBSyncShaarli()</span> <span class="kw">{</span>
134 <span class="ot">remote_temp_dir=$(</span><span class="kw">ssh</span> <span class="ot">$remotehost</span> mktemp -d<span class="ot">)</span> 132 <span class="va">remote_temp_dir=$(</span><span class="fu">ssh</span> <span class="va">$remotehost</span> mktemp -d<span class="va">)</span>
135 <span class="ot">remote_ssh_user=$(</span><span class="kw">ssh</span> <span class="ot">$remotehost</span> whoami<span class="ot">)</span> 133 <span class="va">remote_ssh_user=$(</span><span class="fu">ssh</span> <span class="va">$remotehost</span> whoami<span class="va">)</span>
136 <span class="kw">ssh</span> -t <span class="st">&quot;</span><span class="ot">$remotehost</span><span class="st">&quot;</span> sudo cp -r <span class="st">&quot;</span><span class="ot">$remote_shaarli_dir</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="ot">$remote_temp_dir</span><span class="st">&quot;</span> 134 <span class="fu">ssh</span> -t <span class="st">&quot;</span><span class="va">$remotehost</span><span class="st">&quot;</span> sudo cp -r <span class="st">&quot;</span><span class="va">$remote_shaarli_dir</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$remote_temp_dir</span><span class="st">&quot;</span>
137 <span class="kw">ssh</span> -t <span class="st">&quot;</span><span class="ot">$remotehost</span><span class="st">&quot;</span> sudo chown -R <span class="st">&quot;</span><span class="ot">$remote_ssh_user</span><span class="st">&quot;</span>:<span class="st">&quot;</span><span class="ot">$remote_ssh_user</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="ot">$remote_temp_dir</span><span class="st">&quot;</span> 135 <span class="fu">ssh</span> -t <span class="st">&quot;</span><span class="va">$remotehost</span><span class="st">&quot;</span> sudo chown -R <span class="st">&quot;</span><span class="va">$remote_ssh_user</span><span class="st">&quot;</span>:<span class="st">&quot;</span><span class="va">$remote_ssh_user</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$remote_temp_dir</span><span class="st">&quot;</span>
138 <span class="kw">scp</span> -rq <span class="st">&quot;</span><span class="ot">$remotehost</span><span class="st">&quot;</span>:<span class="st">&quot;</span><span class="ot">$remote_temp_dir</span><span class="st">&quot;</span> local-shaarli 136 <span class="fu">scp</span> -rq <span class="st">&quot;</span><span class="va">$remotehost</span><span class="st">&quot;</span>:<span class="st">&quot;</span><span class="va">$remote_temp_dir</span><span class="st">&quot;</span> local-shaarli
139 <span class="kw">ssh</span> <span class="st">&quot;</span><span class="ot">$remotehost</span><span class="st">&quot;</span> rm -r <span class="st">&quot;</span><span class="ot">$remote_temp_dir</span><span class="st">&quot;</span> 137 <span class="fu">ssh</span> <span class="st">&quot;</span><span class="va">$remotehost</span><span class="st">&quot;</span> rm -r <span class="st">&quot;</span><span class="va">$remote_temp_dir</span><span class="st">&quot;</span>
140<span class="kw">}</span> 138<span class="kw">}</span>
141 139
142<span class="fu">_CBServeShaarli()</span> <span class="kw">{</span> 140<span class="fu">_CBServeShaarli()</span> <span class="kw">{</span>
143 <span class="co">#TODO: allow serving a previously downloaded Shaarli</span> 141 <span class="co">#TODO: allow serving a previously downloaded Shaarli</span>
144 <span class="co">#TODO: ask before overwriting local copy, if it exists</span> 142 <span class="co">#TODO: ask before overwriting local copy, if it exists</span>
145 <span class="kw">cd</span> local-shaarli/ 143 <span class="bu">cd</span> local-shaarli/
146 <span class="kw">php</span> -S localhost:<span class="ot">${php_local_port}</span> 144 <span class="ex">php</span> -S localhost:<span class="va">${php_local_port}</span>
147 <span class="kw">echo</span> <span class="st">&quot;Please go to http://localhost:</span><span class="ot">${php_local_port}</span><span class="st">&quot;</span> 145 <span class="bu">echo</span> <span class="st">&quot;Please go to http://localhost:</span><span class="va">${php_local_port}</span><span class="st">&quot;</span>
148<span class="kw">}</span> 146<span class="kw">}</span>
149 147
150 148
151<span class="co">##### MAIN #################</span> 149<span class="co">##### MAIN #################</span>
152 150
153<span class="kw">_main</span></code></pre></div> 151<span class="ex">_main</span></code></pre></div>
154<p>This outputs:</p> 152<p>This outputs:</p>
155<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">./local-shaarli.sh</span> 153<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">./local-shaarli.sh</span>
156<span class="kw">PHP</span> 5.6.0RC4 Development Server started at Mon Sep 1 21:56:19 2014 154<span class="ex">PHP</span> 5.6.0RC4 Development Server started at Mon Sep 1 21:56:19 2014
157<span class="kw">Listening</span> on http://localhost:7431 155<span class="ex">Listening</span> on http://localhost:7431
158<span class="kw">Document</span> root is /home/user/local-shaarli/shaarli 156<span class="ex">Document</span> root is /home/user/local-shaarli/shaarli
159<span class="kw">Press</span> Ctrl-C to quit. 157<span class="ex">Press</span> Ctrl-C to quit.
160 158
161[<span class="kw">Mon</span> Sep 1 21:56:27 2014] ::1:57868 [200]: /[](.html) 159[<span class="ex">Mon</span> Sep 1 21:56:27 2014] ::1:57868 [200]: /[](.html)
162[<span class="kw">Mon</span> Sep 1 21:56:27 2014] ::1:57869 [200]: /index.html[](.html) 160[<span class="ex">Mon</span> Sep 1 21:56:27 2014] ::1:57869 [200]: /index.html[](.html)
163[<span class="kw">Mon</span> Sep 1 21:56:37 2014] ::1:57881 [200]: /...[](.html)</code></pre></div> 161[<span class="ex">Mon</span> Sep 1 21:56:37 2014] ::1:57881 [200]: /...[](.html)</code></pre></div>
164</body> 162</body>
165</html> 163</html>
diff --git a/doc/Create-and-serve-multiple-Shaarlis-(farm).html b/doc/Create-and-serve-multiple-Shaarlis-(farm).html
index 933144e4..672e4bf3 100644
--- a/doc/Create-and-serve-multiple-Shaarlis-(farm).html
+++ b/doc/Create-and-serve-multiple-Shaarlis-(farm).html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,33 +96,32 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="create-and-serve-multiple-shaarlis-farm">Create and serve multiple Shaarlis (farm)</h1> 102<h1 id="create-and-serve-multiple-shaarlis-farm">Create and serve multiple Shaarlis (farm)</h1>
105<p>Example bash script (creates multiple shaarli instances and generates an HTML index of them)</p> 103<p>Example bash script (creates multiple shaarli instances and generates an HTML index of them)</p>
106<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co">#!/bin/bash</span> 104<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co">#!/bin/bash</span>
107<span class="kw">set</span> <span class="kw">-o</span> errexit 105<span class="kw">set</span> <span class="ex">-o</span> errexit
108<span class="kw">set</span> <span class="kw">-o</span> nounset 106<span class="kw">set</span> <span class="ex">-o</span> nounset
109 107
110<span class="co">#config</span> 108<span class="co">#config</span>
111<span class="ot">shaarli_base_dir=</span><span class="st">&#39;/var/www/shaarli&#39;</span> 109<span class="va">shaarli_base_dir=</span><span class="st">&#39;/var/www/shaarli&#39;</span>
112<span class="ot">accounts=</span><span class="st">&#39;bob john whatever username&#39;</span> 110<span class="va">accounts=</span><span class="st">&#39;bob john whatever username&#39;</span>
113<span class="ot">shaarli_repo_url=</span><span class="st">&#39;https://github.com/shaarli/Shaarli&#39;</span> 111<span class="va">shaarli_repo_url=</span><span class="st">&#39;https://github.com/shaarli/Shaarli&#39;</span>
114<span class="ot">ref=</span><span class="st">&quot;master&quot;</span> 112<span class="va">ref=</span><span class="st">&quot;master&quot;</span>
115 113
116<span class="co">#clone multiple shaarli instances</span> 114<span class="co">#clone multiple shaarli instances</span>
117<span class="kw">if [</span> <span class="ot">!</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">&quot;</span><span class="kw"> ]</span>; <span class="kw">then</span> <span class="kw">mkdir</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(.html)</span> 115<span class="kw">if</span><span class="bu"> [</span> <span class="ot">!</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">&quot;</span><span class="bu"> ]</span>; <span class="kw">then</span> <span class="fu">mkdir</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(</span><span class="ex">.html</span><span class="kw">)</span>
118 116
119<span class="kw">for</span> <span class="kw">account</span> in <span class="ot">$accounts</span><span class="kw">;</span> <span class="kw">do</span> 117<span class="kw">for</span> <span class="ex">account</span> in <span class="va">$accounts</span><span class="kw">;</span> <span class="kw">do</span>
120 <span class="kw">if [</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">/</span><span class="ot">$account</span><span class="st">&quot;</span><span class="kw"> ]</span>;[]<span class="kw">(.html)</span> 118 <span class="kw">if</span><span class="bu"> [</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">/</span><span class="va">$account</span><span class="st">&quot;</span><span class="bu"> ]</span>;[]<span class="kw">(</span><span class="ex">.html</span><span class="kw">)</span>
121 <span class="kw">then</span> <span class="kw">echo</span> <span class="st">&quot;[info] account </span><span class="ot">$account</span><span class="st"> already exists, skipping&quot;</span><span class="kw">;</span>[]<span class="kw">(.html)</span> 119 <span class="kw">then</span> <span class="bu">echo</span> <span class="st">&quot;[info] account </span><span class="va">$account</span><span class="st"> already exists, skipping&quot;</span><span class="kw">;</span>[]<span class="kw">(</span><span class="ex">.html</span><span class="kw">)</span>
122 <span class="kw">else</span> <span class="kw">echo</span> <span class="st">&quot;[info] creating new account </span><span class="ot">$account</span><span class="st"> ...&quot;</span><span class="kw">;</span> <span class="kw">git</span> clone --quiet <span class="st">&quot;</span><span class="ot">$shaarli_repo_url</span><span class="st">&quot;</span> -b <span class="st">&quot;</span><span class="ot">$ref</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">/</span><span class="ot">$account</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(.html)</span> 120 <span class="kw">else</span> <span class="bu">echo</span> <span class="st">&quot;[info] creating new account </span><span class="va">$account</span><span class="st"> ...&quot;</span><span class="kw">;</span> <span class="fu">git</span> clone --quiet <span class="st">&quot;</span><span class="va">$shaarli_repo_url</span><span class="st">&quot;</span> -b <span class="st">&quot;</span><span class="va">$ref</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">/</span><span class="va">$account</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(</span><span class="ex">.html</span><span class="kw">)</span>
123<span class="kw">done</span> 121<span class="kw">done</span>
124 122
125<span class="co">#generate html index of shaarlis</span> 123<span class="co">#generate html index of shaarlis</span>
126<span class="ot">htmlhead=</span><span class="st">&#39;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</span> 124<span class="va">htmlhead=</span><span class="st">&#39;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</span>
127<span class="st">&lt;!-- Minimal html template thanks to http://www.sitepoint.com/a-minimal-html-document/ --&gt;</span> 125<span class="st">&lt;!-- Minimal html template thanks to http://www.sitepoint.com/a-minimal-html-document/ --&gt;</span>
128<span class="st">&lt;html lang=&quot;en&quot;&gt;</span> 126<span class="st">&lt;html lang=&quot;en&quot;&gt;</span>
129<span class="st"> &lt;head&gt;</span> 127<span class="st"> &lt;head&gt;</span>
@@ -136,9 +134,9 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
136<span class="st"> &lt;h1&gt;My Shaarli farm&lt;/h1&gt;</span> 134<span class="st"> &lt;h1&gt;My Shaarli farm&lt;/h1&gt;</span>
137<span class="st"> &lt;ul style=&quot;list-style-type: none;&quot;&gt;&#39;</span> 135<span class="st"> &lt;ul style=&quot;list-style-type: none;&quot;&gt;&#39;</span>
138 136
139<span class="ot">accountlinks=</span><span class="st">&#39;&#39;</span> 137<span class="va">accountlinks=</span><span class="st">&#39;&#39;</span>
140 138
141<span class="ot">htmlfooter=</span><span class="st">&#39;</span> 139<span class="va">htmlfooter=</span><span class="st">&#39;</span>
142<span class="st"> &lt;/ul&gt;</span> 140<span class="st"> &lt;/ul&gt;</span>
143<span class="st"> &lt;/div&gt;</span> 141<span class="st"> &lt;/div&gt;</span>
144<span class="st"> &lt;/body&gt;</span> 142<span class="st"> &lt;/body&gt;</span>
@@ -146,14 +144,14 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
146 144
147 145
148 146
149<span class="kw">for</span> <span class="kw">account</span> in <span class="ot">$accounts</span><span class="kw">;</span> <span class="kw">do</span> <span class="ot">accountlinks=</span><span class="st">&quot;</span><span class="ot">$accountlinks</span><span class="st">\n&lt;li&gt;&lt;a href=</span><span class="dt">\&quot;</span><span class="ot">$account</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="ot">$account</span><span class="st">&lt;/a&gt;&lt;/li&gt;&quot;</span>; <span class="kw">done</span> 147<span class="kw">for</span> <span class="ex">account</span> in <span class="va">$accounts</span><span class="kw">;</span> <span class="kw">do</span> <span class="va">accountlinks=</span><span class="st">&quot;</span><span class="va">$accountlinks</span><span class="st">\n&lt;li&gt;&lt;a href=</span><span class="dt">\&quot;</span><span class="va">$account</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$account</span><span class="st">&lt;/a&gt;&lt;/li&gt;&quot;</span>; <span class="kw">done</span>
150<span class="kw">if [</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">/index.html&quot;</span><span class="kw"> ]</span>; <span class="kw">then</span> <span class="kw">echo</span> <span class="st">&quot;[removing old index.html]&quot;</span><span class="kw">;</span> <span class="kw">rm</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">/index.html&quot;</span> ]<span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(.html)</span> 148<span class="kw">if</span><span class="bu"> [</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">/index.html&quot;</span><span class="bu"> ]</span>; <span class="kw">then</span> <span class="bu">echo</span> <span class="st">&quot;[removing old index.html]&quot;</span><span class="kw">;</span> <span class="fu">rm</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">/index.html&quot;</span> ]<span class="kw">;</span> <span class="kw">fi</span>[]<span class="kw">(</span><span class="ex">.html</span><span class="kw">)</span>
151<span class="kw">echo</span> <span class="st">&quot;[info] generating new index of shaarlis&quot;</span>[](.html) 149<span class="bu">echo</span> <span class="st">&quot;[info] generating new index of shaarlis&quot;</span>[](.html)
152<span class="kw">echo</span> -e <span class="st">&quot;</span><span class="ot">$htmlhead</span><span class="st"> </span><span class="ot">$accountlinks</span><span class="st"> </span><span class="ot">$htmlfooter</span><span class="st">&quot;</span> <span class="kw">&gt;</span> <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">/index.html&quot;</span> 150<span class="bu">echo</span> -e <span class="st">&quot;</span><span class="va">$htmlhead</span><span class="st"> </span><span class="va">$accountlinks</span><span class="st"> </span><span class="va">$htmlfooter</span><span class="st">&quot;</span> <span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">/index.html&quot;</span>
153<span class="kw">echo</span> <span class="st">&#39;[info] done.&#39;</span>[](.html) 151<span class="bu">echo</span> <span class="st">&#39;[info] done.&#39;</span>[](.html)
154<span class="kw">echo</span> <span class="st">&quot;[info] list of accounts: </span><span class="ot">$accounts</span><span class="st">&quot;</span>[](.html) 152<span class="bu">echo</span> <span class="st">&quot;[info] list of accounts: </span><span class="va">$accounts</span><span class="st">&quot;</span>[](.html)
155<span class="kw">echo</span> <span class="st">&quot;[info] contents of </span><span class="ot">$shaarli_base_dir</span><span class="st">:&quot;</span>[](.html) 153<span class="bu">echo</span> <span class="st">&quot;[info] contents of </span><span class="va">$shaarli_base_dir</span><span class="st">:&quot;</span>[](.html)
156<span class="kw">tree</span> -a -L 1 <span class="st">&quot;</span><span class="ot">$shaarli_base_dir</span><span class="st">&quot;</span></code></pre></div> 154<span class="ex">tree</span> -a -L 1 <span class="st">&quot;</span><span class="va">$shaarli_base_dir</span><span class="st">&quot;</span></code></pre></div>
157<p>This script just serves as an example. More precise or complex (applying custom configuration, etc) automation is possible using configuration management software like <a href="https://www.ansible.com/">Ansible</a><a href=".html"></a></p> 155<p>This script just serves as an example. More precise or complex (applying custom configuration, etc) automation is possible using configuration management software like <a href="https://www.ansible.com/">Ansible</a><a href=".html"></a></p>
158</body> 156</body>
159</html> 157</html>
diff --git a/doc/Datastore-hacks.html b/doc/Datastore-hacks.html
index 88639402..15da09d4 100644
--- a/doc/Datastore-hacks.html
+++ b/doc/Datastore-hacks.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
diff --git a/doc/Development.html b/doc/Development.html
index 2eacff94..c5776413 100644
--- a/doc/Development.html
+++ b/doc/Development.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Directory-structure.html b/doc/Directory-structure.html
index 003d4d94..404ff7c8 100644
--- a/doc/Directory-structure.html
+++ b/doc/Directory-structure.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,39 +96,38 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="directory-structure">Directory structure</h1> 102<h1 id="directory-structure">Directory structure</h1>
105<p>Here is the directory structure of Shaarli and the purpose of the different files:</p> 103<p>Here is the directory structure of Shaarli and the purpose of the different files:</p>
106<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"> <span class="kw">index.php</span> <span class="co"># Main program</span> 104<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"> <span class="ex">index.php</span> <span class="co"># Main program</span>
107 <span class="kw">application/</span> <span class="co"># Shaarli classes</span> 105 <span class="ex">application/</span> <span class="co"># Shaarli classes</span>
108 ├── <span class="kw">LinkDB.php</span> 106 ├── <span class="ex">LinkDB.php</span>
109 └── <span class="kw">Utils.php</span> 107 └── <span class="ex">Utils.php</span>
110 <span class="kw">tests/</span> <span class="co"># Shaarli unitary &amp; functional tests</span> 108 <span class="ex">tests/</span> <span class="co"># Shaarli unitary &amp; functional tests</span>
111 ├── <span class="kw">LinkDBTest.php</span> 109 ├── <span class="ex">LinkDBTest.php</span>
112 ├── <span class="kw">utils</span> <span class="co"># utilities to ease testing</span> 110 ├── <span class="ex">utils</span> <span class="co"># utilities to ease testing</span>
113 │ └── <span class="kw">ReferenceLinkDB.php</span> 111 │ └── <span class="ex">ReferenceLinkDB.php</span>
114 └── <span class="kw">UtilsTest.php</span> 112 └── <span class="ex">UtilsTest.php</span>
115 <span class="kw">COPYING</span> <span class="co"># Shaarli license</span> 113 <span class="ex">COPYING</span> <span class="co"># Shaarli license</span>
116 <span class="kw">inc/</span> <span class="co"># static assets and 3rd party libraries</span> 114 <span class="ex">inc/</span> <span class="co"># static assets and 3rd party libraries</span>
117 ├── <span class="kw">awesomplete.*</span> <span class="co"># tags autocompletion library</span> 115 ├── <span class="ex">awesomplete.*</span> <span class="co"># tags autocompletion library</span>
118 ├── <span class="kw">blazy.*</span> <span class="co"># picture wall lazy image loading library</span> 116 ├── <span class="ex">blazy.*</span> <span class="co"># picture wall lazy image loading library</span>
119 ├── <span class="kw">shaarli.css</span>, reset.css <span class="co"># Shaarli stylesheet.</span> 117 ├── <span class="ex">shaarli.css</span>, reset.css <span class="co"># Shaarli stylesheet.</span>
120 ├── <span class="kw">qr.*</span> <span class="co"># qr code generation library</span> 118 ├── <span class="ex">qr.*</span> <span class="co"># qr code generation library</span>
121 └──<span class="kw">rain.tpl.class.php</span> <span class="co"># RainTPL templating library</span> 119 └──<span class="ex">rain.tpl.class.php</span> <span class="co"># RainTPL templating library</span>
122 <span class="kw">tpl/</span> <span class="co"># RainTPL templates for Shaarli. They are used to build the pages.</span> 120 <span class="ex">tpl/</span> <span class="co"># RainTPL templates for Shaarli. They are used to build the pages.</span>
123 <span class="kw">images/</span> <span class="co"># Images and icons used in Shaarli</span> 121 <span class="ex">images/</span> <span class="co"># Images and icons used in Shaarli</span>
124 <span class="kw">data/</span> <span class="co"># data storage: bookmark database, configuration, logs, banlist…</span> 122 <span class="ex">data/</span> <span class="co"># data storage: bookmark database, configuration, logs, banlist…</span>
125 ├── <span class="kw">config.php</span> <span class="co"># Shaarli configuration (login, password, timezone, title…)</span> 123 ├── <span class="ex">config.php</span> <span class="co"># Shaarli configuration (login, password, timezone, title…)</span>
126 ├── <span class="kw">datastore.php</span> <span class="co"># Your link database (compressed).</span> 124 ├── <span class="ex">datastore.php</span> <span class="co"># Your link database (compressed).</span>
127 ├── <span class="kw">ipban.php</span> <span class="co"># IP address ban system data</span> 125 ├── <span class="ex">ipban.php</span> <span class="co"># IP address ban system data</span>
128 ├── <span class="kw">lastupdatecheck.txt</span> <span class="co"># Update check timestamp file</span> 126 ├── <span class="ex">lastupdatecheck.txt</span> <span class="co"># Update check timestamp file</span>
129 └──<span class="kw">log.txt</span> <span class="co"># login/IPban log.</span> 127 └──<span class="ex">log.txt</span> <span class="co"># login/IPban log.</span>
130 <span class="kw">cache/</span> <span class="co"># thumbnails cache</span> 128 <span class="ex">cache/</span> <span class="co"># thumbnails cache</span>
131 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span> 129 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span>
132 <span class="kw">tmp/</span> <span class="co"># Temporary directory for compiled RainTPL templates.</span> 130 <span class="ex">tmp/</span> <span class="co"># Temporary directory for compiled RainTPL templates.</span>
133 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span></code></pre></div> 131 <span class="co"># This directory is automatically created. You can erase it anytime you want.</span></code></pre></div>
134</body> 132</body>
135</html> 133</html>
diff --git a/doc/Docker.html b/doc/Docker.html
index a443d100..e89c90fb 100644
--- a/doc/Docker.html
+++ b/doc/Docker.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -112,18 +110,18 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
112<p>Install <a href="https://www.docker.com/">Docker</a>, by following the instructions relevant<a href=".html"></a><br /> 110<p>Install <a href="https://www.docker.com/">Docker</a>, by following the instructions relevant<a href=".html"></a><br />
113to your OS / distribution, and start the service.</p> 111to your OS / distribution, and start the service.</p>
114<h4 id="search-an-image-on-dockerhub">Search an image on <a href="https://hub.docker.com/">DockerHub</a><a href=".html"></a></h4> 112<h4 id="search-an-image-on-dockerhub">Search an image on <a href="https://hub.docker.com/">DockerHub</a><a href=".html"></a></h4>
115<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">docker</span> search debian 113<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">docker</span> search debian
116 114
117<span class="kw">NAME</span> DESCRIPTION STARS OFFICIAL AUTOMATED 115<span class="ex">NAME</span> DESCRIPTION STARS OFFICIAL AUTOMATED
118<span class="kw">ubuntu</span> Ubuntu is a Debian-based Linux operating s... 2065 [OK][](.html) 116<span class="ex">ubuntu</span> Ubuntu is a Debian-based Linux operating s... 2065 [OK][](.html)
119<span class="kw">debian</span> Debian is a Linux distribution that<span class="st">&#39;s comp... 603 [OK][](.html)</span> 117<span class="ex">debian</span> Debian is a Linux distribution that<span class="st">&#39;s comp... 603 [OK][](.html)</span>
120<span class="st">google/debian 47 [OK][](.html)</span></code></pre></div> 118<span class="st">google/debian 47 [OK][](.html)</span></code></pre></div>
121<h4 id="show-available-tags-for-a-repository">Show available tags for a repository</h4> 119<h4 id="show-available-tags-for-a-repository">Show available tags for a repository</h4>
122<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">curl</span> https://index.docker.io/v1/repositories/debian/tags <span class="kw">|</span> <span class="kw">python</span> -m json.tool 120<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">curl</span> https://index.docker.io/v1/repositories/debian/tags <span class="kw">|</span> <span class="ex">python</span> -m json.tool
123 121
124<span class="kw">%</span> Total % Received % Xferd Average Speed Time Time Time Current 122<span class="ex">%</span> Total % Received % Xferd Average Speed Time Time Time Current
125<span class="kw">Dload</span> Upload Total Spent Left Speed 123<span class="ex">Dload</span> Upload Total Spent Left Speed
126<span class="kw">100</span> 1283 0 1283 0 0 433 0 --:--:-- 0:00:02 --:--:-- 433</code></pre></div> 124<span class="ex">100</span> 1283 0 1283 0 0 433 0 --:--:-- 0:00:02 --:--:-- 433</code></pre></div>
127<p>Sample output:</p> 125<p>Sample output:</p>
128<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[[]</span><span class="er">(.html)</span> 126<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[[]</span><span class="er">(.html)</span>
129 <span class="fu">{</span> 127 <span class="fu">{</span>
@@ -148,14 +146,14 @@ to your OS / distribution, and start the service.</p>
148 <span class="fu">}</span> 146 <span class="fu">}</span>
149<span class="ot">]</span></code></pre></div> 147<span class="ot">]</span></code></pre></div>
150<h4 id="pull-an-image-from-dockerhub">Pull an image from DockerHub</h4> 148<h4 id="pull-an-image-from-dockerhub">Pull an image from DockerHub</h4>
151<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">docker</span> pull repository[:tag][](.html) 149<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">docker</span> pull repository[:tag][](.html)
152 150
153$ <span class="kw">docker</span> pull debian:wheezy 151$ <span class="ex">docker</span> pull debian:wheezy
154<span class="kw">wheezy</span>: Pulling from debian 152<span class="ex">wheezy</span>: Pulling from debian
155<span class="kw">4c8cbfd2973e</span>: Pull complete 153<span class="ex">4c8cbfd2973e</span>: Pull complete
156<span class="kw">60c52dbe9d91</span>: Pull complete 154<span class="ex">60c52dbe9d91</span>: Pull complete
157<span class="kw">Digest</span>: sha256:c584131da2ac1948aa3e66468a4424b6aea2f33acba7cec0b631bdb56254c4fe 155<span class="ex">Digest</span>: sha256:c584131da2ac1948aa3e66468a4424b6aea2f33acba7cec0b631bdb56254c4fe
158<span class="kw">Status</span>: Downloaded newer image for debian:wheezy</code></pre></div> 156<span class="ex">Status</span>: Downloaded newer image for debian:wheezy</code></pre></div>
159<h2 id="get-and-run-a-shaarli-image">Get and run a Shaarli image</h2> 157<h2 id="get-and-run-a-shaarli-image">Get and run a Shaarli image</h2>
160<h3 id="dockerhub-repository">DockerHub repository</h3> 158<h3 id="dockerhub-repository">DockerHub repository</h3>
161<p>The images can be found in the <a href="https://hub.docker.com/r/shaarli/shaarli/"><code>shaarli/shaarli</code></a><a href=".html"></a><br /> 159<p>The images can be found in the <a href="https://hub.docker.com/r/shaarli/shaarli/"><code>shaarli/shaarli</code></a><a href=".html"></a><br />
@@ -173,53 +171,53 @@ repository.</p>
173<li><a href="http://nginx.org/">Nginx</a><a href=".html"></a></li> 171<li><a href="http://nginx.org/">Nginx</a><a href=".html"></a></li>
174</ul> 172</ul>
175<h3 id="download-from-dockerhub">Download from DockerHub</h3> 173<h3 id="download-from-dockerhub">Download from DockerHub</h3>
176<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">docker</span> pull shaarli/shaarli 174<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">docker</span> pull shaarli/shaarli
177<span class="kw">latest</span>: Pulling from shaarli/shaarli 175<span class="ex">latest</span>: Pulling from shaarli/shaarli
178<span class="kw">32716d9fcddb</span>: Pull complete 176<span class="ex">32716d9fcddb</span>: Pull complete
179<span class="kw">84899d045435</span>: Pull complete 177<span class="ex">84899d045435</span>: Pull complete
180<span class="kw">4b6ad7444763</span>: Pull complete 178<span class="ex">4b6ad7444763</span>: Pull complete
181<span class="kw">e0345ef7a3e0</span>: Pull complete 179<span class="ex">e0345ef7a3e0</span>: Pull complete
182<span class="kw">5c1dd344094f</span>: Pull complete 180<span class="ex">5c1dd344094f</span>: Pull complete
183<span class="kw">6422305a200b</span>: Pull complete 181<span class="ex">6422305a200b</span>: Pull complete
184<span class="kw">7d63f861dbef</span>: Pull complete 182<span class="ex">7d63f861dbef</span>: Pull complete
185<span class="kw">3eb97210645c</span>: Pull complete 183<span class="ex">3eb97210645c</span>: Pull complete
186<span class="kw">869319d746ff</span>: Already exists 184<span class="ex">869319d746ff</span>: Already exists
187<span class="kw">869319d746ff</span>: Pulling fs layer 185<span class="ex">869319d746ff</span>: Pulling fs layer
188<span class="kw">902b87aaaec9</span>: Already exists 186<span class="ex">902b87aaaec9</span>: Already exists
189<span class="kw">Digest</span>: sha256:f836b4627b958b3f83f59c332f22f02fcd495ace3056f2be2c4912bd8704cc98 187<span class="ex">Digest</span>: sha256:f836b4627b958b3f83f59c332f22f02fcd495ace3056f2be2c4912bd8704cc98
190<span class="kw">Status</span>: Downloaded newer image for shaarli/shaarli:latest</code></pre></div> 188<span class="ex">Status</span>: Downloaded newer image for shaarli/shaarli:latest</code></pre></div>
191<h3 id="create-and-start-a-new-container-from-the-image">Create and start a new container from the image</h3> 189<h3 id="create-and-start-a-new-container-from-the-image">Create and start a new container from the image</h3>
192<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># map the host&#39;s :8000 port to the container&#39;s :80 port</span> 190<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># map the host&#39;s :8000 port to the container&#39;s :80 port</span>
193$ <span class="kw">docker</span> create -p 8000:80 shaarli/shaarli 191$ <span class="ex">docker</span> create -p 8000:80 shaarli/shaarli
194<span class="kw">d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101</span> 192<span class="ex">d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101</span>
195 193
196<span class="co"># launch the container in the background</span> 194<span class="co"># launch the container in the background</span>
197$ <span class="kw">docker</span> start d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101 195$ <span class="ex">docker</span> start d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101
198<span class="kw">d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101</span> 196<span class="ex">d40b7af693d678958adedfb88f87d6ea0237186c23de5c4102a55a8fcb499101</span>
199 197
200<span class="co"># list active containers</span> 198<span class="co"># list active containers</span>
201$ <span class="kw">docker</span> ps 199$ <span class="ex">docker</span> ps
202<span class="kw">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES 200<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES
203<span class="kw">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 15 seconds ago Up 4 seconds 0.0.0.0:8000-<span class="kw">&gt;</span>80/tcp backstabbing_galileo</code></pre></div> 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>
204<h3 id="stop-and-destroy-a-container">Stop and destroy a container</h3> 202<h3 id="stop-and-destroy-a-container">Stop and destroy a container</h3>
205<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">docker</span> stop backstabbing_galileo <span class="co"># those docker guys are really rude to physicists!</span> 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>
206<span class="kw">backstabbing_galileo</span> 204<span class="ex">backstabbing_galileo</span>
207 205
208<span class="co"># check the container is stopped</span> 206<span class="co"># check the container is stopped</span>
209$ <span class="kw">docker</span> ps 207$ <span class="ex">docker</span> ps
210<span class="kw">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES 208<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES
211 209
212<span class="co"># list ALL containers</span> 210<span class="co"># list ALL containers</span>
213$ <span class="kw">docker</span> ps -a 211$ <span class="ex">docker</span> ps -a
214<span class="kw">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES 212<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES
215<span class="kw">d40b7af693d6</span> shaarli/shaarli /usr/bin/supervisor 5 minutes ago Exited (0) <span class="kw">48</span> seconds ago backstabbing_galileo 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
216 214
217<span class="co"># destroy the container</span> 215<span class="co"># destroy the container</span>
218$ <span class="kw">docker</span> rm backstabbing_galileo <span class="co"># let&#39;s put an end to these barbarian practices</span> 216$ <span class="ex">docker</span> rm backstabbing_galileo <span class="co"># let&#39;s put an end to these barbarian practices</span>
219<span class="kw">backstabbing_galileo</span> 217<span class="ex">backstabbing_galileo</span>
220 218
221$ <span class="kw">docker</span> ps -a 219$ <span class="ex">docker</span> ps -a
222<span class="kw">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code></pre></div> 220<span class="ex">CONTAINER</span> ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code></pre></div>
223<h2 id="resources">Resources</h2> 221<h2 id="resources">Resources</h2>
224<h3 id="docker-1">Docker</h3> 222<h3 id="docker-1">Docker</h3>
225<ul> 223<ul>
diff --git a/doc/Download-CSS-styles-from-an-OPML-list.html b/doc/Download-CSS-styles-from-an-OPML-list.html
index 22771502..a4f68ac6 100644
--- a/doc/Download-CSS-styles-from-an-OPML-list.html
+++ b/doc/Download-CSS-styles-from-an-OPML-list.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -209,8 +207,8 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
209 207
210<span class="co">/**</span> 208<span class="co">/**</span>
211<span class="co"> * Reading directory list, courtesy of http://www.laughing-buddha.net/php/dirlist/</span> 209<span class="co"> * Reading directory list, courtesy of http://www.laughing-buddha.net/php/dirlist/</span>
212<span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">directory</span><span class="co"> the directory we want to list files of</span> 210<span class="co"> * </span><span class="an">@param</span><span class="co"> </span><span class="cv">directory</span><span class="co"> the directory we want to list files of</span>
213<span class="co"> * </span><span class="kw">@return</span><span class="co"> a simple array containing the list of absolute file paths. Notice that current file (&quot;.&quot;) and parent one(&quot;..&quot;)</span> 211<span class="co"> * </span><span class="an">@return</span><span class="co"> a simple array containing the list of absolute file paths. Notice that current file (&quot;.&quot;) and parent one(&quot;..&quot;)</span>
214<span class="co"> * are not listed here</span> 212<span class="co"> * are not listed here</span>
215<span class="co"> */</span> 213<span class="co"> */</span>
216<span class="kw">function</span> getDirectoryList <span class="ot">(</span><span class="kw">$directory</span><span class="ot">)</span> { 214<span class="kw">function</span> getDirectoryList <span class="ot">(</span><span class="kw">$directory</span><span class="ot">)</span> {
diff --git a/doc/Download.html b/doc/Download-and-Installation.html
index 9f9f5117..17c7b69e 100644
--- a/doc/Download.html
+++ b/doc/Download-and-Installation.html
@@ -4,7 +4,7 @@
4 <meta charset="utf-8"> 4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc"> 5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title>Shaarli – Download</title> 7 <title>Shaarli – Download and Installation</title>
8 <style type="text/css">code{white-space: pre;}</style> 8 <style type="text/css">code{white-space: pre;}</style>
9 <style type="text/css"> 9 <style type="text/css">
10div.sourceCode { overflow-x: auto; } 10div.sourceCode { overflow-x: auto; }
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,27 +96,70 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="download">Download</h1> 102<h1 id="download-and-installation">Download and Installation</h1>
105<h2 id="get-shaarli">Get Shaarli!</h2> 103<h1 id="get-shaarli">Get Shaarli!</h1>
106<h3 id="latest-stable-revision">Latest stable revision</h3> 104<p>To install Shaarli, simply place the files in a directory under your webserver's Document Root (or directly at the document root). Make sure your <a href="Server-requirements">server</a> is properly <a href="Server-configuration">configured</a>.<a href=".html"></a></p>
107<p>This revision has been <a href="https://github.com/shaarli/Shaarli/releases">released</a> and tested.<a href=".html"></a></p> 105<p>Several releases are available:</p>
108<h4 id="clone-with-git-recommended">Clone with Git (recommended)</h4> 106<hr />
109<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">git</span> clone https://github.com/shaarli/Shaarli.git -b stable shaarli</code></pre></div> 107<h2 id="latest-release-recommended">Latest release (recommended)</h2>
110<h4 id="download-as-an-archive">Download as an archive</h4> 108<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<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">wget</span> https://github.com/shaarli/Shaarli/archive/stable.zip 109<p>The current latest released version is <code>v0.7.0</code>.</p>
112$ <span class="kw">unzip</span> stable.zip 110<h3 id="download-as-an-archive">Download as an archive</h3>
113$ <span class="kw">mv</span> Shaarli-stable shaarli</code></pre></div> 111<p>As a .zip archive:</p>
114<p>Tarballs are also available:</p> 112<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">wget</span> https://github.com/shaarli/Shaarli/archive/v0.7.0.zip
115<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">wget</span> https://github.com/shaarli/Shaarli/archive/stable.tar.gz 113$ <span class="fu">unzip</span> Shaarli-v0.7.0.zip
116$ <span class="kw">tar</span> xvf stable.tar.gz 114$ <span class="fu">mv</span> Shaarli-v0.7.0 /path/to/shaarli/</code></pre></div>
117$ <span class="kw">mv</span> Shaarli-stable shaarli</code></pre></div> 115<table style="width:46%;">
118<h3 id="development-mainline">Development (mainline)</h3> 116<colgroup>
117<col style="width: 8%" />
118<col style="width: 37%" />
119</colgroup>
120<thead>
121<tr class="header">
122<th>!</th>
123<th>In most cases, download Shaarli from the <a href="https://github.com/shaarli/Shaarli/releases">releases</a> page. Cloning using <code>git</code> or downloading Github branches as zip files requires additional steps (see below).</th>
124</tr>
125</thead>
126<tbody>
127</tbody>
128</table>
129<hr />
130<h2 id="stable-version">Stable version</h2>
131<p>The stable version has been experienced by Shaarli users, and will receive security updates.</p>
132<h3 id="download-as-an-archive-1">Download as an archive</h3>
133<p>As a .zip archive:</p>
134<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">wget</span> https://github.com/shaarli/Shaarli/archive/stable.zip
135$ <span class="fu">unzip</span> stable.zip
136$ <span class="fu">mv</span> Shaarli-stable /path/to/shaarli/</code></pre></div>
137<p>As a .tar.gz archive :</p>
138<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">wget</span> https://github.com/shaarli/Shaarli/archive/stable.tar.gz
139$ <span class="fu">tar</span> xvf stable.tar.gz
140$ <span class="fu">mv</span> Shaarli-stable /path/to/shaarli/</code></pre></div>
141<h3 id="clone-with-git">Clone with Git</h3>
142<p><a href="https://getcomposer.org/">Composer</a> is required to build a functional Shaarli installation when pulling from git.<a href=".html"></a></p>
143<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/
144<span class="co"># install/update third-party dependencies</span>
145$ <span class="bu">cd</span> /path/to/shaarli/
146$ <span class="ex">composer</span> update --no-dev</code></pre></div>
147<hr />
148<h2 id="development-version-mainline">Development version (mainline)</h2>
119<p><em>Use at your own risk!</em></p> 149<p><em>Use at your own risk!</em></p>
120<p>To get the latest changes:</p> 150<p>To get the latest changes from the <code>master</code> branch:</p>
121<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">git</span> clone https://github.com/shaarli/Shaarli.git shaarli</code></pre></div> 151<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># clone the repository </span>
152$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git master /path/to/shaarli/
153<span class="co"># install/update third-party dependencies</span>
154$ <span class="bu">cd</span> /path/to/shaarli
155$ <span class="ex">composer</span> update --no-dev</code></pre></div>
156<hr />
157<h2 id="finish-installation">Finish Installation</h2>
158<p>Once Shaarli is downloaded and files have been placed at the correct location, open it this location your favorite browser.</p>
159<p><img src="http://i.imgur.com/wuMpDSN.png" alt="install screenshot" /><a href=".html"></a></p>
160<p>Setup your Shaarli installation, and it's ready to use!</p>
161<hr />
162<h2 id="updating-shaarli">Updating Shaarli</h2>
163<p>See <a href="Upgrade-and-migration">Upgrade and Migration</a><a href=".html"></a></p>
122</body> 164</body>
123</html> 165</html>
diff --git a/doc/Download-and-Installation.md b/doc/Download-and-Installation.md
new file mode 100644
index 00000000..77af25eb
--- /dev/null
+++ b/doc/Download-and-Installation.md
@@ -0,0 +1,97 @@
1#Download and Installation
2# Get Shaarli!
3
4To install Shaarli, simply place the files in a directory under your webserver's Document Root (or directly at the document root). Make sure your [server](Server-requirements) is properly [configured](Server-configuration).[](.html)
5
6Several releases are available:
7
8--------------------------------------------------------
9
10## Latest release (recommended)
11
12Get the latest released version from the [releases](https://github.com/shaarli/Shaarli/releases) page.[](.html)
13
14The current latest released version is `v0.7.0`.
15
16### Download as an archive
17
18As a .zip archive:
19
20```bash
21$ wget https://github.com/shaarli/Shaarli/archive/v0.7.0.zip
22$ unzip Shaarli-v0.7.0.zip
23$ mv Shaarli-v0.7.0 /path/to/shaarli/
24```
25
26
27| ! |In most cases, download Shaarli from the [releases](https://github.com/shaarli/Shaarli/releases) page. Cloning using `git` or downloading Github branches as zip files requires additional steps (see below).|[](.html)
28|-----|--------------------------|
29
30
31
32--------------------------------------------------------
33
34## Stable version
35
36The stable version has been experienced by Shaarli users, and will receive security updates.
37
38### Download as an archive
39
40As a .zip archive:
41
42```bash
43$ wget https://github.com/shaarli/Shaarli/archive/stable.zip
44$ unzip stable.zip
45$ mv Shaarli-stable /path/to/shaarli/
46```
47
48As a .tar.gz archive :
49
50```bash
51$ wget https://github.com/shaarli/Shaarli/archive/stable.tar.gz
52$ tar xvf stable.tar.gz
53$ mv Shaarli-stable /path/to/shaarli/
54```
55
56### Clone with Git
57
58[Composer](https://getcomposer.org/) is required to build a functional Shaarli installation when pulling from git.[](.html)
59
60```bash
61$ git clone https://github.com/shaarli/Shaarli.git -b stable /path/to/shaarli/
62# install/update third-party dependencies
63$ cd /path/to/shaarli/
64$ composer update --no-dev
65```
66
67--------------------------------------------------------
68
69## Development version (mainline)
70
71_Use at your own risk!_
72
73To get the latest changes from the `master` branch:
74
75```bash
76# clone the repository
77$ git clone https://github.com/shaarli/Shaarli.git master /path/to/shaarli/
78# install/update third-party dependencies
79$ cd /path/to/shaarli
80$ composer update --no-dev
81```
82
83--------------------------------------------------------
84
85## Finish Installation
86
87Once Shaarli is downloaded and files have been placed at the correct location, open it this location your favorite browser.
88
89![install screenshot](http://i.imgur.com/wuMpDSN.png)[](.html)
90
91Setup your Shaarli installation, and it's ready to use!
92
93--------------------------------------------------------
94
95## Updating Shaarli
96
97See [Upgrade and Migration](Upgrade-and-migration)[](.html)
diff --git a/doc/Download.md b/doc/Download.md
deleted file mode 100644
index 7930f541..00000000
--- a/doc/Download.md
+++ /dev/null
@@ -1,31 +0,0 @@
1#Download
2## Get Shaarli!
3### Latest stable revision
4This revision has been [released](https://github.com/shaarli/Shaarli/releases) and tested.[](.html)
5
6#### Clone with Git (recommended)
7```bash
8$ git clone https://github.com/shaarli/Shaarli.git -b stable shaarli
9```
10
11#### Download as an archive
12```bash
13$ wget https://github.com/shaarli/Shaarli/archive/stable.zip
14$ unzip stable.zip
15$ mv Shaarli-stable shaarli
16```
17
18Tarballs are also available:
19```bash
20$ wget https://github.com/shaarli/Shaarli/archive/stable.tar.gz
21$ tar xvf stable.tar.gz
22$ mv Shaarli-stable shaarli
23```
24
25### Development (mainline)
26_Use at your own risk!_
27
28To get the latest changes:
29```bash
30$ git clone https://github.com/shaarli/Shaarli.git shaarli
31```
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 7db43107..133224e2 100644
--- a/doc/Example-patch---add-new-via-field-for-links.html
+++ b/doc/Example-patch---add-new-via-field-for-links.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/FAQ.html b/doc/FAQ.html
index 3b6b956d..61f3475f 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Firefox-share.html b/doc/Firefox-share.html
index add6d4e8..d7dcc282 100644
--- a/doc/Firefox-share.html
+++ b/doc/Firefox-share.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/GnuPG-signature.html b/doc/GnuPG-signature.html
index c431f9ad..50b904d5 100644
--- a/doc/GnuPG-signature.html
+++ b/doc/GnuPG-signature.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -129,26 +127,26 @@ Keys</a></li>
129<li><a href="https://help.github.com/articles/generating-a-gpg-key/">Generating a GPG key</a> (GitHub)<a href=".html"></a></li> 127<li><a href="https://help.github.com/articles/generating-a-gpg-key/">Generating a GPG key</a> (GitHub)<a href=".html"></a></li>
130</ul> 128</ul>
131<h3 id="gpg---provide-identity-information">gpg - provide identity information</h3> 129<h3 id="gpg---provide-identity-information">gpg - provide identity information</h3>
132<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">gpg</span> --gen-key 130<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">gpg</span> --gen-key
133 131
134<span class="kw">gpg</span> (GnuPG) <span class="kw">2.1.6;</span> <span class="kw">Copyright</span> (C) <span class="kw">2015</span> Free Software Foundation, Inc. 132<span class="ex">gpg</span> (GnuPG) <span class="ex">2.1.6</span><span class="kw">;</span> <span class="ex">Copyright</span> (C) <span class="ex">2015</span> Free Software Foundation, Inc.
135<span class="kw">This</span> is free software: you are free to change and redistribute it. 133<span class="ex">This</span> is free software: you are free to change and redistribute it.
136<span class="kw">There</span> is NO WARRANTY, to the extent permitted by law. 134<span class="ex">There</span> is NO WARRANTY, to the extent permitted by law.
137 135
138<span class="kw">Note</span>: Use <span class="st">&quot;gpg2 --full-gen-key&quot;</span> for a full featured key generation dialog. 136<span class="ex">Note</span>: Use <span class="st">&quot;gpg2 --full-gen-key&quot;</span> for a full featured key generation dialog.
139 137
140<span class="kw">GnuPG</span> needs to construct a user ID to identify your key. 138<span class="ex">GnuPG</span> needs to construct a user ID to identify your key.
141 139
142<span class="kw">Real</span> name: Marvin the Paranoid Android 140<span class="ex">Real</span> name: Marvin the Paranoid Android
143<span class="kw">Email</span> address: marvin@h2g2.net 141<span class="ex">Email</span> address: marvin@h2g2.net
144<span class="kw">You</span> selected this USER-ID: 142<span class="ex">You</span> selected this USER-ID:
145 <span class="st">&quot;Marvin the Paranoid Android &lt;marvin@h2g2.net&gt;&quot;</span> 143 <span class="st">&quot;Marvin the Paranoid Android &lt;marvin@h2g2.net&gt;&quot;</span>
146 144
147<span class="kw">Change</span> (N)<span class="kw">ame</span>, (E)<span class="kw">mail</span>, or (O)<span class="kw">kay</span>/<span class="kw">(Q)uit?</span> o 145<span class="ex">Change</span> (N)<span class="ex">ame</span>, (E)<span class="ex">mail</span>, or (O)<span class="ex">kay</span>/<span class="kw">(</span><span class="ex">Q</span><span class="kw">)</span><span class="ex">uit?</span> o
148<span class="kw">We</span> need to generate a lot of random bytes. It is a good idea to perform 146<span class="ex">We</span> need to generate a lot of random bytes. It is a good idea to perform
149<span class="kw">some</span> other action (type on the keyboard, move the mouse, utilize the 147<span class="ex">some</span> other action (type on the keyboard, move the mouse, utilize the
150<span class="kw">disks</span>) <span class="kw">during</span> the prime generation<span class="kw">;</span> <span class="kw">this</span> gives the random number 148<span class="ex">disks</span>) <span class="ex">during</span> the prime generation<span class="kw">;</span> <span class="ex">this</span> gives the random number
151<span class="kw">generator</span> a better chance to gain enough entropy.</code></pre></div> 149<span class="ex">generator</span> a better chance to gain enough entropy.</code></pre></div>
152<h3 id="gpg---entropy-interlude">gpg - entropy interlude</h3> 150<h3 id="gpg---entropy-interlude">gpg - entropy interlude</h3>
153<p>At this point, you will:</p> 151<p>At this point, you will:</p>
154<ul> 152<ul>
@@ -156,19 +154,19 @@ Keys</a></li>
156<li>be asked to use your machine's input devices (mouse, keyboard, etc.) to generate random entropy; this step <em>may take some time</em></li> 154<li>be asked to use your machine's input devices (mouse, keyboard, etc.) to generate random entropy; this step <em>may take some time</em></li>
157</ul> 155</ul>
158<h3 id="gpg---key-creation-confirmation">gpg - key creation confirmation</h3> 156<h3 id="gpg---key-creation-confirmation">gpg - key creation confirmation</h3>
159<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">gpg</span>: key A9D53A3E marked as ultimately trusted 157<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="ex">gpg</span>: key A9D53A3E marked as ultimately trusted
160<span class="kw">public</span> and secret key created and signed. 158<span class="ex">public</span> and secret key created and signed.
161 159
162<span class="kw">gpg</span>: checking the trustdb 160<span class="ex">gpg</span>: checking the trustdb
163<span class="kw">gpg</span>: 3 marginal(s) <span class="kw">needed</span>, 1 complete(s) <span class="kw">needed</span>, PGP trust model 161<span class="ex">gpg</span>: 3 marginal(s) <span class="ex">needed</span>, 1 complete(s) <span class="ex">needed</span>, PGP trust model
164<span class="kw">gpg</span>: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u 162<span class="ex">gpg</span>: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
165<span class="kw">pub</span> rsa2048/A9D53A3E 2015-07-31 163<span class="ex">pub</span> rsa2048/A9D53A3E 2015-07-31
166 <span class="kw">Key</span> fingerprint = AF2A 5381 E54B 2FD2 14C4 A9A3 0E35 ACA4 A9D5 3A3E 164 <span class="ex">Key</span> fingerprint = AF2A 5381 E54B 2FD2 14C4 A9A3 0E35 ACA4 A9D5 3A3E
167<span class="kw">uid</span> [ultimate] Marvin the Paranoid Android <span class="kw">&lt;</span>marvin@h2g2.net<span class="kw">&gt;</span>[](.html) 165<span class="ex">uid</span> [ultimate] Marvin the Paranoid Android <span class="op">&lt;</span>marvin@h2g2.net<span class="op">&gt;</span>[](.html)
168<span class="kw">sub</span> rsa2048/8C0EACF1 2015-07-31</code></pre></div> 166<span class="ex">sub</span> rsa2048/8C0EACF1 2015-07-31</code></pre></div>
169<h3 id="gpg---submit-your-public-key-to-a-pgp-server-optional">gpg - submit your public key to a PGP server (Optional)</h3> 167<h3 id="gpg---submit-your-public-key-to-a-pgp-server-optional">gpg - submit your public key to a PGP server (Optional)</h3>
170<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">gpg</span> --keyserver pgp.mit.edu --send-keys A9D53A3E 168<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">gpg</span> --keyserver pgp.mit.edu --send-keys A9D53A3E
171<span class="kw">gpg</span>: sending key A9D53A3E to hkp server pgp.mit.edu</code></pre></div> 169<span class="ex">gpg</span>: sending key A9D53A3E to hkp server pgp.mit.edu</code></pre></div>
172<h2 id="create-and-push-a-gpg-signed-tag">Create and push a GPG-signed tag</h2> 170<h2 id="create-and-push-a-gpg-signed-tag">Create and push a GPG-signed tag</h2>
173<p>See <a href="Release-Shaarli.html">Release Shaarli</a>.</p> 171<p>See <a href="Release-Shaarli.html">Release Shaarli</a>.</p>
174</body> 172</body>
diff --git a/doc/Home.html b/doc/Home.html
index 442503c5..970f547e 100644
--- a/doc/Home.html
+++ b/doc/Home.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Plugin-System.html b/doc/Plugin-System.html
index 37b26152..655536c6 100644
--- a/doc/Plugin-System.html
+++ b/doc/Plugin-System.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
diff --git a/doc/Plugins.html b/doc/Plugins.html
index e7df6aed..435a836f 100644
--- a/doc/Plugins.html
+++ b/doc/Plugins.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
diff --git a/doc/RSS-feeds.html b/doc/RSS-feeds.html
index 1b38e4e8..0f332b3d 100644
--- a/doc/RSS-feeds.html
+++ b/doc/RSS-feeds.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Release-Shaarli.html b/doc/Release-Shaarli.html
index cfaa663b..cdefd3d6 100644
--- a/doc/Release-Shaarli.html
+++ b/doc/Release-Shaarli.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,14 +96,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="release-shaarli">Release Shaarli</h1> 102<h1 id="release-shaarli">Release Shaarli</h1>
105<p>See <a href="http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases">Git - Maintaining a project - Tagging your [](.html)<br /> 103<p>See <a href="http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases">Git - Maintaining a project - Tagging your [](.html)<br />
106releases</a>.</p> 104releases</a>.</p>
107<h3 id="prerequisites">Prerequisites</h3> 105<h2 id="prerequisites">Prerequisites</h2>
108<p>This guide assumes that you have:</p> 106<p>This guide assumes that you have:</p>
109<ul> 107<ul>
110<li>a GPG key matching your GitHub authentication credentials 108<li>a GPG key matching your GitHub authentication credentials
@@ -118,53 +116,70 @@ releases</a>.</p>
118<li><code>upstream</code> pointing to the main Shaarli repository</li> 116<li><code>upstream</code> pointing to the main Shaarli repository</li>
119</ul></li> 117</ul></li>
120<li>maintainer permissions on the main Shaarli repository (to push the signed tag)</li> 118<li>maintainer permissions on the main Shaarli repository (to push the signed tag)</li>
121<li><a href="http://pandoc.org/">Pandoc</a> needs to be installed.<a href=".html"></a></li> 119<li><a href="https://getcomposer.org/">Composer</a> and <a href="http://pandoc.org/">Pandoc</a> need to be installed<a href=".html"></a></li>
122</ul> 120</ul>
121<h2 id="increment-the-version-code-create-and-push-a-signed-tag">Increment the version code, create and push a signed tag</h2>
123<h3 id="bump-shaarlis-version">Bump Shaarli's version</h3> 122<h3 id="bump-shaarlis-version">Bump Shaarli's version</h3>
124<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">cd</span> /path/to/shaarli 123<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> /path/to/shaarli
125 124
126<span class="co"># create a new branch</span> 125<span class="co"># create a new branch</span>
127$ <span class="kw">git</span> fetch upstream 126$ <span class="fu">git</span> fetch upstream
128$ <span class="kw">git</span> checkout upstream/master -b v0.5.0 127$ <span class="fu">git</span> checkout upstream/master -b v0.5.0
129 128
130<span class="co"># bump the version number</span> 129<span class="co"># bump the version number</span>
131$ <span class="kw">vim</span> index.php shaarli_version.php 130$ <span class="ex">vim</span> index.php shaarli_version.php
132 131
133<span class="co"># rebuild the documentation from the wiki</span> 132<span class="co"># rebuild the documentation from the wiki</span>
134$ <span class="kw">make</span> htmldoc 133$ <span class="fu">make</span> htmldoc
135 134
136<span class="co"># commit the changes</span> 135<span class="co"># commit the changes</span>
137$ <span class="kw">git</span> add index.php shaarli_version.php doc 136$ <span class="fu">git</span> add index.php shaarli_version.php doc
138$ <span class="kw">git</span> commit -s -m <span class="st">&quot;Bump version to v0.5.0&quot;</span> 137$ <span class="fu">git</span> commit -s -m <span class="st">&quot;Bump version to v0.5.0&quot;</span>
139 138
140<span class="co"># push the commit on your GitHub fork</span> 139<span class="co"># push the commit on your GitHub fork</span>
141$ <span class="kw">git</span> push origin v0.5.0</code></pre></div> 140$ <span class="fu">git</span> push origin v0.5.0</code></pre></div>
142<h3 id="create-and-merge-a-pull-request">Create and merge a Pull Request</h3> 141<h3 id="create-and-merge-a-pull-request">Create and merge a Pull Request</h3>
143<p>This one is pretty straightforward ;-)</p> 142<p>This one is pretty straightforward ;-)</p>
144<h3 id="create-and-push-a-signed-tag">Create and push a signed tag</h3> 143<h3 id="create-and-push-a-signed-tag">Create and push a signed tag</h3>
145<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># update your local copy</span> 144<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># update your local copy</span>
146$ <span class="kw">git</span> checkout master 145$ <span class="fu">git</span> checkout master
147$ <span class="kw">git</span> fetch upstream 146$ <span class="fu">git</span> fetch upstream
148$ <span class="kw">git</span> pull upstream master 147$ <span class="fu">git</span> pull upstream master
149 148
150<span class="co"># create a signed tag</span> 149<span class="co"># create a signed tag</span>
151$ <span class="kw">git</span> tag -s -m <span class="st">&quot;Release v0.5.0&quot;</span> v0.5.0 150$ <span class="fu">git</span> tag -s -m <span class="st">&quot;Release v0.5.0&quot;</span> v0.5.0
152 151
153<span class="co"># push it to &quot;upstream&quot;</span> 152<span class="co"># push it to &quot;upstream&quot;</span>
154$ <span class="kw">git</span> push --tags upstream</code></pre></div> 153$ <span class="fu">git</span> push --tags upstream</code></pre></div>
155<h3 id="verify-a-signed-tag">Verify a signed tag</h3> 154<h3 id="verify-a-signed-tag">Verify a signed tag</h3>
156<p><a href="https://github.com/shaarli/Shaarli/releases/tag/v0.5.0"><code>v0.5.0</code></a> is the first GPG-signed tag pushed on the Community Shaarli.<a href=".html"></a></p> 155<p><a href="https://github.com/shaarli/Shaarli/releases/tag/v0.5.0"><code>v0.5.0</code></a> is the first GPG-signed tag pushed on the Community Shaarli.<a href=".html"></a></p>
157<p>Let's have a look at its signature!</p> 156<p>Let's have a look at its signature!</p>
158<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">cd</span> /path/to/shaarli 157<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> /path/to/shaarli
159$ <span class="kw">git</span> fetch upstream 158$ <span class="fu">git</span> fetch upstream
160 159
161<span class="co"># get the SHA1 reference of the tag</span> 160<span class="co"># get the SHA1 reference of the tag</span>
162$ <span class="kw">git</span> show-ref tags/v0.5.0 161$ <span class="fu">git</span> show-ref tags/v0.5.0
163<span class="kw">f7762cf803f03f5caf4b8078359a63783d0090c1</span> refs/tags/v0.5.0 162<span class="ex">f7762cf803f03f5caf4b8078359a63783d0090c1</span> refs/tags/v0.5.0
164 163
165<span class="co"># verify the tag signature information</span> 164<span class="co"># verify the tag signature information</span>
166$ <span class="kw">git</span> verify-tag f7762cf803f03f5caf4b8078359a63783d0090c1 165$ <span class="fu">git</span> verify-tag f7762cf803f03f5caf4b8078359a63783d0090c1
167<span class="kw">gpg</span>: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F 166<span class="ex">gpg</span>: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F
168<span class="kw">gpg</span>: Good signature from <span class="st">&quot;VirtualTam &lt;virtualtam@flibidi.net&gt;&quot;</span> [ultimate][](.html)</code></pre></div> 167<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>
168<h2 id="generate-and-upload-all-in-one-release-archives">Generate and upload all-in-one release archives</h2>
169<p>Users with a shared hosting may have:</p>
170<ul>
171<li>no SSH access</li>
172<li>no possibility to install PHP packages or server extensions</li>
173<li>no possibility to run scripts</li>
174</ul>
175<p>To ease Shaarli installations, it is possible to generate and upload additional release archives,<br />
176that will contain Shaarli code plus all required third-party libraries:</p>
177<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">make</span> release_archive</code></pre></div>
178<p>This will create the following archives:</p>
179<ul>
180<li><code>shaarli-vX.Y.Z-full.tar</code></li>
181<li><code>shaarli-vX.Y.Z-full.zip</code></li>
182</ul>
183<p>The archives need to be manually uploaded on the previously created GitHub release.</p>
169</body> 184</body>
170</html> 185</html>
diff --git a/doc/Release-Shaarli.md b/doc/Release-Shaarli.md
index d5044fe9..5cbcd79a 100644
--- a/doc/Release-Shaarli.md
+++ b/doc/Release-Shaarli.md
@@ -2,7 +2,7 @@
2See [Git - Maintaining a project - Tagging your [](.html) 2See [Git - Maintaining a project - Tagging your [](.html)
3releases](http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases). 3releases](http://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Tagging-Your-Releases).
4 4
5### Prerequisites 5## Prerequisites
6This guide assumes that you have: 6This guide assumes that you have:
7- a GPG key matching your GitHub authentication credentials 7- a GPG key matching your GitHub authentication credentials
8 - i.e., the email address identified by the GPG key is the same as the one in your `~/.gitconfig` 8 - i.e., the email address identified by the GPG key is the same as the one in your `~/.gitconfig`
@@ -11,8 +11,9 @@ This guide assumes that you have:
11 - `origin` pointing to your GitHub fork 11 - `origin` pointing to your GitHub fork
12 - `upstream` pointing to the main Shaarli repository 12 - `upstream` pointing to the main Shaarli repository
13- maintainer permissions on the main Shaarli repository (to push the signed tag) 13- maintainer permissions on the main Shaarli repository (to push the signed tag)
14- [Pandoc](http://pandoc.org/) needs to be installed.[](.html) 14- [Composer](https://getcomposer.org/) and [Pandoc](http://pandoc.org/) need to be installed[](.html)
15 15
16## Increment the version code, create and push a signed tag
16### Bump Shaarli's version 17### Bump Shaarli's version
17```bash 18```bash
18$ cd /path/to/shaarli 19$ cd /path/to/shaarli
@@ -70,3 +71,22 @@ $ git verify-tag f7762cf803f03f5caf4b8078359a63783d0090c1
70gpg: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F 71gpg: Signature made Thu 30 Jul 2015 11:46:34 CEST using RSA key ID 4100DF6F
71gpg: Good signature from "VirtualTam <virtualtam@flibidi.net>" [ultimate][](.html) 72gpg: Good signature from "VirtualTam <virtualtam@flibidi.net>" [ultimate][](.html)
72``` 73```
74
75## Generate and upload all-in-one release archives
76Users with a shared hosting may have:
77- no SSH access
78- no possibility to install PHP packages or server extensions
79- no possibility to run scripts
80
81To ease Shaarli installations, it is possible to generate and upload additional release archives,
82that will contain Shaarli code plus all required third-party libraries:
83
84```bash
85$ make release_archive
86```
87
88This will create the following archives:
89- `shaarli-vX.Y.Z-full.tar`
90- `shaarli-vX.Y.Z-full.zip`
91
92The archives need to be manually uploaded on the previously created GitHub release.
diff --git a/doc/Security.html b/doc/Security.html
index b1969a4c..cec20590 100644
--- a/doc/Security.html
+++ b/doc/Security.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
diff --git a/doc/Server-configuration.html b/doc/Server-configuration.html
index 1d2276df..068900b8 100644
--- a/doc/Server-configuration.html
+++ b/doc/Server-configuration.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -133,7 +131,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
133<p>See also <a href="https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&amp;q=label%3Aproxy+">proxy-related</a> issues.<a href=".html"></a></p> 131<p>See also <a href="https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&amp;q=label%3Aproxy+">proxy-related</a> issues.<a href=".html"></a></p>
134<h2 id="apache">Apache</h2> 132<h2 id="apache">Apache</h2>
135<h3 id="minimal">Minimal</h3> 133<h3 id="minimal">Minimal</h3>
136<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="ot"> *:80</span><span class="fu">&gt;</span> 134<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="at"> *:80</span><span class="fu">&gt;</span>
137 ServerName<span class="st"> shaarli.my-domain.org</span> 135 ServerName<span class="st"> shaarli.my-domain.org</span>
138 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span> 136 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span>
139<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div> 137<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div>
@@ -144,11 +142,11 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
144<li><a href="http://stackoverflow.com/q/176">Apache/PHP - error log per VirtualHost</a> (StackOverflow)<a href=".html"></a></li> 142<li><a href="http://stackoverflow.com/q/176">Apache/PHP - error log per VirtualHost</a> (StackOverflow)<a href=".html"></a></li>
145<li><a href="https://ma.ttias.be/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/">PHP: php_value vs php_admin_value and the use of php_flag explained</a><a href=".html"></a></li> 143<li><a href="https://ma.ttias.be/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/">PHP: php_value vs php_admin_value and the use of php_flag explained</a><a href=".html"></a></li>
146</ul> 144</ul>
147<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="ot"> *:80</span><span class="fu">&gt;</span> 145<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="at"> *:80</span><span class="fu">&gt;</span>
148 ServerName<span class="st"> shaarli.my-domain.org</span> 146 ServerName<span class="st"> shaarli.my-domain.org</span>
149 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span> 147 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span>
150 148
151 <span class="ot">LogLevel</span><span class="ch"> </span><span class="kw">warn</span> 149 <span class="ex">LogLevel</span><span class="ch"> </span><span class="kw">warn</span>
152 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span> 150 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span>
153 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span> 151 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span>
154 152
@@ -158,40 +156,40 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
158 php_value error_log /var/log/apache2/shaarli-php-error.log 156 php_value error_log /var/log/apache2/shaarli-php-error.log
159<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div> 157<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div>
160<h3 id="standard---keep-access-and-error-logs">Standard - Keep access and error logs</h3> 158<h3 id="standard---keep-access-and-error-logs">Standard - Keep access and error logs</h3>
161<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="ot"> *:80</span><span class="fu">&gt;</span> 159<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="at"> *:80</span><span class="fu">&gt;</span>
162 ServerName<span class="st"> shaarli.my-domain.org</span> 160 ServerName<span class="st"> shaarli.my-domain.org</span>
163 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span> 161 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span>
164 162
165 <span class="ot">LogLevel</span><span class="ch"> </span><span class="kw">warn</span> 163 <span class="ex">LogLevel</span><span class="ch"> </span><span class="kw">warn</span>
166 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span> 164 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span>
167 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span> 165 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span>
168<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div> 166<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div>
169<h3 id="paranoid---redirect-http-80-to-https-443">Paranoid - Redirect HTTP (:80) to HTTPS (:443)</h3> 167<h3 id="paranoid---redirect-http-80-to-https-443">Paranoid - Redirect HTTP (:80) to HTTPS (:443)</h3>
170<p>See <a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Apache">Server-side TLS</a> (Mozilla).<a href=".html"></a></p> 168<p>See <a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Apache">Server-side TLS</a> (Mozilla).<a href=".html"></a></p>
171<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="ot"> *:443</span><span class="fu">&gt;</span> 169<div class="sourceCode"><pre class="sourceCode apache"><code class="sourceCode apache"><span class="fu">&lt;VirtualHost</span><span class="at"> *:443</span><span class="fu">&gt;</span>
172 ServerName<span class="st"> shaarli.my-domain.org</span> 170 ServerName<span class="st"> shaarli.my-domain.org</span>
173 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span> 171 DocumentRoot<span class="st"> /absolute/path/to/shaarli/</span>
174 172
175 <span class="ot">SSLEngine</span><span class="ch"> </span><span class="kw">on</span> 173 <span class="ex">SSLEngine</span><span class="ch"> </span><span class="kw">on</span>
176 SSLCertificateFile<span class="st"> /absolute/path/to/the/website/certificate.pem</span> 174 SSLCertificateFile<span class="st"> /absolute/path/to/the/website/certificate.pem</span>
177 SSLCertificateKeyFile<span class="st"> /absolute/path/to/the/website/key.key</span> 175 SSLCertificateKeyFile<span class="st"> /absolute/path/to/the/website/key.key</span>
178 176
179 <span class="fu">&lt;Directory</span><span class="ot"> /absolute/path/to/shaarli/</span><span class="fu">&gt;</span> 177 <span class="fu">&lt;Directory</span><span class="at"> /absolute/path/to/shaarli/</span><span class="fu">&gt;</span>
180 <span class="ot">AllowOverride</span><span class="ch"> </span><span class="kw">All</span> 178 <span class="ex">AllowOverride</span><span class="ch"> </span><span class="kw">All</span>
181 <span class="ot">Options</span><span class="ch"> </span><span class="kw">Indexes</span><span class="ch"> </span><span class="kw">FollowSymLinks</span><span class="ch"> </span><span class="kw">MultiViews</span> 179 <span class="ex">Options</span><span class="ch"> </span><span class="kw">Indexes</span><span class="ch"> </span><span class="kw">FollowSymLinks</span><span class="ch"> </span><span class="kw">MultiViews</span>
182 <span class="ot">Order</span><span class="ch"> </span><span class="kw">allow,deny</span> 180 <span class="ex">Order</span><span class="ch"> </span><span class="kw">allow,deny</span>
183 allow<span class="st"> from all</span> 181 allow<span class="st"> from all</span>
184 <span class="fu">&lt;/Directory&gt;</span> 182 <span class="fu">&lt;/Directory&gt;</span>
185 183
186 <span class="ot">LogLevel</span><span class="ch"> </span><span class="kw">warn</span> 184 <span class="ex">LogLevel</span><span class="ch"> </span><span class="kw">warn</span>
187 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span> 185 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span>
188 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span> 186 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span>
189<span class="fu">&lt;/VirtualHost&gt;</span> 187<span class="fu">&lt;/VirtualHost&gt;</span>
190<span class="fu">&lt;VirtualHost</span><span class="ot"> *:80</span><span class="fu">&gt;</span> 188<span class="fu">&lt;VirtualHost</span><span class="at"> *:80</span><span class="fu">&gt;</span>
191 ServerName<span class="st"> shaarli.my-domain.org</span> 189 ServerName<span class="st"> shaarli.my-domain.org</span>
192 Redirect<span class="st"> 301 / https://shaarli.my-domain.org</span> 190 Redirect<span class="st"> 301 / https://shaarli.my-domain.org</span>
193 191
194 <span class="ot">LogLevel</span><span class="ch"> </span><span class="kw">warn</span> 192 <span class="ex">LogLevel</span><span class="ch"> </span><span class="kw">warn</span>
195 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span> 193 ErrorLog<span class="st"> /var/log/apache2/shaarli-error.log</span>
196 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span> 194 CustomLog<span class="st"> /var/log/apache2/shaarli-access.log combined</span>
197<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div> 195<span class="fu">&lt;/VirtualHost&gt;</span></code></pre></div>
@@ -410,10 +408,5 @@ http {
410 include php.conf; 408 include php.conf;
411 } 409 }
412}</code></pre> 410}</code></pre>
413<h2 id="restricting-search-engines-and-web-crawler-traffic">Restricting search engines and web crawler traffic</h2>
414<p>Creating a <code>robots.txt</code> witht he following contents at the root of your Shaarli installation will prevent &quot;honest&quot; web crawlers from indexing each and every link and Daily page from a Shaarli instance, thus getting rid of a certain amount of unsollicited network traffic.</p>
415<pre><code>User-agent: *
416Disallow: /</code></pre>
417<p>See: <a href="http://www.robotstxt.org/" class="uri">http://www.robotstxt.org/</a>, <a href="http://www.robotstxt.org/robotstxt.html" class="uri">http://www.robotstxt.org/robotstxt.html</a>, <a href="http://www.robotstxt.org/meta.html" class="uri">http://www.robotstxt.org/meta.html</a></p>
418</body> 411</body>
419</html> 412</html>
diff --git a/doc/Server-configuration.md b/doc/Server-configuration.md
index fd98a608..1ab57a0a 100644
--- a/doc/Server-configuration.md
+++ b/doc/Server-configuration.md
@@ -334,15 +334,3 @@ http {
334 } 334 }
335} 335}
336``` 336```
337
338## Restricting search engines and web crawler traffic
339
340Creating a `robots.txt` witht he following contents at the root of your Shaarli installation will prevent "honest" web crawlers from indexing each and every link and Daily page from a Shaarli instance, thus getting rid of a certain amount of unsollicited network traffic.
341
342```
343User-agent: *
344Disallow: /
345```
346
347See: http://www.robotstxt.org/, http://www.robotstxt.org/robotstxt.html, http://www.robotstxt.org/meta.html
348
diff --git a/doc/Server-requirements.html b/doc/Server-requirements.html
index 8e4deeb8..2c2545bb 100644
--- a/doc/Server-requirements.html
+++ b/doc/Server-requirements.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
@@ -96,18 +94,18 @@
96</tr> 94</tr>
97<tr class="odd"> 95<tr class="odd">
98<td style="text-align: center;">5.5</td> 96<td style="text-align: center;">5.5</td>
99<td style="text-align: center;">Supported</td> 97<td style="text-align: center;">EOL: 2016-07-10</td>
100<td style="text-align: center;">✅</td> 98<td style="text-align: center;">✅</td>
101</tr> 99</tr>
102<tr class="even"> 100<tr class="even">
103<td style="text-align: center;">5.4</td> 101<td style="text-align: center;">5.4</td>
104<td style="text-align: center;">EOL: 2015-09-14</td> 102<td style="text-align: center;">EOL: 2015-09-14</td>
105<td style="text-align: center;">✅</td> 103<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td>
106</tr> 104</tr>
107<tr class="odd"> 105<tr class="odd">
108<td style="text-align: center;">5.3</td> 106<td style="text-align: center;">5.3</td>
109<td style="text-align: center;">EOL: 2014-08-14</td> 107<td style="text-align: center;">EOL: 2014-08-14</td>
110<td style="text-align: center;">✅</td> 108<td style="text-align: center;">✅ (up to Shaarli 0.8.x)</td>
111</tr> 109</tr>
112</tbody> 110</tbody>
113</table> 111</table>
@@ -115,6 +113,25 @@
115<ul> 113<ul>
116<li><a href="https://github.com/shaarli/Shaarli/blob/master/.travis.yml">Travis configuration</a><a href=".html"></a></li> 114<li><a href="https://github.com/shaarli/Shaarli/blob/master/.travis.yml">Travis configuration</a><a href=".html"></a></li>
117</ul> 115</ul>
116<h3 id="dependency-management">Dependency management</h3>
117<p>Starting with Shaarli <code>v0.8.x</code>, <a href="https://getcomposer.org/">Composer</a> is used to resolve,<a href=".html"></a><br />
118download and install third-party PHP dependencies.</p>
119<table>
120<thead>
121<tr class="header">
122<th>Library</th>
123<th style="text-align: center;">Required?</th>
124<th>Usage</th>
125</tr>
126</thead>
127<tbody>
128<tr class="odd">
129<td><a href="https://packagist.org/packages/shaarli/netscape-bookmark-parser"><code>shaarli/netscape-bookmark-parser</code></a></td>
130<td style="text-align: center;">All</td>
131<td>Import bookmarks from Netscape files<a href=".html"></a></td>
132</tr>
133</tbody>
134</table>
118<h3 id="extensions">Extensions</h3> 135<h3 id="extensions">Extensions</h3>
119<table style="width:19%;"> 136<table style="width:19%;">
120<colgroup> 137<colgroup>
@@ -142,13 +159,18 @@
142</tr> 159</tr>
143<tr class="odd"> 160<tr class="odd">
144<td><a href="http://php.net/manual/en/book.image.php"><code>php-gd</code></a></td> 161<td><a href="http://php.net/manual/en/book.image.php"><code>php-gd</code></a></td>
145<td style="text-align: center;">-</td> 162<td style="text-align: center;">optional</td>
146<td>thumbnail resizing<a href=".html"></a></td> 163<td>thumbnail resizing<a href=".html"></a></td>
147</tr> 164</tr>
148<tr class="even"> 165<tr class="even">
149<td><a href="http://php.net/manual/fr/book.intl.php"><code>php-intl</code></a></td> 166<td><a href="http://php.net/manual/en/book.intl.php"><code>php-intl</code></a></td>
150<td style="text-align: center;">Optional</td> 167<td style="text-align: center;">optional</td>
151<td>Tag cloud intelligent sorting (eg. <code>e-&gt;è-&gt;f</code>)<a href=".html"></a></td> 168<td>localized text sorting (e.g. <code>e-&gt;è-&gt;f</code>)<a href=".html"></a></td>
169</tr>
170<tr class="odd">
171<td><a href="http://php.net/manual/en/book.curl.php"><code>php-curl</code></a></td>
172<td style="text-align: center;">optional</td>
173<td>using cURL for fetching webpages and thumbnails in a more robust way<a href=".html"></a></td>
152</tr> 174</tr>
153</tbody> 175</tbody>
154</table> 176</table>
diff --git a/doc/Server-requirements.md b/doc/Server-requirements.md
index 7955fddf..4962193e 100644
--- a/doc/Server-requirements.md
+++ b/doc/Server-requirements.md
@@ -12,17 +12,26 @@ Version | Status | Shaarli compatibility
12:---:|:---:|:---: 12:---:|:---:|:---:
137.0 | Supported | :white_check_mark: 137.0 | Supported | :white_check_mark:
145.6 | Supported | :white_check_mark: 145.6 | Supported | :white_check_mark:
155.5 | Supported | :white_check_mark: 155.5 | EOL: 2016-07-10 | :white_check_mark:
165.4 | EOL: 2015-09-14 | :white_check_mark: 165.4 | EOL: 2015-09-14 | :white_check_mark: (up to Shaarli 0.8.x)
175.3 | EOL: 2014-08-14 | :white_check_mark: 175.3 | EOL: 2014-08-14 | :white_check_mark: (up to Shaarli 0.8.x)
18 18
19See also: 19See also:
20- [Travis configuration](https://github.com/shaarli/Shaarli/blob/master/.travis.yml)[](.html) 20- [Travis configuration](https://github.com/shaarli/Shaarli/blob/master/.travis.yml)[](.html)
21 21
22### Dependency management
23Starting with Shaarli `v0.8.x`, [Composer](https://getcomposer.org/) is used to resolve,[](.html)
24download and install third-party PHP dependencies.
25
26Library | Required? | Usage
27---|:---:|---
28[`shaarli/netscape-bookmark-parser`](https://packagist.org/packages/shaarli/netscape-bookmark-parser) | All | Import bookmarks from Netscape files[](.html)
29
22### Extensions 30### Extensions
23Extension | Required? | Usage 31Extension | Required? | Usage
24---|:---:|--- 32---|:---:|---
25[`openssl`](http://php.net/manual/en/book.openssl.php) | All | OpenSSL, HTTPS[](.html) 33[`openssl`](http://php.net/manual/en/book.openssl.php) | All | OpenSSL, HTTPS[](.html)
26[`php-mbstring`](http://php.net/manual/en/book.mbstring.php) | CentOS, Fedora, RHEL, Windows | multibyte (Unicode) string support[](.html) 34[`php-mbstring`](http://php.net/manual/en/book.mbstring.php) | CentOS, Fedora, RHEL, Windows | multibyte (Unicode) string support[](.html)
27[`php-gd`](http://php.net/manual/en/book.image.php) | - | thumbnail resizing[](.html) 35[`php-gd`](http://php.net/manual/en/book.image.php) | optional | thumbnail resizing[](.html)
28[`php-intl`](http://php.net/manual/fr/book.intl.php) | Optional | Tag cloud intelligent sorting (eg. `e->è->f`)[](.html) 36[`php-intl`](http://php.net/manual/en/book.intl.php) | optional | localized text sorting (e.g. `e->è->f`)[](.html)
37[`php-curl`](http://php.net/manual/en/book.curl.php) | optional | using cURL for fetching webpages and thumbnails in a more robust way[](.html)
diff --git a/doc/Server-security.html b/doc/Server-security.html
index 6b44a133..3551deff 100644
--- a/doc/Server-security.html
+++ b/doc/Server-security.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -118,11 +116,11 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
118</ul> 116</ul>
119<h3 id="locate-.ini-files">Locate .ini files</h3> 117<h3 id="locate-.ini-files">Locate .ini files</h3>
120<h4 id="console-environment">Console environment</h4> 118<h4 id="console-environment">Console environment</h4>
121<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> --ini 119<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">php</span> --ini
122<span class="kw">Configuration</span> File (php.ini) <span class="kw">Path</span>: /etc/php 120<span class="ex">Configuration</span> File (php.ini) <span class="ex">Path</span>: /etc/php
123<span class="kw">Loaded</span> Configuration File: /etc/php/php.ini 121<span class="ex">Loaded</span> Configuration File: /etc/php/php.ini
124<span class="kw">Scan</span> for additional .ini files in: /etc/php/conf.d 122<span class="ex">Scan</span> for additional .ini files in: /etc/php/conf.d
125<span class="kw">Additional</span> .ini files parsed: /etc/php/conf.d/xdebug.ini</code></pre></div> 123<span class="ex">Additional</span> .ini files parsed: /etc/php/conf.d/xdebug.ini</code></pre></div>
126<h4 id="server-environment">Server environment</h4> 124<h4 id="server-environment">Server environment</h4>
127<ul> 125<ul>
128<li>create a <code>phpinfo.php</code> script located in a path supported by the web server, e.g. 126<li>create a <code>phpinfo.php</code> script located in a path supported by the web server, e.g.
@@ -161,5 +159,15 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
161<span class="kw">[Definition][]</span><span class="dt">(.html)</span> 159<span class="kw">[Definition][]</span><span class="dt">(.html)</span>
162<span class="dt">failregex </span><span class="ot">=</span><span class="st"> \s-\s&lt;HOST&gt;\s-\sLogin failed for user.*$</span> 160<span class="dt">failregex </span><span class="ot">=</span><span class="st"> \s-\s&lt;HOST&gt;\s-\sLogin failed for user.*$</span>
163<span class="dt">ignoreregex </span><span class="ot">=</span><span class="st"> </span></code></pre></div> 161<span class="dt">ignoreregex </span><span class="ot">=</span><span class="st"> </span></code></pre></div>
162<h2 id="robots---restricting-search-engines-and-web-crawler-traffic">Robots - Restricting search engines and web crawler traffic</h2>
163<p>Creating a <code>robots.txt</code> with the following contents at the root of your Shaarli installation will prevent <em>honest</em> web crawlers from indexing each and every link and Daily page from a Shaarli instance, thus getting rid of a certain amount of unsollicited network traffic.</p>
164<pre><code>User-agent: *
165Disallow: /</code></pre>
166<p>See:</p>
167<ul>
168<li><a href="http://www.robotstxt.org/" class="uri">http://www.robotstxt.org/</a></li>
169<li><a href="http://www.robotstxt.org/robotstxt.html" class="uri">http://www.robotstxt.org/robotstxt.html</a></li>
170<li><a href="http://www.robotstxt.org/meta.html" class="uri">http://www.robotstxt.org/meta.html</a></li>
171</ul>
164</body> 172</body>
165</html> 173</html>
diff --git a/doc/Server-security.md b/doc/Server-security.md
index 0d16e284..50549a21 100644
--- a/doc/Server-security.md
+++ b/doc/Server-security.md
@@ -58,3 +58,17 @@ before = common.conf
58failregex = \s-\s<HOST>\s-\sLogin failed for user.*$ 58failregex = \s-\s<HOST>\s-\sLogin failed for user.*$
59ignoreregex = 59ignoreregex =
60``` 60```
61
62## Robots - Restricting search engines and web crawler traffic
63
64Creating a `robots.txt` with the following contents at the root of your Shaarli installation will prevent _honest_ web crawlers from indexing each and every link and Daily page from a Shaarli instance, thus getting rid of a certain amount of unsollicited network traffic.
65
66```
67User-agent: *
68Disallow: /
69```
70
71See:
72- http://www.robotstxt.org/
73- http://www.robotstxt.org/robotstxt.html
74- http://www.robotstxt.org/meta.html
diff --git a/doc/Shaarli-configuration.html b/doc/Shaarli-configuration.html
index 74947578..6d717c65 100644
--- a/doc/Shaarli-configuration.html
+++ b/doc/Shaarli-configuration.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,18 +96,19 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
104<h1 id="shaarli-configuration">Shaarli configuration</h1> 102<h1 id="shaarli-configuration">Shaarli configuration</h1>
103<h1 id="shaarli-configuration-1">Shaarli configuration</h1>
105<h2 id="foreword">Foreword</h2> 104<h2 id="foreword">Foreword</h2>
106<p><strong>Do not edit configuration options in index.php! Your changes would be lost.</strong></p> 105<p><strong>Do not edit configuration options in index.php! Your changes would be lost.</strong></p>
107<p>Once your Shaarli instance is installed, the file <code>data/config.php</code> is generated:</p> 106<p>Once your Shaarli instance is installed, the file <code>data/config.json.php</code> is generated:</p>
108<ul> 107<ul>
109<li>it contains all settings, and can be edited to customize values</li> 108<li>it contains all settings in JSON format, and can be edited to customize values</li>
110<li>it defines which <a href="Plugin-System">plugins</a> are enabled<a href=".html"></a></li> 109<li>it defines which <a href="Plugin-System">plugins</a> are enabled<a href="(.html).html">(.html)</a></li>
111<li>its values override those defined in <code>index.php</code></li> 110<li>its values override those defined in <code>index.php</code></li>
111<li>it is wrap in a PHP comment to prevent anyone accessing it, regardless of server configuration</li>
112</ul> 112</ul>
113<h2 id="file-and-directory-permissions">File and directory permissions</h2> 113<h2 id="file-and-directory-permissions">File and directory permissions</h2>
114<p>The server process running Shaarli must have:</p> 114<p>The server process running Shaarli must have:</p>
@@ -141,120 +141,155 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
141<li>unzip Shaarli in the default web server location (usually <code>/var/www/</code>) and set the web server user as the owner</li> 141<li>unzip Shaarli in the default web server location (usually <code>/var/www/</code>) and set the web server user as the owner</li>
142<li>put users in the same group as the web server, and set the appropriate access rights</li> 142<li>put users in the same group as the web server, and set the appropriate access rights</li>
143</ul></li> 143</ul></li>
144<li>if you have a domain / subdomain to serve Shaarli, <a href="Server-configuration">configure the server</a> accordingly<a href=".html"></a></li> 144<li>if you have a domain / subdomain to serve Shaarli, <a href="Server-configuration">configure the server</a> accordingly<a href="(.html).html">(.html)</a></li>
145</ul> 145</ul>
146<h2 id="example-dataconfig.php">Example <code>data/config.php</code></h2> 146<h2 id="configuration">Configuration</h2>
147<p>See also <a href="Plugin-System.html">Plugin System</a>.</p> 147<p>In <code>data/config.json.php</code>.</p>
148<div class="sourceCode"><pre class="sourceCode php"><code class="sourceCode php"><span class="kw">&lt;?php</span> 148<p>See also <a href="Plugin-System.html">Plugin System</a>.<a href=".html"></a></p>
149<span class="co">// User login</span> 149<h3 id="credentials">Credentials</h3>
150<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;login&#39;</span><span class="ot">]</span> = <span class="st">&#39;&lt;login&gt;&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 150<blockquote>
151 151<p>You shouldn't edit those.</p>
152<span class="co">// User password hash</span> 152</blockquote>
153<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;hash&#39;</span><span class="ot">]</span> = <span class="st">&#39;200c452da46c2f889e5e48c49ef044bcacdcb095&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 153<p><strong>login</strong>: Login username.<br />
154 154<strong>hash</strong>: Generated password hash.<br />
155<span class="co">// Password salt</span> 155<strong>salt</strong>: Password salt.</p>
156<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;salt&#39;</span><span class="ot">]</span> = <span class="st">&#39;13b654102321576033d8473b63a275a1bf94c0f0&#39;</span><span class="ot">;</span> <span class="ot">[](</span>.html<span class="ot">)</span> 156<h3 id="general">General</h3>
157 157<p><strong>title</strong>: Shaarli's instance title.<br />
158<span class="co">// Local timezone</span> 158<strong>header_link</strong>: Link to the homepage.<br />
159<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;timezone&#39;</span><span class="ot">]</span> = <span class="st">&#39;Africa/Abidjan&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 159<strong>links_per_page</strong>: Number of shaares displayed per page.<br />
160<span class="fu">date_default_timezone_set</span><span class="ot">(</span><span class="st">&#39;Africa/Abidjan&#39;</span><span class="ot">);</span> 160<strong>timezone</strong>: See <a href="http://php.net/manual/en/timezones.php">the list of supported timezones</a>. <a href=".html"></a><br />
161 161<strong>enabled_plugins</strong>: List of enabled plugins.</p>
162<span class="co">// Shaarli title</span> 162<h3 id="security">Security</h3>
163<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;title&#39;</span><span class="ot">]</span> = <span class="st">&#39;My Little Shaarly&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 163<p><strong>session_protection_disabled</strong>: Disable session cookie hijacking protection (not recommended).<br />
164 164It might be useful if your IP adress often changes.<br />
165<span class="co">// Link the Shaarli title points to</span> 165<strong>ban_after</strong>: Failed login attempts before being IP banned.<br />
166<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;titleLink&#39;</span><span class="ot">]</span> = <span class="st">&#39;?&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 166<strong>ban_duration</strong>: IP ban duration in seconds.<br />
167 167<strong>open_shaarli</strong>: Anyone can add a new link while logged out if enabled.<br />
168<span class="co">// HTTP referer redirector</span> 168<strong>trusted_proxies</strong>: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy.</p>
169<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;redirector&#39;</span><span class="ot">]</span> = <span class="st">&#39;&#39;</span><span class="ot">;[](</span>.html<span class="ot">)</span> 169<h3 id="resources">Resources</h3>
170 170<p><strong>data_dir</strong>: Data directory.<br />
171<span class="co">// Disable session hijacking</span> 171<strong>datastore</strong>: Shaarli's links database file path.<br />
172<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;disablesessionprotection&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;</span> <span class="ot">[](</span>.html<span class="ot">)</span> 172<strong>updates</strong>: File path for the ran updates file.<br />
173 173<strong>log</strong>: Log file path.<br />
174<span class="co">// Whether new links are private by default</span> 174<strong>update_check</strong>: Last update check file path.<br />
175<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;privateLinkByDefault&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;[](</span>.html<span class="ot">)</span> 175<strong>raintpl_tpl</strong>: Templates directory.<br />
176 176<strong>raintpl_tmp</strong>: Template engine cache directory.<br />
177<span class="co">// Enabled plugins</span> 177<strong>thumbnails_cache</strong>: Thumbnails cache directory.<br />
178<span class="co">// Note: each plugin may provide further settings through its own &quot;config.php&quot;</span> 178<strong>page_cache</strong>: Shaarli's internal cache directory.<br />
179<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ENABLED_PLUGINS&#39;</span><span class="ot">]</span> = <span class="fu">array</span><span class="ot">(</span><span class="st">&#39;addlink_toolbar&#39;</span><span class="ot">,</span> <span class="st">&#39;qrcode&#39;</span><span class="ot">);](</span><span class="st">&#39;ENABLED_PLUGINS&#39;</span><span class="ot">]</span>-=-<span class="fu">array</span><span class="ot">(</span><span class="st">&#39;addlink_toolbar&#39;</span><span class="ot">,</span>-<span class="st">&#39;qrcode&#39;</span><span class="ot">);</span>.html<span class="ot">)</span> 179<strong>ban_file</strong>: Banned IP file path.</p>
180 180<h3 id="updates">Updates</h3>
181<span class="co">// Subdirectory where Shaarli stores its data files.</span> 181<p><strong>check_updates</strong>: Enable or disable update check to the git repository.<br />
182<span class="co">// You can change it for better security.</span> 182<strong>check_updates_branch</strong>: Git branch used to check updates (e.g. <code>stable</code> or <code>master</code>).<br />
183<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;DATADIR&#39;</span><span class="ot">]</span> = <span class="st">&#39;data&#39;</span><span class="ot">;](</span><span class="st">&#39;DATADIR&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;data&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 183<strong>check_updates_interval</strong>: Look for new version every N seconds (default: every day).</p>
184 184<h3 id="privacy">Privacy</h3>
185<span class="co">// File used to store settings</span> 185<p><strong>default_private_links</strong>: Check the private checkbox by default for every new link.<br />
186<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;CONFIG_FILE&#39;</span><span class="ot">]</span> = <span class="st">&#39;data/config.php&#39;</span><span class="ot">;](</span><span class="st">&#39;CONFIG_FILE&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;data/config.php&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 186<strong>hide_public_links</strong>: All links are hidden while logged out.<br />
187 187<strong>hide_timestamps</strong>: Timestamps are hidden.</p>
188<span class="co">// File containing the link database</span> 188<h3 id="feed">Feed</h3>
189<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;DATASTORE&#39;</span><span class="ot">]</span> = <span class="st">&#39;data/datastore.php&#39;</span><span class="ot">;](</span><span class="st">&#39;DATASTORE&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;data/datastore.php&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 189<p><strong>rss_permalinks</strong>: Enable this to redirect RSS links to Shaarli's permalinks instead of shaared URL.<br />
190 190<strong>show_atom</strong>: Display ATOM feed button.</p>
191<span class="co">// Number of links displayed per page</span> 191<h3 id="thumbnail">Thumbnail</h3>
192<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;LINKS_PER_PAGE&#39;</span><span class="ot">]</span> = <span class="dv">20</span><span class="ot">;](</span><span class="st">&#39;LINKS_PER_PAGE&#39;</span><span class="ot">]</span>-=-<span class="dv">20</span><span class="ot">;</span>.html<span class="ot">)</span> 192<p><strong>enable_thumbnails</strong>: Enable or disable thumbnail display.<br />
193 193<strong>enable_localcache</strong>: Enable or disable local cache.</p>
194<span class="co">// File recording failed login attempts and IP bans</span> 194<h3 id="redirector">Redirector</h3>
195<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;IPBANS_FILENAME&#39;</span><span class="ot">]</span> = <span class="st">&#39;data/ipbans.php&#39;</span><span class="ot">;](</span><span class="st">&#39;IPBANS_FILENAME&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;data/ipbans.php&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 195<p><strong>url</strong>: Redirector URL, such as <code>anonym.to</code>.<br />
196 196<strong>encode_url</strong>: Enable this if the redirector needs encoded URL to work properly.</p>
197<span class="co">// Failed login attempts before being banned</span> 197<h2 id="configuration-file-example">Configuration file example</h2>
198<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;BAN_AFTER&#39;</span><span class="ot">]</span> = <span class="dv">4</span><span class="ot">;](</span><span class="st">&#39;BAN_AFTER&#39;</span><span class="ot">]</span>-=-<span class="dv">4</span><span class="ot">;</span>.html<span class="ot">)</span> 198<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="er">&lt;?php</span> <span class="er">/*</span>
199 199<span class="fu">{</span>
200<span class="co">// Duration of an IP ban, in seconds (30 minutes)</span> 200 <span class="dt">&quot;credentials&quot;</span><span class="fu">:</span> <span class="fu">{</span>
201<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;BAN_DURATION&#39;</span><span class="ot">]</span> = <span class="dv">1800</span><span class="ot">;](</span><span class="st">&#39;BAN_DURATION&#39;</span><span class="ot">]</span>-=-<span class="dv">1800</span><span class="ot">;</span>.html<span class="ot">)</span> 201 <span class="dt">&quot;login&quot;</span><span class="fu">:</span> <span class="st">&quot;&lt;login&gt;&quot;</span><span class="fu">,</span>
202 202 <span class="dt">&quot;hash&quot;</span><span class="fu">:</span> <span class="st">&quot;&lt;password hash&gt;&quot;</span><span class="fu">,</span>
203<span class="co">// If set to true, everyone will be able to add, edit and remove links,</span> 203 <span class="dt">&quot;salt&quot;</span><span class="fu">:</span> <span class="st">&quot;&lt;password salt&gt;&quot;</span>
204<span class="co">// as well as change configuration</span> 204 <span class="fu">},</span>
205<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;OPEN_SHAARLI&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;](</span><span class="st">&#39;OPEN_SHAARLI&#39;</span><span class="ot">]</span>-=-<span class="kw">false</span><span class="ot">;</span>.html<span class="ot">)</span> 205 <span class="dt">&quot;security&quot;</span><span class="fu">:</span> <span class="fu">{</span>
206 206 <span class="dt">&quot;ban_after&quot;</span><span class="fu">:</span> <span class="dv">4</span><span class="fu">,</span>
207<span class="co">// Do not show link timestamps</span> 207 <span class="dt">&quot;session_protection_disabled&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
208<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;HIDE_TIMESTAMPS&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;](</span><span class="st">&#39;HIDE_TIMESTAMPS&#39;</span><span class="ot">]</span>-=-<span class="kw">false</span><span class="ot">;</span>.html<span class="ot">)</span> 208 <span class="dt">&quot;ban_duration&quot;</span><span class="fu">:</span> <span class="dv">1800</span><span class="fu">,</span>
209 209 <span class="dt">&quot;trusted_proxies&quot;</span><span class="fu">:</span> <span class="ot">[[]</span><span class="er">(.html)</span>
210<span class="co">// Set to false to disable local thumbnail cache, e.g. due to limited disk quotas</span> 210 <span class="st">&quot;1.2.3.4&quot;</span><span class="ot">,</span>
211<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ENABLE_THUMBNAILS&#39;</span><span class="ot">]</span> = <span class="kw">true</span><span class="ot">;](</span><span class="st">&#39;ENABLE_THUMBNAILS&#39;</span><span class="ot">]</span>-=-<span class="kw">true</span><span class="ot">;</span>.html<span class="ot">)</span> 211 <span class="st">&quot;5.6.7.8&quot;</span>
212 212 <span class="ot">]</span>
213<span class="co">// Thumbnail cache directory</span> 213 <span class="fu">},</span>
214<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;CACHEDIR&#39;</span><span class="ot">]</span> = <span class="st">&#39;cache&#39;</span><span class="ot">;](</span><span class="st">&#39;CACHEDIR&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;cache&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 214 <span class="dt">&quot;resources&quot;</span><span class="fu">:</span> <span class="fu">{</span>
215 215 <span class="dt">&quot;data_dir&quot;</span><span class="fu">:</span> <span class="st">&quot;data&quot;</span><span class="fu">,</span>
216<span class="co">// Enable feed (rss, atom, dailyrss) cache</span> 216 <span class="dt">&quot;config&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">config.php&quot;</span><span class="fu">,</span>
217<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ENABLE_LOCALCACHE&#39;</span><span class="ot">]</span> = <span class="kw">true</span><span class="ot">;](</span><span class="st">&#39;ENABLE_LOCALCACHE&#39;</span><span class="ot">]</span>-=-<span class="kw">true</span><span class="ot">;</span>.html<span class="ot">)</span> 217 <span class="dt">&quot;datastore&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">datastore.php&quot;</span><span class="fu">,</span>
218 218 <span class="dt">&quot;ban_file&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">ipbans.php&quot;</span><span class="fu">,</span>
219<span class="co">// Feed cache directory</span> 219 <span class="dt">&quot;updates&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">updates.txt&quot;</span><span class="fu">,</span>
220<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;PAGECACHE&#39;</span><span class="ot">]</span> = <span class="st">&#39;pagecache&#39;</span><span class="ot">;](</span><span class="st">&#39;PAGECACHE&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;pagecache&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 220 <span class="dt">&quot;log&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">log.txt&quot;</span><span class="fu">,</span>
221 221 <span class="dt">&quot;update_check&quot;</span><span class="fu">:</span> <span class="st">&quot;data</span><span class="ch">\/</span><span class="st">lastupdatecheck.txt&quot;</span><span class="fu">,</span>
222<span class="co">// RainTPL cache directory (keep the trailing slash!)</span> 222 <span class="dt">&quot;raintpl_tmp&quot;</span><span class="fu">:</span> <span class="st">&quot;tmp</span><span class="ch">\/</span><span class="st">&quot;</span><span class="fu">,</span>
223<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;RAINTPL_TMP&#39;</span><span class="ot">]</span> = <span class="st">&#39;tmp/&#39;</span><span class="ot">;](</span><span class="st">&#39;RAINTPL_TMP&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;tmp/&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 223 <span class="dt">&quot;raintpl_tpl&quot;</span><span class="fu">:</span> <span class="st">&quot;tpl</span><span class="ch">\/</span><span class="st">&quot;</span><span class="fu">,</span>
224 224 <span class="dt">&quot;thumbnails_cache&quot;</span><span class="fu">:</span> <span class="st">&quot;cache&quot;</span><span class="fu">,</span>
225<span class="co">// RainTPL template directory (keep the trailing slash!)</span> 225 <span class="dt">&quot;page_cache&quot;</span><span class="fu">:</span> <span class="st">&quot;pagecache&quot;</span>
226<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;RAINTPL_TPL&#39;</span><span class="ot">]</span> = <span class="st">&#39;tpl/&#39;</span><span class="ot">;](</span><span class="st">&#39;RAINTPL_TPL&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;tpl/&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 226 <span class="fu">},</span>
227 227 <span class="dt">&quot;general&quot;</span><span class="fu">:</span> <span class="fu">{</span>
228<span class="co">// Whether Shaarli checks for new releases at https://github.com/shaarli/Shaarli</span> 228 <span class="dt">&quot;check_updates&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
229<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ENABLE_UPDATECHECK&#39;</span><span class="ot">]</span> = <span class="kw">true</span><span class="ot">;](</span><span class="st">&#39;ENABLE_UPDATECHECK&#39;</span><span class="ot">]</span>-=-<span class="kw">true</span><span class="ot">;</span>.html<span class="ot">)</span> 229 <span class="dt">&quot;rss_permalinks&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
230 230 <span class="dt">&quot;links_per_page&quot;</span><span class="fu">:</span> <span class="dv">20</span><span class="fu">,</span>
231<span class="co">// File to store the latest Shaarli version</span> 231 <span class="dt">&quot;default_private_links&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
232<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;UPDATECHECK_FILENAME&#39;</span><span class="ot">]</span> = <span class="st">&#39;data/lastupdatecheck.txt&#39;</span><span class="ot">;](</span><span class="st">&#39;UPDATECHECK_FILENAME&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;data/lastupdatecheck.txt&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 232 <span class="dt">&quot;enable_thumbnails&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
233 233 <span class="dt">&quot;enable_localcache&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
234<span class="co">// Delay between version checks (requires to be logged in) (24 hours)</span> 234 <span class="dt">&quot;check_updates_branch&quot;</span><span class="fu">:</span> <span class="st">&quot;stable&quot;</span><span class="fu">,</span>
235<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;UPDATECHECK_INTERVAL&#39;</span><span class="ot">]</span> = <span class="dv">86400</span><span class="ot">;](</span><span class="st">&#39;UPDATECHECK_INTERVAL&#39;</span><span class="ot">]</span>-=-<span class="dv">86400</span><span class="ot">;</span>.html<span class="ot">)</span> 235 <span class="dt">&quot;check_updates_interval&quot;</span><span class="fu">:</span> <span class="dv">86400</span><span class="fu">,</span>
236 236 <span class="dt">&quot;enabled_plugins&quot;</span><span class="fu">:</span> <span class="ot">[[]</span><span class="er">(.html)</span>
237<span class="co">// For each link, display a link to an archived version on archive.org</span> 237 <span class="st">&quot;markdown&quot;</span><span class="ot">,</span>
238<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ARCHIVE_ORG&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;](</span><span class="st">&#39;ARCHIVE_ORG&#39;</span><span class="ot">]</span>-=-<span class="kw">false</span><span class="ot">;</span>.html<span class="ot">)</span> 238 <span class="st">&quot;wallabag&quot;</span><span class="ot">,</span>
239 239 <span class="st">&quot;archiveorg&quot;</span>
240<span class="co">// The RSS item links point:</span> 240 <span class="ot">]</span><span class="fu">,</span>
241<span class="co">// true =&gt; directly to the link</span> 241 <span class="dt">&quot;timezone&quot;</span><span class="fu">:</span> <span class="st">&quot;Europe</span><span class="ch">\/</span><span class="st">Paris&quot;</span><span class="fu">,</span>
242<span class="co">// false =&gt; to the entry on Shaarli (permalink)</span> 242 <span class="dt">&quot;title&quot;</span><span class="fu">:</span> <span class="st">&quot;My Shaarli&quot;</span><span class="fu">,</span>
243<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;ENABLE_RSS_PERMALINKS&#39;</span><span class="ot">]</span> = <span class="kw">true</span><span class="ot">;](</span><span class="st">&#39;ENABLE_RSS_PERMALINKS&#39;</span><span class="ot">]</span>-=-<span class="kw">true</span><span class="ot">;</span>.html<span class="ot">)</span> 243 <span class="dt">&quot;header_link&quot;</span><span class="fu">:</span> <span class="st">&quot;?&quot;</span>
244 244 <span class="fu">},</span>
245<span class="co">// Hide all links to non-logged users</span> 245 <span class="dt">&quot;extras&quot;</span><span class="fu">:</span> <span class="fu">{</span>
246<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;HIDE_PUBLIC_LINKS&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;](</span><span class="st">&#39;HIDE_PUBLIC_LINKS&#39;</span><span class="ot">]</span>-=-<span class="kw">false</span><span class="ot">;</span>.html<span class="ot">)</span> 246 <span class="dt">&quot;show_atom&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
247 247 <span class="dt">&quot;hide_public_links&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
248<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;PUBSUBHUB_URL&#39;</span><span class="ot">]</span> = <span class="st">&#39;&#39;</span><span class="ot">;](</span><span class="st">&#39;PUBSUBHUB_URL&#39;</span><span class="ot">]</span>-=-<span class="st">&#39;&#39;</span><span class="ot">;</span>.html<span class="ot">)</span> 248 <span class="dt">&quot;hide_timestamps&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
249 249 <span class="dt">&quot;open_shaarli&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
250<span class="co">// Show an ATOM Feed button next to the Subscribe (RSS) button.</span> 250 <span class="dt">&quot;redirector&quot;</span><span class="fu">:</span> <span class="st">&quot;http://anonym.to/?&quot;</span><span class="fu">,</span>
251<span class="co">// ATOM feeds are available at the address ?do=atom regardless of this option.</span> 251 <span class="dt">&quot;redirector_encode_url&quot;</span><span class="fu">:</span> <span class="kw">false</span>
252<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;SHOW_ATOM&#39;</span><span class="ot">]</span> = <span class="kw">false</span><span class="ot">;](</span><span class="st">&#39;SHOW_ATOM&#39;</span><span class="ot">]</span>-=-<span class="kw">false</span><span class="ot">;</span>.html<span class="ot">)</span> 252 <span class="fu">},</span>
253 253 <span class="dt">&quot;general&quot;</span><span class="fu">:</span> <span class="fu">{</span>
254<span class="co">// Set this to true if the redirector requires encoded URL, false otherwise.</span> 254 <span class="dt">&quot;header_link&quot;</span><span class="fu">:</span> <span class="st">&quot;?&quot;</span><span class="fu">,</span>
255<span class="kw">$GLOBALS</span><span class="ot">[</span><span class="st">&#39;config&#39;</span><span class="ot">[</span><span class="st">&#39;REDIRECTOR_URLENCODE&#39;</span><span class="ot">]</span> = <span class="kw">true</span><span class="ot">;](</span><span class="st">&#39;REDIRECTOR_URLENCODE&#39;</span><span class="ot">]</span>-=-<span class="kw">true</span><span class="ot">;</span>.html<span class="ot">)</span> 255 <span class="dt">&quot;links_per_page&quot;</span><span class="fu">:</span> <span class="dv">20</span><span class="fu">,</span>
256<span class="kw">?&gt;</span></code></pre></div> 256 <span class="dt">&quot;enabled_plugins&quot;</span><span class="fu">:</span> <span class="ot">[[]</span><span class="er">(.html)</span>
257 <span class="st">&quot;markdown&quot;</span><span class="ot">,</span>
258 <span class="st">&quot;wallabag&quot;</span>
259 <span class="ot">]</span><span class="fu">,</span>
260 <span class="dt">&quot;timezone&quot;</span><span class="fu">:</span> <span class="st">&quot;Europe</span><span class="ch">\/</span><span class="st">Paris&quot;</span><span class="fu">,</span>
261 <span class="dt">&quot;title&quot;</span><span class="fu">:</span> <span class="st">&quot;My Shaarli&quot;</span>
262 <span class="fu">},</span>
263 <span class="dt">&quot;updates&quot;</span><span class="fu">:</span> <span class="fu">{</span>
264 <span class="dt">&quot;check_updates&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
265 <span class="dt">&quot;check_updates_branch&quot;</span><span class="fu">:</span> <span class="st">&quot;stable&quot;</span><span class="fu">,</span>
266 <span class="dt">&quot;check_updates_interval&quot;</span><span class="fu">:</span> <span class="dv">86400</span>
267 <span class="fu">},</span>
268 <span class="dt">&quot;feed&quot;</span><span class="fu">:</span> <span class="fu">{</span>
269 <span class="dt">&quot;rss_permalinks&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
270 <span class="dt">&quot;show_atom&quot;</span><span class="fu">:</span> <span class="kw">false</span>
271 <span class="fu">},</span>
272 <span class="dt">&quot;privacy&quot;</span><span class="fu">:</span> <span class="fu">{</span>
273 <span class="dt">&quot;default_private_links&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
274 <span class="dt">&quot;hide_public_links&quot;</span><span class="fu">:</span> <span class="kw">false</span><span class="fu">,</span>
275 <span class="dt">&quot;hide_timestamps&quot;</span><span class="fu">:</span> <span class="kw">false</span>
276 <span class="fu">},</span>
277 <span class="dt">&quot;thumbnail&quot;</span><span class="fu">:</span> <span class="fu">{</span>
278 <span class="dt">&quot;enable_thumbnails&quot;</span><span class="fu">:</span> <span class="kw">true</span><span class="fu">,</span>
279 <span class="dt">&quot;enable_localcache&quot;</span><span class="fu">:</span> <span class="kw">true</span>
280 <span class="fu">},</span>
281 <span class="dt">&quot;redirector&quot;</span><span class="fu">:</span> <span class="fu">{</span>
282 <span class="dt">&quot;url&quot;</span><span class="fu">:</span> <span class="st">&quot;http://anonym.to/?&quot;</span><span class="fu">,</span>
283 <span class="dt">&quot;encode_url&quot;</span><span class="fu">:</span> <span class="kw">false</span>
284 <span class="fu">},</span>
285 <span class="dt">&quot;plugins&quot;</span><span class="fu">:</span> <span class="fu">{</span>
286 <span class="dt">&quot;WALLABAG_URL&quot;</span><span class="fu">:</span> <span class="st">&quot;http://demo.wallabag.org&quot;</span><span class="fu">,</span>
287 <span class="dt">&quot;WALLABAG_VERSION&quot;</span><span class="fu">:</span> <span class="st">&quot;1&quot;</span>
288 <span class="fu">}</span>
289<span class="fu">}</span> <span class="er">?&gt;</span></code></pre></div>
257<h2 id="additional-configuration">Additional configuration</h2> 290<h2 id="additional-configuration">Additional configuration</h2>
258<p>The playvideos plugin may require that you adapt your server's <a href="https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting">Content Security Policy</a> configuration to work properly.<a href=".html"></a></p> 291<p>The playvideos plugin may require that you adapt your server's<br />
292<a href="https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting">Content Security Policy</a> <a href=".html"></a><br />
293configuration to work properly.<a href="(.html).html">(.html)</a></p>
259</body> 294</body>
260</html> 295</html>
diff --git a/doc/Shaarli-configuration.md b/doc/Shaarli-configuration.md
index d0560d79..4a783c0e 100644
--- a/doc/Shaarli-configuration.md
+++ b/doc/Shaarli-configuration.md
@@ -1,14 +1,18 @@
1#Shaarli configuration 1#Shaarli configuration
2# Shaarli configuration
3
2## Foreword 4## Foreword
3 5
4**Do not edit configuration options in index.php! Your changes would be lost.** 6**Do not edit configuration options in index.php! Your changes would be lost.**
5 7
6Once your Shaarli instance is installed, the file `data/config.php` is generated: 8Once your Shaarli instance is installed, the file `data/config.json.php` is generated:
7* it contains all settings, and can be edited to customize values 9* it contains all settings in JSON format, and can be edited to customize values
8* it defines which [plugins](Plugin-System) are enabled[](.html) 10* it defines which [plugins](Plugin-System) are enabled[(.html)]((.html).html)
9* its values override those defined in `index.php` 11* its values override those defined in `index.php`
12* it is wrap in a PHP comment to prevent anyone accessing it, regardless of server configuration
10 13
11## File and directory permissions 14## File and directory permissions
15
12The server process running Shaarli must have: 16The server process running Shaarli must have:
13- `read` access to the following resources: 17- `read` access to the following resources:
14 - PHP scripts: `index.php`, `application/*.php`, `plugins/*.php` 18 - PHP scripts: `index.php`, `application/*.php`, `plugins/*.php`
@@ -29,123 +33,179 @@ On a Linux distribution:
29- to give it access to Shaarli, either: 33- to give it access to Shaarli, either:
30 - unzip Shaarli in the default web server location (usually `/var/www/`) and set the web server user as the owner 34 - unzip Shaarli in the default web server location (usually `/var/www/`) and set the web server user as the owner
31 - put users in the same group as the web server, and set the appropriate access rights 35 - put users in the same group as the web server, and set the appropriate access rights
32- if you have a domain / subdomain to serve Shaarli, [configure the server](Server-configuration) accordingly[](.html) 36- if you have a domain / subdomain to serve Shaarli, [configure the server](Server-configuration) accordingly[(.html)]((.html).html)
33 37
34## Example `data/config.php` 38## Configuration
35See also [Plugin System](Plugin-System.html). 39
36 40In `data/config.json.php`.
37```php 41
38<?php 42See also [Plugin System](Plugin-System.html).[](.html)
39// User login 43
40$GLOBALS['login'] = '<login>';[](.html) 44### Credentials
41 45
42// User password hash 46> You shouldn't edit those.
43$GLOBALS['hash'] = '200c452da46c2f889e5e48c49ef044bcacdcb095';[](.html) 47
44 48**login**: Login username.
45// Password salt 49**hash**: Generated password hash.
46$GLOBALS['salt'] = '13b654102321576033d8473b63a275a1bf94c0f0'; [](.html) 50**salt**: Password salt.
47 51
48// Local timezone 52### General
49$GLOBALS['timezone'] = 'Africa/Abidjan';[](.html) 53
50date_default_timezone_set('Africa/Abidjan'); 54**title**: Shaarli's instance title.
51 55**header_link**: Link to the homepage.
52// Shaarli title 56**links_per_page**: Number of shaares displayed per page.
53$GLOBALS['title'] = 'My Little Shaarly';[](.html) 57**timezone**: See [the list of supported timezones](http://php.net/manual/en/timezones.php). [](.html)
54 58**enabled_plugins**: List of enabled plugins.
55// Link the Shaarli title points to 59
56$GLOBALS['titleLink'] = '?';[](.html) 60### Security
57 61
58// HTTP referer redirector 62**session_protection_disabled**: Disable session cookie hijacking protection (not recommended).
59$GLOBALS['redirector'] = '';[](.html) 63It might be useful if your IP adress often changes.
60 64**ban_after**: Failed login attempts before being IP banned.
61// Disable session hijacking 65**ban_duration**: IP ban duration in seconds.
62$GLOBALS['disablesessionprotection'] = false; [](.html) 66**open_shaarli**: Anyone can add a new link while logged out if enabled.
63 67**trusted_proxies**: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy.
64// Whether new links are private by default 68
65$GLOBALS['privateLinkByDefault'] = false;[](.html) 69### Resources
66 70
67// Enabled plugins 71**data_dir**: Data directory.
68// Note: each plugin may provide further settings through its own "config.php" 72**datastore**: Shaarli's links database file path.
69$GLOBALS['config'['ENABLED_PLUGINS'] = array('addlink_toolbar', 'qrcode');]('ENABLED_PLUGINS']-=-array('addlink_toolbar',-'qrcode');.html) 73**updates**: File path for the ran updates file.
70 74**log**: Log file path.
71// Subdirectory where Shaarli stores its data files. 75**update_check**: Last update check file path.
72// You can change it for better security. 76**raintpl_tpl**: Templates directory.
73$GLOBALS['config'['DATADIR'] = 'data';]('DATADIR']-=-'data';.html) 77**raintpl_tmp**: Template engine cache directory.
74 78**thumbnails_cache**: Thumbnails cache directory.
75// File used to store settings 79**page_cache**: Shaarli's internal cache directory.
76$GLOBALS['config'['CONFIG_FILE'] = 'data/config.php';]('CONFIG_FILE']-=-'data/config.php';.html) 80**ban_file**: Banned IP file path.
77 81
78// File containing the link database 82### Updates
79$GLOBALS['config'['DATASTORE'] = 'data/datastore.php';]('DATASTORE']-=-'data/datastore.php';.html) 83
80 84**check_updates**: Enable or disable update check to the git repository.
81// Number of links displayed per page 85**check_updates_branch**: Git branch used to check updates (e.g. `stable` or `master`).
82$GLOBALS['config'['LINKS_PER_PAGE'] = 20;]('LINKS_PER_PAGE']-=-20;.html) 86**check_updates_interval**: Look for new version every N seconds (default: every day).
83 87
84// File recording failed login attempts and IP bans 88### Privacy
85$GLOBALS['config'['IPBANS_FILENAME'] = 'data/ipbans.php';]('IPBANS_FILENAME']-=-'data/ipbans.php';.html) 89
86 90**default_private_links**: Check the private checkbox by default for every new link.
87// Failed login attempts before being banned 91**hide_public_links**: All links are hidden while logged out.
88$GLOBALS['config'['BAN_AFTER'] = 4;]('BAN_AFTER']-=-4;.html) 92**hide_timestamps**: Timestamps are hidden.
89 93
90// Duration of an IP ban, in seconds (30 minutes) 94### Feed
91$GLOBALS['config'['BAN_DURATION'] = 1800;]('BAN_DURATION']-=-1800;.html) 95
92 96**rss_permalinks**: Enable this to redirect RSS links to Shaarli's permalinks instead of shaared URL.
93// If set to true, everyone will be able to add, edit and remove links, 97**show_atom**: Display ATOM feed button.
94// as well as change configuration 98
95$GLOBALS['config'['OPEN_SHAARLI'] = false;]('OPEN_SHAARLI']-=-false;.html) 99### Thumbnail
96 100
97// Do not show link timestamps 101**enable_thumbnails**: Enable or disable thumbnail display.
98$GLOBALS['config'['HIDE_TIMESTAMPS'] = false;]('HIDE_TIMESTAMPS']-=-false;.html) 102**enable_localcache**: Enable or disable local cache.
99 103
100// Set to false to disable local thumbnail cache, e.g. due to limited disk quotas 104### Redirector
101$GLOBALS['config'['ENABLE_THUMBNAILS'] = true;]('ENABLE_THUMBNAILS']-=-true;.html) 105
102 106**url**: Redirector URL, such as `anonym.to`.
103// Thumbnail cache directory 107**encode_url**: Enable this if the redirector needs encoded URL to work properly.
104$GLOBALS['config'['CACHEDIR'] = 'cache';]('CACHEDIR']-=-'cache';.html) 108
105 109## Configuration file example
106// Enable feed (rss, atom, dailyrss) cache 110
107$GLOBALS['config'['ENABLE_LOCALCACHE'] = true;]('ENABLE_LOCALCACHE']-=-true;.html) 111```json
108 112<?php /*
109// Feed cache directory 113{
110$GLOBALS['config'['PAGECACHE'] = 'pagecache';]('PAGECACHE']-=-'pagecache';.html) 114 "credentials": {
111 115 "login": "<login>",
112// RainTPL cache directory (keep the trailing slash!) 116 "hash": "<password hash>",
113$GLOBALS['config'['RAINTPL_TMP'] = 'tmp/';]('RAINTPL_TMP']-=-'tmp/';.html) 117 "salt": "<password salt>"
114 118 },
115// RainTPL template directory (keep the trailing slash!) 119 "security": {
116$GLOBALS['config'['RAINTPL_TPL'] = 'tpl/';]('RAINTPL_TPL']-=-'tpl/';.html) 120 "ban_after": 4,
117 121 "session_protection_disabled": false,
118// Whether Shaarli checks for new releases at https://github.com/shaarli/Shaarli 122 "ban_duration": 1800,
119$GLOBALS['config'['ENABLE_UPDATECHECK'] = true;]('ENABLE_UPDATECHECK']-=-true;.html) 123 "trusted_proxies": [[](.html)
120 124 "1.2.3.4",
121// File to store the latest Shaarli version 125 "5.6.7.8"
122$GLOBALS['config'['UPDATECHECK_FILENAME'] = 'data/lastupdatecheck.txt';]('UPDATECHECK_FILENAME']-=-'data/lastupdatecheck.txt';.html) 126 ]
123 127 },
124// Delay between version checks (requires to be logged in) (24 hours) 128 "resources": {
125$GLOBALS['config'['UPDATECHECK_INTERVAL'] = 86400;]('UPDATECHECK_INTERVAL']-=-86400;.html) 129 "data_dir": "data",
126 130 "config": "data\/config.php",
127// For each link, display a link to an archived version on archive.org 131 "datastore": "data\/datastore.php",
128$GLOBALS['config'['ARCHIVE_ORG'] = false;]('ARCHIVE_ORG']-=-false;.html) 132 "ban_file": "data\/ipbans.php",
129 133 "updates": "data\/updates.txt",
130// The RSS item links point: 134 "log": "data\/log.txt",
131// true => directly to the link 135 "update_check": "data\/lastupdatecheck.txt",
132// false => to the entry on Shaarli (permalink) 136 "raintpl_tmp": "tmp\/",
133$GLOBALS['config'['ENABLE_RSS_PERMALINKS'] = true;]('ENABLE_RSS_PERMALINKS']-=-true;.html) 137 "raintpl_tpl": "tpl\/",
134 138 "thumbnails_cache": "cache",
135// Hide all links to non-logged users 139 "page_cache": "pagecache"
136$GLOBALS['config'['HIDE_PUBLIC_LINKS'] = false;]('HIDE_PUBLIC_LINKS']-=-false;.html) 140 },
137 141 "general": {
138$GLOBALS['config'['PUBSUBHUB_URL'] = '';]('PUBSUBHUB_URL']-=-'';.html) 142 "check_updates": true,
139 143 "rss_permalinks": true,
140// Show an ATOM Feed button next to the Subscribe (RSS) button. 144 "links_per_page": 20,
141// ATOM feeds are available at the address ?do=atom regardless of this option. 145 "default_private_links": true,
142$GLOBALS['config'['SHOW_ATOM'] = false;]('SHOW_ATOM']-=-false;.html) 146 "enable_thumbnails": true,
143 147 "enable_localcache": true,
144// Set this to true if the redirector requires encoded URL, false otherwise. 148 "check_updates_branch": "stable",
145$GLOBALS['config'['REDIRECTOR_URLENCODE'] = true;]('REDIRECTOR_URLENCODE']-=-true;.html) 149 "check_updates_interval": 86400,
146?> 150 "enabled_plugins": [[](.html)
151 "markdown",
152 "wallabag",
153 "archiveorg"
154 ],
155 "timezone": "Europe\/Paris",
156 "title": "My Shaarli",
157 "header_link": "?"
158 },
159 "extras": {
160 "show_atom": false,
161 "hide_public_links": false,
162 "hide_timestamps": false,
163 "open_shaarli": false,
164 "redirector": "http://anonym.to/?",
165 "redirector_encode_url": false
166 },
167 "general": {
168 "header_link": "?",
169 "links_per_page": 20,
170 "enabled_plugins": [[](.html)
171 "markdown",
172 "wallabag"
173 ],
174 "timezone": "Europe\/Paris",
175 "title": "My Shaarli"
176 },
177 "updates": {
178 "check_updates": true,
179 "check_updates_branch": "stable",
180 "check_updates_interval": 86400
181 },
182 "feed": {
183 "rss_permalinks": true,
184 "show_atom": false
185 },
186 "privacy": {
187 "default_private_links": true,
188 "hide_public_links": false,
189 "hide_timestamps": false
190 },
191 "thumbnail": {
192 "enable_thumbnails": true,
193 "enable_localcache": true
194 },
195 "redirector": {
196 "url": "http://anonym.to/?",
197 "encode_url": false
198 },
199 "plugins": {
200 "WALLABAG_URL": "http://demo.wallabag.org",
201 "WALLABAG_VERSION": "1"
202 }
203} ?>
147``` 204```
148 205
149## Additional configuration 206## Additional configuration
150 207
151The playvideos plugin may require that you adapt your server's [Content Security Policy](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting) configuration to work properly.[](.html) 208The playvideos plugin may require that you adapt your server's
209[Content Security Policy](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting) [](.html)
210configuration to work properly.[(.html)]((.html).html)
211
diff --git a/doc/Shaarli-installation.html b/doc/Shaarli-installation.html
deleted file mode 100644
index 487ec1db..00000000
--- a/doc/Shaarli-installation.html
+++ /dev/null
@@ -1,72 +0,0 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title>Shaarli – Shaarli installation</title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <link rel="stylesheet" href="github-markdown.css">
10 <!--[if lt IE 9]>
11 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
12 <![endif]-->
13</head>
14<body>
15<div id="local-sidebar">
16<ul>
17<li><a href="Home.html">Home</a></li>
18<li>Installation
19<ul>
20<li><a href="Download.html">Download</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li>
28<li><a href="Docker.html">Docker</a></li>
29<li><a href="Usage.html">Usage</a>
30<ul>
31<li><a href="Sharing-button.html">Sharing button</a> (bookmarklet)</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>
34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35</ul></li>
36<li>How To
37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
43<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
44</ul></li>
45<li><a href="Troubleshooting.html">Troubleshooting</a></li>
46<li><a href="Development.html">Development</a>
47<ul>
48<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
49<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
50<li><a href="Directory-structure.html">Directory structure</a></li>
51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
52<li><a href="Plugin-System.html">Plugin System</a></li>
53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Security.html">Security</a></li>
55<li><a href="Static-analysis.html">Static analysis</a></li>
56<li><a href="Theming.html">Theming</a></li>
57<li><a href="Unit-tests.html">Unit tests</a></li>
58</ul></li>
59<li>About
60<ul>
61<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li>
65</ul>
66</div>
67<h1 id="shaarli-installation">Shaarli installation</h1>
68<p>Once Shaarli is downloaded and installed behind a web server, open it in your favorite browser.</p>
69<p><img src="http://i.imgur.com/wuMpDSN.png" alt="install screenshot" /><a href=".html"></a></p>
70<p>Setup your Shaarli installation, and it's ready to use!</p>
71</body>
72</html>
diff --git a/doc/Shaarli-installation.md b/doc/Shaarli-installation.md
deleted file mode 100644
index be9726e0..00000000
--- a/doc/Shaarli-installation.md
+++ /dev/null
@@ -1,6 +0,0 @@
1#Shaarli installation
2Once Shaarli is downloaded and installed behind a web server, open it in your favorite browser.
3
4![install screenshot](http://i.imgur.com/wuMpDSN.png)[](.html)
5
6Setup your Shaarli installation, and it's ready to use!
diff --git a/doc/Sharing-button.html b/doc/Sharing-button.html
index 3770d8ad..93710efe 100644
--- a/doc/Sharing-button.html
+++ b/doc/Sharing-button.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/Static-analysis.html b/doc/Static-analysis.html
index 86cb4696..d964e917 100644
--- a/doc/Static-analysis.html
+++ b/doc/Static-analysis.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/TODO.html b/doc/TODO.html
deleted file mode 100644
index 04224dbf..00000000
--- a/doc/TODO.html
+++ /dev/null
@@ -1,74 +0,0 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title>Shaarli – TODO</title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <link rel="stylesheet" href="github-markdown.css">
10 <!--[if lt IE 9]>
11 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
12 <![endif]-->
13</head>
14<body>
15<div id="local-sidebar">
16<ul>
17<li><a href="Home.html">Home</a></li>
18<li>Installation
19<ul>
20<li><a href="Download.html">Download</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li>
28<li><a href="Docker.html">Docker</a></li>
29<li><a href="Usage.html">Usage</a>
30<ul>
31<li><a href="Sharing-button.html">Sharing button</a> (bookmarklet)</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>
34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35</ul></li>
36<li>How To
37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
43<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
44</ul></li>
45<li><a href="Troubleshooting.html">Troubleshooting</a></li>
46<li><a href="Development.html">Development</a>
47<ul>
48<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
49<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
50<li><a href="Directory-structure.html">Directory structure</a></li>
51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
52<li><a href="Plugin-System.html">Plugin System</a></li>
53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Security.html">Security</a></li>
55<li><a href="Static-analysis.html">Static analysis</a></li>
56<li><a href="Theming.html">Theming</a></li>
57<li><a href="Unit-tests.html">Unit tests</a></li>
58</ul></li>
59<li>About
60<ul>
61<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li>
65</ul>
66</div>
67<h1 id="todo">TODO</h1>
68<ul>
69<li>add more screenshots</li>
70<li>improve developer documentation: storage architecture, classes and functions, security handling...</li>
71<li>add server configuration examples: lighthttpd</li>
72</ul>
73</body>
74</html>
diff --git a/doc/TODO.md b/doc/TODO.md
deleted file mode 100644
index fb72fd57..00000000
--- a/doc/TODO.md
+++ /dev/null
@@ -1,4 +0,0 @@
1#TODO
2* add more screenshots
3* improve developer documentation: storage architecture, classes and functions, security handling...
4* add server configuration examples: lighthttpd
diff --git a/doc/Theming.html b/doc/Theming.html
index 27c5d863..13e6acf0 100644
--- a/doc/Theming.html
+++ b/doc/Theming.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -132,6 +130,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
132<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<a href=".html"></a></li> 130<li><a href="https://github.com/kalvn/shaarli-blocks">kalvn/shaarli-blocks</a> - A template/theme for Shaarli<a href=".html"></a></li>
133<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> 131<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>
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> 132<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>
133<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>
135<li><a href="https://github.com/Vinm/Blue-theme-for-Shaarli">Vinm/Blue-theme-for Shaarli</a> - A template/theme for Shaarli (<a href="https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2">unmaintained</a>, compatibility unknown)<a href=".html"></a></li> 134<li><a href="https://github.com/Vinm/Blue-theme-for-Shaarli">Vinm/Blue-theme-for Shaarli</a> - A template/theme for Shaarli (<a href="https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2">unmaintained</a>, compatibility unknown)<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> 135<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> 136</ul>
@@ -142,17 +141,17 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
142<li>user sites are enabled, e.g. <code>/home/user/public_html/somedir</code> is served as <code>http://localhost/~user/somedir</code></li> 141<li>user sites are enabled, e.g. <code>/home/user/public_html/somedir</code> is served as <code>http://localhost/~user/somedir</code></li>
143<li><code>http</code> is the name of the Apache user</li> 142<li><code>http</code> is the name of the Apache user</li>
144</ul> 143</ul>
145<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">cd</span> ~/public_html 144<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> ~/public_html
146 145
147<span class="co"># clone repositories</span> 146<span class="co"># clone repositories</span>
148$ <span class="kw">git</span> clone https://github.com/shaarli/Shaarli.git shaarli 147$ <span class="fu">git</span> clone https://github.com/shaarli/Shaarli.git shaarli
149$ <span class="kw">pushd</span> shaarli/tpl 148$ <span class="bu">pushd</span> shaarli/tpl
150$ <span class="kw">git</span> clone https://github.com/alexisju/albinomouse-template.git 149$ <span class="fu">git</span> clone https://github.com/alexisju/albinomouse-template.git
151$ <span class="kw">popd</span> 150$ <span class="bu">popd</span>
152 151
153<span class="co"># set access rights for Apache</span> 152<span class="co"># set access rights for Apache</span>
154$ <span class="kw">chgrp</span> -R http shaarli 153$ <span class="fu">chgrp</span> -R http shaarli
155$ <span class="kw">chmod</span> g+rwx shaarli shaarli/cache shaarli/data shaarli/pagecache shaarli/tmp</code></pre></div> 154$ <span class="fu">chmod</span> g+rwx shaarli shaarli/cache shaarli/data shaarli/pagecache shaarli/tmp</code></pre></div>
156<p>Get config written:</p> 155<p>Get config written:</p>
157<ul> 156<ul>
158<li>go to the freshly installed site</li> 157<li>go to the freshly installed site</li>
@@ -161,6 +160,6 @@ $ <span class="kw">chmod</span> g+rwx shaarli shaarli/cache shaarli/data shaarli
161</ul> 160</ul>
162<p>Edit Shaarli's <a href="configuration%7CShaarli-configuration.html">configuration|Shaarli configuration</a>:</p> 161<p>Edit Shaarli's <a href="configuration%7CShaarli-configuration.html">configuration|Shaarli configuration</a>:</p>
163<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># the file should be owned by Apache, thus not writeable =&gt; sudo</span> 162<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># the file should be owned by Apache, thus not writeable =&gt; sudo</span>
164$ <span class="kw">sudo</span> sed -i s=tpl=tpl/albinomouse-template=g shaarli/data/config.php</code></pre></div> 163$ <span class="fu">sudo</span> sed -i s=tpl=tpl/albinomouse-template=g shaarli/data/config.php</code></pre></div>
165</body> 164</body>
166</html> 165</html>
diff --git a/doc/Theming.md b/doc/Theming.md
index 9dfdcf9f..7fb8d927 100644
--- a/doc/Theming.md
+++ b/doc/Theming.md
@@ -28,6 +28,7 @@ $GLOBALS['config'['RAINTPL_TPL'] = 'tpl/my-template/';]('RAINTPL_TPL']-=-'tpl/my
28- [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli[](.html) 28- [kalvn/shaarli-blocks](https://github.com/kalvn/shaarli-blocks) - A template/theme for Shaarli[](.html)
29- [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) 29- [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)
30- [misterair/Limonade](https://github.com/misterair/limonade) - A fork of (legacy) Shaarli with a new template[](.html) 30- [misterair/Limonade](https://github.com/misterair/limonade) - A fork of (legacy) Shaarli with a new template[](.html)
31- [mrjovanovic/serious-theme-shaarli](https://github.com/mrjovanovic/serious-theme-shaarli) - A serious theme for SHaarli.[](.html)
31- [Vinm/Blue-theme-for Shaarli](https://github.com/Vinm/Blue-theme-for-Shaarli) - A template/theme for Shaarli ([unmaintained](https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2), compatibility unknown)[](.html) 32- [Vinm/Blue-theme-for Shaarli](https://github.com/Vinm/Blue-theme-for-Shaarli) - A template/theme for Shaarli ([unmaintained](https://github.com/Vinm/Blue-theme-for-Shaarli/issues/2), compatibility unknown)[](.html)
32- [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance[](.html) 33- [vivienhaese/shaarlitheme](https://github.com/vivienhaese/shaarlitheme) - A Shaarli fork meant to be run in an openshift instance[](.html)
33 34
diff --git a/doc/Troubleshooting.html b/doc/Troubleshooting.html
index 3de8ad1e..ed1c6f09 100644
--- a/doc/Troubleshooting.html
+++ b/doc/Troubleshooting.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -132,6 +130,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
132<ul> 130<ul>
133<li>false (default): real referer</li> 131<li>false (default): real referer</li>
134<li>true: spoof referer (use target URI as referer)</li> 132<li>true: spoof referer (use target URI as referer)</li>
133<li>known to break some functionality in Shaarli</li>
135</ul> 134</ul>
136<p><code>network.http.referer.trimmingPolicy</code> - trim the URI not to send a full Referer</p> 135<p><code>network.http.referer.trimmingPolicy</code> - trim the URI not to send a full Referer</p>
137<ul> 136<ul>
@@ -140,7 +139,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
140<li>2: scheme+host+port</li> 139<li>2: scheme+host+port</li>
141</ul> 140</ul>
142<h3 id="firefox-localhost-and-redirections">Firefox, localhost and redirections</h3> 141<h3 id="firefox-localhost-and-redirections">Firefox, localhost and redirections</h3>
143<p><code>localhost</code> is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or anly accept requests from the same base domain/host, Shaarli redirections will not work properly.</p> 142<p><code>localhost</code> is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or only accept requests from the same base domain/host, Shaarli redirections will not work properly.</p>
144<p>To solve this, assign a local domain to your host, e.g.</p> 143<p>To solve this, assign a local domain to your host, e.g.</p>
145<pre><code>127.0.0.1 localhost desktop localhost.lan 144<pre><code>127.0.0.1 localhost desktop localhost.lan
146::1 localhost desktop localhost.lan</code></pre> 145::1 localhost desktop localhost.lan</code></pre>
diff --git a/doc/Troubleshooting.md b/doc/Troubleshooting.md
index e91fe846..8e30fce5 100644
--- a/doc/Troubleshooting.md
+++ b/doc/Troubleshooting.md
@@ -25,6 +25,7 @@ HTTP settings are available by browsing `about:config`, here are the available s
25`network.http.referer.spoofSource` - Referer spoofing (~faking) 25`network.http.referer.spoofSource` - Referer spoofing (~faking)
26- false (default): real referer 26- false (default): real referer
27- true: spoof referer (use target URI as referer) 27- true: spoof referer (use target URI as referer)
28 - known to break some functionality in Shaarli
28 29
29`network.http.referer.trimmingPolicy` - trim the URI not to send a full Referer 30`network.http.referer.trimmingPolicy` - trim the URI not to send a full Referer
30- 0 (default): send full URI 31- 0 (default): send full URI
@@ -32,7 +33,7 @@ HTTP settings are available by browsing `about:config`, here are the available s
32- 2: scheme+host+port 33- 2: scheme+host+port
33 34
34### Firefox, localhost and redirections 35### Firefox, localhost and redirections
35`localhost` is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or anly accept requests from the same base domain/host, Shaarli redirections will not work properly. 36`localhost` is not a proper Fully Qualified Domain Name (FQDN); if Firefox has been set up to spoof referers, or only accept requests from the same base domain/host, Shaarli redirections will not work properly.
36 37
37To solve this, assign a local domain to your host, e.g. 38To solve this, assign a local domain to your host, e.g.
38``` 39```
diff --git a/doc/Unit-tests.html b/doc/Unit-tests.html
index 7934e346..266fd33a 100644
--- a/doc/Unit-tests.html
+++ b/doc/Unit-tests.html
@@ -52,13 +52,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
52<div id="local-sidebar"> 52<div id="local-sidebar">
53<ul> 53<ul>
54<li><a href="Home.html">Home</a></li> 54<li><a href="Home.html">Home</a></li>
55<li>Installation 55<li>Setup
56<ul> 56<ul>
57<li><a href="Download.html">Download</a></li> 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>
58<li><a href="Server-requirements.html">Server requirements</a></li> 59<li><a href="Server-requirements.html">Server requirements</a></li>
59<li><a href="Server-configuration.html">Server configuration</a></li> 60<li><a href="Server-configuration.html">Server configuration</a></li>
60<li><a href="Server-security.html">Server security</a></li> 61<li><a href="Server-security.html">Server security</a></li>
61<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 62<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
63<li><a href="Plugins.html">Plugins</a></li> 63<li><a href="Plugins.html">Plugins</a></li>
64</ul></li> 64</ul></li>
@@ -73,7 +73,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
73<li>How To 73<li>How To
74<ul> 74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</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> 76<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> 77<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> 78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -97,7 +96,6 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
97<ul> 96<ul>
98<li><a href="FAQ.html">FAQ</a></li> 97<li><a href="FAQ.html">FAQ</a></li>
99<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
100<li><a href="TODO.html">TODO</a></li>
101</ul></li> 99</ul></li>
102</ul> 100</ul>
103</div> 101</div>
@@ -111,87 +109,87 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
111</ul> 109</ul>
112<h4 id="sample-usage">Sample usage</h4> 110<h4 id="sample-usage">Sample usage</h4>
113<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># system-wide version</span> 111<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="co"># system-wide version</span>
114$ <span class="kw">composer</span> install 112$ <span class="ex">composer</span> install
115$ <span class="kw">composer</span> update 113$ <span class="ex">composer</span> update
116 114
117<span class="co"># local version</span> 115<span class="co"># local version</span>
118$ <span class="kw">php</span> composer.phar self-update 116$ <span class="ex">php</span> composer.phar self-update
119$ <span class="kw">php</span> composer.phar install 117$ <span class="ex">php</span> composer.phar install
120$ <span class="kw">php</span> composer.phar update</code></pre></div> 118$ <span class="ex">php</span> composer.phar update</code></pre></div>
121<h4 id="install-shaarli-dev-dependencies">Install Shaarli dev dependencies</h4> 119<h4 id="install-shaarli-dev-dependencies">Install Shaarli dev dependencies</h4>
122<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">cd</span> /path/to/shaarli 120<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> /path/to/shaarli
123$ <span class="kw">composer</span> update</code></pre></div> 121$ <span class="ex">composer</span> update</code></pre></div>
124<h4 id="install-and-enable-xdebug-to-generate-phpunit-coverage-reports">Install and enable Xdebug to generate PHPUnit coverage reports</h4> 122<h4 id="install-and-enable-xdebug-to-generate-phpunit-coverage-reports">Install and enable Xdebug to generate PHPUnit coverage reports</h4>
125<p>For Debian-based distros:</p> 123<p>For Debian-based distros:</p>
126<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">aptitude</span> install php5-xdebug</code></pre></div> 124<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">aptitude</span> install php5-xdebug</code></pre></div>
127<p>For ArchLinux:</p> 125<p>For ArchLinux:</p>
128<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">pacman</span> -S xdebug</code></pre></div> 126<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">pacman</span> -S xdebug</code></pre></div>
129<p>Then add the following line to <code>/etc/php/php.ini</code>:</p> 127<p>Then add the following line to <code>/etc/php/php.ini</code>:</p>
130<div class="sourceCode"><pre class="sourceCode ini"><code class="sourceCode ini"><span class="dt">zend_extension</span><span class="ot">=</span><span class="st">xdebug.so</span></code></pre></div> 128<div class="sourceCode"><pre class="sourceCode ini"><code class="sourceCode ini"><span class="dt">zend_extension</span><span class="ot">=</span><span class="st">xdebug.so</span></code></pre></div>
131<h4 id="run-unit-tests">Run unit tests</h4> 129<h4 id="run-unit-tests">Run unit tests</h4>
132<p>Successful test suite:</p> 130<p>Successful test suite:</p>
133<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">make</span> test 131<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">make</span> test
134 132
135<span class="kw">-------</span> 133<span class="ex">-------</span>
136<span class="kw">PHPUNIT</span> 134<span class="ex">PHPUNIT</span>
137<span class="kw">-------</span> 135<span class="ex">-------</span>
138<span class="kw">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors. 136<span class="ex">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors.
139 137
140<span class="kw">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml 138<span class="ex">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml
141 139
142<span class="kw">....................................</span> 140<span class="ex">....................................</span>
143 141
144<span class="kw">Time</span>: 759 ms, Memory: 8.25Mb 142<span class="ex">Time</span>: 759 ms, Memory: 8.25Mb
145 143
146<span class="kw">OK</span> (36 tests, 65 assertions)</code></pre></div> 144<span class="ex">OK</span> (36 tests, 65 assertions)</code></pre></div>
147<p>Test suite with failures and errors:</p> 145<p>Test suite with failures and errors:</p>
148<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">make</span> test 146<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">make</span> test
149<span class="kw">-------</span> 147<span class="ex">-------</span>
150<span class="kw">PHPUNIT</span> 148<span class="ex">PHPUNIT</span>
151<span class="kw">-------</span> 149<span class="ex">-------</span>
152<span class="kw">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors. 150<span class="ex">PHPUnit</span> 4.6.9 by Sebastian Bergmann and contributors.
153 151
154<span class="kw">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml 152<span class="ex">Configuration</span> read from /home/virtualtam/public_html/shaarli/phpunit.xml
155 153
156<span class="kw">E..FF...............................</span> 154<span class="ex">E..FF...............................</span>
157 155
158<span class="kw">Time</span>: 802 ms, Memory: 8.25Mb 156<span class="ex">Time</span>: 802 ms, Memory: 8.25Mb
159 157
160<span class="kw">There</span> was 1 error: 158<span class="ex">There</span> was 1 error:
161 159
162<span class="kw">1</span>) <span class="kw">LinkDBTest</span>::testConstructLoggedIn 160<span class="ex">1</span>) <span class="ex">LinkDBTest</span>::testConstructLoggedIn
163<span class="kw">Missing</span> argument 2 for LinkDB::__construct(), <span class="kw">called</span> in /home/virtualtam/public_html/shaarli/tests/Link\ 161<span class="ex">Missing</span> argument 2 for LinkDB::__construct(), <span class="ex">called</span> in /home/virtualtam/public_html/shaarli/tests/Link\
164DBTest.php on line 79 and defined 162DBTest.php on line 79 and defined
165 163
166<span class="kw">/home/virtualtam/public_html/shaarli/application</span>/LinkDB.php:<span class="kw">58</span> 164<span class="ex">/home/virtualtam/public_html/shaarli/application</span>/LinkDB.php:<span class="ex">58</span>
167<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">79</span> 165<span class="ex">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="ex">79</span>
168 166
169<span class="kw">--</span> 167<span class="ex">--</span>
170 168
171<span class="kw">There</span> were 2 failures: 169<span class="ex">There</span> were 2 failures:
172 170
173<span class="kw">1</span>) <span class="kw">LinkDBTest</span>::testCheckDBNew 171<span class="ex">1</span>) <span class="ex">LinkDBTest</span>::testCheckDBNew
174<span class="kw">Failed</span> asserting that two strings are equal. 172<span class="ex">Failed</span> asserting that two strings are equal.
175<span class="kw">---</span> Expected 173<span class="ex">---</span> Expected
176<span class="kw">+++</span> Actual 174<span class="ex">+++</span> Actual
177<span class="kw">@@</span> @@ 175<span class="ex">@@</span> @@
178<span class="kw">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span> 176<span class="ex">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span>
179<span class="kw">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span> 177<span class="ex">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span>
180 178
181<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">121</span> 179<span class="ex">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="ex">121</span>
182 180
183<span class="kw">2</span>) <span class="kw">LinkDBTest</span>::testCheckDBLoad 181<span class="ex">2</span>) <span class="ex">LinkDBTest</span>::testCheckDBLoad
184<span class="kw">Failed</span> asserting that two strings are equal. 182<span class="ex">Failed</span> asserting that two strings are equal.
185<span class="kw">---</span> Expected 183<span class="ex">---</span> Expected
186<span class="kw">+++</span> Actual 184<span class="ex">+++</span> Actual
187<span class="kw">@@</span> @@ 185<span class="ex">@@</span> @@
188<span class="kw">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span> 186<span class="ex">-</span><span class="st">&#39;e3edea8ea7bb50be4bcb404df53fbb4546a7156e&#39;</span>
189<span class="kw">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span> 187<span class="ex">+</span><span class="st">&#39;85eab0c610d4f68025f6ed6e6b6b5fabd4b55834&#39;</span>
190 188
191<span class="kw">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="kw">133</span> 189<span class="ex">/home/virtualtam/public_html/shaarli/tests</span>/LinkDBTest.php:<span class="ex">133</span>
192 190
193<span class="kw">FAILURES</span>! 191<span class="ex">FAILURES</span>!
194<span class="kw">Tests</span>: 36, Assertions: 63, Errors: 1, Failures: 2.</code></pre></div> 192<span class="ex">Tests</span>: 36, Assertions: 63, Errors: 1, Failures: 2.</code></pre></div>
195<h4 id="test-results-and-coverage">Test results and coverage</h4> 193<h4 id="test-results-and-coverage">Test results and coverage</h4>
196<p>By default, PHPUnit will run all suitable tests found under the <code>tests</code> directory.</p> 194<p>By default, PHPUnit will run all suitable tests found under the <code>tests</code> directory.</p>
197<p>Each test has 3 possible outcomes:</p> 195<p>Each test has 3 possible outcomes:</p>
diff --git a/doc/Upgrade-and-migration.html b/doc/Upgrade-and-migration.html
new file mode 100644
index 00000000..a5b041d5
--- /dev/null
+++ b/doc/Upgrade-and-migration.html
@@ -0,0 +1,242 @@
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 – Upgrade and migration</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</ul></li>
73<li>How To
74<ul>
75<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
76<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>
77<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
78<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
79<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
80</ul></li>
81<li><a href="Troubleshooting.html">Troubleshooting</a></li>
82<li><a href="Development.html">Development</a>
83<ul>
84<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
85<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
86<li><a href="Directory-structure.html">Directory structure</a></li>
87<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="Release-Shaarli.html">Release Shaarli</a></li>
90<li><a href="Security.html">Security</a></li>
91<li><a href="Static-analysis.html">Static analysis</a></li>
92<li><a href="Theming.html">Theming</a></li>
93<li><a href="Unit-tests.html">Unit tests</a></li>
94</ul></li>
95<li>About
96<ul>
97<li><a href="FAQ.html">FAQ</a></li>
98<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
99</ul></li>
100</ul>
101</div>
102<h1 id="upgrade-and-migration">Upgrade and migration</h1>
103<h2 id="preparation">Preparation</h2>
104<h3 id="backup-your-data">Backup your data</h3>
105<p>Shaarli stores all user data under the <code>data</code> directory:</p>
106<ul>
107<li><code>data/config.php</code> - main configuration file</li>
108<li><code>data/datastore.php</code> - bookmarked links</li>
109<li><code>data/ipbans.php</code> - banned IP addresses</li>
110</ul>
111<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>
113<ul>
114<li>users with SSH access: copy or archive the directory to a temporary location</li>
115<li>users with FTP access: download a local copy of your Shaarli installation using your favourite client</li>
116</ul>
117<h3 id="migrating-data-from-a-previous-installation">Migrating data from a previous installation</h3>
118<p>As all user data is kept under <code>data</code>, this is the only directory you need to worry about when migrating to a new installation, which corresponds to the following steps:</p>
119<ul>
120<li>backup the <code>data</code> directory</li>
121<li>install or update Shaarli:
122<ul>
123<li>fresh installation - see <a href="Download-and-installation.html">Download and installation</a></li>
124<li>update - see the following sections</li>
125</ul></li>
126<li>check or restore the <code>data</code> directory</li>
127</ul>
128<h2 id="upgrading-from-release-archives">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>
130<p>We <em>recommend</em> using the releases from the <code>stable</code> branch, which are available as:</p>
131<ul>
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>
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>
138<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>
140<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> /path/to/shaarli
141$ <span class="fu">git</span> pull
142
143<span class="ex">From</span> github.com:shaarli/Shaarli
144 <span class="ex">*</span> branch master -<span class="op">&gt;</span> FETCH_HEAD
145<span class="ex">Updating</span> ebd67c6..521f0e6
146<span class="ex">Fast-forward</span>
147 <span class="ex">application/Url.php</span> <span class="kw">|</span> <span class="ex">1</span> +
148 <span class="ex">shaarli_version.php</span> <span class="kw">|</span> <span class="ex">2</span> +-
149 <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>
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>
152<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> update --no-dev
153
154<span class="ex">Loading</span> composer repositories with package information
155<span class="ex">Updating</span> dependencies
156 <span class="ex">-</span> Installing shaarli/netscape-bookmark-parser (v1.0.1)
157 <span class="ex">Downloading</span>: 100%</code></pre></div>
158<h3 id="migrating-and-upgrading-from-sebsauvages-repository">Migrating and upgrading from Sebsauvage's repository</h3>
159<p>If you have installed Shaarli from <a href="https://github.com/sebsauvage/Shaarli">Sebsauvage's original Git repository</a>, you can use <a href="https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes">Git remotes</a> to update your working copy.<a href=".html"></a></p>
160<p>The following guide assumes that:</p>
161<ul>
162<li>you have a basic knowledge of Git <a href="https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell">branching</a> and <a href="https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes">remote repositories</a><a href=".html"></a></li>
163<li>the default remote is named <code>origin</code> and points to Sebsauvage's repository</li>
164<li>the current branch is <code>master</code>
165<ul>
166<li>if you have personal branches containing customizations, you will need to <a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing">rebase them</a> after the upgrade; beware though, a lot of changes have been made since the community fork has been created, so things are very likely to break<embed src=".html" /></li>
167</ul></li>
168<li>the working copy is clean:
169<ul>
170<li>no versioned file has been locally modified</li>
171<li>no untracked files are present</li>
172</ul></li>
173</ul>
174<h4 id="step-0-show-repository-information">Step 0: show repository information</h4>
175<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="bu">cd</span> /path/to/shaarli
176
177$ <span class="fu">git</span> remote -v
178<span class="ex">origin</span> https://github.com/sebsauvage/Shaarli (fetch)
179<span class="ex">origin</span> https://github.com/sebsauvage/Shaarli (push)
180
181$ <span class="fu">git</span> branch -vv
182<span class="ex">*</span> master 029f75f [origin/master] Update README.md[](.html)
183
184$ <span class="fu">git</span> status
185<span class="ex">On</span> branch master
186<span class="ex">Your</span> branch is up-to-date with <span class="st">&#39;origin/master&#39;</span>.
187<span class="ex">nothing</span> to commit, working directory clean</code></pre></div>
188<h4 id="step-1-update-git-remotes">Step 1: update Git remotes</h4>
189<pre><code>$ git remote rename origin sebsauvage
190$ git remote -v
191sebsauvage https://github.com/sebsauvage/Shaarli (fetch)
192sebsauvage https://github.com/sebsauvage/Shaarli (push)
193
194$ git remote add origin https://github.com/shaarli/Shaarli
195$ git fetch origin
196
197remote: Counting objects: 3015, done.
198remote: Compressing objects: 100% (19/19), done.
199remote: Total 3015 (delta 446), reused 457 (delta 446), pack-reused 2550
200Receiving objects: 100% (3015/3015), 2.59 MiB | 918.00 KiB/s, done.
201Resolving deltas: 100% (1899/1899), completed with 48 local objects.
202From https://github.com/shaarli/Shaarli
203 * [new branch] master -&gt; origin/master[](.html)
204 * [new branch] stable -&gt; origin/stable[](.html)
205[...][](.html)
206 * [new tag] v0.6.4 -&gt; v0.6.4[](.html)
207 * [new tag] v0.7.0 -&gt; v0.7.0[](.html)</code></pre>
208<h4 id="step-2-use-the-stable-community-branch">Step 2: use the stable community branch</h4>
209<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">git</span> checkout origin/stable -b stable
210<span class="ex">Branch</span> stable set up to track remote branch stable from origin.
211<span class="ex">Switched</span> to a new branch <span class="st">&#39;stable&#39;</span>
212
213$ <span class="fu">git</span> branch -vv
214 <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>
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>
217<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="ex">composer</span> update --no-dev
218
219<span class="ex">Loading</span> composer repositories with package information
220<span class="ex">Updating</span> dependencies
221 <span class="ex">-</span> Installing shaarli/netscape-bookmark-parser (v1.0.1)
222 <span class="ex">Downloading</span>: 100%</code></pre></div>
223<p>Optionally, you can delete information related to the legacy version:</p>
224<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="fu">git</span> branch -D master
225<span class="ex">Deleted</span> branch master (was 029f75f)<span class="ex">.</span>
226
227$ <span class="fu">git</span> remote remove sebsauvage
228
229$ <span class="fu">git</span> remote -v
230<span class="ex">origin</span> https://github.com/shaarli/Shaarli (fetch)
231<span class="ex">origin</span> https://github.com/shaarli/Shaarli (push)
232
233$ <span class="fu">git</span> gc
234<span class="ex">Counting</span> objects: 3317, done.
235<span class="ex">Delta</span> compression using up to 8 threads.
236<span class="ex">Compressing</span> objects: 100% (1237/1237), <span class="kw">done</span><span class="ex">.</span>
237<span class="ex">Writing</span> objects: 100% (3317/3317), <span class="kw">done</span><span class="ex">.</span>
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>
239<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>
241</body>
242</html>
diff --git a/doc/Upgrade-and-migration.md b/doc/Upgrade-and-migration.md
new file mode 100644
index 00000000..0bc33824
--- /dev/null
+++ b/doc/Upgrade-and-migration.md
@@ -0,0 +1,161 @@
1#Upgrade and migration
2## Preparation
3### Backup your data
4
5Shaarli stores all user data under the `data` directory:
6- `data/config.php` - main configuration file
7- `data/datastore.php` - bookmarked links
8- `data/ipbans.php` - banned IP addresses
9
10See [Shaarli configuration](Shaarli-configuration.html) for more information about Shaarli resources.
11
12It is recommended to backup this repository _before_ starting updating/upgrading Shaarli:
13- users with SSH access: copy or archive the directory to a temporary location
14- users with FTP access: download a local copy of your Shaarli installation using your favourite client
15
16### Migrating data from a previous installation
17As all user data is kept under `data`, this is the only directory you need to worry about when migrating to a new installation, which corresponds to the following steps:
18
19- backup the `data` directory
20- install or update Shaarli:
21 - fresh installation - see [Download and installation](Download-and-installation.html)
22 - update - see the following sections
23- check or restore the `data` directory
24
25## 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)
27
28We _recommend_ using the releases from the `stable` branch, which are available as:
29- gzipped tarball - https://github.com/shaarli/Shaarli/archive/stable.tar.gz
30- ZIP archive - https://github.com/shaarli/Shaarli/archive/stable.zip
31
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!
33
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).
35
36## Upgrading with Git
37### Updating a community Shaarli
38If you have installed Shaarli from the [community Git repository](Download#clone-with-git-recommended), simply [pull new changes](https://www.git-scm.com/docs/git-pull) from your local clone:[](.html)
39
40```bash
41$ cd /path/to/shaarli
42$ git pull
43
44From github.com:shaarli/Shaarli
45 * branch master -> FETCH_HEAD
46Updating ebd67c6..521f0e6
47Fast-forward
48 application/Url.php | 1 +
49 shaarli_version.php | 2 +-
50 tests/Url/UrlTest.php | 1 +
51 3 files changed, 3 insertions(+), 1 deletion(-)
52```
53
54Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html)
55
56```bash
57$ composer update --no-dev
58
59Loading composer repositories with package information
60Updating dependencies
61 - Installing shaarli/netscape-bookmark-parser (v1.0.1)
62 Downloading: 100%
63```
64
65### Migrating and upgrading from Sebsauvage's repository
66If you have installed Shaarli from [Sebsauvage's original Git repository](https://github.com/sebsauvage/Shaarli), you can use [Git remotes](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes) to update your working copy.[](.html)
67
68The following guide assumes that:
69- you have a basic knowledge of Git [branching](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell) and [remote repositories](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)[](.html)
70- the default remote is named `origin` and points to Sebsauvage's repository
71- the current branch is `master`
72 - if you have personal branches containing customizations, you will need to [rebase them](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) after the upgrade; beware though, a lot of changes have been made since the community fork has been created, so things are very likely to break![](.html)
73- the working copy is clean:
74 - no versioned file has been locally modified
75 - no untracked files are present
76
77#### Step 0: show repository information
78```bash
79$ cd /path/to/shaarli
80
81$ git remote -v
82origin https://github.com/sebsauvage/Shaarli (fetch)
83origin https://github.com/sebsauvage/Shaarli (push)
84
85$ git branch -vv
86* master 029f75f [origin/master] Update README.md[](.html)
87
88$ git status
89On branch master
90Your branch is up-to-date with 'origin/master'.
91nothing to commit, working directory clean
92```
93
94#### Step 1: update Git remotes
95```
96$ git remote rename origin sebsauvage
97$ git remote -v
98sebsauvage https://github.com/sebsauvage/Shaarli (fetch)
99sebsauvage https://github.com/sebsauvage/Shaarli (push)
100
101$ git remote add origin https://github.com/shaarli/Shaarli
102$ git fetch origin
103
104remote: Counting objects: 3015, done.
105remote: Compressing objects: 100% (19/19), done.
106remote: Total 3015 (delta 446), reused 457 (delta 446), pack-reused 2550
107Receiving objects: 100% (3015/3015), 2.59 MiB | 918.00 KiB/s, done.
108Resolving deltas: 100% (1899/1899), completed with 48 local objects.
109From https://github.com/shaarli/Shaarli
110 * [new branch] master -> origin/master[](.html)
111 * [new branch] stable -> origin/stable[](.html)
112[...][](.html)
113 * [new tag] v0.6.4 -> v0.6.4[](.html)
114 * [new tag] v0.7.0 -> v0.7.0[](.html)
115```
116
117#### Step 2: use the stable community branch
118
119```bash
120$ git checkout origin/stable -b stable
121Branch stable set up to track remote branch stable from origin.
122Switched to a new branch 'stable'
123
124$ git branch -vv
125 master 029f75f [sebsauvage/master] Update README.md[](.html)
126* stable 890afc3 [origin/stable] Merge pull request #509 from ArthurHoaro/v0.6.5[](.html)
127```
128
129Shaarli >= `v0.8.x`: install/update third-party PHP dependencies using [Composer](https://getcomposer.org/):[](.html)
130
131```bash
132$ composer update --no-dev
133
134Loading composer repositories with package information
135Updating dependencies
136 - Installing shaarli/netscape-bookmark-parser (v1.0.1)
137 Downloading: 100%
138```
139
140Optionally, you can delete information related to the legacy version:
141
142```bash
143$ git branch -D master
144Deleted branch master (was 029f75f).
145
146$ git remote remove sebsauvage
147
148$ git remote -v
149origin https://github.com/shaarli/Shaarli (fetch)
150origin https://github.com/shaarli/Shaarli (push)
151
152$ git gc
153Counting objects: 3317, done.
154Delta compression using up to 8 threads.
155Compressing objects: 100% (1237/1237), done.
156Writing objects: 100% (3317/3317), done.
157Total 3317 (delta 2050), reused 3301 (delta 2034)to
158```
159
160#### 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).
diff --git a/doc/Upgrade-from-original-sebsauvage-Shaarli.html b/doc/Upgrade-from-original-sebsauvage-Shaarli.html
deleted file mode 100644
index db69a0ed..00000000
--- a/doc/Upgrade-from-original-sebsauvage-Shaarli.html
+++ /dev/null
@@ -1,74 +0,0 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <meta name="generator" content="pandoc">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
7 <title>Shaarli – Upgrade from original sebsauvage Shaarli</title>
8 <style type="text/css">code{white-space: pre;}</style>
9 <link rel="stylesheet" href="github-markdown.css">
10 <!--[if lt IE 9]>
11 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
12 <![endif]-->
13</head>
14<body>
15<div id="local-sidebar">
16<ul>
17<li><a href="Home.html">Home</a></li>
18<li>Installation
19<ul>
20<li><a href="Download.html">Download</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li>
28<li><a href="Docker.html">Docker</a></li>
29<li><a href="Usage.html">Usage</a>
30<ul>
31<li><a href="Sharing-button.html">Sharing button</a> (bookmarklet)</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>
34<li><a href="RSS-feeds.html">RSS feeds</a></li>
35</ul></li>
36<li>How To
37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
43<li><a href="Datastore-hacks.html">Datastore hacks</a></li>
44</ul></li>
45<li><a href="Troubleshooting.html">Troubleshooting</a></li>
46<li><a href="Development.html">Development</a>
47<ul>
48<li><a href="GnuPG-signature.html">GnuPG signature</a></li>
49<li><a href="Coding-guidelines.html">Coding guidelines</a></li>
50<li><a href="Directory-structure.html">Directory structure</a></li>
51<li><a href="3rd-party-libraries.html">3rd party libraries</a></li>
52<li><a href="Plugin-System.html">Plugin System</a></li>
53<li><a href="Release-Shaarli.html">Release Shaarli</a></li>
54<li><a href="Security.html">Security</a></li>
55<li><a href="Static-analysis.html">Static analysis</a></li>
56<li><a href="Theming.html">Theming</a></li>
57<li><a href="Unit-tests.html">Unit tests</a></li>
58</ul></li>
59<li>About
60<ul>
61<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li>
65</ul>
66</div>
67<h1 id="upgrade-from-original-sebsauvage-shaarli">Upgrade from original sebsauvage Shaarli</h1>
68<ul>
69<li>Backup your original <code>data/</code> directory.</li>
70<li><a href="https://github.com/shaarli/Shaarli#installation--upgrade">Install</a> and setup the Shaarli community fork.<a href=".html"></a></li>
71<li>Copy your original <code>data</code> directory over the new installation.</li>
72</ul>
73</body>
74</html>
diff --git a/doc/Upgrade-from-original-sebsauvage-Shaarli.md b/doc/Upgrade-from-original-sebsauvage-Shaarli.md
deleted file mode 100644
index 6ae0c67b..00000000
--- a/doc/Upgrade-from-original-sebsauvage-Shaarli.md
+++ /dev/null
@@ -1,4 +0,0 @@
1#Upgrade from original sebsauvage Shaarli
2 * Backup your original `data/` directory.
3 * [Install](https://github.com/shaarli/Shaarli#installation--upgrade) and setup the Shaarli community fork.[](.html)
4 * Copy your original `data` directory over the new installation.
diff --git a/doc/Usage.html b/doc/Usage.html
index 2befaa02..63f21d93 100644
--- a/doc/Usage.html
+++ b/doc/Usage.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,7 +59,6 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
diff --git a/doc/_Footer.html b/doc/_Footer.html
index a054cc53..e8a62d2a 100644
--- a/doc/_Footer.html
+++ b/doc/_Footer.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,11 +59,10 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
67<h1 id="footer-shaarli-the-personal-minimalist-super-fast-no-database-delicious-clone">_Footer<br /> 65<h1 id="footer-shaarli-the-personal-minimalist-super-fast-database-free-bookmarking-service">_Footer<br />
68<em>Shaarli, the personal, minimalist, super-fast, no-database delicious clone</em></h1> 66<em>Shaarli, the personal, minimalist, super-fast, database-free bookmarking service</em></h1>
69</body> 67</body>
70</html> 68</html>
diff --git a/doc/_Footer.md b/doc/_Footer.md
index 29c39bb6..50fa4f56 100644
--- a/doc/_Footer.md
+++ b/doc/_Footer.md
@@ -1,2 +1,2 @@
1#_Footer 1#_Footer
2_Shaarli, the personal, minimalist, super-fast, no-database delicious clone_ 2_Shaarli, the personal, minimalist, super-fast, database-free bookmarking service_
diff --git a/doc/_Sidebar.html b/doc/_Sidebar.html
index 89c2cf8a..bb6dad93 100644
--- a/doc/_Sidebar.html
+++ b/doc/_Sidebar.html
@@ -15,13 +15,13 @@
15<div id="local-sidebar"> 15<div id="local-sidebar">
16<ul> 16<ul>
17<li><a href="Home.html">Home</a></li> 17<li><a href="Home.html">Home</a></li>
18<li>Installation 18<li>Setup
19<ul> 19<ul>
20<li><a href="Download.html">Download</a></li> 20<li><a href="Download-and-Installation.html">Download and Installation</a></li>
21<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
21<li><a href="Server-requirements.html">Server requirements</a></li> 22<li><a href="Server-requirements.html">Server requirements</a></li>
22<li><a href="Server-configuration.html">Server configuration</a></li> 23<li><a href="Server-configuration.html">Server configuration</a></li>
23<li><a href="Server-security.html">Server security</a></li> 24<li><a href="Server-security.html">Server security</a></li>
24<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 25<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
26<li><a href="Plugins.html">Plugins</a></li> 26<li><a href="Plugins.html">Plugins</a></li>
27</ul></li> 27</ul></li>
@@ -36,7 +36,6 @@
36<li>How To 36<li>How To
37<ul> 37<ul>
38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 38<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
39<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
40<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> 39<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>
41<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 40<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
42<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 41<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -60,20 +59,19 @@
60<ul> 59<ul>
61<li><a href="FAQ.html">FAQ</a></li> 60<li><a href="FAQ.html">FAQ</a></li>
62<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 61<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
63<li><a href="TODO.html">TODO</a></li>
64</ul></li> 62</ul></li>
65</ul> 63</ul>
66</div> 64</div>
67<h1 id="sidebar">_Sidebar</h1> 65<h1 id="sidebar">_Sidebar</h1>
68<ul> 66<ul>
69<li><a href="Home.html">Home</a></li> 67<li><a href="Home.html">Home</a></li>
70<li>Installation 68<li>Setup
71<ul> 69<ul>
72<li><a href="Download.html">Download</a></li> 70<li><a href="Download-and-Installation.html">Download and Installation</a></li>
71<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
73<li><a href="Server-requirements.html">Server requirements</a></li> 72<li><a href="Server-requirements.html">Server requirements</a></li>
74<li><a href="Server-configuration.html">Server configuration</a></li> 73<li><a href="Server-configuration.html">Server configuration</a></li>
75<li><a href="Server-security.html">Server security</a></li> 74<li><a href="Server-security.html">Server security</a></li>
76<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
77<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 75<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
78<li><a href="Plugins.html">Plugins</a></li> 76<li><a href="Plugins.html">Plugins</a></li>
79</ul></li> 77</ul></li>
@@ -88,7 +86,6 @@
88<li>How To 86<li>How To
89<ul> 87<ul>
90<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 88<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
91<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
92<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> 89<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>
93<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 90<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
94<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 91<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -112,7 +109,6 @@
112<ul> 109<ul>
113<li><a href="FAQ.html">FAQ</a></li> 110<li><a href="FAQ.html">FAQ</a></li>
114<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 111<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
115<li><a href="TODO.html">TODO</a></li>
116</ul></li> 112</ul></li>
117</ul> 113</ul>
118</body> 114</body>
diff --git a/doc/_Sidebar.md b/doc/_Sidebar.md
index 7c71f462..1778e3a3 100644
--- a/doc/_Sidebar.md
+++ b/doc/_Sidebar.md
@@ -1,11 +1,11 @@
1#_Sidebar 1#_Sidebar
2- [Home](Home.html) 2- [Home](Home.html)
3- Installation 3- Setup
4 - [Download](Download.html) 4 - [Download and Installation](Download-and-Installation.html)
5 - [Upgrade and migration](Upgrade-and-migration.html)
5 - [Server requirements](Server-requirements.html) 6 - [Server requirements](Server-requirements.html)
6 - [Server configuration](Server-configuration.html) 7 - [Server configuration](Server-configuration.html)
7 - [Server security](Server-security.html) 8 - [Server security](Server-security.html)
8 - [Shaarli installation](Shaarli-installation.html)
9 - [Shaarli configuration](Shaarli-configuration.html) 9 - [Shaarli configuration](Shaarli-configuration.html)
10 - [Plugins](Plugins.html) 10 - [Plugins](Plugins.html)
11- [Docker](Docker.html) 11- [Docker](Docker.html)
@@ -16,7 +16,6 @@
16 - [RSS feeds](RSS-feeds.html) 16 - [RSS feeds](RSS-feeds.html)
17- How To 17- How To
18 - [Backup, restore, import and export](Backup,-restore,-import-and-export.html) 18 - [Backup, restore, import and export](Backup,-restore,-import-and-export.html)
19 - [Upgrade from original sebsauvage/Shaarli](Upgrade-from-original-sebsauvage/Shaarli.html)
20 - [Copy an existing installation over SSH and serve it locally](Copy-an-existing-installation-over-SSH-and-serve-it-locally.html) 19 - [Copy an existing installation over SSH and serve it locally](Copy-an-existing-installation-over-SSH-and-serve-it-locally.html)
21 - [Create and serve multiple Shaarlis (farm)](Create-and-serve-multiple-Shaarlis-(farm).html) 20 - [Create and serve multiple Shaarlis (farm)](Create-and-serve-multiple-Shaarlis-(farm).html)
22 - [Download CSS styles from an OPML list](Download-CSS-styles-from-an-OPML-list.html) 21 - [Download CSS styles from an OPML list](Download-CSS-styles-from-an-OPML-list.html)
@@ -36,4 +35,3 @@
36- About 35- About
37 - [FAQ](FAQ.html) 36 - [FAQ](FAQ.html)
38 - [Community & Related software](Community-&-Related-software.html) 37 - [Community & Related software](Community-&-Related-software.html)
39 - [TODO](TODO.html)
diff --git a/doc/sidebar.html b/doc/sidebar.html
index 62844581..4dad0161 100644
--- a/doc/sidebar.html
+++ b/doc/sidebar.html
@@ -1,13 +1,13 @@
1<div id="local-sidebar"> 1<div id="local-sidebar">
2<ul> 2<ul>
3<li><a href="Home.html">Home</a></li> 3<li><a href="Home.html">Home</a></li>
4<li>Installation 4<li>Setup
5<ul> 5<ul>
6<li><a href="Download.html">Download</a></li> 6<li><a href="Download-and-Installation.html">Download and Installation</a></li>
7<li><a href="Upgrade-and-migration.html">Upgrade and migration</a></li>
7<li><a href="Server-requirements.html">Server requirements</a></li> 8<li><a href="Server-requirements.html">Server requirements</a></li>
8<li><a href="Server-configuration.html">Server configuration</a></li> 9<li><a href="Server-configuration.html">Server configuration</a></li>
9<li><a href="Server-security.html">Server security</a></li> 10<li><a href="Server-security.html">Server security</a></li>
10<li><a href="Shaarli-installation.html">Shaarli installation</a></li>
11<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li> 11<li><a href="Shaarli-configuration.html">Shaarli configuration</a></li>
12<li><a href="Plugins.html">Plugins</a></li> 12<li><a href="Plugins.html">Plugins</a></li>
13</ul></li> 13</ul></li>
@@ -22,7 +22,6 @@
22<li>How To 22<li>How To
23<ul> 23<ul>
24<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li> 24<li><a href="Backup,-restore,-import-and-export.html">Backup, restore, import and export</a></li>
25<li><a href="Upgrade-from-original-sebsauvage/Shaarli.html">Upgrade from original sebsauvage/Shaarli</a></li>
26<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> 25<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>
27<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li> 26<li><a href="Create-and-serve-multiple-Shaarlis-(farm).html">Create and serve multiple Shaarlis (farm)</a></li>
28<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li> 27<li><a href="Download-CSS-styles-from-an-OPML-list.html">Download CSS styles from an OPML list</a></li>
@@ -46,7 +45,6 @@
46<ul> 45<ul>
47<li><a href="FAQ.html">FAQ</a></li> 46<li><a href="FAQ.html">FAQ</a></li>
48<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li> 47<li><a href="Community-&amp;-Related-software.html">Community &amp; Related software</a></li>
49<li><a href="TODO.html">TODO</a></li>
50</ul></li> 48</ul></li>
51</ul> 49</ul>
52</div> 50</div>
diff --git a/docker/development/Dockerfile b/docker/development/Dockerfile
index 2ed59b89..0c19b085 100644
--- a/docker/development/Dockerfile
+++ b/docker/development/Dockerfile
@@ -1,26 +1,34 @@
1FROM debian:jessie 1FROM debian:jessie
2MAINTAINER Shaarli Community 2MAINTAINER Shaarli Community
3 3
4ENV TERM dumb
4RUN apt-get update \ 5RUN apt-get update \
5 && apt-get install -y \ 6 && apt-get install --no-install-recommends -y \
6 nginx-light php5-fpm php5-gd supervisor \ 7 ca-certificates \
7 git nano 8 nginx-light \
8 9 php5-curl \
9ADD https://getcomposer.org/composer.phar /usr/local/bin/composer 10 php5-fpm \
10RUN chmod 755 /usr/local/bin/composer 11 php5-gd \
12 php5-intl \
13 supervisor \
14 git \
15 nano \
16 && apt-get clean
11 17
12COPY nginx.conf /etc/nginx/nginx.conf 18COPY nginx.conf /etc/nginx/nginx.conf
13COPY supervised.conf /etc/supervisor/conf.d/supervised.conf 19COPY supervised.conf /etc/supervisor/conf.d/supervised.conf
14RUN echo "<?php phpinfo(); ?>" > /var/www/index.php 20
21ADD https://getcomposer.org/composer.phar /usr/local/bin/composer
22RUN chmod 755 /usr/local/bin/composer
15 23
16WORKDIR /var/www 24WORKDIR /var/www
25RUN git clone https://github.com/shaarli/Shaarli.git shaarli \
26 && cd shaarli \
27 && composer --prefer-dist install
17RUN rm -rf html \ 28RUN rm -rf html \
18 && git clone https://github.com/shaarli/Shaarli.git shaarli \ 29 && echo "<?php phpinfo(); ?>" > index.php \
19 && chown -R www-data:www-data . 30 && chown -R www-data:www-data .
20 31
21WORKDIR /var/www/shaarli
22RUN composer install
23
24VOLUME /var/www/shaarli/data 32VOLUME /var/www/shaarli/data
25 33
26EXPOSE 80 34EXPOSE 80
diff --git a/docker/production/Dockerfile b/docker/production/Dockerfile
index 3db4eb56..d93ed262 100644
--- a/docker/production/Dockerfile
+++ b/docker/production/Dockerfile
@@ -1,17 +1,32 @@
1FROM debian:jessie 1FROM debian:jessie
2MAINTAINER Shaarli Community 2MAINTAINER Shaarli Community
3 3
4ENV TERM dumb
4RUN apt-get update \ 5RUN apt-get update \
5 && apt-get install -y curl nginx-light php5-fpm php5-gd supervisor 6 && apt-get install --no-install-recommends -y \
7 ca-certificates \
8 curl \
9 nginx-light \
10 php5-curl \
11 php5-fpm \
12 php5-gd \
13 php5-intl \
14 supervisor \
15 && apt-get clean
6 16
7COPY nginx.conf /etc/nginx/nginx.conf 17COPY nginx.conf /etc/nginx/nginx.conf
8COPY supervised.conf /etc/supervisor/conf.d/supervised.conf 18COPY supervised.conf /etc/supervisor/conf.d/supervised.conf
9 19
20ADD https://getcomposer.org/composer.phar /usr/local/bin/composer
21RUN chmod 755 /usr/local/bin/composer
22
10WORKDIR /var/www 23WORKDIR /var/www
11RUN rm -rf html \ 24RUN curl -L https://github.com/shaarli/Shaarli/archive/master.tar.gz | tar xzf - \
12 && curl -L https://github.com/shaarli/Shaarli/archive/master.tar.gz | tar xvzf - \
13 && mv Shaarli-master shaarli \ 25 && mv Shaarli-master shaarli \
14 && chown -R www-data:www-data shaarli 26 && cd shaarli \
27 && composer --prefer-dist --no-dev install
28RUN rm -rf html \
29 && chown -R www-data:www-data .
15 30
16VOLUME /var/www/shaarli/data 31VOLUME /var/www/shaarli/data
17 32
diff --git a/docker/production/stable/Dockerfile b/docker/production/stable/Dockerfile
index 2bb3948c..a509fda6 100644
--- a/docker/production/stable/Dockerfile
+++ b/docker/production/stable/Dockerfile
@@ -1,17 +1,32 @@
1FROM debian:jessie 1FROM debian:jessie
2MAINTAINER Shaarli Community 2MAINTAINER Shaarli Community
3 3
4ENV TERM dumb
4RUN apt-get update \ 5RUN apt-get update \
5 && apt-get install -y curl nginx-light php5-fpm php5-gd supervisor 6 && apt-get install --no-install-recommends -y \
7 ca-certificates \
8 curl \
9 nginx-light \
10 php5-curl \
11 php5-fpm \
12 php5-gd \
13 php5-intl \
14 supervisor \
15 && apt-get clean
6 16
7COPY nginx.conf /etc/nginx/nginx.conf 17COPY nginx.conf /etc/nginx/nginx.conf
8COPY supervised.conf /etc/supervisor/conf.d/supervised.conf 18COPY supervised.conf /etc/supervisor/conf.d/supervised.conf
9 19
20ADD https://getcomposer.org/composer.phar /usr/local/bin/composer
21RUN chmod 755 /usr/local/bin/composer
22
10WORKDIR /var/www 23WORKDIR /var/www
11RUN rm -rf html \ 24RUN curl -L https://github.com/shaarli/Shaarli/archive/stable.tar.gz | tar xzf - \
12 && curl -L https://github.com/shaarli/Shaarli/archive/stable.tar.gz | tar xvzf - \
13 && mv Shaarli-stable shaarli \ 25 && mv Shaarli-stable shaarli \
14 && chown -R www-data:www-data shaarli 26 && cd shaarli \
27 && composer --prefer-dist --no-dev install
28RUN rm -rf html \
29 && chown -R www-data:www-data .
15 30
16VOLUME /var/www/shaarli/data 31VOLUME /var/www/shaarli/data
17 32
diff --git a/inc/shaarli.css b/inc/shaarli.css
index 305afddc..5808320c 100644
--- a/inc/shaarli.css
+++ b/inc/shaarli.css
@@ -1156,7 +1156,7 @@ ul.errors {
1156} 1156}
1157 1157
1158#pluginsadmin .plugin_parameter { 1158#pluginsadmin .plugin_parameter {
1159 padding: 5px 0; 1159 padding: 10px 0;
1160 border-width: 1px 0; 1160 border-width: 1px 0;
1161 border-style: solid; 1161 border-style: solid;
1162 border-color: #c0c0c0; 1162 border-color: #c0c0c0;
@@ -1164,7 +1164,7 @@ ul.errors {
1164 1164
1165#pluginsadmin .float_label { 1165#pluginsadmin .float_label {
1166 float: left; 1166 float: left;
1167 width: 20%; 1167 width: 40%;
1168} 1168}
1169 1169
1170#pluginsadmin a { 1170#pluginsadmin a {
diff --git a/index.php b/index.php
index d425afda..5bc13d49 100644
--- a/index.php
+++ b/index.php
@@ -1,6 +1,6 @@
1<?php 1<?php
2/** 2/**
3 * Shaarli v0.7.0 - Shaare your links... 3 * Shaarli v0.8.0 - Shaare your links...
4 * 4 *
5 * The personal, minimalist, super-fast, database free, bookmarking service. 5 * The personal, minimalist, super-fast, database free, bookmarking service.
6 * 6 *
@@ -25,7 +25,7 @@ if (date_default_timezone_get() == '') {
25/* 25/*
26 * PHP configuration 26 * PHP configuration
27 */ 27 */
28define('shaarli_version', '0.7.0'); 28define('shaarli_version', '0.8.0');
29 29
30// http://server.com/x/shaarli --> /shaarli/ 30// http://server.com/x/shaarli --> /shaarli/
31define('WEB_PATH', substr($_SERVER['REQUEST_URI'], 0, 1+strrpos($_SERVER['REQUEST_URI'], '/', 0))); 31define('WEB_PATH', substr($_SERVER['REQUEST_URI'], 0, 1+strrpos($_SERVER['REQUEST_URI'], '/', 0)));
@@ -44,6 +44,20 @@ error_reporting(E_ALL^E_WARNING);
44//error_reporting(-1); 44//error_reporting(-1);
45 45
46 46
47// 3rd-party libraries
48if (! file_exists(__DIR__ . '/vendor/autoload.php')) {
49 header('Content-Type: text/plain; charset=utf-8');
50 echo "Error: missing Composer configuration\n\n"
51 ."If you installed Shaarli through Git or using the development branch,\n"
52 ."please refer to the installation documentation to install PHP"
53 ." dependencies using Composer:\n"
54 ."- https://github.com/shaarli/Shaarli/wiki/Server-requirements\n"
55 ."- https://github.com/shaarli/Shaarli/wiki/Download-and-Installation";
56 exit;
57}
58require_once 'inc/rain.tpl.class.php';
59require_once __DIR__ . '/vendor/autoload.php';
60
47// Shaarli library 61// Shaarli library
48require_once 'application/ApplicationUtils.php'; 62require_once 'application/ApplicationUtils.php';
49require_once 'application/Cache.php'; 63require_once 'application/Cache.php';
@@ -53,6 +67,7 @@ require_once 'application/config/ConfigPlugin.php';
53require_once 'application/FeedBuilder.php'; 67require_once 'application/FeedBuilder.php';
54require_once 'application/FileUtils.php'; 68require_once 'application/FileUtils.php';
55require_once 'application/HttpUtils.php'; 69require_once 'application/HttpUtils.php';
70require_once 'application/Languages.php';
56require_once 'application/LinkDB.php'; 71require_once 'application/LinkDB.php';
57require_once 'application/LinkFilter.php'; 72require_once 'application/LinkFilter.php';
58require_once 'application/LinkUtils.php'; 73require_once 'application/LinkUtils.php';
@@ -64,7 +79,6 @@ require_once 'application/Utils.php';
64require_once 'application/PluginManager.php'; 79require_once 'application/PluginManager.php';
65require_once 'application/Router.php'; 80require_once 'application/Router.php';
66require_once 'application/Updater.php'; 81require_once 'application/Updater.php';
67require_once 'inc/rain.tpl.class.php';
68 82
69// Ensure the PHP version is supported 83// Ensure the PHP version is supported
70try { 84try {
@@ -318,8 +332,17 @@ include $conf->get('resource.ban_file', 'data/ipbans.php');
318function ban_loginFailed($conf) 332function ban_loginFailed($conf)
319{ 333{
320 $ip = $_SERVER['REMOTE_ADDR']; 334 $ip = $_SERVER['REMOTE_ADDR'];
335 $trusted = $conf->get('security.trusted_proxies', array());
336 if (in_array($ip, $trusted)) {
337 $ip = getIpAddressFromProxy($_SERVER, $trusted);
338 if (!$ip) {
339 return;
340 }
341 }
321 $gb = $GLOBALS['IPBANS']; 342 $gb = $GLOBALS['IPBANS'];
322 if (!isset($gb['FAILURES'][$ip])) $gb['FAILURES'][$ip]=0; 343 if (! isset($gb['FAILURES'][$ip])) {
344 $gb['FAILURES'][$ip]=0;
345 }
323 $gb['FAILURES'][$ip]++; 346 $gb['FAILURES'][$ip]++;
324 if ($gb['FAILURES'][$ip] > ($conf->get('security.ban_after') - 1)) 347 if ($gb['FAILURES'][$ip] > ($conf->get('security.ban_after') - 1))
325 { 348 {
@@ -783,8 +806,6 @@ function renderPage($conf, $pluginManager)
783 if ($targetPage == Router::$PAGE_LOGIN) 806 if ($targetPage == Router::$PAGE_LOGIN)
784 { 807 {
785 if ($conf->get('security.open_shaarli')) { header('Location: ?'); exit; } // No need to login for open Shaarli 808 if ($conf->get('security.open_shaarli')) { header('Location: ?'); exit; } // No need to login for open Shaarli
786 $token=''; if (ban_canLogin($conf)) $token=getToken($conf); // Do not waste token generation if not useful.
787 $PAGE->assign('token',$token);
788 if (isset($_GET['username'])) { 809 if (isset($_GET['username'])) {
789 $PAGE->assign('username', escape($_GET['username'])); 810 $PAGE->assign('username', escape($_GET['username']));
790 } 811 }
@@ -1105,7 +1126,6 @@ function renderPage($conf, $pluginManager)
1105 } 1126 }
1106 else // show the change password form. 1127 else // show the change password form.
1107 { 1128 {
1108 $PAGE->assign('token',getToken($conf));
1109 $PAGE->renderPage('changepassword'); 1129 $PAGE->renderPage('changepassword');
1110 exit; 1130 exit;
1111 } 1131 }
@@ -1152,7 +1172,6 @@ function renderPage($conf, $pluginManager)
1152 } 1172 }
1153 else // Show the configuration form. 1173 else // Show the configuration form.
1154 { 1174 {
1155 $PAGE->assign('token',getToken($conf));
1156 $PAGE->assign('title', $conf->get('general.title')); 1175 $PAGE->assign('title', $conf->get('general.title'));
1157 $PAGE->assign('redirector', $conf->get('redirector.url')); 1176 $PAGE->assign('redirector', $conf->get('redirector.url'));
1158 list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone')); 1177 list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone'));
@@ -1172,7 +1191,6 @@ function renderPage($conf, $pluginManager)
1172 if ($targetPage == Router::$PAGE_CHANGETAG) 1191 if ($targetPage == Router::$PAGE_CHANGETAG)
1173 { 1192 {
1174 if (empty($_POST['fromtag']) || (empty($_POST['totag']) && isset($_POST['renametag']))) { 1193 if (empty($_POST['fromtag']) || (empty($_POST['totag']) && isset($_POST['renametag']))) {
1175 $PAGE->assign('token', getToken($conf));
1176 $PAGE->assign('tags', $LINKSDB->allTags()); 1194 $PAGE->assign('tags', $LINKSDB->allTags());
1177 $PAGE->renderPage('changetag'); 1195 $PAGE->renderPage('changetag');
1178 exit; 1196 exit;
@@ -1351,7 +1369,6 @@ function renderPage($conf, $pluginManager)
1351 $data = array( 1369 $data = array(
1352 'link' => $link, 1370 'link' => $link,
1353 'link_is_new' => false, 1371 'link_is_new' => false,
1354 'token' => getToken($conf),
1355 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''), 1372 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''),
1356 'tags' => $LINKSDB->allTags(), 1373 'tags' => $LINKSDB->allTags(),
1357 ); 1374 );
@@ -1418,11 +1435,10 @@ function renderPage($conf, $pluginManager)
1418 $data = array( 1435 $data = array(
1419 'link' => $link, 1436 'link' => $link,
1420 'link_is_new' => $link_is_new, 1437 'link_is_new' => $link_is_new,
1421 'token' => getToken($conf), // XSRF protection.
1422 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''), 1438 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''),
1423 'source' => (isset($_GET['source']) ? $_GET['source'] : ''), 1439 'source' => (isset($_GET['source']) ? $_GET['source'] : ''),
1424 'tags' => $LINKSDB->allTags(), 1440 'tags' => $LINKSDB->allTags(),
1425 'default_private_links' => $conf->get('default_private_links', false), 1441 'default_private_links' => $conf->get('privacy.default_private_links', false),
1426 ); 1442 );
1427 $pluginManager->executeHooks('render_editlink', $data); 1443 $pluginManager->executeHooks('render_editlink', $data);
1428 1444
@@ -1478,27 +1494,37 @@ function renderPage($conf, $pluginManager)
1478 exit; 1494 exit;
1479 } 1495 }
1480 1496
1481 // -------- User is uploading a file for import 1497 if ($targetPage == Router::$PAGE_IMPORT) {
1482 if (isset($_SERVER['QUERY_STRING']) && startsWith($_SERVER['QUERY_STRING'], 'do=upload')) 1498 // Upload a Netscape bookmark dump to import its contents
1483 { 1499
1484 // If file is too big, some form field may be missing. 1500 if (! isset($_POST['token']) || ! isset($_FILES['filetoupload'])) {
1485 if (!isset($_POST['token']) || (!isset($_FILES)) || (isset($_FILES['filetoupload']['size']) && $_FILES['filetoupload']['size']==0)) 1501 // Show import dialog
1486 { 1502 $PAGE->assign('maxfilesize', getMaxFileSize());
1487 $returnurl = ( empty($_SERVER['HTTP_REFERER']) ? '?' : $_SERVER['HTTP_REFERER'] ); 1503 $PAGE->renderPage('import');
1488 echo '<script>alert("The file you are trying to upload is probably bigger than what this webserver can accept ('.getMaxFileSize().' bytes). Please upload in smaller chunks.");document.location=\''.escape($returnurl).'\';</script>';
1489 exit; 1504 exit;
1490 } 1505 }
1491 if (!tokenOk($_POST['token'])) die('Wrong token.');
1492 importFile($LINKSDB);
1493 exit;
1494 }
1495 1506
1496 // -------- Show upload/import dialog: 1507 // Import bookmarks from an uploaded file
1497 if ($targetPage == Router::$PAGE_IMPORT) 1508 if (isset($_FILES['filetoupload']['size']) && $_FILES['filetoupload']['size'] == 0) {
1498 { 1509 // The file is too big or some form field may be missing.
1499 $PAGE->assign('token',getToken($conf)); 1510 echo '<script>alert("The file you are trying to upload is probably'
1500 $PAGE->assign('maxfilesize',getMaxFileSize()); 1511 .' bigger than what this webserver can accept ('
1501 $PAGE->renderPage('import'); 1512 .getMaxFileSize().' bytes).'
1513 .' Please upload in smaller chunks.");document.location=\'?do='
1514 .Router::$PAGE_IMPORT .'\';</script>';
1515 exit;
1516 }
1517 if (! tokenOk($_POST['token'])) {
1518 die('Wrong token.');
1519 }
1520 $status = NetscapeBookmarkUtils::import(
1521 $_POST,
1522 $_FILES,
1523 $LINKSDB,
1524 $conf->get('resource.page_cache')
1525 );
1526 echo '<script>alert("'.$status.'");document.location=\'?do='
1527 .Router::$PAGE_IMPORT .'\';</script>';
1502 exit; 1528 exit;
1503 } 1529 }
1504 1530
@@ -1556,95 +1582,6 @@ function renderPage($conf, $pluginManager)
1556} 1582}
1557 1583
1558/** 1584/**
1559 * Process the import file form.
1560 *
1561 * @param LinkDB $LINKSDB Loaded LinkDB instance.
1562 * @param ConfigManager $conf Configuration Manager instance.
1563 */
1564function importFile($LINKSDB, $conf)
1565{
1566 if (!isLoggedIn()) { die('Not allowed.'); }
1567
1568 $filename=$_FILES['filetoupload']['name'];
1569 $filesize=$_FILES['filetoupload']['size'];
1570 $data=file_get_contents($_FILES['filetoupload']['tmp_name']);
1571 $private = (empty($_POST['private']) ? 0 : 1); // Should the links be imported as private?
1572 $overwrite = !empty($_POST['overwrite']) ; // Should the imported links overwrite existing ones?
1573 $import_count=0;
1574
1575 // Sniff file type:
1576 $type='unknown';
1577 if (startsWith($data,'<!DOCTYPE NETSCAPE-Bookmark-file-1>')) $type='netscape'; // Netscape bookmark file (aka Firefox).
1578
1579 // Then import the bookmarks.
1580 if ($type=='netscape')
1581 {
1582 // This is a standard Netscape-style bookmark file.
1583 // This format is supported by all browsers (except IE, of course), also Delicious, Diigo and others.
1584 foreach(explode('<DT>',$data) as $html) // explode is very fast
1585 {
1586 $link = array('linkdate'=>'','title'=>'','url'=>'','description'=>'','tags'=>'','private'=>0);
1587 $d = explode('<DD>',$html);
1588 if (startsWith($d[0], '<A '))
1589 {
1590 $link['description'] = (isset($d[1]) ? html_entity_decode(trim($d[1]),ENT_QUOTES,'UTF-8') : ''); // Get description (optional)
1591 preg_match('!<A .*?>(.*?)</A>!i',$d[0],$matches); $link['title'] = (isset($matches[1]) ? trim($matches[1]) : ''); // Get title
1592 $link['title'] = html_entity_decode($link['title'],ENT_QUOTES,'UTF-8');
1593 preg_match_all('! ([A-Z_]+)=\"(.*?)"!i',$html,$matches,PREG_SET_ORDER); // Get all other attributes
1594 $raw_add_date=0;
1595 foreach($matches as $m)
1596 {
1597 $attr=$m[1]; $value=$m[2];
1598 if ($attr=='HREF') $link['url']=html_entity_decode($value,ENT_QUOTES,'UTF-8');
1599 elseif ($attr=='ADD_DATE')
1600 {
1601 $raw_add_date=intval($value);
1602 if ($raw_add_date>30000000000) $raw_add_date/=1000; //If larger than year 2920, then was likely stored in milliseconds instead of seconds
1603 }
1604 elseif ($attr=='PRIVATE') $link['private']=($value=='0'?0:1);
1605 elseif ($attr=='TAGS') $link['tags']=html_entity_decode(str_replace(',',' ',$value),ENT_QUOTES,'UTF-8');
1606 }
1607 if ($link['url']!='')
1608 {
1609 if ($private==1) $link['private']=1;
1610 $dblink = $LINKSDB->getLinkFromUrl($link['url']); // See if the link is already in database.
1611 if ($dblink==false)
1612 { // Link not in database, let's import it...
1613 if (empty($raw_add_date)) $raw_add_date=time(); // In case of shitty bookmark file with no ADD_DATE
1614
1615 // Make sure date/time is not already used by another link.
1616 // (Some bookmark files have several different links with the same ADD_DATE)
1617 // We increment date by 1 second until we find a date which is not used in DB.
1618 // (so that links that have the same date/time are more or less kept grouped by date, but do not conflict.)
1619 while (!empty($LINKSDB[date('Ymd_His',$raw_add_date)])) { $raw_add_date++; }// Yes, I know it's ugly.
1620 $link['linkdate']=date('Ymd_His',$raw_add_date);
1621 $LINKSDB[$link['linkdate']] = $link;
1622 $import_count++;
1623 }
1624 else // Link already present in database.
1625 {
1626 if ($overwrite)
1627 { // If overwrite is required, we import link data, except date/time.
1628 $link['linkdate']=$dblink['linkdate'];
1629 $LINKSDB[$link['linkdate']] = $link;
1630 $import_count++;
1631 }
1632 }
1633
1634 }
1635 }
1636 }
1637 $LINKSDB->savedb($conf->get('resource.page_cache'));
1638
1639 echo '<script>alert("File '.json_encode($filename).' ('.$filesize.' bytes) was successfully processed: '.$import_count.' links imported.");document.location=\'?\';</script>';
1640 }
1641 else
1642 {
1643 echo '<script>alert("File '.json_encode($filename).' ('.$filesize.' bytes) has an unknown file format. Nothing was imported.");document.location=\'?\';</script>';
1644 }
1645}
1646
1647/**
1648 * Template for the list of links (<div id="linklist">) 1585 * Template for the list of links (<div id="linklist">)
1649 * This function fills all the necessary fields in the $PAGE for the template 'linklist.html' 1586 * This function fills all the necessary fields in the $PAGE for the template 'linklist.html'
1650 * 1587 *
@@ -1744,7 +1681,6 @@ function buildLinkList($PAGE,$LINKSDB, $conf, $pluginManager)
1744 'search_term' => $searchterm, 1681 'search_term' => $searchterm,
1745 'search_tags' => $searchtags, 1682 'search_tags' => $searchtags,
1746 'redirector' => $conf->get('redirector.url'), // Optional redirector URL. 1683 'redirector' => $conf->get('redirector.url'), // Optional redirector URL.
1747 'token' => $token,
1748 'links' => $linkDisp, 1684 'links' => $linkDisp,
1749 'tags' => $LINKSDB->allTags(), 1685 'tags' => $LINKSDB->allTags(),
1750 ); 1686 );
diff --git a/plugins/addlink_toolbar/addlink_toolbar.php b/plugins/addlink_toolbar/addlink_toolbar.php
index ba3849cf..cfd74207 100644
--- a/plugins/addlink_toolbar/addlink_toolbar.php
+++ b/plugins/addlink_toolbar/addlink_toolbar.php
@@ -35,4 +35,4 @@ function hook_addlink_toolbar_render_includes($data)
35 } 35 }
36 36
37 return $data; 37 return $data;
38} \ No newline at end of file 38}
diff --git a/plugins/playvideos/playvideos.php b/plugins/playvideos/playvideos.php
index 0a80aa58..7645b778 100644
--- a/plugins/playvideos/playvideos.php
+++ b/plugins/playvideos/playvideos.php
@@ -37,4 +37,4 @@ function hook_playvideos_render_footer($data)
37 } 37 }
38 38
39 return $data; 39 return $data;
40} \ No newline at end of file 40}
diff --git a/plugins/wallabag/README.md b/plugins/wallabag/README.md
index 3f930564..ea21a519 100644
--- a/plugins/wallabag/README.md
+++ b/plugins/wallabag/README.md
@@ -4,19 +4,19 @@ For each link in your Shaarli, adds a button to save the target page in your [wa
4 4
5### Installation 5### Installation
6 6
7Clone this repository inside your `tpl/plugins/` directory, or download the archive and unpack it there. 7Clone this repository inside your `tpl/plugins/` directory, or download the archive and unpack it there.
8The directory structure should look like: 8The directory structure should look like:
9 9
10``` 10```bash
11└── tpl 11└── tpl
12 └── plugins 12 └── plugins
13    └── wallabag 13 └── wallabag
14    ├── README.md 14 ├── README.md
15    ├── wallabag.html 15 ├── wallabag.html
16    ├── wallabag.meta 16 ├── wallabag.meta
17    ├── wallabag.php 17 ├── wallabag.php
18    ├── wallabag.php 18 ├── wallabag.php
19    └── WallabagInstance.php 19 └── WallabagInstance.php
20``` 20```
21 21
22To enable the plugin, you can either: 22To enable the plugin, you can either:
@@ -28,10 +28,10 @@ To enable the plugin, you can either:
28 28
29Go to the plugin administration page, and edit the following settings (with the plugin enabled). 29Go to the plugin administration page, and edit the following settings (with the plugin enabled).
30 30
31**WALLABAG_URL**: *Wallabag instance URL* 31**WALLABAG_URL**: *Wallabag instance URL*
32Example value: `http://v2.wallabag.org` 32Example value: `http://v2.wallabag.org`
33 33
34**WALLABAG_VERSION**: *Wallabag version* 34**WALLABAG_VERSION**: *Wallabag version*
35Value: either `1` (for 1.x) or `2` (for 2.x) 35Value: either `1` (for 1.x) or `2` (for 2.x)
36 36
37> Note: these settings can also be set in `data/config.json.php`, in the plugins section. \ No newline at end of file 37> Note: these settings can also be set in `data/config.json.php`, in the plugins section.
diff --git a/plugins/wallabag/wallabag.meta b/plugins/wallabag/wallabag.meta
index 26e1ea63..9c93f81c 100644
--- a/plugins/wallabag/wallabag.meta
+++ b/plugins/wallabag/wallabag.meta
@@ -1,2 +1,4 @@
1description="For each link, add a Wallabag icon to save it in your instance." 1description="For each link, add a Wallabag icon to save it in your instance."
2parameters="WALLABAG_URL;WALLABAG_VERSION" \ No newline at end of file 2parameters="WALLABAG_URL;WALLABAG_VERSION"
3parameter.WALLABAG_URL="Wallabag API URL"
4parameter.WALLABAG_VERSION="Wallabag API version (1 or 2)" \ No newline at end of file
diff --git a/shaarli_version.php b/shaarli_version.php
index 3c89e94f..eaab95c6 100644
--- a/shaarli_version.php
+++ b/shaarli_version.php
@@ -1 +1 @@
<?php /* 0.7.0 */ ?> <?php /* 0.8.0 */ ?>
diff --git a/tests/HttpUtils/GetIpAdressFromProxyTest.php b/tests/HttpUtils/GetIpAdressFromProxyTest.php
new file mode 100644
index 00000000..6a74a45a
--- /dev/null
+++ b/tests/HttpUtils/GetIpAdressFromProxyTest.php
@@ -0,0 +1,58 @@
1<?php
2
3require_once 'application/HttpUtils.php';
4
5/**
6 * Unitary tests for getIpAddressFromProxy()
7 */
8class GetIpAdressFromProxyTest extends PHPUnit_Framework_TestCase {
9
10 /**
11 * Test without proxy
12 */
13 public function testWithoutProxy()
14 {
15 $this->assertFalse(getIpAddressFromProxy(array(), array()));
16 }
17
18 /**
19 * Test with a single IP in proxy header.
20 */
21 public function testWithOneForwardedIp()
22 {
23 $ip = '1.1.1.1';
24 $server = array('HTTP_X_FORWARDED_FOR' => $ip);
25 $this->assertEquals($ip, getIpAddressFromProxy($server, array()));
26 }
27
28 /**
29 * Test with a multiple IPs in proxy header.
30 */
31 public function testWithMultipleForwardedIp()
32 {
33 $ip = '1.1.1.1';
34 $ip2 = '2.2.2.2';
35
36 $server = array('HTTP_X_FORWARDED_FOR' => $ip .','. $ip2);
37 $this->assertEquals($ip2, getIpAddressFromProxy($server, array()));
38
39 $server = array('HTTP_X_FORWARDED_FOR' => $ip .' , '. $ip2);
40 $this->assertEquals($ip2, getIpAddressFromProxy($server, array()));
41 }
42
43 /**
44 * Test with a trusted IP address.
45 */
46 public function testWithTrustedIp()
47 {
48 $ip = '1.1.1.1';
49 $ip2 = '2.2.2.2';
50
51 $server = array('HTTP_X_FORWARDED_FOR' => $ip);
52 $this->assertFalse(getIpAddressFromProxy($server, array($ip)));
53
54 $server = array('HTTP_X_FORWARDED_FOR' => $ip .','. $ip2);
55 $this->assertEquals($ip2, getIpAddressFromProxy($server, array($ip)));
56 $this->assertFalse(getIpAddressFromProxy($server, array($ip, $ip2)));
57 }
58}
diff --git a/tests/LanguagesTest.php b/tests/LanguagesTest.php
new file mode 100644
index 00000000..79c136c8
--- /dev/null
+++ b/tests/LanguagesTest.php
@@ -0,0 +1,41 @@
1<?php
2
3require_once 'application/Languages.php';
4
5/**
6 * Class LanguagesTest.
7 */
8class LanguagesTest extends PHPUnit_Framework_TestCase
9{
10 /**
11 * Test t() with a simple non identified value.
12 */
13 public function testTranslateSingleNotID()
14 {
15 $text = 'abcdé 564 fgK';
16 $this->assertEquals($text, t($text));
17 }
18
19 /**
20 * Test t() with a non identified plural form.
21 */
22 public function testTranslatePluralNotID()
23 {
24 $text = '%s sandwich';
25 $nText = '%s sandwiches';
26 $this->assertEquals('0 sandwich', t($text, $nText));
27 $this->assertEquals('1 sandwich', t($text, $nText, 1));
28 $this->assertEquals('2 sandwiches', t($text, $nText, 2));
29 }
30
31 /**
32 * Test t() with a non identified invalid plural form.
33 */
34 public function testTranslatePluralNotIDInvalid()
35 {
36 $text = 'sandwich';
37 $nText = 'sandwiches';
38 $this->assertEquals('sandwich', t($text, $nText, 1));
39 $this->assertEquals('sandwiches', t($text, $nText, 2));
40 }
41}
diff --git a/tests/NetscapeBookmarkUtilsTest.php b/tests/NetscapeBookmarkUtils/BookmarkExportTest.php
index 41e6d84c..cc54ab9f 100644
--- a/tests/NetscapeBookmarkUtilsTest.php
+++ b/tests/NetscapeBookmarkUtils/BookmarkExportTest.php
@@ -3,9 +3,9 @@
3require_once 'application/NetscapeBookmarkUtils.php'; 3require_once 'application/NetscapeBookmarkUtils.php';
4 4
5/** 5/**
6 * Netscape bookmark import and export 6 * Netscape bookmark export
7 */ 7 */
8class NetscapeBookmarkUtilsTest extends PHPUnit_Framework_TestCase 8class BookmarkExportTest extends PHPUnit_Framework_TestCase
9{ 9{
10 /** 10 /**
11 * @var string datastore to test write operations 11 * @var string datastore to test write operations
diff --git a/tests/NetscapeBookmarkUtils/BookmarkImportTest.php b/tests/NetscapeBookmarkUtils/BookmarkImportTest.php
new file mode 100644
index 00000000..f0ad500f
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/BookmarkImportTest.php
@@ -0,0 +1,546 @@
1<?php
2
3require_once 'application/NetscapeBookmarkUtils.php';
4
5
6/**
7 * Utility function to load a file's metadata in a $_FILES-like array
8 *
9 * @param string $filename Basename of the file
10 *
11 * @return array A $_FILES-like array
12 */
13function file2array($filename)
14{
15 return array(
16 'filetoupload' => array(
17 'name' => $filename,
18 'tmp_name' => __DIR__ . '/input/' . $filename,
19 'size' => filesize(__DIR__ . '/input/' . $filename)
20 )
21 );
22}
23
24
25/**
26 * Netscape bookmark import
27 */
28class BookmarkImportTest extends PHPUnit_Framework_TestCase
29{
30 /**
31 * @var string datastore to test write operations
32 */
33 protected static $testDatastore = 'sandbox/datastore.php';
34
35 /**
36 * @var LinkDB private LinkDB instance
37 */
38 protected $linkDb = null;
39
40 /**
41 * @var string Dummy page cache
42 */
43 protected $pagecache = 'tests';
44
45 /**
46 * Resets test data before each test
47 */
48 protected function setUp()
49 {
50 if (file_exists(self::$testDatastore)) {
51 unlink(self::$testDatastore);
52 }
53 // start with an empty datastore
54 file_put_contents(self::$testDatastore, '<?php /* S7QysKquBQA= */ ?>');
55 $this->linkDb = new LinkDB(self::$testDatastore, true, false);
56 }
57
58 /**
59 * Attempt to import bookmarks from an empty file
60 */
61 public function testImportEmptyData()
62 {
63 $files = file2array('empty.htm');
64 $this->assertEquals(
65 'File empty.htm (0 bytes) has an unknown file format.'
66 .' Nothing was imported.',
67 NetscapeBookmarkUtils::import(NULL, $files, NULL, NULL)
68 );
69 $this->assertEquals(0, count($this->linkDb));
70 }
71
72 /**
73 * Attempt to import bookmarks from a file with no Doctype
74 */
75 public function testImportNoDoctype()
76 {
77 $files = file2array('no_doctype.htm');
78 $this->assertEquals(
79 'File no_doctype.htm (350 bytes) has an unknown file format. Nothing was imported.',
80 NetscapeBookmarkUtils::import(NULL, $files, NULL, NULL)
81 );
82 $this->assertEquals(0, count($this->linkDb));
83 }
84
85 /**
86 * Ensure IE dumps are supported
87 */
88 public function testImportInternetExplorerEncoding()
89 {
90 $files = file2array('internet_explorer_encoding.htm');
91 $this->assertEquals(
92 'File internet_explorer_encoding.htm (356 bytes) was successfully processed:'
93 .' 1 links imported, 0 links overwritten, 0 links skipped.',
94 NetscapeBookmarkUtils::import(array(), $files, $this->linkDb, $this->pagecache)
95 );
96 $this->assertEquals(1, count($this->linkDb));
97 $this->assertEquals(0, count_private($this->linkDb));
98
99 $this->assertEquals(
100 array(
101 'linkdate' => '20160618_173944',
102 'title' => 'Hg Init a Mercurial tutorial by Joel Spolsky',
103 'url' => 'http://hginit.com/',
104 'description' => '',
105 'private' => 0,
106 'tags' => ''
107 ),
108 $this->linkDb->getLinkFromUrl('http://hginit.com/')
109 );
110 }
111
112
113 /**
114 * Import bookmarks nested in a folder hierarchy
115 */
116 public function testImportNested()
117 {
118 $files = file2array('netscape_nested.htm');
119 $this->assertEquals(
120 'File netscape_nested.htm (1337 bytes) was successfully processed:'
121 .' 8 links imported, 0 links overwritten, 0 links skipped.',
122 NetscapeBookmarkUtils::import(array(), $files, $this->linkDb, $this->pagecache)
123 );
124 $this->assertEquals(8, count($this->linkDb));
125 $this->assertEquals(2, count_private($this->linkDb));
126
127 $this->assertEquals(
128 array(
129 'linkdate' => '20160225_205541',
130 'title' => 'Nested 1',
131 'url' => 'http://nest.ed/1',
132 'description' => '',
133 'private' => 0,
134 'tags' => 'tag1 tag2'
135 ),
136 $this->linkDb->getLinkFromUrl('http://nest.ed/1')
137 );
138 $this->assertEquals(
139 array(
140 'linkdate' => '20160225_205542',
141 'title' => 'Nested 1-1',
142 'url' => 'http://nest.ed/1-1',
143 'description' => '',
144 'private' => 0,
145 'tags' => 'folder1 tag1 tag2'
146 ),
147 $this->linkDb->getLinkFromUrl('http://nest.ed/1-1')
148 );
149 $this->assertEquals(
150 array(
151 'linkdate' => '20160225_205547',
152 'title' => 'Nested 1-2',
153 'url' => 'http://nest.ed/1-2',
154 'description' => '',
155 'private' => 0,
156 'tags' => 'folder1 tag3 tag4'
157 ),
158 $this->linkDb->getLinkFromUrl('http://nest.ed/1-2')
159 );
160 $this->assertEquals(
161 array(
162 'linkdate' => '20160202_172222',
163 'title' => 'Nested 2-1',
164 'url' => 'http://nest.ed/2-1',
165 'description' => 'First link of the second section',
166 'private' => 1,
167 'tags' => 'folder2'
168 ),
169 $this->linkDb->getLinkFromUrl('http://nest.ed/2-1')
170 );
171 $this->assertEquals(
172 array(
173 'linkdate' => '20160119_200227',
174 'title' => 'Nested 2-2',
175 'url' => 'http://nest.ed/2-2',
176 'description' => 'Second link of the second section',
177 'private' => 1,
178 'tags' => 'folder2'
179 ),
180 $this->linkDb->getLinkFromUrl('http://nest.ed/2-2')
181 );
182 $this->assertEquals(
183 array(
184 'linkdate' => '20160202_172223',
185 'title' => 'Nested 3-1',
186 'url' => 'http://nest.ed/3-1',
187 'description' => '',
188 'private' => 0,
189 'tags' => 'folder3 folder3-1 tag3'
190 ),
191 $this->linkDb->getLinkFromUrl('http://nest.ed/3-1')
192 );
193 $this->assertEquals(
194 array(
195 'linkdate' => '20160119_200228',
196 'title' => 'Nested 3-2',
197 'url' => 'http://nest.ed/3-2',
198 'description' => '',
199 'private' => 0,
200 'tags' => 'folder3 folder3-1'
201 ),
202 $this->linkDb->getLinkFromUrl('http://nest.ed/3-2')
203 );
204 $this->assertEquals(
205 array(
206 'linkdate' => '20160229_081541',
207 'title' => 'Nested 2',
208 'url' => 'http://nest.ed/2',
209 'description' => '',
210 'private' => 0,
211 'tags' => 'tag4'
212 ),
213 $this->linkDb->getLinkFromUrl('http://nest.ed/2')
214 );
215 }
216
217 /**
218 * Import bookmarks with the default privacy setting (reuse from file)
219 *
220 * The $_POST array is not set.
221 */
222 public function testImportDefaultPrivacyNoPost()
223 {
224 $files = file2array('netscape_basic.htm');
225 $this->assertEquals(
226 'File netscape_basic.htm (482 bytes) was successfully processed:'
227 .' 2 links imported, 0 links overwritten, 0 links skipped.',
228 NetscapeBookmarkUtils::import(array(), $files, $this->linkDb, $this->pagecache)
229 );
230 $this->assertEquals(2, count($this->linkDb));
231 $this->assertEquals(1, count_private($this->linkDb));
232
233 $this->assertEquals(
234 array(
235 'linkdate' => '20001010_105536',
236 'title' => 'Secret stuff',
237 'url' => 'https://private.tld',
238 'description' => "Super-secret stuff you're not supposed to know about",
239 'private' => 1,
240 'tags' => 'private secret'
241 ),
242 $this->linkDb->getLinkFromUrl('https://private.tld')
243 );
244 $this->assertEquals(
245 array(
246 'linkdate' => '20160225_205548',
247 'title' => 'Public stuff',
248 'url' => 'http://public.tld',
249 'description' => '',
250 'private' => 0,
251 'tags' => 'public hello world'
252 ),
253 $this->linkDb->getLinkFromUrl('http://public.tld')
254 );
255 }
256
257 /**
258 * Import bookmarks with the default privacy setting (reuse from file)
259 */
260 public function testImportKeepPrivacy()
261 {
262 $post = array('privacy' => 'default');
263 $files = file2array('netscape_basic.htm');
264 $this->assertEquals(
265 'File netscape_basic.htm (482 bytes) was successfully processed:'
266 .' 2 links imported, 0 links overwritten, 0 links skipped.',
267 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
268 );
269 $this->assertEquals(2, count($this->linkDb));
270 $this->assertEquals(1, count_private($this->linkDb));
271
272 $this->assertEquals(
273 array(
274 'linkdate' => '20001010_105536',
275 'title' => 'Secret stuff',
276 'url' => 'https://private.tld',
277 'description' => "Super-secret stuff you're not supposed to know about",
278 'private' => 1,
279 'tags' => 'private secret'
280 ),
281 $this->linkDb->getLinkFromUrl('https://private.tld')
282 );
283 $this->assertEquals(
284 array(
285 'linkdate' => '20160225_205548',
286 'title' => 'Public stuff',
287 'url' => 'http://public.tld',
288 'description' => '',
289 'private' => 0,
290 'tags' => 'public hello world'
291 ),
292 $this->linkDb->getLinkFromUrl('http://public.tld')
293 );
294 }
295
296 /**
297 * Import links as public
298 */
299 public function testImportAsPublic()
300 {
301 $post = array('privacy' => 'public');
302 $files = file2array('netscape_basic.htm');
303 $this->assertEquals(
304 'File netscape_basic.htm (482 bytes) was successfully processed:'
305 .' 2 links imported, 0 links overwritten, 0 links skipped.',
306 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
307 );
308 $this->assertEquals(2, count($this->linkDb));
309 $this->assertEquals(0, count_private($this->linkDb));
310 $this->assertEquals(
311 0,
312 $this->linkDb['20001010_105536']['private']
313 );
314 $this->assertEquals(
315 0,
316 $this->linkDb['20160225_205548']['private']
317 );
318 }
319
320 /**
321 * Import links as private
322 */
323 public function testImportAsPrivate()
324 {
325 $post = array('privacy' => 'private');
326 $files = file2array('netscape_basic.htm');
327 $this->assertEquals(
328 'File netscape_basic.htm (482 bytes) was successfully processed:'
329 .' 2 links imported, 0 links overwritten, 0 links skipped.',
330 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
331 );
332 $this->assertEquals(2, count($this->linkDb));
333 $this->assertEquals(2, count_private($this->linkDb));
334 $this->assertEquals(
335 1,
336 $this->linkDb['20001010_105536']['private']
337 );
338 $this->assertEquals(
339 1,
340 $this->linkDb['20160225_205548']['private']
341 );
342 }
343
344 /**
345 * Overwrite private links so they become public
346 */
347 public function testOverwriteAsPublic()
348 {
349 $files = file2array('netscape_basic.htm');
350
351 // import links as private
352 $post = array('privacy' => 'private');
353 $this->assertEquals(
354 'File netscape_basic.htm (482 bytes) was successfully processed:'
355 .' 2 links imported, 0 links overwritten, 0 links skipped.',
356 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
357 );
358 $this->assertEquals(2, count($this->linkDb));
359 $this->assertEquals(2, count_private($this->linkDb));
360 $this->assertEquals(
361 1,
362 $this->linkDb['20001010_105536']['private']
363 );
364 $this->assertEquals(
365 1,
366 $this->linkDb['20160225_205548']['private']
367 );
368
369 // re-import as public, enable overwriting
370 $post = array(
371 'privacy' => 'public',
372 'overwrite' => 'true'
373 );
374 $this->assertEquals(
375 'File netscape_basic.htm (482 bytes) was successfully processed:'
376 .' 2 links imported, 2 links overwritten, 0 links skipped.',
377 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
378 );
379 $this->assertEquals(2, count($this->linkDb));
380 $this->assertEquals(0, count_private($this->linkDb));
381 $this->assertEquals(
382 0,
383 $this->linkDb['20001010_105536']['private']
384 );
385 $this->assertEquals(
386 0,
387 $this->linkDb['20160225_205548']['private']
388 );
389 }
390
391 /**
392 * Overwrite public links so they become private
393 */
394 public function testOverwriteAsPrivate()
395 {
396 $files = file2array('netscape_basic.htm');
397
398 // import links as public
399 $post = array('privacy' => 'public');
400 $this->assertEquals(
401 'File netscape_basic.htm (482 bytes) was successfully processed:'
402 .' 2 links imported, 0 links overwritten, 0 links skipped.',
403 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
404 );
405 $this->assertEquals(2, count($this->linkDb));
406 $this->assertEquals(0, count_private($this->linkDb));
407 $this->assertEquals(
408 0,
409 $this->linkDb['20001010_105536']['private']
410 );
411 $this->assertEquals(
412 0,
413 $this->linkDb['20160225_205548']['private']
414 );
415
416 // re-import as private, enable overwriting
417 $post = array(
418 'privacy' => 'private',
419 'overwrite' => 'true'
420 );
421 $this->assertEquals(
422 'File netscape_basic.htm (482 bytes) was successfully processed:'
423 .' 2 links imported, 2 links overwritten, 0 links skipped.',
424 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
425 );
426 $this->assertEquals(2, count($this->linkDb));
427 $this->assertEquals(2, count_private($this->linkDb));
428 $this->assertEquals(
429 1,
430 $this->linkDb['20001010_105536']['private']
431 );
432 $this->assertEquals(
433 1,
434 $this->linkDb['20160225_205548']['private']
435 );
436 }
437
438 /**
439 * Attept to import the same links twice without enabling overwriting
440 */
441 public function testSkipOverwrite()
442 {
443 $post = array('privacy' => 'public');
444 $files = file2array('netscape_basic.htm');
445 $this->assertEquals(
446 'File netscape_basic.htm (482 bytes) was successfully processed:'
447 .' 2 links imported, 0 links overwritten, 0 links skipped.',
448 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
449 );
450 $this->assertEquals(2, count($this->linkDb));
451 $this->assertEquals(0, count_private($this->linkDb));
452
453 // re-import as private, DO NOT enable overwriting
454 $post = array('privacy' => 'private');
455 $this->assertEquals(
456 'File netscape_basic.htm (482 bytes) was successfully processed:'
457 .' 0 links imported, 0 links overwritten, 2 links skipped.',
458 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
459 );
460 $this->assertEquals(2, count($this->linkDb));
461 $this->assertEquals(0, count_private($this->linkDb));
462 }
463
464 /**
465 * Add user-specified tags to all imported bookmarks
466 */
467 public function testSetDefaultTags()
468 {
469 $post = array(
470 'privacy' => 'public',
471 'default_tags' => 'tag1,tag2 tag3'
472 );
473 $files = file2array('netscape_basic.htm');
474 $this->assertEquals(
475 'File netscape_basic.htm (482 bytes) was successfully processed:'
476 .' 2 links imported, 0 links overwritten, 0 links skipped.',
477 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
478 );
479 $this->assertEquals(2, count($this->linkDb));
480 $this->assertEquals(0, count_private($this->linkDb));
481 $this->assertEquals(
482 'tag1 tag2 tag3 private secret',
483 $this->linkDb['20001010_105536']['tags']
484 );
485 $this->assertEquals(
486 'tag1 tag2 tag3 public hello world',
487 $this->linkDb['20160225_205548']['tags']
488 );
489 }
490
491 /**
492 * The user-specified tags contain characters to be escaped
493 */
494 public function testSanitizeDefaultTags()
495 {
496 $post = array(
497 'privacy' => 'public',
498 'default_tags' => 'tag1&,tag2 "tag3"'
499 );
500 $files = file2array('netscape_basic.htm');
501 $this->assertEquals(
502 'File netscape_basic.htm (482 bytes) was successfully processed:'
503 .' 2 links imported, 0 links overwritten, 0 links skipped.',
504 NetscapeBookmarkUtils::import($post, $files, $this->linkDb, $this->pagecache)
505 );
506 $this->assertEquals(2, count($this->linkDb));
507 $this->assertEquals(0, count_private($this->linkDb));
508 $this->assertEquals(
509 'tag1&amp; tag2 &quot;tag3&quot; private secret',
510 $this->linkDb['20001010_105536']['tags']
511 );
512 $this->assertEquals(
513 'tag1&amp; tag2 &quot;tag3&quot; public hello world',
514 $this->linkDb['20160225_205548']['tags']
515 );
516 }
517
518 /**
519 * Ensure each imported bookmark has a unique linkdate
520 *
521 * See https://github.com/shaarli/Shaarli/issues/351
522 */
523 public function testImportSameDate()
524 {
525 $files = file2array('same_date.htm');
526 $this->assertEquals(
527 'File same_date.htm (453 bytes) was successfully processed:'
528 .' 3 links imported, 0 links overwritten, 0 links skipped.',
529 NetscapeBookmarkUtils::import(array(), $files, $this->linkDb, $this->pagecache)
530 );
531 $this->assertEquals(3, count($this->linkDb));
532 $this->assertEquals(0, count_private($this->linkDb));
533 $this->assertEquals(
534 '20160225_205548',
535 $this->linkDb['20160225_205548']['linkdate']
536 );
537 $this->assertEquals(
538 '20160225_205549',
539 $this->linkDb['20160225_205549']['linkdate']
540 );
541 $this->assertEquals(
542 '20160225_205550',
543 $this->linkDb['20160225_205550']['linkdate']
544 );
545 }
546}
diff --git a/tests/NetscapeBookmarkUtils/input/empty.htm b/tests/NetscapeBookmarkUtils/input/empty.htm
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/empty.htm
diff --git a/tests/NetscapeBookmarkUtils/input/internet_explorer_encoding.htm b/tests/NetscapeBookmarkUtils/input/internet_explorer_encoding.htm
new file mode 100644
index 00000000..18703cf6
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/internet_explorer_encoding.htm
@@ -0,0 +1,9 @@
1<!DOCTYPE NETSCAPE-Bookmark-file-1>
2<!-- This is an automatically generated file.
3It will be read and overwritten.
4Do Not Edit! -->
5<TITLE>Bookmarks</TITLE>
6<H1>Bookmarks</H1>
7<DL><p>
8 <DT><A HREF="http://hginit.com/" ADD_DATE="1466271584" LAST_VISIT="1466271584" LAST_MODIFIED="1466271584" >Hg Init a Mercurial tutorial by Joel Spolsky</A>
9</DL><p>
diff --git a/tests/NetscapeBookmarkUtils/input/netscape_basic.htm b/tests/NetscapeBookmarkUtils/input/netscape_basic.htm
new file mode 100644
index 00000000..affe0cf8
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/netscape_basic.htm
@@ -0,0 +1,11 @@
1<!DOCTYPE NETSCAPE-Bookmark-file-1>
2<!-- This is an automatically generated file.
3It will be read and overwritten.
4Do Not Edit! -->
5<TITLE>Bookmarks</TITLE>
6<H1>Bookmarks</H1>
7<DL><p>
8<DT><A HREF="https://private.tld" ADD_DATE="10/Oct/2000:13:55:36 +0300" PRIVATE="1" TAGS="private secret">Secret stuff</A>
9<DD>Super-secret stuff you're not supposed to know about
10<DT><A HREF="http://public.tld" ADD_DATE="1456433748" PRIVATE="0" TAGS="public hello world">Public stuff</A>
11</DL><p>
diff --git a/tests/NetscapeBookmarkUtils/input/netscape_nested.htm b/tests/NetscapeBookmarkUtils/input/netscape_nested.htm
new file mode 100644
index 00000000..b486fe18
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/netscape_nested.htm
@@ -0,0 +1,31 @@
1<!DOCTYPE NETSCAPE-Bookmark-file-1>
2<!-- This is an automatically generated file.
3It will be read and overwritten.
4Do Not Edit! -->
5<TITLE>Bookmarks</TITLE>
6<H1>Bookmarks</H1>
7<DL><p>
8 <DT><A HREF="http://nest.ed/1" ADD_DATE="1456433741" PRIVATE="0" TAGS="tag1,tag2">Nested 1</A>
9 <DT><H3 ADD_DATE="1456433722" LAST_MODIFIED="1456433739">Folder1</H3>
10 <DL><p>
11 <DT><A HREF="http://nest.ed/1-1" ADD_DATE="1456433742" PRIVATE="0" TAGS="tag1,tag2">Nested 1-1</A>
12 <DT><A HREF="http://nest.ed/1-2" ADD_DATE="1456433747" PRIVATE="0" TAGS="tag3,tag4">Nested 1-2</A>
13 </DL><p>
14 <DT><H3 ADD_DATE="1456433722">Folder2</H3>
15 <DD>This second folder contains wonderful links!
16 <DL><p>
17 <DT><A HREF="http://nest.ed/2-1" ADD_DATE="1454433742" PRIVATE="1">Nested 2-1</A>
18 <DD>First link of the second section
19 <DT><A HREF="http://nest.ed/2-2" ADD_DATE="1453233747" PRIVATE="1">Nested 2-2</A>
20 <DD>Second link of the second section
21 </DL><p>
22 <DT><H3>Folder3</H3>
23 <DL><p>
24 <DT><H3>Folder3-1</H3>
25 <DL><p>
26 <DT><A HREF="http://nest.ed/3-1" ADD_DATE="1454433742" PRIVATE="0" TAGS="tag3">Nested 3-1</A>
27 <DT><A HREF="http://nest.ed/3-2" ADD_DATE="1453233747" PRIVATE="0">Nested 3-2</A>
28 </DL><p>
29 </DL><p>
30 <DT><A HREF="http://nest.ed/2" ADD_DATE="1456733741" PRIVATE="0" TAGS="tag4">Nested 2</A>
31</DL><p>
diff --git a/tests/NetscapeBookmarkUtils/input/no_doctype.htm b/tests/NetscapeBookmarkUtils/input/no_doctype.htm
new file mode 100644
index 00000000..766d398b
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/no_doctype.htm
@@ -0,0 +1,7 @@
1<TITLE>Bookmarks</TITLE>
2<H1>Bookmarks</H1>
3<DL><p>
4<DT><A HREF="https://private.tld" ADD_DATE="10/Oct/2000:13:55:36 +0300" PRIVATE="1" TAGS="private secret">Secret stuff</A>
5<DD>Super-secret stuff you're not supposed to know about
6<DT><A HREF="http://public.tld" ADD_DATE="1456433748" PRIVATE="0" TAGS="public hello world">Public stuff</A>
7</DL><p>
diff --git a/tests/NetscapeBookmarkUtils/input/same_date.htm b/tests/NetscapeBookmarkUtils/input/same_date.htm
new file mode 100644
index 00000000..9d58a582
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/same_date.htm
@@ -0,0 +1,11 @@
1<!DOCTYPE NETSCAPE-Bookmark-file-1>
2<!-- This is an automatically generated file.
3It will be read and overwritten.
4Do Not Edit! -->
5<TITLE>Bookmarks</TITLE>
6<H1>Bookmarks</H1>
7<DL><p>
8<DT><A HREF="https://fir.st" ADD_DATE="1456433748" PRIVATE="0">Today's first link</A>
9<DT><A HREF="https://seco.nd" ADD_DATE="1456433748" PRIVATE="0">Today's second link</A>
10<DT><A HREF="https://thi.rd" ADD_DATE="1456433748" PRIVATE="0">Today's third link</A>
11</DL><p>
diff --git a/tests/PluginManagerTest.php b/tests/PluginManagerTest.php
index 61efce68..ddf48185 100644
--- a/tests/PluginManagerTest.php
+++ b/tests/PluginManagerTest.php
@@ -79,11 +79,17 @@ class PluginManagerTest extends PHPUnit_Framework_TestCase
79 $this->pluginManager->load(array(self::$pluginName)); 79 $this->pluginManager->load(array(self::$pluginName));
80 80
81 $expectedParameters = array( 81 $expectedParameters = array(
82 'pop' => '', 82 'pop' => array(
83 'hip' => '', 83 'value' => '',
84 'desc' => 'pop description',
85 ),
86 'hip' => array(
87 'value' => '',
88 'desc' => '',
89 ),
84 ); 90 );
85 $meta = $this->pluginManager->getPluginsMeta(); 91 $meta = $this->pluginManager->getPluginsMeta();
86 $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); 92 $this->assertEquals('test plugin', $meta[self::$pluginName]['description']);
87 $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); 93 $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']);
88 } 94 }
89} \ No newline at end of file 95}
diff --git a/tests/config/ConfigPluginTest.php b/tests/config/ConfigPluginTest.php
index 716631b0..3b37cd79 100644
--- a/tests/config/ConfigPluginTest.php
+++ b/tests/config/ConfigPluginTest.php
@@ -101,9 +101,9 @@ class ConfigPluginTest extends PHPUnit_Framework_TestCase
101 $plugins = array( 101 $plugins = array(
102 'plugin_name' => array( 102 'plugin_name' => array(
103 'parameters' => array( 103 'parameters' => array(
104 'param1' => true, 104 'param1' => array('value' => true),
105 'param2' => false, 105 'param2' => array('value' => false),
106 'param3' => '', 106 'param3' => array('value' => ''),
107 ) 107 )
108 ) 108 )
109 ); 109 );
@@ -114,8 +114,8 @@ class ConfigPluginTest extends PHPUnit_Framework_TestCase
114 ); 114 );
115 115
116 $result = load_plugin_parameter_values($plugins, $parameters); 116 $result = load_plugin_parameter_values($plugins, $parameters);
117 $this->assertEquals('value1', $result['plugin_name']['parameters']['param1']); 117 $this->assertEquals('value1', $result['plugin_name']['parameters']['param1']['value']);
118 $this->assertEquals('value2', $result['plugin_name']['parameters']['param2']); 118 $this->assertEquals('value2', $result['plugin_name']['parameters']['param2']['value']);
119 $this->assertEquals('', $result['plugin_name']['parameters']['param3']); 119 $this->assertEquals('', $result['plugin_name']['parameters']['param3']['value']);
120 } 120 }
121} 121}
diff --git a/tests/plugins/test/test.meta b/tests/plugins/test/test.meta
index ab999ed4..26f243f0 100644
--- a/tests/plugins/test/test.meta
+++ b/tests/plugins/test/test.meta
@@ -1,2 +1,4 @@
1description="test plugin" 1description="test plugin"
2parameters="pop;hip" \ No newline at end of file 2parameters="pop;hip"
3parameter.pop="pop description"
4parameter.hip= \ No newline at end of file
diff --git a/tests/utils/config/configInvalid.json.php b/tests/utils/config/configInvalid.json.php
index 167f2168..e39d640a 100644
--- a/tests/utils/config/configInvalid.json.php
+++ b/tests/utils/config/configInvalid.json.php
@@ -2,4 +2,4 @@
2{ 2{
3 bad: bad, 3 bad: bad,
4} 4}
5*/ ?> \ No newline at end of file 5*/ ?>
diff --git a/tpl/import.html b/tpl/import.html
index 6c4f9421..071e1160 100644
--- a/tpl/import.html
+++ b/tpl/import.html
@@ -3,19 +3,31 @@
3<head>{include="includes"}</head> 3<head>{include="includes"}</head>
4<body onload="document.uploadform.filetoupload.focus();"> 4<body onload="document.uploadform.filetoupload.focus();">
5<div id="pageheader"> 5<div id="pageheader">
6 {include="page.header"} 6 {include="page.header"}
7 <div id="uploaddiv"> 7 <div id="uploaddiv">
8 Import Netscape HTML bookmarks (as exported from Firefox/Chrome/Opera/Delicious/Diigo...) (Max: {$maxfilesize} bytes). 8 Import Netscape HTML bookmarks (as exported from Firefox/Chrome/Opera/Delicious/Diigo...) (Max: {$maxfilesize} bytes).
9 <form method="POST" action="?do=upload" enctype="multipart/form-data" name="uploadform" id="uploadform"> 9 <form method="POST" action="?do=import" enctype="multipart/form-data"
10 <input type="hidden" name="token" value="{$token}"> 10 name="uploadform" id="uploadform">
11 <input type="file" name="filetoupload"> 11 <input type="hidden" name="token" value="{$token}">
12 <input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}"> 12 <input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}">
13 <input type="submit" name="import_file" value="Import" class="bigbutton"><br> 13 <input type="file" name="filetoupload">
14 <input type="checkbox" name="private" id="private"><label for="private">&nbsp;Import all links as private</label><br> 14 <input type="submit" name="import_file" value="Import" class="bigbutton"><br>
15 <input type="checkbox" name="overwrite" id="overwrite"><label for="overwrite">&nbsp;Overwrite existing links</label> 15
16 </form> 16 <label for="privacy">&nbsp;Visibility:</label><br>
17 </div> 17 <input type="radio" name="privacy" value="default" checked="true">
18 &nbsp;Use values from the imported file, default to public<br>
19 <input type="radio" name="privacy" value="private">
20 &nbsp;Import all bookmarks as private<br>
21 <input type="radio" name="privacy" value="public">
22 &nbsp;Import all bookmarks as public<br>
23
24 <input type="checkbox" name="overwrite" id="overwrite">
25 <label for="overwrite">&nbsp;Overwrite existing bookmarks</label><br>
26 <label for="default_tags">&nbsp;Add default tags</label>
27 <input type="text" name="default_tags" id="default_tags">
28 </form>
29 </div>
18</div> 30</div>
19{include="page.footer"} 31{include="page.footer"}
20</body> 32</body>
21</html> \ No newline at end of file 33</html>
diff --git a/tpl/pluginsadmin.html b/tpl/pluginsadmin.html
index 5ddcf061..966360ea 100644
--- a/tpl/pluginsadmin.html
+++ b/tpl/pluginsadmin.html
@@ -104,11 +104,12 @@
104 <div class="plugin_parameter"> 104 <div class="plugin_parameter">
105 <div class="float_label"> 105 <div class="float_label">
106 <label for="{$key}"> 106 <label for="{$key}">
107 <code>{$key}</code> 107 <code>{$key}</code><br>
108 {$value.desc}
108 </label> 109 </label>
109 </div> 110 </div>
110 <div class="float_input"> 111 <div class="float_input">
111 <input name="{$key}" value="{$value}" id="{$key}"/> 112 <input name="{$key}" value="{$value.value}" id="{$key}"/>
112 </div> 113 </div>
113 </div> 114 </div>
114 {/loop} 115 {/loop}
diff --git a/tpl/tools.html b/tpl/tools.html
index 9e45caad..8e285f44 100644
--- a/tpl/tools.html
+++ b/tpl/tools.html
@@ -9,7 +9,7 @@
9 <br><br> 9 <br><br>
10 <a href="?do=pluginadmin"><b>Plugin administration</b><span>: Enable, disable and configure plugins.</span></a> 10 <a href="?do=pluginadmin"><b>Plugin administration</b><span>: Enable, disable and configure plugins.</span></a>
11 <br><br> 11 <br><br>
12 {if="$openshaarli"}<a href="?do=changepasswd"><b>Change password</b><span>: Change your password.</span></a> 12 {if="!$openshaarli"}<a href="?do=changepasswd"><b>Change password</b><span>: Change your password.</span></a>
13 <br><br>{/if} 13 <br><br>{/if}
14 <a href="?do=changetag"><b>Rename/delete tags</b><span>: Rename or delete a tag in all links</span></a> 14 <a href="?do=changetag"><b>Rename/delete tags</b><span>: Rename or delete a tag in all links</span></a>
15 <br><br> 15 <br><br>