summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-06-15 13:02:36 +0200
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-06-15 13:02:36 +0200
commit9e0af957d4eeb7bb9e2abdd7a45d1a21e0b3cfdb (patch)
tree4715980855ce2e29582296e250e02f6c1396daf6
parent0ff751b443604ccb8cd0eb69050f59298c98a492 (diff)
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
-rwxr-xr-xapp/models/Entry.php44
-rw-r--r--app/models/Feed.php15
2 files changed, 47 insertions, 12 deletions
diff --git a/app/models/Entry.php b/app/models/Entry.php
index 1d944b184..050407390 100755
--- a/app/models/Entry.php
+++ b/app/models/Entry.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);
diff --git a/app/models/Feed.php b/app/models/Feed.php
index 0fc9640bc..15568d06a 100644
--- a/app/models/Feed.php
+++ b/app/models/Feed.php
@@ -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;
}