Просмотр исходного кода

Fix issue #118 : option pour garder historique

*** ATTENTION, MODIFICATION DE LA BDD ***

Cette option permet de garder les vieux articles d'un flux en même s'ils
sont plus vieux que la limite des X mois d'historique (3 par défaut)

Les modifications de la base de données :
- ajout du champ "keep_history int(1) DEFAULT 0" à la table feed
- suppression des champs "is_public" et "lastUpdate" de la table entry
  (n'étaient plus utilisés de toute façon)
Marien Fressinaud 12 лет назад
Родитель
Сommit
9642fbb221

+ 8 - 1
app/controllers/configureController.php

@@ -92,12 +92,18 @@ class configureController extends ActionController {
 
 				if (Request::isPost () && $this->view->flux) {
 					$name = Request::param ('name', '');
+					$hist = Request::param ('keep_history', 'no');
 					$cat = Request::param ('category', 0);
 					$path = Request::param ('path_entries', '');
 					$priority = Request::param ('priority', 0);
 					$user = Request::param ('http_user', '');
 					$pass = Request::param ('http_pass', '');
 
+					$keep_history = false;
+					if ($hist == 'yes') {
+						$keep_history = true;
+					}
+
 					$httpAuth = '';
 					if ($user != '' || $pass != '') {
 						$httpAuth = $user . ':' . $pass;
@@ -108,7 +114,8 @@ class configureController extends ActionController {
 						'category' => $cat,
 						'pathEntries' => $path,
 						'priority' => $priority,
-						'httpAuth' => $httpAuth
+						'httpAuth' => $httpAuth,
+						'keep_history' => $keep_history
 					);
 
 					if ($feedDAO->updateFeed ($id, $values)) {

+ 4 - 2
app/controllers/feedController.php

@@ -69,7 +69,8 @@ class feedController extends ActionController {
 
 					// on ajoute les articles en masse sans vérification
 					foreach ($entries as $entry) {
-						if ($entry->date (true) >= $date_min) {
+						if ($entry->date (true) >= $date_min ||
+						    $feed->keepHistory ()) {
 							$values = $entry->toArray ();
 							$entryDAO->addEntry ($values);
 						}
@@ -150,7 +151,8 @@ class feedController extends ActionController {
 				// La BDD refusera l'ajout de son côté car l'id doit être
 				// unique
 				foreach ($entries as $entry) {
-					if ($entry->date (true) >= $date_min) {
+					if ($entry->date (true) >= $date_min ||
+					    $feed->keepHistory ()) {
 						$values = $entry->toArray ();
 						$entryDAO->addEntry ($values);
 					}

+ 1 - 0
app/i18n/en.php

@@ -129,6 +129,7 @@ return array (
 	'website_url'			=> 'Website URL',
 	'feed_url'			=> 'Feed URL',
 	'number_articles'		=> 'Number of articles',
+	'keep_history'			=> 'Keep history?',
 	'categorize'			=> 'Store in a category',
 	'advanced'			=> 'Advanced',
 	'show_in_all_flux'		=> 'Show in principal stream',

+ 1 - 0
app/i18n/fr.php

@@ -129,6 +129,7 @@ return array (
 	'website_url'			=> 'URL du site',
 	'feed_url'			=> 'URL du flux',
 	'number_articles'		=> 'Nombre d\'articles',
+	'keep_history'			=> 'Garder l\'historique ?',
 	'categorize'			=> 'Ranger dans une catégorie',
 	'advanced'			=> 'Avancé',
 	'show_in_all_flux'		=> 'Afficher dans le flux principal',

+ 4 - 35
app/models/Entry.php

@@ -11,14 +11,11 @@ class Entry extends Model {
 	private $date;
 	private $is_read;
 	private $is_favorite;
-	private $is_public;
 	private $feed;
 	private $tags;
-	private $lastUpdate;
 
 	public function __construct ($feed = '', $guid = '', $title = '', $author = '', $content = '',
-	                             $link = '', $pubdate = 0, $is_read = false, $is_favorite = false,
-	                             $is_public = false) {
+	                             $link = '', $pubdate = 0, $is_read = false, $is_favorite = false) {
 		$this->_guid ($guid);
 		$this->_title ($title);
 		$this->_author ($author);
@@ -27,9 +24,7 @@ class Entry extends Model {
 		$this->_date ($pubdate);
 		$this->_isRead ($is_read);
 		$this->_isFavorite ($is_favorite);
-		$this->_isPublic ($is_public);
 		$this->_feed ($feed);
-		$this->_lastUpdate ($pubdate);
 		$this->_tags (array ());
 	}
 
@@ -72,9 +67,6 @@ class Entry extends Model {
 	public function isFavorite () {
 		return $this->is_favorite;
 	}
-	public function isPublic () {
-		return $this->is_public;
-	}
 	public function feed ($object = false) {
 		if ($object) {
 			$feedDAO = new FeedDAO ();
@@ -94,13 +86,6 @@ class Entry extends Model {
 			return $this->tags;
 		}
 	}
-	public function lastUpdate ($raw = false) {
-		if ($raw) {
-			return $this->lastUpdate;
-		} else {
-			return timestamptodate ($this->lastUpdate);
-		}
-	}
 
 	public function _id ($value) {
 		$this->id = $value;
@@ -133,9 +118,6 @@ class Entry extends Model {
 	public function _isFavorite ($value) {
 		$this->is_favorite = $value;
 	}
-	public function _isPublic ($value) {
-		$this->is_public = $value;
-	}
 	public function _feed ($value) {
 		$this->feed = $value;
 	}
@@ -152,13 +134,6 @@ class Entry extends Model {
 
 		$this->tags = $value;
 	}
-	public function _lastUpdate ($value) {
-		if (is_int (intval ($value))) {
-			$this->lastUpdate = $value;
-		} else {
-			$this->lastUpdate = $this->date (true);
-		}
-	}
 
 	public function isDay ($day) {
 		$date = getdate ();
@@ -212,9 +187,7 @@ class Entry extends Model {
 			'date' => $this->date (true),
 			'is_read' => $this->isRead (),
 			'is_favorite' => $this->isFavorite (),
-			'is_public' => $this->isPublic (),
 			'id_feed' => $this->feed (),
-			'lastUpdate' => $this->lastUpdate (true),
 			'tags' => $this->tags (true)
 		);
 	}
@@ -222,7 +195,7 @@ class Entry extends Model {
 
 class EntryDAO extends Model_pdo {
 	public function addEntry ($valuesTmp) {
-		$sql = 'INSERT INTO ' . $this->prefix . 'entry(id, guid, title, author, content, link, date, is_read, is_favorite, is_public, id_feed, lastUpdate, tags) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
+		$sql = 'INSERT INTO ' . $this->prefix . 'entry(id, guid, title, author, content, link, date, is_read, is_favorite, id_feed, tags) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
 		$stm = $this->bd->prepare ($sql);
 
 		$values = array (
@@ -235,9 +208,7 @@ class EntryDAO extends Model_pdo {
 			$valuesTmp['date'],
 			$valuesTmp['is_read'],
 			$valuesTmp['is_favorite'],
-			$valuesTmp['is_public'],
 			$valuesTmp['id_feed'],
-			$valuesTmp['lastUpdate'],
 			$valuesTmp['tags'],
 		);
 
@@ -350,7 +321,7 @@ class EntryDAO extends Model_pdo {
 
 	public function cleanOldEntries ($nb_month) {
 		$date = 60 * 60 * 24 * 30 * $nb_month;
-		$sql = 'DELETE FROM ' . $this->prefix . 'entry WHERE date <= ? AND is_favorite = 0';
+		$sql = 'DELETE e.* FROM ' . $this->prefix . 'entry e INNER JOIN ' . $this->prefix . 'feed f ON e.id_feed = f.id WHERE e.date <= ? AND e.is_favorite = 0 AND f.keep_history = 0';
 		$stm = $this->bd->prepare ($sql);
 
 		$values = array (
@@ -557,11 +528,9 @@ class HelperEntry {
 			$dao['link'],
 			$dao['date'],
 			$dao['is_read'],
-			$dao['is_favorite'],
-			$dao['is_public']
+			$dao['is_favorite']
 		);
 
-		$entry->_lastUpdate ($dao['lastUpdate']);
 		$entry->_tags ($dao['tags']);
 
 		if (isset ($dao['id'])) {

+ 14 - 1
app/models/Feed.php

@@ -13,6 +13,7 @@ class Feed extends Model {
 	private $pathEntries = '';
 	private $httpAuth = '';
 	private $error = false;
+	private $keep_history = false;
 
 	public function __construct ($url) {
 		$this->_url ($url);
@@ -73,6 +74,9 @@ class Feed extends Model {
 	public function inError () {
 		return $this->error;
 	}
+	public function keepHistory () {
+		return $this->keep_history;
+	}
 	public function nbEntries () {
 		$feedDAO = new FeedDAO ();
 		return $feedDAO->countEntries ($this->id ());
@@ -150,6 +154,14 @@ class Feed extends Model {
 		}
 		$this->error = $value;
 	}
+	public function _keepHistory ($value) {
+		if ($value) {
+			$value = true;
+		} else {
+			$value = false;
+		}
+		$this->keep_history = $value;
+	}
 
 	public function load () {
 		if (!is_null ($this->url)) {
@@ -242,7 +254,7 @@ class Feed extends Model {
 
 class FeedDAO extends Model_pdo {
 	public function addFeed ($valuesTmp) {
-		$sql = 'INSERT INTO ' . $this->prefix . 'feed (id, url, category, name, website, description, lastUpdate, priority, httpAuth, error) VALUES(?, ?, ?, ?, ?, ?, ?, 10, ?, 0)';
+		$sql = 'INSERT INTO ' . $this->prefix . 'feed (id, url, category, name, website, description, lastUpdate, priority, httpAuth, error, keep_history) VALUES(?, ?, ?, ?, ?, ?, ?, 10, ?, 0, 0)';
 		$stm = $this->bd->prepare ($sql);
 
 		$values = array (
@@ -493,6 +505,7 @@ class HelperFeed {
 			$list[$key]->_pathEntries ($dao['pathEntries']);
 			$list[$key]->_httpAuth (base64_decode ($dao['httpAuth']));
 			$list[$key]->_error ($dao['error']);
+			$list[$key]->_keepHistory ($dao['keep_history']);
 
 			if (isset ($dao['id'])) {
 				$list[$key]->_id ($dao['id']);

+ 4 - 0
app/views/configure/feed.phtml

@@ -43,6 +43,10 @@
 			<label class="group-name"><?php echo Translate::t ('number_articles'); ?></label>
 			<div class="group-controls">
 				<span class="control"><?php echo $this->flux->nbEntries (); ?></span>
+				<label class="checkbox" for="keep_history">
+					<input type="checkbox" name="keep_history" id="keep_history" value="yes"<?php echo $this->flux->keepHistory () == 'yes' ? ' checked="checked"' : ''; ?> />
+					<?php echo Translate::t ('keep_history'); ?>
+				</label>
 			</div>
 		</div>
 

+ 3 - 4
public/install.php

@@ -27,6 +27,7 @@ define ('SQL_REQ_FEED', 'CREATE TABLE IF NOT EXISTS `%sfeed` (
   `pathEntries` varchar(500) DEFAULT NULL,
   `httpAuth` varchar(500) DEFAULT NULL,
   `error` int(1) NOT NULL DEFAULT \'0\',
+  `keep_history` int(1) NOT NULL DEFAULT \'0\',
   PRIMARY KEY (`id`),
   FOREIGN KEY (`category`) REFERENCES %scategory(id) ON DELETE SET NULL ON UPDATE CASCADE
 );');
@@ -39,12 +40,10 @@ define ('SQL_REQ_ENTRY', 'CREATE TABLE IF NOT EXISTS `%sentry` (
   `content` text NOT NULL,
   `link` text NOT NULL,
   `date` int(11) NOT NULL,
-  `is_read` int(11) NOT NULL,
-  `is_favorite` int(11) NOT NULL,
-  `is_public` int(1) NOT NULL,
+  `is_read` int(11) NOT NULL DEFAULT \'0\',
+  `is_favorite` int(11) NOT NULL DEFAULT \'0\',
   `id_feed` varchar(6) NOT NULL,
   `tags` text NOT NULL,
-  `lastUpdate` int(11) NOT NULL,
   PRIMARY KEY (`id`),
   FOREIGN KEY (`id_feed`) REFERENCES %sfeed(id) ON DELETE CASCADE ON UPDATE CASCADE
 );');