From 8905191413f20e7fba1d635a06cf5ec2ff86cbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 7 Jan 2014 20:21:43 +0100 Subject: [PATCH 01/19] [add] import from poche, thank you @tsadiq #388 --- inc/poche/Poche.class.php | 49 +++++++++++++++++++++++++++++++++++- inc/poche/config.inc.php.new | 2 ++ themes/default/config.twig | 5 ++-- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 76a73be2b..e033ad749 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -847,6 +847,52 @@ class Poche Tools::redirect(); } + /** + * import from Poche exported file + * @param string $targetFile the file used for importing + * @return boolean + */ + private function importFromPoche($targetFile) + { + $str_data = file_get_contents($targetFile); + $data = json_decode($str_data,true); + Tools::logm('starting import from Poche'); + + + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } + + $count = 0; + foreach ($data as $value) { + + $url = new Url(base64_encode($value['url'])); + $favorite = ($value['is_fav'] == -1); + $archive = ($value['is_read'] == -1); + + # we can add the url + if (!is_null($url) && $url->isCorrect()) { + + $this->action('add', $url, 0, TRUE); + + $count++; + if ($favorite) { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_fav', $url, $last_id, TRUE); + } + if ($archive) { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_archive', $url, $last_id, TRUE); + } + } + + } + $this->messages->add('s', _('import from Poche completed. ' . $count . ' new links.')); + Tools::logm('import from Poche completed'); + Tools::redirect(); + } + /** * import datas into your poche * @param string $from name of the service to import : pocket, instapaper or readability @@ -858,7 +904,8 @@ class Poche $providers = array( 'pocket' => 'importFromPocket', 'readability' => 'importFromReadability', - 'instapaper' => 'importFromInstapaper' + 'instapaper' => 'importFromInstapaper', + 'poche' => 'importFromPoche', ); if (! isset($providers[$from])) { diff --git a/inc/poche/config.inc.php.new b/inc/poche/config.inc.php.new index c60d4f800..1c93be07e 100755 --- a/inc/poche/config.inc.php.new +++ b/inc/poche/config.inc.php.new @@ -55,7 +55,9 @@ define ('PAGINATION', '10'); define ('POCKET_FILE', '/ril_export.html'); define ('READABILITY_FILE', '/readability'); define ('INSTAPAPER_FILE', '/instapaper-export.html'); +define ('POCHE_FILE', '/poche-export'); define ('IMPORT_POCKET_FILE', ROOT . POCKET_FILE); define ('IMPORT_READABILITY_FILE', ROOT . READABILITY_FILE); define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE); +define ('IMPORT_POCHE_FILE', ROOT . POCHE_FILE); \ No newline at end of file diff --git a/themes/default/config.twig b/themes/default/config.twig index 10df726e0..ef615d39b 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -105,8 +105,9 @@

{% trans "More info in the official docs:" %} inthepoche.com

{% trans "Export your poche data" %}

From 9ffce01e0cc05e62336ccb69d4a6d2d2fc7b565d Mon Sep 17 00:00:00 2001 From: Pierre Date: Tue, 7 Jan 2014 22:55:48 +0100 Subject: [PATCH 02/19] Correction de bugs dans le schema mysql - users/name type de int a varchar - valeurs par defaut ajoutees pour entries/is_read et is_fav --- install/mysql.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/mysql.sql b/install/mysql.sql index d16381d83..de5640e4a 100644 --- a/install/mysql.sql +++ b/install/mysql.sql @@ -9,8 +9,8 @@ CREATE TABLE IF NOT EXISTS `entries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `url` varchar(255) NOT NULL, - `is_read` tinyint(1) NOT NULL, - `is_fav` tinyint(1) NOT NULL, + `is_read` tinyint(1) NOT NULL DEFAULT 0, + `is_fav` tinyint(1) NOT NULL DEFAULT 0, `content` blob NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`) @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, - `name` int(255) NOT NULL, + `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; From 5ed8050791ef562ff4351ede3a077ab1e8b0d916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Wed, 8 Jan 2014 11:28:46 +0100 Subject: [PATCH 03/19] [add] courgette theme --- themes/courgette/README.md | 3 + themes/courgette/_bookmarklet.twig | 3 + themes/courgette/_footer.twig | 4 + themes/courgette/_head.twig | 11 + themes/courgette/_menu.twig | 9 + themes/courgette/_messages.twig | 1 + themes/courgette/_top.twig | 9 + themes/courgette/config.twig | 82 +++ themes/courgette/css/.DS_Store | Bin 0 -> 6148 bytes themes/courgette/css/font.css | 10 + themes/courgette/css/knacss.css | 0 themes/courgette/css/messages.css | 75 +++ themes/courgette/css/print.css | 48 ++ themes/courgette/css/style-default.css | 59 ++ themes/courgette/css/style.css | 620 ++++++++++++++++++ themes/courgette/error.twig | 6 + themes/courgette/export.twig | 1 + themes/courgette/font/fontello.eot | Bin 0 -> 6428 bytes themes/courgette/font/fontello.svg | 23 + themes/courgette/font/fontello.ttf | Bin 0 -> 6260 bytes themes/courgette/font/fontello.woff | Bin 0 -> 3988 bytes themes/courgette/home.twig | 49 ++ .../apple-touch-icon-144x144-precomposed.png | Bin 0 -> 7349 bytes .../apple-touch-icon-72x72-precomposed.png | Bin 0 -> 6168 bytes themes/courgette/img/apple-touch-icon.png | Bin 0 -> 5803 bytes themes/courgette/img/bg-select.png | Bin 0 -> 1193 bytes themes/courgette/img/default/backtotop.png | Bin 0 -> 326 bytes themes/courgette/img/default/bad-display.png | Bin 0 -> 343 bytes .../courgette/img/default/checkmark-off.png | Bin 0 -> 277 bytes themes/courgette/img/default/checkmark-on.png | Bin 0 -> 235 bytes themes/courgette/img/default/clock.png | Bin 0 -> 332 bytes themes/courgette/img/default/down.png | Bin 0 -> 216 bytes themes/courgette/img/default/envelop.png | Bin 0 -> 285 bytes themes/courgette/img/default/flattr.png | Bin 0 -> 270 bytes themes/courgette/img/default/left.png | Bin 0 -> 196 bytes themes/courgette/img/default/link.png | Bin 0 -> 341 bytes themes/courgette/img/default/remove.png | Bin 0 -> 252 bytes themes/courgette/img/default/shaarli.png | Bin 0 -> 729 bytes themes/courgette/img/default/star-off.png | Bin 0 -> 314 bytes themes/courgette/img/default/star-on.png | Bin 0 -> 281 bytes themes/courgette/img/default/top.png | Bin 0 -> 212 bytes themes/courgette/img/default/twitter.png | Bin 0 -> 297 bytes themes/courgette/img/favicon.ico | Bin 0 -> 346 bytes themes/courgette/img/logo.png | Bin 0 -> 1350 bytes themes/courgette/img/messages/close.png | Bin 0 -> 662 bytes themes/courgette/img/messages/cross.png | Bin 0 -> 655 bytes themes/courgette/img/messages/help.png | Bin 0 -> 786 bytes themes/courgette/img/messages/tick.png | Bin 0 -> 537 bytes themes/courgette/img/messages/warning.png | Bin 0 -> 666 bytes themes/courgette/install.twig | 28 + themes/courgette/js/init.js | 6 + themes/courgette/js/restoreScroll.js | 25 + themes/courgette/layout.twig | 32 + themes/courgette/login.twig | 32 + themes/courgette/screenshot.jpg | Bin 0 -> 80611 bytes themes/courgette/view.twig | 45 ++ 56 files changed, 1181 insertions(+) create mode 100755 themes/courgette/README.md create mode 100755 themes/courgette/_bookmarklet.twig create mode 100755 themes/courgette/_footer.twig create mode 100755 themes/courgette/_head.twig create mode 100755 themes/courgette/_menu.twig create mode 100755 themes/courgette/_messages.twig create mode 100755 themes/courgette/_top.twig create mode 100755 themes/courgette/config.twig create mode 100644 themes/courgette/css/.DS_Store create mode 100755 themes/courgette/css/font.css create mode 100755 themes/courgette/css/knacss.css create mode 100755 themes/courgette/css/messages.css create mode 100755 themes/courgette/css/print.css create mode 100755 themes/courgette/css/style-default.css create mode 100755 themes/courgette/css/style.css create mode 100755 themes/courgette/error.twig create mode 100755 themes/courgette/export.twig create mode 100644 themes/courgette/font/fontello.eot create mode 100644 themes/courgette/font/fontello.svg create mode 100644 themes/courgette/font/fontello.ttf create mode 100644 themes/courgette/font/fontello.woff create mode 100755 themes/courgette/home.twig create mode 100755 themes/courgette/img/apple-touch-icon-144x144-precomposed.png create mode 100755 themes/courgette/img/apple-touch-icon-72x72-precomposed.png create mode 100755 themes/courgette/img/apple-touch-icon.png create mode 100644 themes/courgette/img/bg-select.png create mode 100755 themes/courgette/img/default/backtotop.png create mode 100755 themes/courgette/img/default/bad-display.png create mode 100755 themes/courgette/img/default/checkmark-off.png create mode 100755 themes/courgette/img/default/checkmark-on.png create mode 100755 themes/courgette/img/default/clock.png create mode 100755 themes/courgette/img/default/down.png create mode 100755 themes/courgette/img/default/envelop.png create mode 100755 themes/courgette/img/default/flattr.png create mode 100755 themes/courgette/img/default/left.png create mode 100755 themes/courgette/img/default/link.png create mode 100755 themes/courgette/img/default/remove.png create mode 100755 themes/courgette/img/default/shaarli.png create mode 100755 themes/courgette/img/default/star-off.png create mode 100755 themes/courgette/img/default/star-on.png create mode 100755 themes/courgette/img/default/top.png create mode 100755 themes/courgette/img/default/twitter.png create mode 100755 themes/courgette/img/favicon.ico create mode 100755 themes/courgette/img/logo.png create mode 100755 themes/courgette/img/messages/close.png create mode 100755 themes/courgette/img/messages/cross.png create mode 100755 themes/courgette/img/messages/help.png create mode 100755 themes/courgette/img/messages/tick.png create mode 100755 themes/courgette/img/messages/warning.png create mode 100755 themes/courgette/install.twig create mode 100755 themes/courgette/js/init.js create mode 100755 themes/courgette/js/restoreScroll.js create mode 100755 themes/courgette/layout.twig create mode 100755 themes/courgette/login.twig create mode 100755 themes/courgette/screenshot.jpg create mode 100755 themes/courgette/view.twig diff --git a/themes/courgette/README.md b/themes/courgette/README.md new file mode 100755 index 000000000..e13d39001 --- /dev/null +++ b/themes/courgette/README.md @@ -0,0 +1,3 @@ +# Courgette Theme + +theme created by Thomas LEBEAU alias Courgette http://thomaslebeau.fr/ \ No newline at end of file diff --git a/themes/courgette/_bookmarklet.twig b/themes/courgette/_bookmarklet.twig new file mode 100755 index 000000000..2f3b2d165 --- /dev/null +++ b/themes/courgette/_bookmarklet.twig @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/themes/courgette/_footer.twig b/themes/courgette/_footer.twig new file mode 100755 index 000000000..2b8958549 --- /dev/null +++ b/themes/courgette/_footer.twig @@ -0,0 +1,4 @@ +
+

{% trans "powered by" %} poche

+ {% if constant('DEBUG_POCHE') == 1 %}

{% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}

{% endif %} +
\ No newline at end of file diff --git a/themes/courgette/_head.twig b/themes/courgette/_head.twig new file mode 100755 index 000000000..57b40f41c --- /dev/null +++ b/themes/courgette/_head.twig @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/themes/courgette/_menu.twig b/themes/courgette/_menu.twig new file mode 100755 index 000000000..85487f739 --- /dev/null +++ b/themes/courgette/_menu.twig @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/themes/courgette/_messages.twig b/themes/courgette/_messages.twig new file mode 100755 index 000000000..679aa0981 --- /dev/null +++ b/themes/courgette/_messages.twig @@ -0,0 +1 @@ + {{ messages | raw }} \ No newline at end of file diff --git a/themes/courgette/_top.twig b/themes/courgette/_top.twig new file mode 100755 index 000000000..a2a4b28dc --- /dev/null +++ b/themes/courgette/_top.twig @@ -0,0 +1,9 @@ +
+

+ {% if view == 'home' %}{% block logo %}logo poche{% endblock %} + {% elseif view == 'fav' %}{{ block('logo') }} Favoris + {% elseif view == 'archive' %}{{ block('logo') }} Archive + {% else %}{{ block('logo') }} + {% endif %} +

+
\ No newline at end of file diff --git a/themes/courgette/config.twig b/themes/courgette/config.twig new file mode 100755 index 000000000..d822a457c --- /dev/null +++ b/themes/courgette/config.twig @@ -0,0 +1,82 @@ +{% extends "layout.twig" %} + +{% block title %}{% trans "config" %}{% endblock %} +{% block menu %} +{% include '_menu.twig' %} +{% endblock %} +{% block content %} +
+

{% trans "Poching a link" %}

+

{% trans "You can poche a link by several methods:" %} (?)

+ + +

{% trans "Updating poche" %}

+ + +

{% trans "Change your theme" %}

+
+
+
+ + +
+
+ +
+
+ + +
+ +

{% trans "Change your password" %}

+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+ +

{% trans "Import" %}

+

{% trans "Please execute the import script locally, it can take a very long time." %}

+

{% trans "More infos in the official doc:" %} inthepoche.com

+ + +

{% trans "Export your poche datas" %}

+

{% trans "Click here" %} {% trans "to export your poche datas." %}

+
+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/css/.DS_Store b/themes/courgette/css/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c788a0934fae1aadac11b0d83ed8d337826f64e9 GIT binary patch literal 6148 zcmeHKO-sW-5Pe&Fh@qxK zjd#@e_WYWv-Y|BBM?TR7Hmt{FEXiD9%DXpuXDm}Rj1=^jY^~^#o`ijabGFy`Bxj8K z#8@(}{VWn!cqJnZM|feZ<|T~u9ufOzcW1LZ!7E3Y8rx>ioL;}Yl?St`eKY)NWn7$_ zE8q&a0>4&(d$w41s_3;V;0m|`TLt9%5LpCs!&WhUI#{J608xG;ld&yl3CW3uxnZlw z2rXzTQB#8*F@mPkAB~qAwu+jLV26)jBL_R7gfu$)kBN?uD|+n;xB|Nh9O>;y_W$es z=l|U#zjFm#fq$hy7#0u3giEr$wX- header, +#links, +#sort, +body > footer, +.top_link, +div.tools, +header div, +.messages, +.entrie + .results { + display: none !important; +} + +article { + border: none !important; +} + +/* Add URL after links */ +.vieworiginal a:after { + content: " (" attr(href) ")"; +} + +/* Add explanation after abbr */ +abbr[title]:after { + content: " (" attr(title) ")"; +} + +/* Change border on current pager item */ +.pagination span.current { + border-style: dashed; +} diff --git a/themes/courgette/css/style-default.css b/themes/courgette/css/style-default.css new file mode 100755 index 000000000..3377a75be --- /dev/null +++ b/themes/courgette/css/style-default.css @@ -0,0 +1,59 @@ +a.back span { + background-image: url('../img/default/left.png'); +} + +a.top span { + background-image: url('../img/default/top.png'); +} + +a.fav span, +a.fav-off span:hover { + background-image: url('../img/default/star-on.png'); +} + +a.fav span:hover, +a.fav-off span { + background-image: url('../img/default/star-off.png'); +} + +a.archive span, +a.archive-off span:hover { + background-image: url('../img/default/checkmark-on.png'); +} + +a.archive span:hover, +a.archive-off span { + background-image: url('../img/default/checkmark-off.png'); +} + +a.twitter span { + background-image: url('../img/default/twitter.png'); +} + +a.shaarli span { + background-image: url('../img/default/shaarli.png'); +} + +a.flattr span { + background-image: url('../img/default/flattr.png'); +} + +a.email span { + background-image: url('../img/default/envelop.png'); +} + +a.delete span { + background-image: url('../img/default/remove.png'); +} + +a.link span { + background-image: url('../img/default/link.png'); +} + +a.bad-display span { + background-image: url('../img/default/bad-display.png'); +} + +a.reading-time span { + background-image: url('../img/default/clock.png'); +} diff --git a/themes/courgette/css/style.css b/themes/courgette/css/style.css new file mode 100755 index 000000000..2ba16b717 --- /dev/null +++ b/themes/courgette/css/style.css @@ -0,0 +1,620 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +body { + margin: 10px; + font-family: 'Roboto',Verdana,Geneva,sans-serif; + font-size: 16px; + color: #000; +} + +h1 span { + color #FFF; + background: #000; + display: inline-block; + padding: 0.2em 1em 0.2em 1.2em; + font-size: 0.7em; + position: relative; + top: -1em; + left: -1em; +} + +h1 a { + color: #FFF; + text-decoration: none; +} + +#menu { + font-family: 'fontello'; + position:fixed; + z-index: 11; + top: 0.7em; + right: 0.5em; + border:0; + font-size: 2em; + background: #000; + color:#FFF; + height: 58px; + width: 58px; + line-height:58px; + border-radius:120px; +} + +#menu:hover, #menu:focus { + background: #FFF; + color:#000; + cursor: pointer; +} + +#menu span { + position: absolute; + top: -99999px; +} + +#menuContainer ul, #article_toolbar ul { + position:fixed; + top: 0; + left:0; + width: 100%; + padding: 0; + margin: 0; + text-align:center; + height:80px; +} + +/*Inspired by http://tympanus.net/Tutorials/AnimatedBorderMenus/index.html */ + +#menuContainer, #article_toolbar { + position: fixed; + top: 0; + left:0; + width: 100%; + height: 0; + overflow: hidden; + border-width:0; + border-style: solid; + border-color:#000; + background-color: transparent; + -webkit-transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; + -moz-transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; + transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; +} + +#article_toolbar ul { + padding: 1.7em; +} + +#menuContainer.open, #article_toolbar.open { + border-width:80px; + height: 100%; + background: rgba(0,0,0,0.5); + -webkit-transition: border-width 0.3s, background-color 0.3s; + -moz-transition: border-width 0.3s, background-color 0.3s; + transition: border-width 0.3s, background-color 0.3s; + z-index: 1; +} + +#links li, #article_toolbar li { + list-style: none; + display: inline-block; +} + +#links li a, #article_toolbar a { + color:#FFF; + display: block; + position:relative; + top: -200px; + -webkit-transition: top 0.3s ease; + -moz-transition: top 0.3s ease; + transition: top 0.3s ease; + padding:1.85em 1em; +} + +#links li a { + text-decoration:none; + text-transform:uppercase; +} + +#links li a:hover, #links li a:focus { + background: #FFF; + color:#000; +} + +#menuContainer.open li a, #article_toolbar.open a { + top: 0; + -webkit-transition: top 0.3s ease; + -moz-transition: top 0.3s ease; + transition: top 0.3s ease; + -webkit-transition-delay:0.25ms; + -moz-transition-delay:0.25ms; + transition-delay:0.25ms; +} + +#menuContainer.open li:nth-child(2) a { + -webkit-transition-delay:0.50ms; + -moz-transition-delay:0.50ms; + transition-delay:0.50ms; +} + +#menuContainer.open li:nth-child(3) a { + -webkit-transition-delay:1ms; + -moz-transition-delay:1ms; + transition-delay:1ms; +} + +#menuContainer.open li:nth-child(4) a { + -webkit-transition-delay:1.25ms; + -moz-transition-delay:1.25ms; + transition-delay:1.25ms; +} + +#menuContainer.open li:nth-child(5) a { + -webkit-transition-delay:1.55ms; + -moz-transition-delay:1.55ms; + transition-delay:1.55ms; +} + +#menu:before { + content: "\e801"; + display: block; + text-indent: 0; +} + +body > header { + position: fixed; + top: 0; + left: 1em; + z-index: 10; +} + +#main { + padding:6em; +} + +/* ========================================================================== + entrie + ========================================================================== */ + +.entrie, #article { + width: 45em; + margin: auto; + position:relative; + padding: 0 0 1em 0; + margin-bottom: 1.5em; +} + +#article a { + text-decoration: underline; + color:#000; +} + +#article a:hover, #article a:focus { + text-decoration: none; +} + +.entrie:after { + content:""; + position: absolute; + width: 100%; + height: 4px; + background: #000; + bottom:0; + left: -1em; +} + +.entrie p { + padding:0 0 0 1.5em; +} + +.entrie:before { + content:''; + position: absolute; + top: 0; + left: -1em; + width: 4px; + height: 100%; + background: #000; +} + +.entrie h2:after { + content:""; + display: block; + width: 0; + height: 0; + border-color: #000; + border-width:7px; + border-color:transparent transparent transparent #000; + border-style: solid; + position: absolute; + top: 0.8em; + right: -0.58em; +} + +.entrie h2 { + margin:0; + display: inline-block; + position: relative; + max-width: 78%; +} + +.entrie h2 a { + color:#000; + text-decoration:none; + display: block; + background: #000; + padding: 0.4em 1em; + color:#FFF; + margin-left: -0.5em; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.entrie h2 a:hover, .entrie h2 a:focus { + padding:0.4em 1em 0.4em 2em; +} + +ul { + padding:0; + margin:0; +} + +ul li { + list-style: none; +} + +.tools { + display: inline-block; + margin-left: 1em; + vertical-align: top; + padding-top: 1em; +} + +.tools a span { + position:absolute; + top: -99999px; +} + +.tools li { + display: inline-block; +} + +.tools a { + display: block; + color:#FFF; + background: #000; + text-decoration:none; + height: 1.5em; + width: 1.5em; + text-align: center; + line-height:1.5em; + border-radius: 90px; +} + +.tools a:hover, .tools a:focus { + background: #FFF; + color:#000; +} + +.tools a:before { display: block; font-family: 'fontello'; } + + +.fav-off:before, .fav:before { content: '\e805'; } /* '' */ +.archive-off:before, .archive:before { content: '\e804'; } /* '' */ +.tools .archive, .tools .fav { + background: #FFF; + color:#000; +} +.link:before { content: '\e800'; } /* '' */ +.delete:before { content: '\e803'; } /* '' */ +.reading-time:before { content: '\e802'; } /* '' */ + +#article_toolbar a:before { + display: block; + font-family: 'fontello'; +} + +#article_toolbar a { + display: block; + color:#000; + background: #FFF; + text-decoration:none; + height: 1.5em; + width: 1.5em; + text-align: center; + line-height:1.5em; + border-radius: 90px; + padding: 0; +} + +#article_toolbar a:hover, #article_toolbar a:focus { + background: #000; + color:#FFF; +} + +#article_toolbar span { + position: absolute; + top: -99999px; +} + +.email:before { content: '\e80a'; } /* '' */ +.icon-check:before { content: '\e804'; } /* '' */ +.back:before { content: '\e806'; } /* '' */ +.bad-display:before { content: '\e808'; } /* '' */ +.twitter:before { content: '\e807'; } /* '' */ + +#article_toolbar .flattrli { + display: none; +} + +#article_toolbar li { + margin: 0 0 0 1em; +} + + +footer { + position: fixed; + bottom: 0; + width: 100%; + padding: 0 2%; + left: 0; + text-align:right; + font-size: 0.8em; + font-style: italic; + background: rgba(255,255,255,0.5); +} + +footer a { + color:#000; +} + +footer a:hover,footer a:focus { + text-decoration: none; +} + +footer p:first-child { + float:left; +} + +#loginForm fieldset { + border:5px solid #000; + padding: 1.5em; +} + +fieldset { + border:0; + padding: 0; +} + +#loginForm { + max-width: 25em; + margin: auto; +} + +#loginForm .row { + margin-bottom: 0.5em; +} + +form h2 { + margin-top: 0; +} + +form label { + width: 40%; + display: inline-block; +} + +form input[type="text"], form input[type="password"], form input[type='url'], form select { + border:1px solid #000; + padding:0.5em 1em; +} + +@media screen and (-webkit-min-device-pixel-ratio:0){ + form select{ + -webkit-appearance: none; + background: url(../img/bg-select.png) no-repeat right center; + padding-right: 2.2em; + border-radius: 0; + } +} + +form button, form input[type="submit"] { + background: #000; + color:#FFF; + border:0; + font-size:1em; + padding:0.5em 1em; + margin-top: 1em; + cursor: pointer; +} + +form button:hover, form button:focus, form input[type="submit"]:hover, form input[type="submit"]:focus { + background: #FFF; + color: #000; +} + +/* ========================================================================== + Config + ========================================================================== */ + +#config { + max-width: 60%; + margin: auto; +} + +#config a { + background: #000; + text-decoration: none; + color:#FFF; + padding: 0.2em 1em; +} + +#config .special { + background: none; + padding:0; + color: #000; +} + +#config a:hover, #config a:focus { + background: #FFF; + color:#000; +} + +#config li { + margin-bottom: 1em; +} + +#plainurl { + font-size: 1em; +} + +#config label { + width: 20%; +} + +.results { + max-width: 62.5%; + font-style:italic; + margin: 1em auto 2.5em; +} + +#sort { + max-width: 62.5%; + margin: 0 auto -2.5em; + text-align: right; + border-bottom:1px dotted #000; +} + +#sort li { + display: inline-block; + vertical-align: top; + position: relative; + top: -0.1em; + margin-left: 1em; +} + +#sort li img { + display: none; +} + +#sort a { + display: inline-block; + font-family: 'fontello'; + color:#000; + text-decoration: none; +} + +#sort a:hover, #sort a:focus { + text-decoration: underline; +} + +#sort a:before { + display: block; +} + +#sort li a:first-child:before { + content: '\e809'; +} + +#sort li a:first-child + a:before { + content: '\e80b'; +} + +@media screen and (max-width: 860px) { + .entrie, #article { + width: 30em; + } +} + +@media screen and (max-width: 650px) { + #menuContainer ul, #article_toolbar ul { + width: 120px; + height: 100%; + } + + body > header { + position: static; + } + + #main { + padding: 0 0.5em 6em; + } + + #menu { + display: none; + } + + #main:before { + content:none; + } + + #menuContainer, #article_toolbar, #menuContainer ul, #article_toolbar ul { + position: static; + width: 100%; + height: auto; + } + + #links li a, #article_toolbar a { + position: static; + color: #000; + } + + #links li a { + padding: 1em; + min-width: 120px; + text-align: left; + } + + #article_toolbar li { + margin-bottom: 1em; + margin-left: 0.5em; + } + +} + +@media screen and (max-width: 500px) { + .entrie, #article { + width: 17em; + } + .entrie h2 { + width: 100%; + max-width: none; + } + .entrie h2 a:hover, .entrie h2 a:focus { + padding-left: 1em; + background: #FFF; + color: #000; + } + .entrie h2:after { + content:none; + } + + .messages { + width: 100%!important; + } + + #sort { + margin: 3em auto 0; + max-width: none; + text-align: center; + } + #config { + margin: 7em auto 0; + max-width: none; + } + #config label { width: 100%; } + .results { + max-width: none; + margin-bottom: 1em; + } + + footer p:first-child { + float: none; + } + footer { + position:static; + } +} diff --git a/themes/courgette/error.twig b/themes/courgette/error.twig new file mode 100755 index 000000000..c829d12bb --- /dev/null +++ b/themes/courgette/error.twig @@ -0,0 +1,6 @@ +{% extends "layout.twig" %} +{% block title %}{% trans "plop" %}{% endblock %} +{% block content %} + {{ msg|raw }} +

Don't forget the documentation.

+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/export.twig b/themes/courgette/export.twig new file mode 100755 index 000000000..4adb95402 --- /dev/null +++ b/themes/courgette/export.twig @@ -0,0 +1 @@ +{{ export }} \ No newline at end of file diff --git a/themes/courgette/font/fontello.eot b/themes/courgette/font/fontello.eot new file mode 100644 index 0000000000000000000000000000000000000000..3c5603dddc339ce3c1f8f2ecdce315355e92e2d0 GIT binary patch literal 6428 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 + + +Copyright (C) 2013 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/courgette/font/fontello.ttf b/themes/courgette/font/fontello.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1967dfaa4d4e77af82022dec1e54c455dfa91fa1 GIT binary patch literal 6260 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 G6ZtO*gF_ks literal 0 HcmV?d00001 diff --git a/themes/courgette/font/fontello.woff b/themes/courgette/font/fontello.woff new file mode 100644 index 0000000000000000000000000000000000000000..c62afa548f59fcdfae9fb850d545a9013e04c5cf GIT binary patch literal 3988 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 literal 0 HcmV?d00001 diff --git a/themes/courgette/home.twig b/themes/courgette/home.twig new file mode 100755 index 000000000..1367ebe83 --- /dev/null +++ b/themes/courgette/home.twig @@ -0,0 +1,49 @@ +{% extends "layout.twig" %} +{% block title %} +{% if view == 'fav' %} +{% trans "favoris" %} +{% elseif view == 'archive' %} +{% trans "archive" %} +{% else %} +{% trans "unread" %} +{% endif %} +{% endblock %} +{% block menu %} +{% include '_menu.twig' %} +{% endblock %} +{% block precontent %} + {% if entries|length > 1 %} +
    +
  • {% trans {% trans "by date" %} {% trans
  • +
  • {% trans {% trans "by title" %} {% trans
  • +
+ {% endif %} +{% endblock %} +{% block content %} + {% if entries is empty %} +

{% trans "No link available here!" %}

+ {% else %} + {% block pager %} + {% if nb_results > 1 %} +
+
{{ nb_results }} {% trans "results" %}
+ {{ page_links | raw }} +
+ {% endif %} + {% endblock %} + {% for entry in entries %} +
+

{{ entry.title|raw }}

+ +

{{ entry.content|striptags|slice(0, 300) }}...

+
+ {% endfor %} + {% endif %} + {{ block('pager') }} +{% endblock %} \ No newline at end of file diff --git a/themes/courgette/img/apple-touch-icon-144x144-precomposed.png b/themes/courgette/img/apple-touch-icon-144x144-precomposed.png new file mode 100755 index 0000000000000000000000000000000000000000..557b479ce45e19e9513bf125c325a081aa4a368c GIT binary patch literal 7349 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 literal 0 HcmV?d00001 diff --git a/themes/courgette/img/apple-touch-icon-72x72-precomposed.png b/themes/courgette/img/apple-touch-icon-72x72-precomposed.png new file mode 100755 index 0000000000000000000000000000000000000000..e167d3a41c6577ba6ae753e917b4a2c66b3448ff GIT binary patch literal 6168 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 literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/backtotop.png b/themes/courgette/img/default/backtotop.png new file mode 100755 index 0000000000000000000000000000000000000000..051238ef9216989a3baac6426a16592c8e177bd8 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=hEVF!Fl3IEF;Hznywo@Q?wI%Ve$$ zMyrJ^FBr6%`4+Hvamrp`%t$wQY_X}1v8Yh*#EcJ#v#w7R$Rj%S18`Xs-TqDc7Y-5(Tfn~CMC z88Qc&>!L&%?pS&;n07R(nN{X+JG>RjWRN*Bm+iXL0W)vmbDPtQ#27LjdK6|}{_e}1 z&^KRp6H~{>Ep`gJc?`PD5ZIlru>Ec4=}6wxKJf#llTRNsb=UjO&#?N~`8yx98T6k7 WIVhejFZ~Y;9|liXKbLh*2~7ZPAbNuU literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/bad-display.png b/themes/courgette/img/default/bad-display.png new file mode 100755 index 0000000000000000000000000000000000000000..6866799fca568f803c733fada7bfca0db352f197 GIT binary patch literal 343 zcmV-d0jU0oP)5QU`!Di9UW0V<#aQ2`xD2Xuf6=s;9J2ciQi;C-3hOoWk1ZsyJHUGDwtU4mA# z5s9`Hf}jE4$#Zdcbp<}inEw(OXn!Gu0(DzRg{v?XGG|X-6yV@N82xDr^06SAC&1}s zi5{9`bMeS%x^tqsFN{e=0-SHcU4U>gAxJLZ&X~ARS9K2oA`u(VCkc2W1lLC34CIaw z3M5Y0bAh22StMa6%&;$!A?=081Q0xX3#k^gLA=oqXUHUCCIJb1)cy({>7`BX#QP*V zghbc~6CoC!0#BMSx4TwMk{g2sY7UU3=nH`Q}-@DIo+2YSD`+;8? zQ*)my0KS=^)V-b~aQG>3t$L}-se%X}1oHe)RZ&oAB3E5{`_hMbP0wCcxB%%cqW(369sx~Tq4bhlmlSW||c&wEM&96}ron$9Vg|PW% zOJ>vEb3hXkkMB)MI3|eAJ4?bIjKV_#{~RQD6Me*P^J|bgNMBcW$=FHE)l|jRhQ?Em ba?45FHN00000NkvXXu0mjfOIUFO literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/checkmark-on.png b/themes/courgette/img/default/checkmark-on.png new file mode 100755 index 0000000000000000000000000000000000000000..cd3abb2c0b501af84a0f7db7f46bee779bc1af27 GIT binary patch literal 235 zcmV6*fU zMhVQyX>4hb0POOG9vOrHrX8AX0=_+nMzQH^MZJXx5}I`a1Llxjvj@<1>O3&r$y-6| loP+?oPS2apj{b=uU;!3~Dp8U??J@uW002ovPDHLkV1nu1T@wHR literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/clock.png b/themes/courgette/img/default/clock.png new file mode 100755 index 0000000000000000000000000000000000000000..6164e92bb3317f7edb53205effc8c02c545a1639 GIT binary patch literal 332 zcmV-S0ki&zP) zff2z#5Jjl~9Yh7FKvZB3~!qB~StXWp>RviQLT2LCk_&qvaAKTlK&imA^4p*1}w0{^YAflC2Mq$f-yHT&a& ev9MCBi2erKkVg)PL66k{0000t?28-`_sH?9-dar{uqIe_~&>_0>EEk>Z)9_6iqeGViTc z^Aiy5VB9F(AoP6klgQ`2?G1bfZ)zVYUGRwQr{u+U1~Gvk>j}PdLW+!!uI|vE{?M93 zQKaDFRbLtA4`*6C{{5;j&puSusi>m0O-3U|@y_N%E6M9q|4yz5?L5mlagv(gyMmSN QK&LWzy85}Sb4q9e0C^WwoB#j- literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/envelop.png b/themes/courgette/img/default/envelop.png new file mode 100755 index 0000000000000000000000000000000000000000..6be1c88643a86d3eb0cde7c06b9668e4575c3424 GIT binary patch literal 285 zcmV+&0pk9NP)ICWrx`9rh|B-`~3Lyb6`DuFBd-qF9 z7<7!VV}Af3mewsn34l+_=B&*H?6tp2+XmoD^|7?@0l-qJCoQFy2kL9TlipI4J9i!A zAM~i=NSaGGgD~+RU96dOcJ(R%lg70(3wHyl3{s&brJvGP860x%cj6_pYwqUjugo z<2rKrA$N^JTU#|@-F^YmmKPY7NHBq&e*yDQ5|C*X2s*?!%Pm~3KUs=NaDvS;o0NK( z^8sd_1lqv(YQN+Ku`V$42UxEv5*$%%!tX2*?_I8#An=td_=_OQFX} zL2P1fRGvVj!grn^J7*gk0em0x(2$)7hQP6bF`kluvRYe0N U_;uwnWB>pF07*qoM6N<$g3{@2mjD0& literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/left.png b/themes/courgette/img/default/left.png new file mode 100755 index 0000000000000000000000000000000000000000..a0a53631ed0e93c4c63a6316abde8c66aa7366fb GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`-JULvAr}70DGLM)f>z9DoX*JP z(EQz**ZfF2rx|m?EZznwd8Um_nrsT$`#7$=U^pV*VcL*#R-rjDPQlxF6C-6 z96tW_$O=eej1`*Ay&|na@q(!MhNa9C*0ws>Ft&?3DBka%Q@3Ghc?3h^XQnEj#3e2P yFFp%3;Gr^aQKjnemVeoYIb6Mw<&;$S~ic^{Z literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/shaarli.png b/themes/courgette/img/default/shaarli.png new file mode 100755 index 0000000000000000000000000000000000000000..1eb30f60b99a02ba18054447ff4bc969c0ee7455 GIT binary patch literal 729 zcmV;~0w(>5P)5r00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGt^#A}F^#Lb9$`k+q02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0006=Nkl^^$ z4%o_Tr_*`sc?U>(g2ob-d5zDd!C)X#AP@k(UQhQ@sl?j&f${+*BNmGdM8>i_D5qdB z2!%ocn$0H6W-}srz208|4u=CwCKJeJvtYN|0jV40U2z!gb1s)7r`>J`^Z6Xc<1zI6 zeJ~o0pj0ZMTrNYkT7`DI4a?<{e527QtLQx|;$}1&kyY4u?dJ z#bVHEwLm75!KKY!uScyRd5iK4tDr$XM8d~VC`3*UhXZgQV6)lKyI!vYZX#u6@cDc! zL7T`7__r90x9xN~uwJi0qtVa?GO(#LupsGln(ou-l=_#;<>$@B00KOYgTa6tPNx%{ z>|0R};c%E1>w?8%L3*iFs$qNrw(*LsYo$`5z9W$c8{iR3k7IS$7K;UHwHoaL+fHoZ z-EUi|R;$IROrrBAe9rOy1_N9%8-Ak<6TCp%H5+}B-Ofz0gCQZd)~)flmSB}wWUiKCCU>>F8OpOjmXmz=?OT@F&KwLeHQY}zW9<)A#_*ek9WwgWlte9UXsIhY+_$l$gY zux2pqkZpMOkk{cKtAZWF5&4BVY!ety_^ApklepAtAg;sUb#(HIYQ=zBrcL4=hAe9& zQxvNdgpxU8jLn!G7XF*p5YE#0>4Qn*JEj1hH|hxu$|h*DVCecPY_LE;!=7;& z+g*kUE_NZG6im7t@31LsYwz-Bxunp&Vb=qOfDp!23{wgwI5J&X!0vF1aXRCIEA8t9 d@49PbF-*=;omiMR`vcIg44$rjF6*2UngFHXU;F?7 literal 0 HcmV?d00001 diff --git a/themes/courgette/img/default/top.png b/themes/courgette/img/default/top.png new file mode 100755 index 0000000000000000000000000000000000000000..954a8c0acbb221eb20d04d6184d3317c9604adf6 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vproLLoEE?PJYPi;K0-R-Yh}L z?7)+r11dQV@t4$c*ZUobpMJvm{%@_)>6edB)&AL*Wqe)zlJci}j4F4EGgNsM1rM|@ zE#&yfAbU^aW?|Gj?hdveA3Pq;Wz>Cn$btDHg9O{I3%rRuZ&Mg*G862Mh&(gP{N%fCG>)9Do9t0>A+hkifmBZJN=N4Vqlq{@%ZTzil@7 zb7UR!3-P8xE}Vs@&C3xWxEEFlv5Ddr%X5^27NxL6fCYp)AwsoLMEs;!g8&t7mH>Gt z9PK_lYiq!%+#TGt83&A)*2EC3BGn1agsXF~)n<_(rovu;OQh1Ur+{(qTA+H}LxiU^ zj>CVz)2utXF!p~H@YUM_>`P%I%o9!?mcuKV5w^galZXHp+a8VW+b25#s?vY>55i=s va$d(=g$@d9kD0+oa-S)d`_V#@^zGmcO~NR#w(5?(00000NkvXXu0mjfYC3)} literal 0 HcmV?d00001 diff --git a/themes/courgette/img/favicon.ico b/themes/courgette/img/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..0e9ff77953b60d8938db0f2afbdb447c98a73331 GIT binary patch literal 346 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 A&j0`b literal 0 HcmV?d00001 diff --git a/themes/courgette/install.twig b/themes/courgette/install.twig new file mode 100755 index 000000000..6e85e5cbb --- /dev/null +++ b/themes/courgette/install.twig @@ -0,0 +1,28 @@ +{% extends "layout.twig" %} +{% block title %}{% trans "installation" %}{% endblock %} +{% block content %} +
+
+

{% trans "install your poche" %}

+

+ {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %} +

+

+ + +

+

+ + +

+

+ + +

+

+ +

+
+ +
+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/js/init.js b/themes/courgette/js/init.js new file mode 100755 index 000000000..dca839068 --- /dev/null +++ b/themes/courgette/js/init.js @@ -0,0 +1,6 @@ +$.fn.ready(function () { + $('#menu').on('click', function(){ + $('body').toggleClass('menuOpen'); + $('#menuContainer, #article_toolbar').toggleClass('open'); + }); +}) \ No newline at end of file diff --git a/themes/courgette/js/restoreScroll.js b/themes/courgette/js/restoreScroll.js new file mode 100755 index 000000000..331c9e196 --- /dev/null +++ b/themes/courgette/js/restoreScroll.js @@ -0,0 +1,25 @@ +function supportsLocalStorage() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } +} + +function savePercent(id, percent) { + if (!supportsLocalStorage()) { return false; } + localStorage["poche.article." + id + ".percent"] = percent; + return true; +} + +function retrievePercent(id) { + if (!supportsLocalStorage()) { return false; } + + var bheight = $(document).height(); + var percent = localStorage["poche.article." + id + ".percent"]; + var scroll = bheight * percent; + + $('html,body').animate({scrollTop: scroll}, 'fast'); + + return true; +} \ No newline at end of file diff --git a/themes/courgette/layout.twig b/themes/courgette/layout.twig new file mode 100755 index 000000000..9a420ac42 --- /dev/null +++ b/themes/courgette/layout.twig @@ -0,0 +1,32 @@ + + + + + + + + + + + {% block title %}{% endblock %} - poche +{% include '_head.twig' %} +{% include '_bookmarklet.twig' %} + + + {% include '_top.twig' %} +
+ + {% block menu %}{% endblock %} + {% block precontent %}{% endblock %} + {% block messages %} + {% include '_messages.twig' %} + {% endblock %} +
+ {% block content %}{% endblock %} +
+
+{% include '_footer.twig' %} + + \ No newline at end of file diff --git a/themes/courgette/login.twig b/themes/courgette/login.twig new file mode 100755 index 000000000..3e17982f3 --- /dev/null +++ b/themes/courgette/login.twig @@ -0,0 +1,32 @@ +{% extends "layout.twig" %} + +{% block title %}{% trans "login to your poche" %}{% endblock %} +{% block content %} +
+
+

{% trans "login to your poche" %}

+ {% if constant('MODE_DEMO') == 1 %}

{% trans "you are in demo mode, some features may be disabled." %}

{% endif %} +
+ + +
+ +
+ + +
+
+ +
+ + {% trans "(Do not check on public computers)" %} +
+
+
+ +
+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/screenshot.jpg b/themes/courgette/screenshot.jpg new file mode 100755 index 0000000000000000000000000000000000000000..44ee4b630095b8aee5ab7f891c1040b806d42321 GIT binary patch literal 80611 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 QOSE*lqJMyQ691O|5AUlqxc~qF literal 0 HcmV?d00001 diff --git a/themes/courgette/view.twig b/themes/courgette/view.twig new file mode 100755 index 000000000..e8d324424 --- /dev/null +++ b/themes/courgette/view.twig @@ -0,0 +1,45 @@ +{% extends "layout.twig" %} +{% block title %}{{ entry.title|raw }} ({{ entry.url | e | getDomain }}){% endblock %} +{% block content %} +
+ +
+
+
+

{{ entry.title|raw }}

+
+
+ {{ content | raw }} +
+
+ + +{% endblock %} \ No newline at end of file From 1cecaa7926cee3d8e1ce4c6e369c52ad98d49e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 10 Jan 2014 16:33:10 +0100 Subject: [PATCH 04/19] [add] display token and user id --- themes/default/config.twig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/default/config.twig b/themes/default/config.twig index ef615d39b..e22ea1da4 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -38,6 +38,8 @@
  • {% trans "Favorites feed" %}
  • {% trans "Archive feed" %}
  • +

    {% trans "Your token:" %} {{token}}

    +

    {% trans "Your user id:" %} {{user_id}}

    {% trans "You can regenerate your token: generate!." %}

    {% endif %} From 9ba98a0abe4ac5efed5213812f0f26821417b47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 10 Jan 2014 16:33:10 +0100 Subject: [PATCH 05/19] [add] display token and user id --- themes/default/config.twig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/default/config.twig b/themes/default/config.twig index ef615d39b..e22ea1da4 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -38,6 +38,8 @@
  • {% trans "Favorites feed" %}
  • {% trans "Archive feed" %}
  • +

    {% trans "Your token:" %} {{token}}

    +

    {% trans "Your user id:" %} {{user_id}}

    {% trans "You can regenerate your token: generate!." %}

    {% endif %} From f878daeb8bc9245a294677e4ac141f8bd37c2b4f Mon Sep 17 00:00:00 2001 From: adev Date: Sun, 12 Jan 2014 17:08:52 +0100 Subject: [PATCH 06/19] add basic auth in file_get_contents for content extraction when user use basic auth --- inc/poche/Poche.class.php | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index e033ad749..004cca8e5 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -325,6 +325,22 @@ class Poche ); } + protected function getPageContent(Url $url) + { + $options = array('http' => array('user_agent' => 'poche')); + if (isset($_SERVER['AUTH_TYPE']) && "basic" === strtolower($_SERVER['AUTH_TYPE'])) { + $options['http']['header'] = sprintf( + "Authorization: Basic %s", + base64_encode( + sprintf('%s:%s', $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) + ) + ); + } + $context = stream_context_create($options); + $json = file_get_contents(Tools::getPocheUrl() . '/inc/3rdparty/makefulltextfeed.php?url='.urlencode($url->getUrl()).'&max=5&links=preserve&exc=&format=json&submit=Create+Feed', false, $context); + return json_decode($json, true); + } + /** * Call action (mark as fav, archive, delete, etc.) */ @@ -333,10 +349,7 @@ class Poche switch ($action) { case 'add': - $options = array('http' => array('user_agent' => 'poche')); - $context = stream_context_create($options); - $json = file_get_contents(Tools::getPocheUrl() . '/inc/3rdparty/makefulltextfeed.php?url='.urlencode($url->getUrl()).'&max=5&links=preserve&exc=&format=json&submit=Create+Feed', false, $context); - $content = json_decode($json, true); + $content = $this->getPageContent($url); $title = $content['rss']['channel']['item']['title']; $body = $content['rss']['channel']['item']['description']; From d1d3498b62d00a88968378a3244ffd479a852b2e Mon Sep 17 00:00:00 2001 From: Lonnytunes Date: Mon, 20 Jan 2014 00:44:51 +0100 Subject: [PATCH 07/19] [fix] Stops multiplication, in database, of a same user config item (error of variable name). --- inc/poche/Database.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php index 04731821f..48ec5abf8 100644 --- a/inc/poche/Database.class.php +++ b/inc/poche/Database.class.php @@ -193,7 +193,7 @@ class Database { public function updateUserConfig($userId, $key, $value) { $config = $this->getConfigUser($userId); - if (!isset ($user_config[$key])) { + if (! isset($config[$key])) { $sql = "INSERT INTO users_config (value, user_id, name) VALUES (?, ?, ?)"; } else { From c95b78a8ceb918f033f3dd6c26aa7da4a8a527dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 28 Jan 2014 10:36:04 +0100 Subject: [PATCH 08/19] poche is dead, welcome wallabag --- CONTRIBUTING.md | 8 ++--- CREDITS.md | 6 ++-- INSTALL.md | 3 -- README.md | 29 +++-------------- TODO.md | 9 ------ inc/poche/Database.class.php | 6 ++-- inc/poche/Poche.class.php | 9 +++--- inc/poche/Tools.class.php | 6 ++-- inc/poche/Url.class.php | 6 ++-- inc/poche/User.class.php | 6 ++-- inc/poche/config.inc.php.new | 6 ++-- inc/poche/global.inc.php | 6 ++-- inc/poche/pochePictures.php | 6 ++-- index.php | 8 ++--- themes/README.md | 31 ------------------- ...est.php => wallabag_compatibility_test.php | 6 ++-- 16 files changed, 45 insertions(+), 106 deletions(-) delete mode 100644 INSTALL.md delete mode 100644 TODO.md delete mode 100644 themes/README.md rename poche_compatibility_test.php => wallabag_compatibility_test.php (98%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c89411f38..7fdca652b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,11 @@ # How contributing ## You found a bug -Please [open a new issue](https://github.com/inthepoche/poche/issues/new). +Please [open a new issue](https://github.com/wallabag/demo.wallabag.org/issues/new). To fix the bug quickly, we need some infos: -* your poche version (in ./inc/poche/myconfig.inc.php) -* the link you want to poche and which causes problem +* your demo.wallabag.org version (in ./index.php) +* the link you want to save and which causes problem ## You want to fix a bug or to add a feature -Please fork poche and work with **the dev branch** only. Do not work on master branch. +Please fork wallabag and work with **the dev branch** only. **Do not work on master branch**. \ No newline at end of file diff --git a/CREDITS.md b/CREDITS.md index 6046a6aac..391f53c53 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,4 +1,4 @@ -poche is based on : +wallabag is based on : * PHP Readability https://bitbucket.org/fivefilters/php-readability * Full Text RSS http://code.fivefilters.org/full-text-rss/src * Encoding https://github.com/neitanod/forceutf8 @@ -10,6 +10,6 @@ poche is based on : * Flash messages https://github.com/plasticbrain/PHP-Flash-Messages * Pagination https://github.com/daveismyname/pagination -poche is developed by Nicolas Lœuillet under the Do What the Fuck You Want to Public License +wallabag is developed by Nicolas Lœuillet under the Do What the Fuck You Want to Public License -Contributors : https://github.com/inthepoche/poche/graphs/contributors \ No newline at end of file +Contributors : https://github.com/wallabag/wallabag/graphs/contributors \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index df245ff0f..000000000 --- a/INSTALL.md +++ /dev/null @@ -1,3 +0,0 @@ -# Installing poche - -Read the full documentation here: http://doc.inthepoche.com/doku.php?id=users:begin:install diff --git a/README.md b/README.md index d1ed79eee..30fc9657a 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,10 @@ -# what is poche ? -Abandon Pocket, Instapaper and other Readability service : adopt poche. It is the same, but it is free (like in freedom) and open source. +# what is wallabag ? +wallabag is a self hostable application allowing you to not miss any content anymore. Click, save, read it when you can. It extracts content so that you can read it when you have time. -## Some features -* adding, deleting, archiving and setting as favorite a link -* import from pocket / readability / instapaper -* share links by email and on twitter -* a design adapted to tablets and smartphones -* extensions for Chrome and Firefox -* Android application -* multi languages: french, english, spanish, german. -* multi users (very soon!) -* update notification in configuration screen -* many storage modes (sqlite, mysql, postgresql) -* many templates: [have a look here](https://github.com/inthepoche/poche/tree/master/themes). -* ... - -To test poche, a demo website is online : [demo.inthepoche.com](http://demo.inthepoche.com) (login poche, password poche). - -To use poche hosting, [you can create an account here](http://app.inthepoche.com/). - -## Installation -Read the [INSTALL.md file](https://github.com/inthepoche/poche/blob/master/INSTALL.md). +To test wallabag, a demo website is online : [demo.wallabag.org](http://demo.wallabag.org) (login poche, password poche). ## License -Copyright © 2010-2013 Nicolas Lœuillet +Copyright © 2010-2013 Nicolas Lœuillet This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, -as published by Sam Hocevar. See the COPYING file for more details. +as published by Sam Hocevar. See the COPYING file for more details. \ No newline at end of file diff --git a/TODO.md b/TODO.md deleted file mode 100644 index fdba2a514..000000000 --- a/TODO.md +++ /dev/null @@ -1,9 +0,0 @@ -# TODO - -* pouvoir annuler la suppression -* conventions codage ? phing ? vérifier error_log qui trainent -* phpDocumentor -* minifier css -* barre fixe d'admin sur la page d'un billet ? -* revoir export (export vers pocket &cie ? ) -* raccourcis clavier \ No newline at end of file diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php index 48ec5abf8..3b0f455e4 100644 --- a/inc/poche/Database.class.php +++ b/inc/poche/Database.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index e033ad749..4a5a954bf 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -29,7 +29,8 @@ class Poche 'dark' => array('requires' => array('default')), 'dmagenta' => array('requires' => array('default')), 'solarized' => array('requires' => array('default')), - 'solarized-dark' => array('requires' => array('default')) + 'solarized-dark' => array('requires' => array('default')), + 'courgette' => array('requires' => array()) ); public function __construct() diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index 639165825..248a44d76 100644 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/Url.class.php b/inc/poche/Url.class.php index 8b3468c3a..aba236fa5 100644 --- a/inc/poche/Url.class.php +++ b/inc/poche/Url.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/User.class.php b/inc/poche/User.class.php index 6dac78397..cc8bec650 100644 --- a/inc/poche/User.class.php +++ b/inc/poche/User.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/config.inc.php.new b/inc/poche/config.inc.php.new index 1c93be07e..39cb2f2f2 100755 --- a/inc/poche/config.inc.php.new +++ b/inc/poche/config.inc.php.new @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/global.inc.php b/inc/poche/global.inc.php index 846699d3f..e2beade1f 100644 --- a/inc/poche/global.inc.php +++ b/inc/poche/global.inc.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/pochePictures.php b/inc/poche/pochePictures.php index b0cfb9df8..e4b0b1608 100644 --- a/inc/poche/pochePictures.php +++ b/inc/poche/pochePictures.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/index.php b/index.php index 4e86fe11d..9113f1932 100644 --- a/index.php +++ b/index.php @@ -1,14 +1,14 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ -define ('POCHE', '1.3.0'); +define ('POCHE', '1.4.0'); require_once 'inc/poche/global.inc.php'; session_start(); diff --git a/themes/README.md b/themes/README.md deleted file mode 100644 index b5d925b46..000000000 --- a/themes/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# poche-themes - -themes created by poche users - -## list of themes - -* dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/dark/screenshot.jpg)) -* dmagenta ([preview](https://raw.github.com/inthepoche/poche/master/themes/dmagenta/screenshot.jpg)) -* solarized ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized/screenshot.jpg)) -* solarized-dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized-dark/screenshot.jpg)) - -## installation - -In your poche folder: - -``` -git submodule init -git submodule update -``` - -Then, in your config screen, select your favorite theme. - -That's all ! - -## create a theme - -Just have a look to this short documentation : http://doc.inthepoche.com/doku.php?id=designers:creating_theme - -## send a theme - -Send your theme by email at support@inthepoche.com. diff --git a/poche_compatibility_test.php b/wallabag_compatibility_test.php similarity index 98% rename from poche_compatibility_test.php rename to wallabag_compatibility_test.php index 42faaa2ce..49c4e3b8f 100644 --- a/poche_compatibility_test.php +++ b/wallabag_compatibility_test.php @@ -1,5 +1,5 @@ =')); $pcre_ok = extension_loaded('pcre'); @@ -313,13 +313,13 @@ div.chunk {

    Bottom Line: Yes, you can!

    Your webhost has its act together!

    -

    You can download the latest version of from inthepoche.com.

    +

    You can download the latest version of from wallabag.org.

    Note: Passing this test does not guarantee that will run on your webhost — it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.

    Bottom Line: Yes, you can!

    For most feeds, it'll run with no problems. There are certain languages that you might have a hard time with though.

    -

    You can download the latest version of from inthepoche.com.

    +

    You can download the latest version of from wallabag.org.

    Note: Passing this test does not guarantee that will run on your webhost — it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.

    Bottom Line: We're sorry…

    From b8fdd2d85f76bb2dbf50bacec86e3be806bb2bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 28 Jan 2014 10:37:37 +0100 Subject: [PATCH 09/19] [fix] change twitter account for sharing entry --- themes/courgette/view.twig | 4 ++-- themes/default/view.twig | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/themes/courgette/view.twig b/themes/courgette/view.twig index e8d324424..7e81ef91b 100755 --- a/themes/courgette/view.twig +++ b/themes/courgette/view.twig @@ -8,8 +8,8 @@
  • {% trans "toggle mark as read" %}
  • {% trans "toggle favorite" %}
  • {% trans "delete" %}
  • - {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} - {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} + {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} + {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • {% trans "flattr" %}
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}
  • {% trans "this article appears wrong?" %}
  • diff --git a/themes/default/view.twig b/themes/default/view.twig index e4a2fe744..e7d33ff61 100644 --- a/themes/default/view.twig +++ b/themes/default/view.twig @@ -9,8 +9,8 @@
  • {% trans "Toggle mark as read" %}
  • {% trans "Toggle favorite" %}
  • {% trans "Delete" %}
  • - {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} - {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} + {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} + {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • {% trans "flattr" %}
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}
  • {% trans "Does this article appear wrong?" %}
  • From 3e0e7e1208e8d3ee3b23df42ea119d7c50b0db5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 28 Jan 2014 10:49:57 +0100 Subject: [PATCH 10/19] [fix] inthepoche.com => wallabag.org --- inc/poche/Poche.class.php | 4 ++-- themes/courgette/_bookmarklet.twig | 2 +- themes/courgette/_footer.twig | 2 +- themes/courgette/config.twig | 10 +++++----- themes/courgette/error.twig | 2 +- themes/courgette/install.twig | 2 +- themes/courgette/view.twig | 2 +- themes/default/_bookmarklet.twig | 2 +- themes/default/_footer.twig | 2 +- themes/default/config.twig | 12 ++++++------ themes/default/error.twig | 2 +- themes/default/install.twig | 2 +- themes/default/view.twig | 2 +- 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 4a5a954bf..d47332186 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -111,7 +111,7 @@ class Poche $passTheme = TRUE; # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet if (! self::$canRenderTemplates) { - $this->notInstalledMessage[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at the documentation.'; + $this->notInstalledMessage[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at the documentation.'; $passTheme = FALSE; } @@ -956,7 +956,7 @@ class Poche if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 86400 ))) { $version = file_get_contents($cache_file); } else { - $version = file_get_contents('http://static.inthepoche.com/versions/' . $which); + $version = file_get_contents('http://static.wallabag.org/versions/' . $which); file_put_contents($cache_file, $version, LOCK_EX); } return $version; diff --git a/themes/courgette/_bookmarklet.twig b/themes/courgette/_bookmarklet.twig index 2f3b2d165..2e3071ad6 100755 --- a/themes/courgette/_bookmarklet.twig +++ b/themes/courgette/_bookmarklet.twig @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/themes/courgette/_footer.twig b/themes/courgette/_footer.twig index 2b8958549..cce31f35f 100755 --- a/themes/courgette/_footer.twig +++ b/themes/courgette/_footer.twig @@ -1,4 +1,4 @@
    -

    {% trans "powered by" %} poche

    +

    {% trans "powered by" %} wallabag

    {% if constant('DEBUG_POCHE') == 1 %}

    {% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}

    {% endif %}
    \ No newline at end of file diff --git a/themes/courgette/config.twig b/themes/courgette/config.twig index d822a457c..fdeb464ba 100755 --- a/themes/courgette/config.twig +++ b/themes/courgette/config.twig @@ -7,7 +7,7 @@ {% block content %}

    {% trans "Poching a link" %}

    -

    {% trans "You can poche a link by several methods:" %} (?)

    +

    {% trans "You can poche a link by several methods:" %} (?)

    {% trans "Updating poche" %}

    {% trans "Change your theme" %}

    @@ -69,7 +69,7 @@

    {% trans "Import" %}

    {% trans "Please execute the import script locally, it can take a very long time." %}

    -

    {% trans "More infos in the official doc:" %} inthepoche.com

    +

    {% trans "More infos in the official doc:" %} wallabag.org

    diff --git a/themes/default/_bookmarklet.twig b/themes/default/_bookmarklet.twig index 2f3b2d165..2e3071ad6 100644 --- a/themes/default/_bookmarklet.twig +++ b/themes/default/_bookmarklet.twig @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/themes/default/_footer.twig b/themes/default/_footer.twig index 06148a57c..f837ae38e 100644 --- a/themes/default/_footer.twig +++ b/themes/default/_footer.twig @@ -1,4 +1,4 @@
    -

    {% trans "powered by" %} poche

    +

    {% trans "powered by" %} wallabag

    {% if constant('DEBUG_POCHE') == 1 %}

    {% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE')}}. {% trans "storage:" %} {{constant('STORAGE')}}

    {% endif %}
    \ No newline at end of file diff --git a/themes/default/config.twig b/themes/default/config.twig index e22ea1da4..ada238d64 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -6,10 +6,10 @@ {% endblock %} {% block content %}

    {% trans "Poching links" %}

    -

    {% trans "There are several ways to poche a link:" %} (?)

    +

    {% trans "There are several ways to poche a link:" %} (?)

    {% trans "Updating poche" %}

    {% trans "Feeds" %}

    @@ -104,7 +104,7 @@

    {% trans "Import" %}

    {% trans "Please execute the import script locally as it can take a very long time." %}

    -

    {% trans "More info in the official docs:" %} inthepoche.com

    +

    {% trans "More info in the official docs:" %} wallabag.org

    From 21f50d5a08381d0d2f27d36b0d97a4f518eeefcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 28 Jan 2014 11:08:21 +0100 Subject: [PATCH 11/19] changed some poche with wallabag --- themes/courgette/install.twig | 4 ++-- themes/courgette/layout.twig | 2 +- themes/courgette/login.twig | 4 ++-- themes/default/install.twig | 4 ++-- themes/default/layout.twig | 2 +- themes/default/login.twig | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/themes/courgette/install.twig b/themes/courgette/install.twig index 9b4a769c3..20d15f183 100755 --- a/themes/courgette/install.twig +++ b/themes/courgette/install.twig @@ -3,9 +3,9 @@ {% block content %}
    -

    {% trans "install your poche" %}

    +

    {% trans "install your wallabag" %}

    - {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %} + {% trans "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on wallabag website." %}

    diff --git a/themes/courgette/layout.twig b/themes/courgette/layout.twig index 9a420ac42..57c2cc982 100755 --- a/themes/courgette/layout.twig +++ b/themes/courgette/layout.twig @@ -10,7 +10,7 @@ - {% block title %}{% endblock %} - poche + {% block title %}{% endblock %} - wallabag {% include '_head.twig' %} {% include '_bookmarklet.twig' %} diff --git a/themes/courgette/login.twig b/themes/courgette/login.twig index 3e17982f3..1fec0fc94 100755 --- a/themes/courgette/login.twig +++ b/themes/courgette/login.twig @@ -1,10 +1,10 @@ {% extends "layout.twig" %} -{% block title %}{% trans "login to your poche" %}{% endblock %} +{% block title %}{% trans "login to your wallabag" %}{% endblock %} {% block content %}

    -

    {% trans "login to your poche" %}

    +

    {% trans "login to your wallabag" %}

    {% if constant('MODE_DEMO') == 1 %}

    {% trans "you are in demo mode, some features may be disabled." %}

    {% endif %}
    diff --git a/themes/default/install.twig b/themes/default/install.twig index 0dec2c48a..c89c7e47e 100644 --- a/themes/default/install.twig +++ b/themes/default/install.twig @@ -3,9 +3,9 @@ {% block content %}
    -

    {% trans "install your poche" %}

    +

    {% trans "install your wallabag" %}

    - {% trans "Poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %} + {% trans "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on wallabag website." %}

    diff --git a/themes/default/layout.twig b/themes/default/layout.twig index fec7054ab..dfebc3eac 100644 --- a/themes/default/layout.twig +++ b/themes/default/layout.twig @@ -10,7 +10,7 @@ - {% block title %}{% endblock %} - poche + {% block title %}{% endblock %} - wallabag {% include '_head.twig' %} {% include '_bookmarklet.twig' %} diff --git a/themes/default/login.twig b/themes/default/login.twig index e2a9a9f52..bf6852406 100644 --- a/themes/default/login.twig +++ b/themes/default/login.twig @@ -1,11 +1,11 @@ {% extends "layout.twig" %} -{% block title %}{% trans "login to your poche" %}{% endblock %} +{% block title %}{% trans "login to your wallabag" %}{% endblock %} {% block content %} {% if http_auth == 0 %}

    -

    {% trans "Login to poche" %}

    +

    {% trans "Login to wallabag" %}

    {% if constant('MODE_DEMO') == 1 %}

    {% trans "you are in demo mode, some features may be disabled." %}

    {% endif %}
    From f4fbfaa7cbaaf07aae7d8f0533d293fa4dc605cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 28 Jan 2014 11:19:06 +0100 Subject: [PATCH 12/19] some fix to courgette theme --- inc/poche/Poche.class.php | 114 +++++++++++++++++++------------- themes/courgette/_top.twig | 2 +- themes/courgette/config.twig | 4 +- themes/courgette/img/logo.svg | 8 +++ themes/courgette/theme.ini | 3 + themes/dark/theme.ini | 2 + themes/default/config.twig | 4 +- themes/default/theme.ini | 1 + themes/dmagenta/theme.ini | 2 + themes/solarized-dark/theme.ini | 2 + themes/solarized/theme.ini | 2 + 11 files changed, 94 insertions(+), 50 deletions(-) create mode 100644 themes/courgette/img/logo.svg create mode 100644 themes/courgette/theme.ini create mode 100644 themes/dark/theme.ini create mode 100644 themes/default/theme.ini create mode 100644 themes/dmagenta/theme.ini create mode 100644 themes/solarized-dark/theme.ini create mode 100644 themes/solarized/theme.ini diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 0be1668d0..e9b141216 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -22,16 +22,6 @@ class Poche private $currentTheme = ''; private $currentLanguage = ''; private $notInstalledMessage = array(); - - # @todo make this dynamic (actually install themes and save them in the database including author information et cetera) - private $installedThemes = array( - 'default' => array('requires' => array()), - 'dark' => array('requires' => array('default')), - 'dmagenta' => array('requires' => array('default')), - 'solarized' => array('requires' => array('default')), - 'solarized-dark' => array('requires' => array('default')), - 'courgette' => array('requires' => array()) - ); public function __construct() { @@ -124,21 +114,26 @@ class Poche } # Check if the selected theme and its requirements are present - if ($this->getTheme() != '' && ! is_dir(THEME . '/' . $this->getTheme())) { - $this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')'; + $theme = $this->getTheme(); + + if ($theme != '' && ! is_dir(THEME . '/' . $theme)) { + $this->notInstalledMessage[] = 'The currently selected theme (' . $theme . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $theme . ')'; self::$canRenderTemplates = false; $passTheme = FALSE; } - foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { - if (! is_dir(THEME . '/' . $requiredTheme)) { - $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'; + $themeInfo = $this->getThemeInfo($theme); + if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) { + foreach ($themeInfo['requirements'] as $requiredTheme) { + if (! is_dir(THEME . '/' . $requiredTheme)) { + $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')'; - self::$canRenderTemplates = false; + self::$canRenderTemplates = false; - $passTheme = FALSE; + $passTheme = FALSE; + } } } @@ -194,32 +189,36 @@ class Poche private function initTpl() { $loaderChain = new Twig_Loader_Chain(); + $theme = $this->getTheme(); # add the current theme as first to the loader chain so Twig will look there first for overridden template files try { - $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $this->getTheme())); + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $theme)); } catch (Twig_Error_Loader $e) { # @todo isInstalled() should catch this, inject Twig later - die('The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (' . THEME . '/' . $this->getTheme() .' is missing)'); + die('The currently selected theme (' . $theme . ') does not seem to be properly installed (' . THEME . '/' . $theme .' is missing)'); } # add all required themes to the loader chain - foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { - try { - $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . DEFAULT_THEME)); - } catch (Twig_Error_Loader $e) { - # @todo isInstalled() should catch this, inject Twig later - die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'); + $themeInfo = $this->getThemeInfo($theme); + if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) { + foreach ($themeInfo['requirements'] as $requiredTheme) { + try { + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $requiredTheme)); + } catch (Twig_Error_Loader $e) { + # @todo isInstalled() should catch this, inject Twig later + die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')'); + } } } if (DEBUG_POCHE) { - $twig_params = array(); + $twigParams = array(); } else { - $twig_params = array('cache' => CACHE); + $twigParams = array('cache' => CACHE); } - $this->tpl = new Twig_Environment($loaderChain, $twig_params); + $this->tpl = new Twig_Environment($loaderChain, $twigParams); $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); # filter to display domain name of an url @@ -235,7 +234,7 @@ class Poche $this->tpl->addFilter($filter); } - private function install() + private function install() { Tools::logm('poche still not installed'); echo $this->tpl->render('install.twig', array( @@ -266,34 +265,59 @@ class Poche return $this->currentTheme; } - public function getLanguage() { - return $this->currentLanguage; + /** + * Provides theme information by parsing theme.ini file if present in the theme's root directory. + * In all cases, the following data will be returned: + * - name: theme's name, or key if the theme is unnamed, + * - current: boolean informing if the theme is the current user theme. + * + * @param string $theme Theme key (directory name) + * @return array|boolean Theme information, or false if the theme doesn't exist. + */ + public function getThemeInfo($theme) { + if (!is_dir(THEME . '/' . $theme)) { + return false; + } + + $themeIniFile = THEME . '/' . $theme . '/theme.ini'; + $themeInfo = array(); + + if (is_file($themeIniFile) && is_readable($themeIniFile)) { + $themeInfo = parse_ini_file($themeIniFile); + } + + if ($themeInfo === false) { + $themeInfo = array(); + } + if (!isset($themeInfo['name'])) { + $themeInfo['name'] = $theme; + } + $themeInfo['current'] = ($theme === $this->getTheme()); + + return $themeInfo; } public function getInstalledThemes() { $handle = opendir(THEME); $themes = array(); - + while (($theme = readdir($handle)) !== false) { # Themes are stored in a directory, so all directory names are themes # @todo move theme installation data to database - if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.'))) { + if (!is_dir(THEME . '/' . $theme) || in_array($theme, array('.', '..'))) { continue; } - - $current = false; - - if ($theme === $this->getTheme()) { - $current = true; - } - - $themes[] = array('name' => $theme, 'current' => $current); + + $themes[$theme] = $this->getThemeInfo($theme); } - - sort($themes); + return $themes; } + public function getLanguage() { + return $this->currentLanguage; + } + public function getInstalledLanguages() { $handle = opendir(LOCALE); $languages = array(); @@ -600,8 +624,8 @@ class Poche $themes = $this->getInstalledThemes(); $actualTheme = false; - foreach ($themes as $theme) { - if ($theme['name'] == $_POST['theme']) { + foreach (array_keys($themes) as $theme) { + if ($theme == $_POST['theme']) { $actualTheme = true; break; } diff --git a/themes/courgette/_top.twig b/themes/courgette/_top.twig index a2a4b28dc..792687c06 100755 --- a/themes/courgette/_top.twig +++ b/themes/courgette/_top.twig @@ -1,6 +1,6 @@

    - {% if view == 'home' %}{% block logo %}logo poche{% endblock %} + {% if view == 'home' %}{% block logo %}logo poche{% endblock %} {% elseif view == 'fav' %}{{ block('logo') }} Favoris {% elseif view == 'archive' %}{{ block('logo') }} Archive {% else %}{{ block('logo') }} diff --git a/themes/courgette/config.twig b/themes/courgette/config.twig index fdeb464ba..3ab1d92f4 100755 --- a/themes/courgette/config.twig +++ b/themes/courgette/config.twig @@ -35,8 +35,8 @@
    diff --git a/themes/courgette/img/logo.svg b/themes/courgette/img/logo.svg new file mode 100644 index 000000000..865da440d --- /dev/null +++ b/themes/courgette/img/logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/themes/courgette/theme.ini b/themes/courgette/theme.ini new file mode 100644 index 000000000..996d171f1 --- /dev/null +++ b/themes/courgette/theme.ini @@ -0,0 +1,3 @@ +name = Courgette +description = Responsive black and white theme especially adapted to smartphones. +requirements[] = default diff --git a/themes/dark/theme.ini b/themes/dark/theme.ini new file mode 100644 index 000000000..4b020d363 --- /dev/null +++ b/themes/dark/theme.ini @@ -0,0 +1,2 @@ +name = Dark +requirements[] = default diff --git a/themes/default/config.twig b/themes/default/config.twig index ada238d64..df62520a7 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -49,8 +49,8 @@
    diff --git a/themes/default/theme.ini b/themes/default/theme.ini new file mode 100644 index 000000000..9f3cfb6a3 --- /dev/null +++ b/themes/default/theme.ini @@ -0,0 +1 @@ +name = Default \ No newline at end of file diff --git a/themes/dmagenta/theme.ini b/themes/dmagenta/theme.ini new file mode 100644 index 000000000..24ff3c4a1 --- /dev/null +++ b/themes/dmagenta/theme.ini @@ -0,0 +1,2 @@ +name = Dark Magenta +requirements[] = default diff --git a/themes/solarized-dark/theme.ini b/themes/solarized-dark/theme.ini new file mode 100644 index 000000000..7b6b341ec --- /dev/null +++ b/themes/solarized-dark/theme.ini @@ -0,0 +1,2 @@ +name = Dark Solarized +requirements[] = default diff --git a/themes/solarized/theme.ini b/themes/solarized/theme.ini new file mode 100644 index 000000000..703997b9e --- /dev/null +++ b/themes/solarized/theme.ini @@ -0,0 +1,2 @@ +name = Solarized +requirements[] = default From 6af66b1106e67a8dc467a70e8e57d7963b09936b Mon Sep 17 00:00:00 2001 From: Maryana Rozhankivska Date: Thu, 30 Jan 2014 16:35:31 +0200 Subject: [PATCH 13/19] fix of bug #368 Endless redirects or user doesn't exist with basic authentication --- inc/poche/Database.class.php | 11 ++++++++--- inc/poche/Poche.class.php | 19 ++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php index 3b0f455e4..0457af691 100644 --- a/inc/poche/Database.class.php +++ b/inc/poche/Database.class.php @@ -165,9 +165,14 @@ class Database { } } - public function login($username, $password) { - $sql = "SELECT * FROM users WHERE username=? AND password=?"; - $query = $this->executeQuery($sql, array($username, $password)); + public function login($username, $password, $isauthenticated=false) { + if ($isauthenticated) { + $sql = "SELECT * FROM users WHERE username=?"; + $query = $this->executeQuery($sql, array($username)); + } else { + $sql = "SELECT * FROM users WHERE username=? AND password=?"; + $query = $this->executeQuery($sql, array($username, $password)); + } $login = $query->fetchAll(); $user = array(); diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index e9b141216..77361ef7a 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -692,17 +692,17 @@ class Poche */ private function credentials() { if(isset($_SERVER['PHP_AUTH_USER'])) { - return array($_SERVER['PHP_AUTH_USER'],'php_auth'); + return array($_SERVER['PHP_AUTH_USER'],'php_auth',true); } if(!empty($_POST['login']) && !empty($_POST['password'])) { - return array($_POST['login'],$_POST['password']); + return array($_POST['login'],$_POST['password'],false); } if(isset($_SERVER['REMOTE_USER'])) { - return array($_SERVER['REMOTE_USER'],'http_auth'); + return array($_SERVER['REMOTE_USER'],'http_auth',true); } - return array(false,false); - } + return array(false,false,false); + } /** * checks if login & password are correct and save the user in session. @@ -713,18 +713,19 @@ class Poche */ public function login($referer) { - list($login,$password)=$this->credentials(); + list($login,$password,$isauthenticated)=$this->credentials(); if($login === false || $password === false) { $this->messages->add('e', _('login failed: you have to fill all fields')); Tools::logm('login failed'); Tools::redirect(); } if (!empty($login) && !empty($password)) { - $user = $this->store->login($login, Tools::encodeString($password . $login)); + $user = $this->store->login($login, Tools::encodeString($password . $login), $isauthenticated); if ($user != array()) { # Save login into Session - $longlastingsession = isset($_POST['longlastingsession']); - Session::login($user['username'], $user['password'], $login, Tools::encodeString($password . $login), $longlastingsession, array('poche_user' => new User($user))); + $longlastingsession = isset($_POST['longlastingsession']); + $passwordTest = ($isauthenticated) ? $user['password'] : Tools::encodeString($password . $login); + Session::login($user['username'], $user['password'], $login, $passwordTest, $longlastingsession, array('poche_user' => new User($user))); $this->messages->add('s', _('welcome to your poche')); Tools::logm('login successful'); Tools::redirect($referer); From ebae8c83154efc98518feee099d44f3feb69dd2d Mon Sep 17 00:00:00 2001 From: Lonnytunes Date: Sun, 2 Feb 2014 19:10:35 +0100 Subject: [PATCH 14/19] [del] courgette theme: Useless templates because they are identical to those of default theme and so inherited from it. --- themes/courgette/_bookmarklet.twig | 3 --- themes/courgette/_footer.twig | 4 ---- themes/courgette/_messages.twig | 1 - themes/courgette/export.twig | 1 - themes/courgette/install.twig | 28 ---------------------------- 5 files changed, 37 deletions(-) delete mode 100755 themes/courgette/_bookmarklet.twig delete mode 100755 themes/courgette/_footer.twig delete mode 100755 themes/courgette/_messages.twig delete mode 100755 themes/courgette/export.twig delete mode 100755 themes/courgette/install.twig diff --git a/themes/courgette/_bookmarklet.twig b/themes/courgette/_bookmarklet.twig deleted file mode 100755 index 2e3071ad6..000000000 --- a/themes/courgette/_bookmarklet.twig +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/themes/courgette/_footer.twig b/themes/courgette/_footer.twig deleted file mode 100755 index cce31f35f..000000000 --- a/themes/courgette/_footer.twig +++ /dev/null @@ -1,4 +0,0 @@ -
    -

    {% trans "powered by" %} wallabag

    - {% if constant('DEBUG_POCHE') == 1 %}

    {% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}

    {% endif %} -
    \ No newline at end of file diff --git a/themes/courgette/_messages.twig b/themes/courgette/_messages.twig deleted file mode 100755 index 679aa0981..000000000 --- a/themes/courgette/_messages.twig +++ /dev/null @@ -1 +0,0 @@ - {{ messages | raw }} \ No newline at end of file diff --git a/themes/courgette/export.twig b/themes/courgette/export.twig deleted file mode 100755 index 4adb95402..000000000 --- a/themes/courgette/export.twig +++ /dev/null @@ -1 +0,0 @@ -{{ export }} \ No newline at end of file diff --git a/themes/courgette/install.twig b/themes/courgette/install.twig deleted file mode 100755 index 20d15f183..000000000 --- a/themes/courgette/install.twig +++ /dev/null @@ -1,28 +0,0 @@ -{% extends "layout.twig" %} -{% block title %}{% trans "installation" %}{% endblock %} -{% block content %} - -
    -

    {% trans "install your wallabag" %}

    -

    - {% trans "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on wallabag website." %} -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - -

    -
    - - -{% endblock %} \ No newline at end of file From cae70cdbdb518b6effe212528c894a390256cf2d Mon Sep 17 00:00:00 2001 From: Lonnytunes Date: Sun, 2 Feb 2014 19:13:05 +0100 Subject: [PATCH 15/19] [fix] courgette theme: Old constant call, replaced by the new one. --- themes/courgette/config.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/courgette/config.twig b/themes/courgette/config.twig index 3ab1d92f4..26da7289b 100755 --- a/themes/courgette/config.twig +++ b/themes/courgette/config.twig @@ -24,7 +24,7 @@

    {% trans "Updating poche" %}

    From a678f9df3893c200f7555791f6c82730c3b3dd45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 3 Feb 2014 12:34:28 +0100 Subject: [PATCH 16/19] [fix] #421 Tables content in solarized themes unreadable --- themes/solarized-dark/css/style-solarized-dark.css | 3 ++- themes/solarized/css/style-solarized.css | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/themes/solarized-dark/css/style-solarized-dark.css b/themes/solarized-dark/css/style-solarized-dark.css index 7ce8a5633..3b0feb2a5 100644 --- a/themes/solarized-dark/css/style-solarized-dark.css +++ b/themes/solarized-dark/css/style-solarized-dark.css @@ -42,7 +42,8 @@ body, body, a, a:hover, -a:visited { +a:visited, +td { color: #839496; } diff --git a/themes/solarized/css/style-solarized.css b/themes/solarized/css/style-solarized.css index 9286c7507..6058d0563 100644 --- a/themes/solarized/css/style-solarized.css +++ b/themes/solarized/css/style-solarized.css @@ -42,7 +42,8 @@ body, body, a, a:hover, -a:visited { +a:visited, +td { color: #657b83; } From 1e1fd6f24da7b7bf08f7b26956a9467477265fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 3 Feb 2014 12:43:34 +0100 Subject: [PATCH 17/19] [add] link to test file when we install wallabag #392 --- themes/default/error.twig | 3 +++ wallabag_compatibility_test.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/themes/default/error.twig b/themes/default/error.twig index 8a6a4d6cb..528a09858 100644 --- a/themes/default/error.twig +++ b/themes/default/error.twig @@ -8,4 +8,7 @@ {% endfor %}

    Don't forget the documentation.

    +

    + {% trans "You can check your configuration here." %} +

    {% endblock %} diff --git a/wallabag_compatibility_test.php b/wallabag_compatibility_test.php index 49c4e3b8f..fd2850420 100644 --- a/wallabag_compatibility_test.php +++ b/wallabag_compatibility_test.php @@ -1,5 +1,5 @@ =')); $pcre_ok = extension_loaded('pcre'); From 445a1a1c8de78bf7bba3404aa675e6a57ceefbfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 3 Feb 2014 12:46:09 +0100 Subject: [PATCH 18/19] [fix] Add support for X-Forwarded-Proto header field #413 --- inc/poche/Tools.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index 248a44d76..515a08aac 100644 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php @@ -43,7 +43,9 @@ class Tools || (isset($_SERVER["SERVER_PORT"]) && $_SERVER["SERVER_PORT"] == '443') // HTTPS detection. || (isset($_SERVER["SERVER_PORT"]) //Custom HTTPS port detection - && $_SERVER["SERVER_PORT"] == SSL_PORT); + && $_SERVER["SERVER_PORT"] == SSL_PORT) + || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) + && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'); $serverport = (!isset($_SERVER["SERVER_PORT"]) || $_SERVER["SERVER_PORT"] == '80' From fa0bfb775a53a074e0a9d642298685b5ed1af83f Mon Sep 17 00:00:00 2001 From: nicosomb Date: Mon, 3 Feb 2014 17:11:00 +0100 Subject: [PATCH 19/19] [fix] #389 Empty article title (blank title tag) --- inc/poche/Poche.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 77361ef7a..4df90067d 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -375,7 +375,7 @@ class Poche { case 'add': $content = $this->getPageContent($url); - $title = $content['rss']['channel']['item']['title']; + $title = ($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'); $body = $content['rss']['channel']['item']['description']; if ($this->store->add($url->getUrl(), $title, $body, $this->user->getId())) {