From 12d3552fe61d7d26817f6644d8cd90e72307a0e6 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Wed, 24 Apr 2013 19:54:56 +0200 Subject: Corrige soucis #41 : ajout d'images png en fallback des images SVG + petite modif pour annuler l'attribut height sur les images --- public/theme/freshrss.css | 6 ++++++ public/theme/global.css | 22 ++++++++++++++++++++++ public/theme/icons/add.png | Bin 0 -> 246 bytes public/theme/icons/all.png | Bin 0 -> 223 bytes public/theme/icons/category.png | Bin 0 -> 294 bytes public/theme/icons/close.png | Bin 0 -> 405 bytes public/theme/icons/configure.png | Bin 0 -> 526 bytes public/theme/icons/down.png | Bin 0 -> 460 bytes public/theme/icons/help.png | Bin 0 -> 687 bytes public/theme/icons/link.png | Bin 0 -> 719 bytes public/theme/icons/login.png | Bin 0 -> 333 bytes public/theme/icons/logout.png | Bin 0 -> 339 bytes public/theme/icons/non-starred.png | Bin 0 -> 600 bytes public/theme/icons/note.png | Bin 0 -> 427 bytes public/theme/icons/note_empty.png | Bin 0 -> 517 bytes public/theme/icons/read.png | Bin 0 -> 656 bytes public/theme/icons/refresh.png | Bin 0 -> 577 bytes public/theme/icons/rss.png | Bin 0 -> 483 bytes public/theme/icons/search.png | Bin 0 -> 571 bytes public/theme/icons/share.png | Bin 0 -> 541 bytes public/theme/icons/starred.png | Bin 0 -> 528 bytes public/theme/icons/unread.png | Bin 0 -> 434 bytes public/theme/icons/up.png | Bin 0 -> 411 bytes 23 files changed, 28 insertions(+) create mode 100644 public/theme/icons/add.png create mode 100644 public/theme/icons/all.png create mode 100644 public/theme/icons/category.png create mode 100644 public/theme/icons/close.png create mode 100644 public/theme/icons/configure.png create mode 100644 public/theme/icons/down.png create mode 100644 public/theme/icons/help.png create mode 100644 public/theme/icons/link.png create mode 100644 public/theme/icons/login.png create mode 100644 public/theme/icons/logout.png create mode 100644 public/theme/icons/non-starred.png create mode 100644 public/theme/icons/note.png create mode 100644 public/theme/icons/note_empty.png create mode 100644 public/theme/icons/read.png create mode 100644 public/theme/icons/refresh.png create mode 100644 public/theme/icons/rss.png create mode 100644 public/theme/icons/search.png create mode 100644 public/theme/icons/share.png create mode 100644 public/theme/icons/starred.png create mode 100644 public/theme/icons/unread.png create mode 100644 public/theme/icons/up.png diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index ed6646269..d39ca7fc8 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -127,6 +127,7 @@ } .categories .feeds .item .dropdown-target:target ~ .dropdown-toggle i, .categories .feeds .item:hover .dropdown-toggle i { + background-image: url("icons/configure.png"); background-image: url("icons/configure.svg"); } .categories .notRead { @@ -199,6 +200,7 @@ display: inline-block; width: 30px; height: 40px; + background: url("icons/read.png") center center no-repeat; background: url("icons/read.svg") center center no-repeat; vertical-align: middle; } @@ -206,12 +208,14 @@ text-decoration: none; } .flux.not_read .flux_header .item.manage .read { + background: url("icons/unread.png") center center no-repeat; background: url("icons/unread.svg") center center no-repeat; } .flux_header .item.manage .bookmark { display: inline-block; width: 30px; height: 40px; + background: url("icons/non-starred.png") center center no-repeat; background: url("icons/non-starred.svg") center center no-repeat; vertical-align: middle; } @@ -219,6 +223,7 @@ text-decoration: none; } .flux.favorite .flux_header .item.manage .bookmark { + background: url("icons/starred.png") center center no-repeat; background: url("icons/starred.svg") center center no-repeat; } .flux_header .item.website { @@ -260,6 +265,7 @@ display: inline-block; width: 35px; height: 40px; + background: url("icons/link.png") center center no-repeat; background: url("icons/link.svg") center center no-repeat; vertical-align: middle; } diff --git a/public/theme/global.css b/public/theme/global.css index c08463b8b..7bae3f432 100644 --- a/public/theme/global.css +++ b/public/theme/global.css @@ -42,6 +42,7 @@ h1, h2, h3 { /* IMG */ img { + height: auto; max-width: 100%; vertical-align: middle; } @@ -432,65 +433,86 @@ input, select, textarea { background: center center no-repeat; } .icon.i_refresh { + background-image: url("icons/refresh.png"); background-image: url("icons/refresh.svg"); } .icon.i_bookmark { + background-image: url("icons/starred.png"); background-image: url("icons/starred.svg"); } .icon.i_not_bookmark { + background-image: url("icons/unstarred.png"); background-image: url("icons/unstarred.svg"); } .icon.i_read { + background-image: url("icons/read.png"); background-image: url("icons/read.svg"); } .icon.i_unread { + background-image: url("icons/unread.png"); background-image: url("icons/unread.svg"); } .icon.i_all { + background-image: url("icons/all.png"); background-image: url("icons/all.svg"); } .icon.i_close { + background-image: url("icons/close.png"); background-image: url("icons/close.svg"); } .icon.i_search { + background-image: url("icons/search.png"); background-image: url("icons/search.svg"); } .icon.i_configure { + background-image: url("icons/configure.png"); background-image: url("icons/configure.svg"); } .icon.i_login { + background-image: url("icons/login.png"); background-image: url("icons/login.svg"); } .icon.i_logout { + background-image: url("icons/logout.png"); background-image: url("icons/logout.svg"); } .icon.i_add { + background-image: url("icons/add.png"); background-image: url("icons/add.svg"); } .icon.i_link { + background-image: url("icons/link.png"); background-image: url("icons/link.svg"); } .icon.i_down { + background-image: url("icons/down.png"); background-image: url("icons/down.svg"); } .icon.i_up { + background-image: url("icons/up.png"); background-image: url("icons/up.svg"); } .icon.i_help { + background-image: url("icons/help.png"); background-image: url("icons/help.svg"); } .icon.i_note { + background-image: url("icons/note.png"); background-image: url("icons/note.svg"); } .icon.i_note_empty { + background-image: url("icons/note_empty.png"); background-image: url("icons/note_empty.svg"); } .icon.i_category { + background-image: url("icons/category.png"); background-image: url("icons/category.svg"); } .icon.i_rss { + background-image: url("icons/rss.png"); background-image: url("icons/rss.svg"); } .icon.i_share { + background-image: url("icons/share.png"); background-image: url("icons/share.svg"); } diff --git a/public/theme/icons/add.png b/public/theme/icons/add.png new file mode 100644 index 000000000..90cdf4830 Binary files /dev/null and b/public/theme/icons/add.png differ diff --git a/public/theme/icons/all.png b/public/theme/icons/all.png new file mode 100644 index 000000000..b0dbe5483 Binary files /dev/null and b/public/theme/icons/all.png differ diff --git a/public/theme/icons/category.png b/public/theme/icons/category.png new file mode 100644 index 000000000..e3a9bf34b Binary files /dev/null and b/public/theme/icons/category.png differ diff --git a/public/theme/icons/close.png b/public/theme/icons/close.png new file mode 100644 index 000000000..452f1d1cf Binary files /dev/null and b/public/theme/icons/close.png differ diff --git a/public/theme/icons/configure.png b/public/theme/icons/configure.png new file mode 100644 index 000000000..8c6fb531c Binary files /dev/null and b/public/theme/icons/configure.png differ diff --git a/public/theme/icons/down.png b/public/theme/icons/down.png new file mode 100644 index 000000000..5a647245f Binary files /dev/null and b/public/theme/icons/down.png differ diff --git a/public/theme/icons/help.png b/public/theme/icons/help.png new file mode 100644 index 000000000..aa63c5411 Binary files /dev/null and b/public/theme/icons/help.png differ diff --git a/public/theme/icons/link.png b/public/theme/icons/link.png new file mode 100644 index 000000000..de2b187d7 Binary files /dev/null and b/public/theme/icons/link.png differ diff --git a/public/theme/icons/login.png b/public/theme/icons/login.png new file mode 100644 index 000000000..cebe0cf7d Binary files /dev/null and b/public/theme/icons/login.png differ diff --git a/public/theme/icons/logout.png b/public/theme/icons/logout.png new file mode 100644 index 000000000..49255fccd Binary files /dev/null and b/public/theme/icons/logout.png differ diff --git a/public/theme/icons/non-starred.png b/public/theme/icons/non-starred.png new file mode 100644 index 000000000..4aafb6d8a Binary files /dev/null and b/public/theme/icons/non-starred.png differ diff --git a/public/theme/icons/note.png b/public/theme/icons/note.png new file mode 100644 index 000000000..d819ebd02 Binary files /dev/null and b/public/theme/icons/note.png differ diff --git a/public/theme/icons/note_empty.png b/public/theme/icons/note_empty.png new file mode 100644 index 000000000..c26ad2b16 Binary files /dev/null and b/public/theme/icons/note_empty.png differ diff --git a/public/theme/icons/read.png b/public/theme/icons/read.png new file mode 100644 index 000000000..a402689c7 Binary files /dev/null and b/public/theme/icons/read.png differ diff --git a/public/theme/icons/refresh.png b/public/theme/icons/refresh.png new file mode 100644 index 000000000..dba399981 Binary files /dev/null and b/public/theme/icons/refresh.png differ diff --git a/public/theme/icons/rss.png b/public/theme/icons/rss.png new file mode 100644 index 000000000..c20455af0 Binary files /dev/null and b/public/theme/icons/rss.png differ diff --git a/public/theme/icons/search.png b/public/theme/icons/search.png new file mode 100644 index 000000000..48e7373c4 Binary files /dev/null and b/public/theme/icons/search.png differ diff --git a/public/theme/icons/share.png b/public/theme/icons/share.png new file mode 100644 index 000000000..74c4c5dda Binary files /dev/null and b/public/theme/icons/share.png differ diff --git a/public/theme/icons/starred.png b/public/theme/icons/starred.png new file mode 100644 index 000000000..a6c076358 Binary files /dev/null and b/public/theme/icons/starred.png differ diff --git a/public/theme/icons/unread.png b/public/theme/icons/unread.png new file mode 100644 index 000000000..ab6e3fb39 Binary files /dev/null and b/public/theme/icons/unread.png differ diff --git a/public/theme/icons/up.png b/public/theme/icons/up.png new file mode 100644 index 000000000..8bfc2fb13 Binary files /dev/null and b/public/theme/icons/up.png differ -- cgit v1.2.3 From 7b75289a294a0f4865e8d5b9564b6583f5d01aec Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Wed, 24 Apr 2013 20:39:28 +0200 Subject: Fix issue #63 : gestion des couleurs dégradés et des transitions pour plus de navigateurs (utilisation des préfixes dans une feuille fallback.css) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/App_FrontController.php | 1 + public/theme/fallback.css | 65 +++++++++++++++++++++++++++++++++++++++++++++ public/theme/freshrss.css | 2 +- public/theme/global.css | 19 +++++-------- 4 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 public/theme/fallback.css diff --git a/app/App_FrontController.php b/app/App_FrontController.php index 5a66ae1dd..cf32a1c44 100644 --- a/app/App_FrontController.php +++ b/app/App_FrontController.php @@ -41,6 +41,7 @@ class App_FrontController extends FrontController { } private function loadStylesAndScripts () { + View::appendStyle (Url::display ('/theme/fallback.css')); View::appendStyle (Url::display ('/theme/global.css')); View::appendStyle (Url::display ('/theme/freshrss.css')); if (login_is_conf ($this->conf)) { diff --git a/public/theme/fallback.css b/public/theme/fallback.css new file mode 100644 index 000000000..579b2eaa8 --- /dev/null +++ b/public/theme/fallback.css @@ -0,0 +1,65 @@ +.btn { + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #eee 100%); + background: -webkit-linear-gradient(top, #fff 0%, #eee 100%); + background: -o-linear-gradient(top, #fff 0%, #eee 100%); + background: -ms-linear-gradient(top, #fff 0%, #eee 100%); +} + .btn:hover { + background: #f0f0f0; + background: -moz-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); + background: -webkit-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); + background: -o-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); + background: -ms-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); + } + .btn.btn-important { + background: #0084CC; + background: -moz-linear-gradient(top, #0084CC 0%, #0045CC 100%); + background: -webkit-linear-gradient(top, #0084CC 0%, #0045CC 100%); + background: -o-linear-gradient(top, #0084CC 0%, #0045CC 100%); + background: -ms-linear-gradient(top, #0084CC 0%, #0045CC 100%); + } + .btn.btn-important:hover { + background: -moz-linear-gradient(top, #0066CC 0%, #0045CC 100%); + background: -webkit-linear-gradient(top, #0066CC 0%, #0045CC 100%); + background: -o-linear-gradient(top, #0066CC 0%, #0045CC 100%); + background: -ms-linear-gradient(top, #0066CC 0%, #0045CC 100%); + } + .btn.btn-attention { + background: #E95B57; + background: -moz-linear-gradient(top, #E95B57 0%, #BD362F 100%); + background: -webkit-linear-gradient(top, #E95B57 0%, #BD362F 100%); + background: -o-linear-gradient(top, #E95B57 0%, #BD362F 100%); + background: -ms-linear-gradient(top, #E95B57 0%, #BD362F 100%); + } + .btn.btn-attention:hover { + background: -moz-linear-gradient(top, #D14641 0%, #BD362F 100%); + background: -webkit-linear-gradient(top, #D14641 0%, #BD362F 100%); + background: -o-linear-gradient(top, #D14641 0%, #BD362F 100%); + background: -ms-linear-gradient(top, #D14641 0%, #BD362F 100%); + } + + +.nav-head { + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f0f0f0 100%); + background: -o-linear-gradient(top, #fff 0%, #f0f0f0 100%); + background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%); +} + +.header > .item.search input { + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; +} + +@media(max-width: 840px) { + .aside { + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; + } +} diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index d39ca7fc8..95809f653 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -24,7 +24,7 @@ } .header > .item.search input { width: 200px; - transition: all 200ms linear; + transition: width 200ms linear; } .header .item.search input:focus { width: 300px; diff --git a/public/theme/global.css b/public/theme/global.css index 7bae3f432..84fbca3cb 100644 --- a/public/theme/global.css +++ b/public/theme/global.css @@ -173,8 +173,7 @@ input, select, textarea { min-height: 37px; min-width: 15px; padding: 5px 10px; - background: #fff; - background: linear-gradient(#fff, #eee); + background: linear-gradient(to bottom, #fff 0%, #eee 100%); border-radius: 3px; border: 1px solid #ddd; border-bottom: 1px solid #aaa; @@ -190,8 +189,7 @@ input, select, textarea { line-height: 25px; } .btn:hover { - background: #f0f0f0; - background: linear-gradient(#f8f8f8, #f0f0f0); + background: linear-gradient(to bottom, #f8f8f8, #f0f0f0); text-decoration: none; } .btn.active, @@ -201,14 +199,13 @@ input, select, textarea { } .btn.btn-important { - background: #0084CC; - background: linear-gradient(#0084CC, #0045CC); + background: linear-gradient(to bottom, #0084CC, #0045CC); color: #fff; border: 1px solid #0062B7; text-shadow: 0px -1px 0 #aaa; } .btn.btn-important:hover { - background: linear-gradient(#0066CC, #0045CC); + background: linear-gradient(to bottom, #0066CC, #0045CC); } .btn.btn-important:active { background: #0044CB; @@ -216,14 +213,13 @@ input, select, textarea { } .btn.btn-attention { - background: #E95B57; - background: linear-gradient(#E95B57, #BD362F); + background: linear-gradient(to bottom, #E95B57, #BD362F); color: #fff; border: 1px solid #C44742; text-shadow: 0px -1px 0px #666; } .btn.btn-attention:hover { - background: linear-gradient(#D14641, #BD362F); + background: linear-gradient(to bottom, #D14641, #BD362F); } .btn.btn-attention:active { background: #BD362F; @@ -289,8 +285,7 @@ input, select, textarea { .nav-head { display: block; margin: 0; - background: #fff; - background: linear-gradient(#fff, #f0f0f0); + background: linear-gradient(to bottom, #fff, #f0f0f0); border-bottom: 1px solid #ddd; text-align: right; } -- cgit v1.2.3 From a6982216253d1356621916bb2b7734320fedec0d Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Wed, 24 Apr 2013 22:14:49 +0200 Subject: Fix issue #55 : affichage des tags associés aux articles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/Entry.php | 3 +- app/views/index/index.phtml | 18 ++++++ public/theme/global.css | 4 ++ public/theme/icons/tag.png | Bin 0 -> 196 bytes public/theme/icons/tag.svg | 134 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 public/theme/icons/tag.png create mode 100644 public/theme/icons/tag.svg diff --git a/app/models/Entry.php b/app/models/Entry.php index 230b457bf..3daec5aa9 100755 --- a/app/models/Entry.php +++ b/app/models/Entry.php @@ -216,7 +216,7 @@ class Entry extends Model { class EntryDAO extends Model_pdo { public function addEntry ($valuesTmp) { - $sql = 'INSERT INTO entry(id, guid, title, author, content, link, date, is_read, is_favorite, is_public, id_feed, lastUpdate) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + $sql = 'INSERT INTO entry(id, guid, title, author, content, link, date, is_read, is_favorite, is_public, id_feed, lastUpdate, tags) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; $stm = $this->bd->prepare ($sql); $values = array ( @@ -232,6 +232,7 @@ class EntryDAO extends Model_pdo { $valuesTmp['is_public'], $valuesTmp['id_feed'], $valuesTmp['lastUpdate'], + $valuesTmp['tags'], ); if ($stm && $stm->execute ($values)) { diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml index 6889a8b51..ff7325996 100644 --- a/app/views/index/index.phtml +++ b/app/views/index/index.phtml @@ -89,6 +89,24 @@ if (isset ($this->entryPaginator)) { + tags(); ?> + +
  • + +
  • + diff --git a/public/theme/global.css b/public/theme/global.css index 84fbca3cb..d619c4e99 100644 --- a/public/theme/global.css +++ b/public/theme/global.css @@ -511,3 +511,7 @@ input, select, textarea { background-image: url("icons/share.png"); background-image: url("icons/share.svg"); } + .icon.i_tag { + background-image: url("icons/tag.png"); + background-image: url("icons/tag.svg"); + } diff --git a/public/theme/icons/tag.png b/public/theme/icons/tag.png new file mode 100644 index 000000000..cb1a13833 Binary files /dev/null and b/public/theme/icons/tag.png differ diff --git a/public/theme/icons/tag.svg b/public/theme/icons/tag.svg new file mode 100644 index 000000000..688aca7a4 --- /dev/null +++ b/public/theme/icons/tag.svg @@ -0,0 +1,134 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + -- cgit v1.2.3 From a3b989b5e42618766bc8facb88ae448740c1ae1b Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Thu, 25 Apr 2013 23:26:29 +0200 Subject: Mise en place de la structure permettant de traduire l'appli (voir bug #38) pour le layout > encore beaucoup de boulot ! --- app/App_FrontController.php | 3 +++ app/i18n/fr.php | 42 ++++++++++++++++++++++++++++++++++++++++ app/layout/aside_configure.phtml | 8 ++++---- app/layout/aside_feed.phtml | 10 +++++----- app/layout/aside_flux.phtml | 20 +++++++++---------- app/layout/header.phtml | 18 ++++++++--------- app/layout/nav_menu.phtml | 22 ++++++++++----------- 7 files changed, 84 insertions(+), 39 deletions(-) create mode 100644 app/i18n/fr.php diff --git a/app/App_FrontController.php b/app/App_FrontController.php index cf32a1c44..177e83b66 100644 --- a/app/App_FrontController.php +++ b/app/App_FrontController.php @@ -11,6 +11,9 @@ class App_FrontController extends FrontController { $this->loadModels (); Session::init (); // lancement de la session doit se faire après chargement des modèles sinon bug (pourquoi ?) + Session::_param ('language', 'fr'); + Translate::init (); + $this->loadParamsView (); $this->loadStylesAndScripts (); $this->loadNotifications (); diff --git a/app/i18n/fr.php b/app/i18n/fr.php new file mode 100644 index 000000000..753a0d469 --- /dev/null +++ b/app/i18n/fr.php @@ -0,0 +1,42 @@ + 'Connexion', + 'logout' => 'Déconnexion', + 'search_on_title' => 'Rechercher sur les titres', + + 'configuration' => 'Configuration', + 'general_and_reading' => 'Général et lecture', + 'categories' => 'Catégories', + 'category' => 'Catégorie', + 'shortcuts' => 'Raccourcis', + 'about' => 'À propos', + + 'your_rss_feeds' => 'Vos flux RSS', + 'add_rss_feed' => 'Ajouter un flux RSS', + 'no_rss_feed' => 'Aucun flux RSS', + 'import_export_opml' => 'Importer / exporter (OPML)', + + 'subscription_management' => 'Gestion des abonnements', + 'all_feeds' => 'Tous (%d)', + 'favorite_feeds' => 'Favoris (%d)', + 'not_read' => '%d non lu', + 'not_reads' => '%d non lus', + + 'filter' => 'Filtrer', + 'see_website' => 'Voir le site', + 'administration' => 'Gestion', + 'actualize' => 'Actualiser', + + 'mark_read' => 'Marquer comme lu', + 'mark_all_read' => 'Tout marquer comme lu', + 'mark_feed_read' => 'Marquer le flux comme lu', + 'mark_cat_read' => 'Marquer la catégorie comme lue', + 'before_one_day' => 'Antérieurs à 1 jour', + 'before_one_week' => 'Antérieurs à 1 semaine', + 'display' => 'Affichage', + 'show_all' => 'Tout afficher', + 'show_not_reads' => 'Afficher les non lus', + 'older_first' => 'Plus anciens en premier', + 'newer_first' => 'Plus récents en premier', +); diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index ee527d75e..d91aebbdd 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -1,13 +1,13 @@ diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index bd92b3393..ff03b5552 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -1,9 +1,9 @@ diff --git a/app/layout/aside_flux.phtml b/app/layout/aside_flux.phtml index 3a6ecb304..60fcbe457 100644 --- a/app/layout/aside_flux.phtml +++ b/app/layout/aside_flux.phtml @@ -22,7 +22,7 @@ conf) || is_logged ()) { ?>
  • @@ -32,9 +32,9 @@ @@ -44,7 +44,7 @@ @@ -58,7 +58,7 @@ name (); ?> 0) { ?> - non lu 1 ? 's' : ''; ?> + 1 ? Translate::t ('not_reads', $catNotRead) : Translate::t ('not_read', $catNotRead); ?> @@ -73,14 +73,14 @@ diff --git a/app/layout/header.phtml b/app/layout/header.phtml index 77cd1b50a..cab56e7d8 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -1,23 +1,23 @@ conf)) { ?>
    -

    FreshRSS

    +

    diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 5d7dd3091..02e340ca1 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -5,19 +5,19 @@ get_f) { $get = 'f_' . $this->get_f; - $string_mark = 'Marquer le flux comme lu'; + $string_mark = Translate::t ('mark_feed_read'); } elseif ($this->get_c) { $get = 'c_' . $this->get_c; - $string_mark = 'Marquer la catégorie comme lue'; + $string_mark = Translate::t ('mark_cat_read'); } ?> conf) || is_logged ()) { ?>
    - Marquer comme lu +
    @@ -41,23 +41,23 @@ diff --git a/app/models/Feed.php b/app/models/Feed.php index 222e22256..08cf7425f 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -59,9 +59,13 @@ class Feed extends Model { if ($raw) { return $this->httpAuth; } else { + $pos_colon = strpos ($this->httpAuth, ':'); + $user = substr ($this->httpAuth, 0, $pos_colon); + $pass = substr ($this->httpAuth, $pos_colon + 1); + return array ( - 'username' => '', - 'password' => '' + 'username' => $user, + 'password' => $pass ); } } @@ -134,7 +138,12 @@ class Feed extends Model { ); } else { $feed = new SimplePie (); - $feed->set_feed_url (preg_replace ('/&/', '&', $this->url)); + $url = preg_replace ('/&/', '&', $this->url); + if ($this->httpAuth != '') { + $url = preg_replace ('#((.+)://)(.+)#', '${1}' . $this->httpAuth . '@${3}', $url); + } + + $feed->set_feed_url ($url); $feed->set_cache_location (CACHE_PATH); $feed->init (); @@ -144,6 +153,9 @@ class Feed extends Model { $subscribe_url = $feed->subscribe_url (); if (!is_null ($subscribe_url) && $subscribe_url != $this->url) { + if ($this->httpAuth != '') { + $subscribe_url = preg_replace ('#((.+)://)((.+)@)(.+)#', '${1}${5}', $subscribe_url); + } $this->_url ($subscribe_url); } $title = $feed->get_title (); @@ -205,7 +217,7 @@ class Feed extends Model { class FeedDAO extends Model_pdo { public function addFeed ($valuesTmp) { - $sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate, priority, error) VALUES(?, ?, ?, ?, ?, ?, ?, 10, 0)'; + $sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate, priority, httpAuth, error) VALUES(?, ?, ?, ?, ?, ?, ?, 10, ?, 0)'; $stm = $this->bd->prepare ($sql); $values = array ( @@ -216,6 +228,7 @@ class FeedDAO extends Model_pdo { $valuesTmp['website'], $valuesTmp['description'], $valuesTmp['lastUpdate'], + base64_encode ($valuesTmp['httpAuth']), ); if ($stm && $stm->execute ($values)) { @@ -231,6 +244,10 @@ class FeedDAO extends Model_pdo { $set = ''; foreach ($valuesTmp as $key => $v) { $set .= $key . '=?, '; + + if ($key == 'httpAuth') { + $valuesTmp[$key] = base64_encode ($v); + } } $set = substr ($set, 0, -2); @@ -408,7 +425,7 @@ class HelperFeed { $list[$key]->_lastUpdate ($dao['lastUpdate']); $list[$key]->_priority ($dao['priority']); $list[$key]->_pathEntries ($dao['pathEntries']); - $list[$key]->_httpAuth ($dao['httpAuth']); + $list[$key]->_httpAuth (base64_decode ($dao['httpAuth'])); if (isset ($dao['id'])) { $list[$key]->_id ($dao['id']); diff --git a/app/views/configure/feed.phtml b/app/views/configure/feed.phtml index 73b70ec4c..0d9c5cae6 100644 --- a/app/views/configure/feed.phtml +++ b/app/views/configure/feed.phtml @@ -58,20 +58,21 @@ - +
    @@ -82,5 +83,5 @@
    -
    +
    -- cgit v1.2.3 From 21dc4ceace513a0d6cd934f5fc4bb9cc643bb570 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sat, 27 Apr 2013 22:33:14 +0200 Subject: Fix issue #64 : stockage des favicons en local --- app/layout/aside_feed.phtml | 2 +- app/layout/aside_flux.phtml | 2 +- app/models/Feed.php | 10 ++++++++++ app/views/index/index.phtml | 2 +- lib/lib_rss.php | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 4be37868d..ec4993a70 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -43,7 +43,7 @@ feeds as $feed) { ?>
  • - + name (); ?>
  • diff --git a/app/layout/aside_flux.phtml b/app/layout/aside_flux.phtml index 60fcbe457..d2e5341e3 100644 --- a/app/layout/aside_flux.phtml +++ b/app/layout/aside_flux.phtml @@ -87,7 +87,7 @@ nbNotRead (); ?> - + 0 ? '' : ''; ?> 0 ? '(' . $not_read . ') ' : ''; ?> diff --git a/app/models/Feed.php b/app/models/Feed.php index 08cf7425f..97cbe55d1 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -77,6 +77,16 @@ class Feed extends Model { $feedDAO = new FeedDAO (); return $feedDAO->countNotRead ($this->id ()); } + public function favicon () { + $file = '/data/favicons/' . $this->id () . '.ico'; + + $favicon_url = Url::display ($file); + if (!file_exists (PUBLIC_PATH . $file)) { + $favicon_url = dowload_favicon ($this->website (), $this->id ()); + } + + return $favicon_url; + } public function _id ($value) { $this->id = $value; diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml index a7b67bcbc..c9be7169d 100644 --- a/app/views/index/index.phtml +++ b/app/views/index/index.phtml @@ -49,7 +49,7 @@ if (isset ($this->entryPaginator)) { feed (true); ?> -
  • name (); ?>
  • +
  • name (); ?>
  • title (); ?>
  • date (); ?>
  • diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 76c304064..e004b7498 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -152,3 +152,41 @@ function get_content_by_parsing ($url, $path) { throw new Exception (); } } + +/* Télécharge le favicon d'un site, le place sur le serveur et retourne l'URL */ +function dowload_favicon ($website, $id) { + $url = 'http://g.etfv.co/' . $website; + $favicons_dir = PUBLIC_PATH . '/data/favicons'; + $dest = $favicons_dir . '/' . $id . '.ico'; + $favicon_url = '/data/favicons/' . $id . '.ico'; + + if (!is_dir ($favicons_dir)) { + if (!mkdir ($favicons_dir, 0755, true)) { + return $url; + } + } + + if (!file_exists ($dest)) { + $c = curl_init ($url); + curl_setopt ($c, CURLOPT_HEADER, false); + curl_setopt ($c, CURLOPT_RETURNTRANSFER, true); + curl_setopt ($c, CURLOPT_BINARYTRANSFER, true); + $imgRaw = curl_exec ($c); + + if (curl_getinfo ($c, CURLINFO_HTTP_CODE) == 200) { + $file = fopen ($dest, 'w'); + if ($file === false) { + return $url; + } + + fwrite ($file, $imgRaw); + fclose ($file); + } else { + return $url; + } + + curl_close ($c); + } + + return $favicon_url; +} -- cgit v1.2.3 From a0d9d93ad2f6a174c0476bd596d6fddda77d0b04 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sun, 28 Apr 2013 13:30:34 +0200 Subject: Fix issue #62 : création d'un logo (temporaire ?) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/layout/header.phtml | 1 + app/layout/layout.phtml | 3 + public/favicon.ico | Bin 0 -> 1150 bytes public/favicon.png | Bin 0 -> 685 bytes public/logo.png | Bin 0 -> 1743 bytes public/logo.svg | 535 ++++++++++++++++++++++++++++++++++++++++++++++ public/theme/freshrss.css | 7 + 7 files changed, 546 insertions(+) create mode 100644 public/favicon.ico create mode 100644 public/favicon.png create mode 100644 public/logo.png create mode 100644 public/logo.svg diff --git a/app/layout/header.phtml b/app/layout/header.phtml index cab56e7d8..d6fe41950 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -11,6 +11,7 @@

    +