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) --- lib/lib_rss.php | 51 +++++---------------------------------------------- 1 file changed, 5 insertions(+), 46 deletions(-) (limited to 'lib') 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') 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') 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