Fix issue #85 : la récupération des flux tronqués vérifie d'abord si l'article n'est pas déjà en BDD pour éviter énormément de requêtes inutiles

pull/136/head
Marien Fressinaud 11 years ago
parent 0ff751b443
commit 9e0af957d4
  1. 44
      app/models/Entry.php
  2. 15
      app/models/Feed.php

@ -194,6 +194,29 @@ class Entry extends Model {
}
}
public function loadCompleteContent($pathEntries) {
// Gestion du contenu
// On cherche à récupérer les articles en entier... même si le flux ne le propose pas
if ($pathEntries) {
$entryDAO = new EntryDAO();
$entry = $entryDAO->searchByGuid($this->feed, $this->guid);
if($entry) {
// l'article existe déjà en BDD, en se contente de recharger ce contenu
$this->content = $entry->content();
} else {
try {
// l'article n'est pas en BDD, on va le chercher sur le site
$this->content = get_content_by_parsing(
$this->link(), $pathEntries
);
} catch (Exception $e) {
// rien à faire, on garde l'ancien contenu (requête a échoué)
}
}
}
}
public function toArray () {
return array (
'id' => $this->id (),
@ -360,6 +383,27 @@ class EntryDAO extends Model_pdo {
}
}
public function searchByGuid ($feed_id, $id) {
// un guid est unique pour un flux donné
$sql = 'SELECT * FROM entry WHERE id_feed=? AND guid=?';
$stm = $this->bd->prepare ($sql);
$values = array (
$feed_id,
$id
);
$stm->execute ($values);
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
list ($entry, $next) = HelperEntry::daoToEntry ($res);
if (isset ($entry[0])) {
return $entry[0];
} else {
return false;
}
}
public function searchById ($id) {
$sql = 'SELECT * FROM entry WHERE id=?';
$stm = $this->bd->prepare ($sql);

@ -216,18 +216,7 @@ class Feed extends Model {
}
}
// Gestion du contenu
// On cherche à récupérer les articles en entier... même si le flux ne le propose pas
$path = $this->pathEntries ();
if ($path) {
try {
$content = get_content_by_parsing ($item->get_permalink (), $path);
} catch (Exception $e) {
$content = $item->get_content ();
}
} else {
$content = $item->get_content ();
}
$content = $item->get_content ();
$entry = new Entry (
$this->id (),
@ -239,6 +228,8 @@ class Feed extends Model {
$date ? $date : time ()
);
$entry->_tags ($tags);
// permet de récupérer le contenu des flux tronqués
$entry->loadCompleteContent($this->pathEntries());
$entries[$entry->id ()] = $entry;
}

Loading…
Cancel
Save