aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--application/NetscapeBookmarkUtils.php4
-rw-r--r--application/config/ConfigManager.php2
-rw-r--r--doc/md/Directory-structure.md23
-rw-r--r--doc/md/Plugins.md4
-rw-r--r--doc/md/Troubleshooting.md18
-rw-r--r--doc/md/Upgrade-and-migration.md11
-rw-r--r--inc/languages/fr/LC_MESSAGES/shaarli.po228
-rw-r--r--index.php33
-rw-r--r--tests/NetscapeBookmarkUtils/BookmarkImportTest.php15
-rw-r--r--tests/NetscapeBookmarkUtils/input/lowercase_doctype.htm8
11 files changed, 215 insertions, 133 deletions
diff --git a/README.md b/README.md
index da324abc..106384d8 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ _Do you want to share the links you discover?_
6_Shaarli is a minimalist link sharing service that you can install on your own server._ 6_Shaarli is a minimalist link sharing service that you can install on your own server._
7_It is designed to be personal (single-user), fast and handy._ 7_It is designed to be personal (single-user), fast and handy._
8 8
9[![](https://img.shields.io/badge/stable-v0.8.5-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.8.5) 9[![](https://img.shields.io/badge/stable-v0.8.6-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.8.6)
10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli) 10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli)
11• 11•
12[![](https://img.shields.io/badge/latest-v0.9.5-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.9.5) 12[![](https://img.shields.io/badge/latest-v0.9.5-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.9.5)
diff --git a/application/NetscapeBookmarkUtils.php b/application/NetscapeBookmarkUtils.php
index dd7057f8..2aa2da3b 100644
--- a/application/NetscapeBookmarkUtils.php
+++ b/application/NetscapeBookmarkUtils.php
@@ -108,7 +108,7 @@ class NetscapeBookmarkUtils
108 $filesize = $files['filetoupload']['size']; 108 $filesize = $files['filetoupload']['size'];
109 $data = file_get_contents($files['filetoupload']['tmp_name']); 109 $data = file_get_contents($files['filetoupload']['tmp_name']);
110 110
111 if (strpos($data, '<!DOCTYPE NETSCAPE-Bookmark-file-1>') === false) { 111 if (preg_match('/<!DOCTYPE NETSCAPE-Bookmark-file-1>/i', $data) === 0) {
112 return self::importStatus($filename, $filesize); 112 return self::importStatus($filename, $filesize);
113 } 113 }
114 114
@@ -160,7 +160,7 @@ class NetscapeBookmarkUtils
160 } else if ($post['privacy'] == 'public') { 160 } else if ($post['privacy'] == 'public') {
161 // all imported links are public 161 // all imported links are public
162 $private = 0; 162 $private = 0;
163 } 163 }
164 164
165 $newLink = array( 165 $newLink = array(
166 'title' => $bkm['title'], 166 'title' => $bkm['title'],
diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php
index 9e4c9f63..82f4a368 100644
--- a/application/config/ConfigManager.php
+++ b/application/config/ConfigManager.php
@@ -123,7 +123,7 @@ class ConfigManager
123 * Supports nested settings with dot separated keys. 123 * Supports nested settings with dot separated keys.
124 * 124 *
125 * @param string $setting Asked setting, keys separated with dots. 125 * @param string $setting Asked setting, keys separated with dots.
126 * @param string $value Value to set. 126 * @param mixed $value Value to set.
127 * @param bool $write Write the new setting in the config file, default false. 127 * @param bool $write Write the new setting in the config file, default false.
128 * @param bool $isLoggedIn User login state, default false. 128 * @param bool $isLoggedIn User login state, default false.
129 * 129 *
diff --git a/doc/md/Directory-structure.md b/doc/md/Directory-structure.md
index eb50965b..937a076d 100644
--- a/doc/md/Directory-structure.md
+++ b/doc/md/Directory-structure.md
@@ -1,4 +1,4 @@
1TODO: This page is out of date 1## Directory structure
2 2
3Here is the directory structure of Shaarli and the purpose of the different files: 3Here is the directory structure of Shaarli and the purpose of the different files:
4 4
@@ -6,10 +6,16 @@ Here is the directory structure of Shaarli and the purpose of the different file
6 index.php # Main program 6 index.php # Main program
7 application/ # Shaarli classes 7 application/ # Shaarli classes
8 ├── LinkDB.php 8 ├── LinkDB.php
9
10 ...
11
9 └── Utils.php 12 └── Utils.php
10 tests/ # Shaarli unitary & functional tests 13 tests/ # Shaarli unitary & functional tests
11 ├── LinkDBTest.php 14 ├── LinkDBTest.php
12 ├── utils # utilities to ease testing 15
16 ...
17
18 ├── utils # utilities to ease testing
13 │ └── ReferenceLinkDB.php 19 │ └── ReferenceLinkDB.php
14 └── UtilsTest.php 20 └── UtilsTest.php
15 COPYING # Shaarli license 21 COPYING # Shaarli license
@@ -18,17 +24,18 @@ Here is the directory structure of Shaarli and the purpose of the different file
18 ├── blazy.* # picture wall lazy image loading library 24 ├── blazy.* # picture wall lazy image loading library
19 ├── shaarli.css, reset.css # Shaarli stylesheet. 25 ├── shaarli.css, reset.css # Shaarli stylesheet.
20 ├── qr.* # qr code generation library 26 ├── qr.* # qr code generation library
21 └──rain.tpl.class.php # RainTPL templating library 27 └── rain.tpl.class.php # RainTPL templating library
22 tpl/ # RainTPL templates for Shaarli. They are used to build the pages.
23 images/ # Images and icons used in Shaarli 28 images/ # Images and icons used in Shaarli
24 data/ # data storage: bookmark database, configuration, logs, banlist 29 data/ # data storage: bookmark database, configuration, logs, banlist...
25 ├── config.php # Shaarli configuration (login, password, timezone, title) 30 ├── config.json.php # Shaarli configuration (login, password, timezone, title...)
26 ├── datastore.php # Your link database (compressed). 31 ├── datastore.php # Your link database (compressed).
27 ├── ipban.php # IP address ban system data 32 ├── ipban.php # IP address ban system data
28 ├── lastupdatecheck.txt # Update check timestamp file 33 ├── lastupdatecheck.txt # Update check timestamp file
29 └──log.txt # login/IPban log. 34 └── log.txt # login/IPban log.
35 tpl/ # RainTPL templates for Shaarli. They are used to build the pages.
30 cache/ # thumbnails cache 36 cache/ # thumbnails cache
31 # This directory is automatically created. You can erase it anytime you want. 37 # This directory is automatically created. You can erase it anytime you want.
32 tmp/ # Temporary directory for compiled RainTPL templates. 38 tmp/ # Temporary directory for compiled RainTPL templates.
33 # This directory is automatically created. You can erase it anytime you want. 39 # This directory is automatically created. You can erase it anytime you want.
40 vendor/ # Third-party dependencies. This directory is created by Composer
34``` 41```
diff --git a/doc/md/Plugins.md b/doc/md/Plugins.md
index 463dae17..954442e2 100644
--- a/doc/md/Plugins.md
+++ b/doc/md/Plugins.md
@@ -37,7 +37,7 @@ This is important in case plugins are depending on each other. Read plugins READ
37 37
38## File mode 38## File mode
39 39
40Enabled plugin are stored in your `config.php` parameters file, under the `array`: 40Enabled plugin are stored in your `config.json.php` parameters file, under the `array`:
41 41
42```php 42```php
43$GLOBALS['config']['ENABLED_PLUGINS'] 43$GLOBALS['config']['ENABLED_PLUGINS']
@@ -48,7 +48,7 @@ Example:
48 48
49```php 49```php
50$GLOBALS['config']['ENABLED_PLUGINS'] = array( 50$GLOBALS['config']['ENABLED_PLUGINS'] = array(
51 'qrcode', 51 'qrcode',
52 'archiveorg', 52 'archiveorg',
53 'wallabag', 53 'wallabag',
54 'markdown', 54 'markdown',
diff --git a/doc/md/Troubleshooting.md b/doc/md/Troubleshooting.md
index b2d86d40..570f6956 100644
--- a/doc/md/Troubleshooting.md
+++ b/doc/md/Troubleshooting.md
@@ -63,7 +63,7 @@ Related threads:
63 63
64### I forgot my password! 64### I forgot my password!
65 65
66Delete the file `data/config.php` and display the page again. You will be asked for a new login/password. 66Delete the file `data/config.json.php` and display the page again. You will be asked for a new login/password.
67 67
68### I'm locked out - Login bruteforce protection 68### I'm locked out - Login bruteforce protection
69 69
@@ -97,7 +97,7 @@ php56 1
97 97
98```php 98```php
99//list($status,$headers,$data) = getHTTP($url,4); // Short timeout to keep the application responsive. 99//list($status,$headers,$data) = getHTTP($url,4); // Short timeout to keep the application responsive.
100// FIXME: Decode charset according to charset specified in either 1) HTTP response headers or 2) <head> in html 100// FIXME: Decode charset according to charset specified in either 1) HTTP response headers or 2) <head> in html
101//if (strpos($status,'200 OK')) $title=html_extract_title($data); 101//if (strpos($status,'200 OK')) $title=html_extract_title($data);
102``` 102```
103 103
@@ -106,11 +106,11 @@ php56 1
106 106
107### Dates are not properly formatted 107### Dates are not properly formatted
108 108
109Shaarli tries to sniff the language of the browser (using HTTP_ACCEPT_LANGUAGE headers) and choose a date format accordingly. But Shaarli can only use the date formats (and more generaly speaking, the locales) provided by the webserver. So even if you have a browser in French, you may end up with dates in US format (it's the case on sebsauvage.net :-( ) 109Shaarli tries to sniff the language of the browser (using `HTTP_ACCEPT_LANGUAGE` headers)
110 110and choose a date format accordingly. But Shaarli can only use the date formats
111### Problems on CentOS servers 111(and more generally speaking, the locales) provided by the webserver.
112 112So even if you have a browser in French, you may end up with dates in US format
113On **CentOS**/RedHat derivatives, you may need to install the `php-mbstring` package. 113(it's the case on sebsauvage.net :-( )
114 114
115### My session expires! I can't stay logged in 115### My session expires! I can't stay logged in
116 116
@@ -126,7 +126,3 @@ This can be caused by several things:
126## Sessions do not seem to work correctly on your server 126## Sessions do not seem to work correctly on your server
127 127
128Follow the instructions in the error message. Make sure you are accessing shaarli via a direct IP address or a proper hostname. If you have **no dots** in the hostname (e.g. `localhost` or `http://my-webserver/shaarli/`), some browsers will not store cookies at all (this respects the [HTTP cookie specification](http://curl.haxx.se/rfc/cookie_spec.html)). 128Follow the instructions in the error message. Make sure you are accessing shaarli via a direct IP address or a proper hostname. If you have **no dots** in the hostname (e.g. `localhost` or `http://my-webserver/shaarli/`), some browsers will not store cookies at all (this respects the [HTTP cookie specification](http://curl.haxx.se/rfc/cookie_spec.html)).
129
130### pubsubhubbub support
131
132Download [publisher.php](https://pubsubhubbub.googlecode.com/git/publisher_clients/php/library/publisher.php) at the root of your Shaarli installation and set `$GLOBALS['config']['PUBSUBHUB_URL']` in your `config.php`
diff --git a/doc/md/Upgrade-and-migration.md b/doc/md/Upgrade-and-migration.md
index 1dc07339..f666be75 100644
--- a/doc/md/Upgrade-and-migration.md
+++ b/doc/md/Upgrade-and-migration.md
@@ -2,14 +2,14 @@
2 2
3### Note your current version 3### Note your current version
4 4
5If anything goes wrong, it's important for us to know which version you're upgrading from. 5If anything goes wrong, it's important for us to know which version you're upgrading from.
6The current version is present in the `version.php` file. 6The current version is present in the `version.php` file.
7 7
8### Backup your data 8### Backup your data
9 9
10Shaarli stores all user data under the `data` directory: 10Shaarli stores all user data under the `data` directory:
11 11
12- `data/config.php` - main configuration file 12- `data/config.json.php` (or `data/config.php` for older Shaarli versions) - main configuration file
13- `data/datastore.php` - bookmarked links 13- `data/datastore.php` - bookmarked links
14- `data/ipbans.php` - banned IP addresses 14- `data/ipbans.php` - banned IP addresses
15- `data/updates.txt` - contains all automatic update to the configuration and datastore files already run 15- `data/updates.txt` - contains all automatic update to the configuration and datastore files already run
@@ -39,7 +39,7 @@ We recommend that you use the latest release tarball with the `-full` suffix. It
39 39
40Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the content of the `data` directory! 40Once downloaded, extract the archive locally and update your remote installation (e.g. via FTP) -be sure you keep the content of the `data` directory!
41 41
42If you use translations in gettext mode - meaning you manually changed the default mode -, 42If you use translations in gettext mode - meaning you manually changed the default mode -,
43reload your web server. 43reload your web server.
44 44
45After upgrading, access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli configuration) for more details). 45After upgrading, access your fresh Shaarli installation from a web browser; the configuration and data store will then be automatically updated, and new settings added to `data/config.json.php` (see [Shaarli configuration](Shaarli configuration) for more details).
@@ -192,7 +192,10 @@ Total 3317 (delta 2050), reused 3301 (delta 2034)to
192 192
193#### Step 3: configuration 193#### Step 3: configuration
194 194
195After 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) for more details). 195After migrating, access your fresh Shaarli installation from a web browser; the
196configuration will then be automatically updated, and new settings added to
197`data/config.json.php` (see [Shaarli configuration](Shaarli-configuration) for more
198details).
196 199
197## Troubleshooting 200## Troubleshooting
198 201
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po
index 857b13c7..fd47217e 100644
--- a/inc/languages/fr/LC_MESSAGES/shaarli.po
+++ b/inc/languages/fr/LC_MESSAGES/shaarli.po
@@ -1,8 +1,9 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Project-Id-Version: Shaarli\n" 3"Project-Id-Version: Shaarli\n"
4"POT-Creation-Date: 2018-01-24 18:43+0100\n" 4"Report-Msgid-Bugs-To: \n"
5"PO-Revision-Date: 2018-01-24 18:44+0100\n" 5"POT-Creation-Date: 2018-02-24 12:39+0100\n"
6"PO-Revision-Date: 2018-02-24 12:43+0100\n"
6"Last-Translator: \n" 7"Last-Translator: \n"
7"Language-Team: Shaarli\n" 8"Language-Team: Shaarli\n"
8"Language: fr_FR\n" 9"Language: fr_FR\n"
@@ -15,6 +16,8 @@ msgstr ""
15"X-Poedit-SourceCharset: UTF-8\n" 16"X-Poedit-SourceCharset: UTF-8\n"
16"X-Poedit-KeywordsList: t:1,2;t\n" 17"X-Poedit-KeywordsList: t:1,2;t\n"
17"X-Poedit-SearchPath-0: .\n" 18"X-Poedit-SearchPath-0: .\n"
19"X-Poedit-SearchPathExcluded-0: node_modules\n"
20"X-Poedit-SearchPathExcluded-1: vendor\n"
18 21
19#: application/ApplicationUtils.php:153 22#: application/ApplicationUtils.php:153
20#, php-format 23#, php-format
@@ -66,15 +69,15 @@ msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture"
66msgid "Could not parse history file" 69msgid "Could not parse history file"
67msgstr "Format incorrect pour le fichier d'historique" 70msgstr "Format incorrect pour le fichier d'historique"
68 71
69#: application/Languages.php:159 72#: application/Languages.php:161
70msgid "Automatic" 73msgid "Automatic"
71msgstr "Automatique" 74msgstr "Automatique"
72 75
73#: application/Languages.php:160 76#: application/Languages.php:162
74msgid "English" 77msgid "English"
75msgstr "Anglais" 78msgstr "Anglais"
76 79
77#: application/Languages.php:161 80#: application/Languages.php:163
78msgid "French" 81msgid "French"
79msgstr "Français" 82msgstr "Français"
80 83
@@ -249,62 +252,135 @@ msgstr "Vous n'êtes pas autorisé à modifier la configuration."
249msgid "Error accessing" 252msgid "Error accessing"
250msgstr "Une erreur s'est produite en accédant à" 253msgstr "Une erreur s'est produite en accédant à"
251 254
252#: index.php:135 255#: index.php:142
253msgid "Shared links on " 256msgid "Shared links on "
254msgstr "Liens partagés sur " 257msgstr "Liens partagés sur "
255 258
256#: index.php:157 259#: index.php:164
257msgid "Insufficient permissions:" 260msgid "Insufficient permissions:"
258msgstr "Permissions insuffisantes :" 261msgstr "Permissions insuffisantes :"
259 262
260#: index.php:384 263#: index.php:303
261msgid "I said: NO. You are banned for the moment. Go away." 264msgid "I said: NO. You are banned for the moment. Go away."
262msgstr "NON. Vous êtes banni pour le moment. Revenez plus tard." 265msgstr "NON. Vous êtes banni pour le moment. Revenez plus tard."
263 266
264#: index.php:449 267#: index.php:368
265msgid "Wrong login/password." 268msgid "Wrong login/password."
266msgstr "Nom d'utilisateur ou mot de passe incorrects." 269msgstr "Nom d'utilisateur ou mot de passe incorrects."
267 270
268#: index.php:1103 271#: index.php:576 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42
272#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:42
273msgid "Daily"
274msgstr "Quotidien"
275
276#: index.php:681 tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
277#: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44
278#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:71
279#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:95
280#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:71
281#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:95
282msgid "Login"
283msgstr "Connexion"
284
285#: index.php:722 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:39
286#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:39
287msgid "Picture wall"
288msgstr "Mur d'images"
289
290#: index.php:770 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
291#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:36
292#: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
293msgid "Tag cloud"
294msgstr "Nuage de tags"
295
296#: index.php:803 tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
297msgid "Tag list"
298msgstr "Liste des tags"
299
300#: index.php:1028 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31
301#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:31
302msgid "Tools"
303msgstr "Outils"
304
305#: index.php:1037
269msgid "You are not supposed to change a password on an Open Shaarli." 306msgid "You are not supposed to change a password on an Open Shaarli."
270msgstr "" 307msgstr ""
271"Vous n'êtes pas censé modifier le mot de passe d'un Shaarli en mode ouvert." 308"Vous n'êtes pas censé modifier le mot de passe d'un Shaarli en mode ouvert."
272 309
273#: index.php:1108 index.php:1149 index.php:1225 index.php:1255 index.php:1355 310#: index.php:1042 index.php:1084 index.php:1162 index.php:1193 index.php:1293
274msgid "Wrong token." 311msgid "Wrong token."
275msgstr "Jeton invalide." 312msgstr "Jeton invalide."
276 313
277#: index.php:1113 314#: index.php:1047
278msgid "The old password is not correct." 315msgid "The old password is not correct."
279msgstr "L'ancien mot de passe est incorrect." 316msgstr "L'ancien mot de passe est incorrect."
280 317
281#: index.php:1133 318#: index.php:1067
282msgid "Your password has been changed" 319msgid "Your password has been changed"
283msgstr "Votre mot de passe a été modifié" 320msgstr "Votre mot de passe a été modifié"
284 321
285#: index.php:1186 322#: index.php:1072
323#: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
324#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29
325msgid "Change password"
326msgstr "Modification du mot de passe"
327
328#: index.php:1121
286msgid "Configuration was saved." 329msgid "Configuration was saved."
287msgstr "La configuration a été sauvegardé." 330msgstr "La configuration a été sauvegardé."
288 331
289#: index.php:1237 332#: index.php:1145 tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24
333msgid "Configure"
334msgstr "Configurer"
335
336#: index.php:1156 tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
337#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
338msgid "Manage tags"
339msgstr "Gérer les tags"
340
341#: index.php:1174
290#, php-format 342#, php-format
291msgid "The tag was removed from %d link." 343msgid "The tag was removed from %d link."
292msgid_plural "The tag was removed from %d links." 344msgid_plural "The tag was removed from %d links."
293msgstr[0] "Le tag a été supprimé de %d lien." 345msgstr[0] "Le tag a été supprimé de %d lien."
294msgstr[1] "Le tag a été supprimé de %d liens." 346msgstr[1] "Le tag a été supprimé de %d liens."
295 347
296#: index.php:1238 348#: index.php:1175
297#, php-format 349#, php-format
298msgid "The tag was renamed in %d link." 350msgid "The tag was renamed in %d link."
299msgid_plural "The tag was renamed in %d links." 351msgid_plural "The tag was renamed in %d links."
300msgstr[0] "Le tag a été renommé dans %d lien." 352msgstr[0] "Le tag a été renommé dans %d lien."
301msgstr[1] "Le tag a été renommé dans %d liens." 353msgstr[1] "Le tag a été renommé dans %d liens."
302 354
303#: index.php:1454 355#: index.php:1183 tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
356msgid "Shaare a new link"
357msgstr "Partager un nouveau lien"
358
359#: index.php:1353 tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
360#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:170
361msgid "Edit"
362msgstr "Modifier"
363
364#: index.php:1353 index.php:1418
365#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
366#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
367#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:26
368msgid "Shaare"
369msgstr "Shaare"
370
371#: index.php:1387
304msgid "Note: " 372msgid "Note: "
305msgstr "Note : " 373msgstr "Note : "
306 374
307#: index.php:1563 375#: index.php:1427 tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65
376msgid "Export"
377msgstr "Exporter"
378
379#: index.php:1489 tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83
380msgid "Import"
381msgstr "Importer"
382
383#: index.php:1499
308#, php-format 384#, php-format
309msgid "" 385msgid ""
310"The file you are trying to upload is probably bigger than what this " 386"The file you are trying to upload is probably bigger than what this "
@@ -314,7 +390,16 @@ msgstr ""
314"le serveur web peut accepter (%s). Merci de l'envoyer en parties plus " 390"le serveur web peut accepter (%s). Merci de l'envoyer en parties plus "
315"légères." 391"légères."
316 392
317#: index.php:1983 393#: index.php:1538 tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
394#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22
395msgid "Plugin administration"
396msgstr "Administration des extensions"
397
398#: index.php:1703
399msgid "Search: "
400msgstr "Recherche : "
401
402#: index.php:1930
318#, php-format 403#, php-format
319msgid "" 404msgid ""
320"<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " 405"<pre>Sessions do not seem to work correctly on your server.<br>Make sure the "
@@ -333,7 +418,7 @@ msgstr ""
333"cookies. Nous vous recommandons d'accéder à votre serveur depuis son adresse " 418"cookies. Nous vous recommandons d'accéder à votre serveur depuis son adresse "
334"IP ou un <em>Fully Qualified Domain Name</em>.<br>" 419"IP ou un <em>Fully Qualified Domain Name</em>.<br>"
335 420
336#: index.php:1993 421#: index.php:1940
337msgid "Click to try again." 422msgid "Click to try again."
338msgstr "Cliquer ici pour réessayer." 423msgstr "Cliquer ici pour réessayer."
339 424
@@ -358,7 +443,7 @@ msgstr "Voir sur archive.org"
358msgid "For each link, add an Archive.org icon." 443msgid "For each link, add an Archive.org icon."
359msgstr "Pour chaque lien, ajoute une icône pour Archive.org." 444msgstr "Pour chaque lien, ajoute une icône pour Archive.org."
360 445
361#: plugins/demo_plugin/demo_plugin.php:469 446#: plugins/demo_plugin/demo_plugin.php:465
362msgid "" 447msgid ""
363"A demo plugin covering all use cases for template designers and plugin " 448"A demo plugin covering all use cases for template designers and plugin "
364"developers." 449"developers."
@@ -383,19 +468,19 @@ msgstr ""
383msgid "Isso server URL (without 'http://')" 468msgid "Isso server URL (without 'http://')"
384msgstr "URL du serveur Isso (sans 'http://')" 469msgstr "URL du serveur Isso (sans 'http://')"
385 470
386#: plugins/markdown/markdown.php:159 471#: plugins/markdown/markdown.php:158
387msgid "Description will be rendered with" 472msgid "Description will be rendered with"
388msgstr "La description sera générée avec" 473msgstr "La description sera générée avec"
389 474
390#: plugins/markdown/markdown.php:160 475#: plugins/markdown/markdown.php:159
391msgid "Markdown syntax documentation" 476msgid "Markdown syntax documentation"
392msgstr "Documentation sur la syntaxe Markdown" 477msgstr "Documentation sur la syntaxe Markdown"
393 478
394#: plugins/markdown/markdown.php:161 479#: plugins/markdown/markdown.php:160
395msgid "Markdown syntax" 480msgid "Markdown syntax"
396msgstr "la syntaxe Markdown" 481msgstr "la syntaxe Markdown"
397 482
398#: plugins/markdown/markdown.php:340 483#: plugins/markdown/markdown.php:339
399msgid "" 484msgid ""
400"Render shaare description with Markdown syntax.<br><strong>Warning</" 485"Render shaare description with Markdown syntax.<br><strong>Warning</"
401"strong>:\n" 486"strong>:\n"
@@ -507,19 +592,10 @@ msgstr[1] "Rechercher"
507msgid "Sorry, nothing to see here." 592msgid "Sorry, nothing to see here."
508msgstr "Désolé, il y a rien à voir ici." 593msgstr "Désolé, il y a rien à voir ici."
509 594
510#: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
511msgid "Shaare a new link"
512msgstr "Partager un nouveau lien"
513
514#: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 595#: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
515msgid "URL or leave empty to post a note" 596msgid "URL or leave empty to post a note"
516msgstr "URL ou laisser vide pour créer une note" 597msgstr "URL ou laisser vide pour créer une note"
517 598
518#: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
519#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29
520msgid "Change password"
521msgstr "Modification du mot de passe"
522
523#: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 599#: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
524msgid "Current password" 600msgid "Current password"
525msgstr "Mot de passe actuel" 601msgstr "Mot de passe actuel"
@@ -532,11 +608,6 @@ msgstr "Nouveau mot de passe"
532msgid "Change" 608msgid "Change"
533msgstr "Changer" 609msgstr "Changer"
534 610
535#: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
536#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
537msgid "Manage tags"
538msgstr "Gérer les tags"
539
540#: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 611#: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
541#: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 612#: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77
542msgid "Tag" 613msgid "Tag"
@@ -568,10 +639,6 @@ msgstr "Vous pouvez aussi modifier les tags dans la"
568msgid "tag list" 639msgid "tag list"
569msgstr "liste des tags" 640msgstr "liste des tags"
570 641
571#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24
572msgid "Configure"
573msgstr "Configurer"
574
575#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 642#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29
576msgid "title" 643msgid "title"
577msgstr "titre" 644msgstr "titre"
@@ -697,17 +764,6 @@ msgstr "Tous les liens d'un jour sur une page."
697msgid "Next day" 764msgid "Next day"
698msgstr "Jour suivant" 765msgstr "Jour suivant"
699 766
700#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
701#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:170
702msgid "Edit"
703msgstr "Modifier"
704
705#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
706#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
707#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:26
708msgid "Shaare"
709msgstr "Shaare"
710
711#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25 767#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25
712msgid "Created:" 768msgid "Created:"
713msgstr "Création :" 769msgstr "Création :"
@@ -740,7 +796,7 @@ msgstr "Privé"
740 796
741#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74 797#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74
742msgid "Apply Changes" 798msgid "Apply Changes"
743msgstr "Appliquer les changements" 799msgstr "Appliquer"
744 800
745#: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 801#: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
746msgid "Export Database" 802msgid "Export Database"
@@ -766,10 +822,6 @@ msgstr "Préfixer les liens de notes avec l'URL de l'instance de Shaarli"
766msgid "Useful to import bookmarks in a web browser" 822msgid "Useful to import bookmarks in a web browser"
767msgstr "Utile pour importer les marques-pages dans un navigateur" 823msgstr "Utile pour importer les marques-pages dans un navigateur"
768 824
769#: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65
770msgid "Export"
771msgstr "Exporter"
772
773#: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 825#: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
774msgid "Import Database" 826msgid "Import Database"
775msgstr "Importer des données" 827msgstr "Importer des données"
@@ -807,10 +859,6 @@ msgstr "Les doublons s'appuient sur les URL"
807msgid "Add default tags" 859msgid "Add default tags"
808msgstr "Ajouter des tags par défaut" 860msgstr "Ajouter des tags par défaut"
809 861
810#: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83
811msgid "Import"
812msgstr "Importer"
813
814#: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 862#: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22
815msgid "Install Shaarli" 863msgid "Install Shaarli"
816msgstr "Installation de Shaarli" 864msgstr "Installation de Shaarli"
@@ -967,15 +1015,6 @@ msgstr ""
967"Vous avez été banni après trop d'échec d'authentification. Merci de " 1015"Vous avez été banni après trop d'échec d'authentification. Merci de "
968"réessayer plus tard." 1016"réessayer plus tard."
969 1017
970#: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
971#: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44
972#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:71
973#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:95
974#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:71
975#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:95
976msgid "Login"
977msgstr "Connexion"
978
979#: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 1018#: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41
980#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151 1019#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151
981#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151 1020#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151
@@ -1009,27 +1048,6 @@ msgstr "Déplier tout"
1009msgid "Are you sure you want to delete this link?" 1048msgid "Are you sure you want to delete this link?"
1010msgstr "Êtes-vous sûr de vouloir supprimer ce lien ?" 1049msgstr "Êtes-vous sûr de vouloir supprimer ce lien ?"
1011 1050
1012#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31
1013#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:31
1014msgid "Tools"
1015msgstr "Outils"
1016
1017#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
1018#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:36
1019#: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
1020msgid "Tag cloud"
1021msgstr "Nuage de tags"
1022
1023#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:39
1024#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:39
1025msgid "Picture wall"
1026msgstr "Mur d'images"
1027
1028#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42
1029#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:42
1030msgid "Daily"
1031msgstr "Quotidien"
1032
1033#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:61 1051#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:61
1034#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86 1052#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86
1035#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:61 1053#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:61
@@ -1067,11 +1085,6 @@ msgid "You need to enable Javascript to change plugin loading order."
1067msgstr "" 1085msgstr ""
1068"Vous devez activer Javascript pour pouvoir modifier l'ordre des extensions." 1086"Vous devez activer Javascript pour pouvoir modifier l'ordre des extensions."
1069 1087
1070#: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
1071#: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22
1072msgid "Plugin administration"
1073msgstr "Administration des extensions"
1074
1075#: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 1088#: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29
1076msgid "Enabled Plugins" 1089msgid "Enabled Plugins"
1077msgstr "Extensions activées" 1090msgstr "Extensions activées"
@@ -1137,10 +1150,6 @@ msgstr "tags"
1137msgid "List all links with those tags" 1150msgid "List all links with those tags"
1138msgstr "Lister tous les liens avec ces tags" 1151msgstr "Lister tous les liens avec ces tags"
1139 1152
1140#: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
1141msgid "Tag list"
1142msgstr "List des tags"
1143
1144#: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:3 1153#: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:3
1145#: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:3 1154#: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:3
1146msgid "Sort by:" 1155msgid "Sort by:"
@@ -1289,6 +1298,21 @@ msgstr ""
1289"Glisser ce lien dans votre barre de favoris ou cliquer droit dessus et « " 1298"Glisser ce lien dans votre barre de favoris ou cliquer droit dessus et « "
1290"Ajouter aux favoris »" 1299"Ajouter aux favoris »"
1291 1300
1301#, fuzzy
1302#~| msgid "Change"
1303#~ msgid "range"
1304#~ msgstr "Changer"
1305
1306#, fuzzy
1307#~| msgid "Description"
1308#~ msgid "Declaration"
1309#~ msgstr "Description"
1310
1311#, fuzzy
1312#~| msgid "for"
1313#~ msgid "foo"
1314#~ msgstr "pour"
1315
1292#~ msgid "Filter links by visibility" 1316#~ msgid "Filter links by visibility"
1293#~ msgstr "Filtrer les liens par visibilité" 1317#~ msgstr "Filtrer les liens par visibilité"
1294 1318
diff --git a/index.php b/index.php
index 91c3f07e..bd34c0cd 100644
--- a/index.php
+++ b/index.php
@@ -573,6 +573,7 @@ function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager)
573 $pageBuilder->assign($key, $value); 573 $pageBuilder->assign($key, $value);
574 } 574 }
575 575
576 $pageBuilder->assign('pagetitle', t('Daily') .' - '. $conf->get('general.title', 'Shaarli'));
576 $pageBuilder->renderPage('daily'); 577 $pageBuilder->renderPage('daily');
577 exit; 578 exit;
578} 579}
@@ -677,6 +678,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
677 // add default state of the 'remember me' checkbox 678 // add default state of the 'remember me' checkbox
678 $PAGE->assign('remember_user_default', $conf->get('privacy.remember_user_default')); 679 $PAGE->assign('remember_user_default', $conf->get('privacy.remember_user_default'));
679 $PAGE->assign('user_can_login', $loginManager->canLogin($_SERVER)); 680 $PAGE->assign('user_can_login', $loginManager->canLogin($_SERVER));
681 $PAGE->assign('pagetitle', t('Login') .' - '. $conf->get('general.title', 'Shaarli'));
680 $PAGE->renderPage('loginform'); 682 $PAGE->renderPage('loginform');
681 exit; 683 exit;
682 } 684 }
@@ -717,6 +719,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
717 $PAGE->assign($key, $value); 719 $PAGE->assign($key, $value);
718 } 720 }
719 721
722 $PAGE->assign('pagetitle', t('Picture wall') .' - '. $conf->get('general.title', 'Shaarli'));
720 $PAGE->renderPage('picwall'); 723 $PAGE->renderPage('picwall');
721 exit; 724 exit;
722 } 725 }
@@ -752,8 +755,9 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
752 ); 755 );
753 } 756 }
754 757
758 $searchTags = implode(' ', escape($filteringTags));
755 $data = array( 759 $data = array(
756 'search_tags' => implode(' ', escape($filteringTags)), 760 'search_tags' => $searchTags,
757 'tags' => $tagList, 761 'tags' => $tagList,
758 ); 762 );
759 $pluginManager->executeHooks('render_tagcloud', $data, array('loggedin' => isLoggedIn())); 763 $pluginManager->executeHooks('render_tagcloud', $data, array('loggedin' => isLoggedIn()));
@@ -762,6 +766,8 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
762 $PAGE->assign($key, $value); 766 $PAGE->assign($key, $value);
763 } 767 }
764 768
769 $searchTags = ! empty($searchTags) ? $searchTags .' - ' : '';
770 $PAGE->assign('pagetitle', $searchTags. t('Tag cloud') .' - '. $conf->get('general.title', 'Shaarli'));
765 $PAGE->renderPage('tag.cloud'); 771 $PAGE->renderPage('tag.cloud');
766 exit; 772 exit;
767 } 773 }
@@ -782,8 +788,9 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
782 alphabetical_sort($tags, false, true); 788 alphabetical_sort($tags, false, true);
783 } 789 }
784 790
791 $searchTags = implode(' ', escape($filteringTags));
785 $data = [ 792 $data = [
786 'search_tags' => implode(' ', escape($filteringTags)), 793 'search_tags' => $searchTags,
787 'tags' => $tags, 794 'tags' => $tags,
788 ]; 795 ];
789 $pluginManager->executeHooks('render_taglist', $data, ['loggedin' => isLoggedIn()]); 796 $pluginManager->executeHooks('render_taglist', $data, ['loggedin' => isLoggedIn()]);
@@ -792,6 +799,8 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
792 $PAGE->assign($key, $value); 799 $PAGE->assign($key, $value);
793 } 800 }
794 801
802 $searchTags = ! empty($searchTags) ? $searchTags .' - ' : '';
803 $PAGE->assign('pagetitle', $searchTags . t('Tag list') .' - '. $conf->get('general.title', 'Shaarli'));
795 $PAGE->renderPage('tag.list'); 804 $PAGE->renderPage('tag.list');
796 exit; 805 exit;
797 } 806 }
@@ -1016,6 +1025,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1016 $PAGE->assign($key, $value); 1025 $PAGE->assign($key, $value);
1017 } 1026 }
1018 1027
1028 $PAGE->assign('pagetitle', t('Tools') .' - '. $conf->get('general.title', 'Shaarli'));
1019 $PAGE->renderPage('tools'); 1029 $PAGE->renderPage('tools');
1020 exit; 1030 exit;
1021 } 1031 }
@@ -1059,6 +1069,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1059 } 1069 }
1060 else // show the change password form. 1070 else // show the change password form.
1061 { 1071 {
1072 $PAGE->assign('pagetitle', t('Change password') .' - '. $conf->get('general.title', 'Shaarli'));
1062 $PAGE->renderPage('changepassword'); 1073 $PAGE->renderPage('changepassword');
1063 exit; 1074 exit;
1064 } 1075 }
@@ -1131,6 +1142,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1131 $PAGE->assign('api_secret', $conf->get('api.secret')); 1142 $PAGE->assign('api_secret', $conf->get('api.secret'));
1132 $PAGE->assign('languages', Languages::getAvailableLanguages()); 1143 $PAGE->assign('languages', Languages::getAvailableLanguages());
1133 $PAGE->assign('language', $conf->get('translation.language')); 1144 $PAGE->assign('language', $conf->get('translation.language'));
1145 $PAGE->assign('pagetitle', t('Configure') .' - '. $conf->get('general.title', 'Shaarli'));
1134 $PAGE->renderPage('configure'); 1146 $PAGE->renderPage('configure');
1135 exit; 1147 exit;
1136 } 1148 }
@@ -1141,6 +1153,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1141 { 1153 {
1142 if (empty($_POST['fromtag']) || (empty($_POST['totag']) && isset($_POST['renametag']))) { 1154 if (empty($_POST['fromtag']) || (empty($_POST['totag']) && isset($_POST['renametag']))) {
1143 $PAGE->assign('fromtag', ! empty($_GET['fromtag']) ? escape($_GET['fromtag']) : ''); 1155 $PAGE->assign('fromtag', ! empty($_GET['fromtag']) ? escape($_GET['fromtag']) : '');
1156 $PAGE->assign('pagetitle', t('Manage tags') .' - '. $conf->get('general.title', 'Shaarli'));
1144 $PAGE->renderPage('changetag'); 1157 $PAGE->renderPage('changetag');
1145 exit; 1158 exit;
1146 } 1159 }
@@ -1167,6 +1180,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1167 // -------- User wants to add a link without using the bookmarklet: Show form. 1180 // -------- User wants to add a link without using the bookmarklet: Show form.
1168 if ($targetPage == Router::$PAGE_ADDLINK) 1181 if ($targetPage == Router::$PAGE_ADDLINK)
1169 { 1182 {
1183 $PAGE->assign('pagetitle', t('Shaare a new link') .' - '. $conf->get('general.title', 'Shaarli'));
1170 $PAGE->renderPage('addlink'); 1184 $PAGE->renderPage('addlink');
1171 exit; 1185 exit;
1172 } 1186 }
@@ -1336,6 +1350,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1336 $PAGE->assign($key, $value); 1350 $PAGE->assign($key, $value);
1337 } 1351 }
1338 1352
1353 $PAGE->assign('pagetitle', t('Edit') .' '. t('Shaare') .' - '. $conf->get('general.title', 'Shaarli'));
1339 $PAGE->renderPage('editlink'); 1354 $PAGE->renderPage('editlink');
1340 exit; 1355 exit;
1341 } 1356 }
@@ -1400,6 +1415,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1400 $PAGE->assign($key, $value); 1415 $PAGE->assign($key, $value);
1401 } 1416 }
1402 1417
1418 $PAGE->assign('pagetitle', t('Shaare') .' - '. $conf->get('general.title', 'Shaarli'));
1403 $PAGE->renderPage('editlink'); 1419 $PAGE->renderPage('editlink');
1404 exit; 1420 exit;
1405 } 1421 }
@@ -1408,6 +1424,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1408 // Export links as a Netscape Bookmarks file 1424 // Export links as a Netscape Bookmarks file
1409 1425
1410 if (empty($_GET['selection'])) { 1426 if (empty($_GET['selection'])) {
1427 $PAGE->assign('pagetitle', t('Export') .' - '. $conf->get('general.title', 'Shaarli'));
1411 $PAGE->renderPage('export'); 1428 $PAGE->renderPage('export');
1412 exit; 1429 exit;
1413 } 1430 }
@@ -1469,6 +1486,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1469 true 1486 true
1470 ) 1487 )
1471 ); 1488 );
1489 $PAGE->assign('pagetitle', t('Import') .' - '. $conf->get('general.title', 'Shaarli'));
1472 $PAGE->renderPage('import'); 1490 $PAGE->renderPage('import');
1473 exit; 1491 exit;
1474 } 1492 }
@@ -1517,6 +1535,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1517 1535
1518 $PAGE->assign('enabledPlugins', $enabledPlugins); 1536 $PAGE->assign('enabledPlugins', $enabledPlugins);
1519 $PAGE->assign('disabledPlugins', $disabledPlugins); 1537 $PAGE->assign('disabledPlugins', $disabledPlugins);
1538 $PAGE->assign('pagetitle', t('Plugin administration') .' - '. $conf->get('general.title', 'Shaarli'));
1520 $PAGE->renderPage('pluginsadmin'); 1539 $PAGE->renderPage('pluginsadmin');
1521 exit; 1540 exit;
1522 } 1541 }
@@ -1680,6 +1699,16 @@ function buildLinkList($PAGE,$LINKSDB, $conf, $pluginManager)
1680 // If there is only a single link, we change on-the-fly the title of the page. 1699 // If there is only a single link, we change on-the-fly the title of the page.
1681 if (count($linksToDisplay) == 1) { 1700 if (count($linksToDisplay) == 1) {
1682 $data['pagetitle'] = $linksToDisplay[$keys[0]]['title'] .' - '. $conf->get('general.title'); 1701 $data['pagetitle'] = $linksToDisplay[$keys[0]]['title'] .' - '. $conf->get('general.title');
1702 } elseif (! empty($searchterm) || ! empty($searchtags)) {
1703 $data['pagetitle'] = t('Search: ');
1704 $data['pagetitle'] .= ! empty($searchterm) ? $searchterm .' ' : '';
1705 $bracketWrap = function ($tag) {
1706 return '['. $tag .']';
1707 };
1708 $data['pagetitle'] .= ! empty($searchtags)
1709 ? implode(' ', array_map($bracketWrap, preg_split('/\s+/', $searchtags))).' '
1710 : '';
1711 $data['pagetitle'] .= '- '. $conf->get('general.title');
1683 } 1712 }
1684 1713
1685 $pluginManager->executeHooks('render_linklist', $data, array('loggedin' => isLoggedIn())); 1714 $pluginManager->executeHooks('render_linklist', $data, array('loggedin' => isLoggedIn()));
diff --git a/tests/NetscapeBookmarkUtils/BookmarkImportTest.php b/tests/NetscapeBookmarkUtils/BookmarkImportTest.php
index 4961aa2c..f0a958cb 100644
--- a/tests/NetscapeBookmarkUtils/BookmarkImportTest.php
+++ b/tests/NetscapeBookmarkUtils/BookmarkImportTest.php
@@ -127,6 +127,21 @@ class BookmarkImportTest extends PHPUnit_Framework_TestCase
127 } 127 }
128 128
129 /** 129 /**
130 * Attempt to import bookmarks from a file with a lowercase Doctype
131 */
132 public function testImportLowecaseDoctype()
133 {
134 $files = file2array('lowercase_doctype.htm');
135 $this->assertStringMatchesFormat(
136 'File lowercase_doctype.htm (386 bytes) was successfully processed in %d seconds:'
137 .' 2 links imported, 0 links overwritten, 0 links skipped.',
138 NetscapeBookmarkUtils::import(null, $files, $this->linkDb, $this->conf, $this->history)
139 );
140 $this->assertEquals(2, count($this->linkDb));
141 }
142
143
144 /**
130 * Ensure IE dumps are supported 145 * Ensure IE dumps are supported
131 */ 146 */
132 public function testImportInternetExplorerEncoding() 147 public function testImportInternetExplorerEncoding()
diff --git a/tests/NetscapeBookmarkUtils/input/lowercase_doctype.htm b/tests/NetscapeBookmarkUtils/input/lowercase_doctype.htm
new file mode 100644
index 00000000..8911ad19
--- /dev/null
+++ b/tests/NetscapeBookmarkUtils/input/lowercase_doctype.htm
@@ -0,0 +1,8 @@
1<!DOCTYPE netscape-bookmark-file-1>
2<TITLE>Bookmarks</TITLE>
3<H1>Bookmarks</H1>
4<DL><p>
5<DT><A HREF="https://private.tld" ADD_DATE="10/Oct/2000:13:55:36 +0300" PRIVATE="1" TAGS="private secret">Secret stuff</A>
6<DD>Super-secret stuff you're not supposed to know about
7<DT><A HREF="http://public.tld" ADD_DATE="1456433748" PRIVATE="0" TAGS="public hello world">Public stuff</A>
8</DL><p>