فهرست منبع

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

Marien Fressinaud 13 سال پیش
والد
کامیت
9e0af957d4
2فایلهای تغییر یافته به همراه47 افزوده شده و 12 حذف شده
  1. 44 0
      app/models/Entry.php
  2. 3 12
      app/models/Feed.php

+ 44 - 0
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);

+ 3 - 12
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;
 		}