summaryrefslogtreecommitdiff
path: root/app/controllers/feedController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/feedController.php')
-rwxr-xr-xapp/controllers/feedController.php27
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);
}
}