From 244026874aba991e7feb37f74a61b192f1bda5ac Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Wed, 17 Apr 2013 19:24:21 +0200 Subject: Fix issue #61 : amélioration import OPML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/lib_rss.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/lib_rss.php') diff --git a/lib/lib_rss.php b/lib/lib_rss.php index b9202755b..81a98590e 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -124,7 +124,11 @@ function opml_import ($xml) { } if ($title) { - $cat = new Category ($title); + $catDAO = new CategoryDAO (); + $cat = $catDAO->searchByName ($title); + if ($cat === false) { + $cat = new Category ($title); + } $categories[] = $cat; $feeds = array_merge ($feeds, getFeedsOutline ($outline, $cat->id ())); -- cgit v1.2.3 From 81ea32d53e85b623356f56910b0a7aa9acf6bcd6 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sat, 27 Apr 2013 15:17:10 +0200 Subject: Gestion de la traduction pour les dates (bug #38) --- app/i18n/fr.php | 30 ++++++++++++++++++++++++++ app/views/index/index.phtml | 2 +- lib/lib_rss.php | 51 +++++---------------------------------------- 3 files changed, 36 insertions(+), 47 deletions(-) (limited to 'lib/lib_rss.php') diff --git a/app/i18n/fr.php b/app/i18n/fr.php index 2ddac3066..652ec2782 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -183,4 +183,34 @@ return array ( 'freshrss_description' => 'FreshRSS est un agrégateur de flux RSS à auto-héberger à l\'image de RSSLounge, TinyTinyRSS ou Leed. Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable. L\'objectif étant d\'offrir une alternative sérieuse au futur feu-Google Reader.', 'credits' => 'Crédits', 'credits_content' => 'Des éléments de design sont issus du projet Bootstrap bien que FreshRSS n\'utilise pas ce framework. Les icônes sont issues du projet GNOME. La police Open Sans utilisée a été créée par Steve Matteson. Les favicons sont récupérés grâce au site getFavicon. FreshRSS repose sur Minz, un framework PHP.', + + // DATE + 'january' => 'janvier', + 'february' => 'février', + 'march' => 'mars', + 'april' => 'avril', + 'may' => 'mai', + 'june' => 'juin', + 'july' => 'juillet', + 'august' => 'août', + 'september' => 'septembre', + 'october' => 'octobre', + 'november' => 'novembre', + 'december' => 'décembre', + // format spécial pour la fonction date() + 'Jan' => '\j\a\n\v\i\e\r', + 'Feb' => '\f\é\v\r\i\e\r', + 'Mar' => '\m\a\r\s', + 'Apr' => '\a\v\r\i\l', + 'May' => '\m\a\i', + 'Jun' => '\j\u\i\n', + 'Jul' => '\j\u\i\l\l\e\t', + 'Aug' => '\a\o\û\t', + 'Sep' => '\s\e\p\t\e\m\b\r\e', + 'Oct' => '\o\c\t\o\b\r\e', + 'Nov' => '\n\o\v\e\m\b\r\e', + 'Dec' => '\d\é\c\e\m\b\r\e', + // format pour la fonction date(), %s permet d'indiquer le mois en toutes lettres + 'format_date' => 'd %s Y', + 'format_date_hour' => '\l\e d %s Y \à H\:i', ); diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml index 5c6ab0376..a7b67bcbc 100644 --- a/app/views/index/index.phtml +++ b/app/views/index/index.phtml @@ -51,7 +51,7 @@ if (isset ($this->entryPaginator)) { feed (true); ?>
  • name (); ?>
  • title (); ?>
  • -
  • le date (); ?>
  • +
  • date (); ?>
  • diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 81a98590e..76c304064 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -20,55 +20,14 @@ function small_hash ($txt) { } function timestamptodate ($t, $hour = true) { - $jour = date ('d', $t); - $mois = date ('m', $t); - $annee = date ('Y', $t); - - switch ($mois) { - case 1: - $mois = 'janvier'; - break; - case 2: - $mois = 'février'; - break; - case 3: - $mois = 'mars'; - break; - case 4: - $mois = 'avril'; - break; - case 5: - $mois = 'mai'; - break; - case 6: - $mois = 'juin'; - break; - case 7: - $mois = 'juillet'; - break; - case 8: - $mois = 'août'; - break; - case 9: - $mois = 'septembre'; - break; - case 10: - $mois = 'octobre'; - break; - case 11: - $mois = 'novembre'; - break; - case 12: - $mois = 'décembre'; - break; - } - - $date = $jour . ' ' . $mois . ' ' . $annee; + $month = Translate::t (date('M', $t)); if ($hour) { - return $date . date (' \à H\:i', $t); + $date = Translate::t ('format_date_hour', $month); } else { - return $date; + $date = Translate::t ('format_date', $month); } + + return date ($date, $t); } function sortEntriesByDate ($entry1, $entry2) { -- 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(-) (limited to 'lib/lib_rss.php') 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 00bac232e0976a2ca09e7c4e73956cd802176480 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sun, 28 Apr 2013 16:34:25 +0200 Subject: Importation des flux ok + ajout de commentaires (issue #28) --- app/controllers/configureController.php | 7 ++++++- app/controllers/feedController.php | 10 +++++++++- lib/lib_rss.php | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'lib/lib_rss.php') diff --git a/app/controllers/configureController.php b/app/controllers/configureController.php index d6d210099..2f56da177 100755 --- a/app/controllers/configureController.php +++ b/app/controllers/configureController.php @@ -199,7 +199,7 @@ class configureController extends ActionController { $this->view->req = Request::param ('q'); if ($this->view->req == 'export') { - View::_title ('feeds.opml'); + View::_title ('freshrss_feeds.opml'); $this->view->_useLayout (false); header('Content-Type: text/xml; charset=utf-8'); @@ -217,8 +217,11 @@ class configureController extends ActionController { $this->view->categories = $list; } elseif ($this->view->req == 'import' && Request::isPost ()) { if ($_FILES['file']['error'] == 0) { + // on parse le fichier OPML pour récupérer les catégories et les flux associés list ($categories, $feeds) = opml_import (file_get_contents ($_FILES['file']['tmp_name'])); + // On redirige vers le controller feed qui va se charger d'insérer les flux en BDD + // les flux sont mis au préalable dans des variables de Request Request::_param ('q', 'null'); Request::_param ('categories', $categories); Request::_param ('feeds', $feeds); @@ -228,6 +231,8 @@ class configureController extends ActionController { $feedDAO = new FeedDAO (); $this->view->feeds = $feedDAO->listFeeds (); + + // au niveau de la vue, permet de ne pas voir un flux sélectionné dans la liste $this->view->flux = false; View::prependTitle (Translate::t ('import_export_opml') . ' - '); diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php index ea68952a0..ebbf3259f 100755 --- a/app/controllers/feedController.php +++ b/app/controllers/feedController.php @@ -217,18 +217,23 @@ class feedController extends ActionController { $categories = Request::param ('categories', array ()); $feeds = Request::param ('feeds', array ()); + // on ajoute les catégories en masse dans une fonction à part $this->addCategories ($categories); + // on calcule la date des articles les plus anciens qu'on accepte $nb_month_old = $this->view->conf->oldEntries (); $date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old); + // la variable $error permet de savoir si une erreur est survenue + // Le but est de ne pas arrêter l'import même en cas d'erreur + // L'utilisateur sera mis au courant s'il y a eu des erreurs, mais + // ne connaîtra pas les détails. Ceux-ci seront toutefois logguées $error = false; $i = 0; foreach ($feeds as $feed) { try { $feed->load (); - // Enregistrement du flux $values = array ( 'id' => $feed->id (), 'url' => $feed->url (), @@ -239,6 +244,7 @@ class feedController extends ActionController { 'lastUpdate' => 0 ); + // ajout du flux que s'il n'est pas déjà en BDD if (!$feedDAO->searchByUrl ($values['url'])) { if (!$feedDAO->addFeed ($values)) { $error = true; @@ -255,12 +261,14 @@ class feedController extends ActionController { } else { $res = Translate::t ('feeds_imported'); } + $notif = array ( 'type' => 'good', 'content' => $res ); Session::_param ('notification', $notif); + // et on redirige vers la page import/export Request::forward (array ( 'c' => 'configure', 'a' => 'importExport' diff --git a/lib/lib_rss.php b/lib/lib_rss.php index e004b7498..c574cd3fd 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -83,6 +83,12 @@ function opml_import ($xml) { } if ($title) { + // Permet d'éviter les soucis au niveau des id : + // ceux-ci sont générés en fonction de la date, + // un flux pourrait être dans une catégorie X avec l'id Y + // alors qu'il existe déjà la catégorie X mais avec l'id Z + // Y ne sera pas ajouté et le flux non plus vu que l'id + // de sa catégorie n'exisera pas $catDAO = new CategoryDAO (); $cat = $catDAO->searchByName ($title); if ($cat === false) { -- cgit v1.2.3