diff options
Diffstat (limited to 'app/controllers/feedController.php')
| -rwxr-xr-x | app/controllers/feedController.php | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php index 9ce38a03f..2bbd5ab49 100755 --- a/app/controllers/feedController.php +++ b/app/controllers/feedController.php @@ -20,6 +20,15 @@ class feedController extends ActionController { $this->catDAO->checkDefault (); } + private static function entryDateComparer($e1, $e2) { + $d1 = $e1->date(true); + $d2 = $e2->date(true); + if ($d1 === $d2) { + return 0; + } + return ($d1 < $d2) ? -1 : 1; + } + public function addAction () { if (Request::isPost ()) { $url = Request::param ('url_rss'); @@ -75,6 +84,7 @@ class feedController extends ActionController { } else { $entryDAO = new EntryDAO (); $entries = $feed->entries (); + usort($entries, 'self::entryDateComparer'); // on calcule la date des articles les plus anciens qu'on accepte $nb_month_old = $this->view->conf->oldEntries (); @@ -87,6 +97,7 @@ class feedController extends ActionController { if ($entry->date (true) >= $date_min || $feed->keepHistory ()) { $values = $entry->toArray (); + $values['id'] = min(time(), $entry->date (true)) . '.' . rand(0, 999999); $entryDAO->addEntry ($values); } } @@ -173,21 +184,21 @@ class feedController extends ActionController { try { $feed->load (); $entries = $feed->entries (); + usort($entries, 'self::entryDateComparer'); - //For this feed, check last n entry IDs already in database - $existingIds = array_fill_keys ($entryDAO->listLastIdsByFeed ($feed->id (), count($entries) + 10), 1); + //For this feed, check last n entry GUIDs already in database + $existingGuids = array_fill_keys ($entryDAO->listLastGuidsByFeed ($feed->id (), count($entries) + 10), 1); - // ajout des articles en masse sans se soucier des erreurs - // On ne vérifie pas que l'article n'est pas déjà en BDD - // car demanderait plus de ressources - // La BDD refusera l'ajout de son côté car l'id doit être - // unique + // On ne vérifie pas strictement que l'article n'est pas déjà en BDD + // La BDD refusera l'ajout car (id_feed, guid) doit être unique $feedDAO->beginTransaction (); foreach ($entries as $entry) { - if ((!isset ($existingIds[$entry->id ()])) && + if ((!isset ($existingGuids[$entry->guid ()])) && ($entry->date (true) >= $date_min || $feed->keepHistory ())) { $values = $entry->toArray (); + //Use declared date at first import, otherwise use discovery date + $values['id'] = empty($existingGuids) ? min(time(), $entry->date (true)) . '.' . rand(0, 999999) : microtime(true); $entryDAO->addEntry ($values); } } |
