Browse Source

- Remplacement de time() par $_SERVER['REQUEST_TIME'] (gain de perf)
- Supression de la colonne unread des flux qui ne sert plsu a rien
- Résolution de l'affichage du pubdate qui ne correpondait pas aux preferences
- Chargement uniquement des informations indispensables pour les evenements (gain de perf ennoooorme :D)

git-svn-id: http://projet.idleman.fr/leed.svn@32 cbb609ad-8cd9-463b-aa97-3ec7c4f0f680

Valentin CARRUESCO 9 years ago
parent
commit
05a7c9d080
8 changed files with 63 additions and 42 deletions
  1. 4 2
      Event.class.php
  2. 11 13
      Feed.class.php
  3. 4 0
      Folder.class.php
  4. 1 3
      SQLiteEntity.class.php
  5. 3 0
      User.class.php
  6. 9 7
      common.php
  7. 24 10
      index.php
  8. 7 7
      todo.txt

+ 4 - 2
Event.class.php

@@ -34,7 +34,9 @@ class Event extends SQLiteEntity{
 		parent::__construct();
 	}
 
-
+function setId($id){
+		$this->id = $id;
+	}
 
 	function getCreator(){
 		return $this->creator;
@@ -109,7 +111,7 @@ class Event extends SQLiteEntity{
 	}
 
 	function setContent($content){
-		$this->content = str_replace('’','\'',$content);
+		$this->content = utf8_decode(str_replace('’','\'',$content));
 	}
 
 

+ 11 - 13
Feed.class.php

@@ -1,7 +1,7 @@
 <?php
 class Feed extends SQLiteEntity{
 
-	protected $id,$name,$url,$unread=0,$events=array(),$description,$website,$folder,$lastupdate;
+	protected $id,$name,$url,$events=array(),$description,$website,$folder,$lastupdate;
 	protected $TABLE_NAME = 'feed';
 	protected $CLASS_NAME = 'Feed';
 	protected $object_fields = 
@@ -11,7 +11,6 @@ class Feed extends SQLiteEntity{
 		'description'=>'longstring',
 		'website'=>'longstring',
 		'url'=>'longstring',
-		'unread'=>'integer',
 		'lastupdate'=>'string',
 		'folder'=>'integer'
 	);
@@ -170,20 +169,22 @@ class Feed extends SQLiteEntity{
 			$this->description = 'Impossible de se connecter au flux demand&eacute, peut &ecirc;tre est il en maintenance?';
 			$result = false;
 		}
-			$this->lastupdate = time();
+			$this->lastupdate = $_SERVER['REQUEST_TIME'];
 			$this->save();
 			return $result;
 	}
 
 	
-
+	function setId($id){
+		$this->id = $id;
+	}
 
 	function getDescription(){
 		return stripslashes($this->description);
 	}
 
 	function setDescription($description){
-		$this->description = $description;
+		$this->description = html_entity_decode($description);
 	}
 	function getWebSite(){
 		return $this->website;
@@ -210,22 +211,19 @@ class Feed extends SQLiteEntity{
 	}
 
 	function setName($name){
-		$this->name = $name;
+		$this->name = html_entity_decode($name);
 	}
 
-	function getUnread(){
-		return $this->unread;
-	}
 
-	function getEvents($start=0,$limit=10000,$order){
+	function getEvents($start=0,$limit=10000,$order,$columns='*'){
 		$eventManager = new Event();
-		$events = $eventManager->loadAll(array('feed'=>$this->getId()),$order,$start.','.$limit);
+		$events = $eventManager->loadAllOnlyColumn($columns,array('feed'=>$this->getId()),$order,$start.','.$limit);
 		return $events;
 	}
 
 	function countUnreadEvents(){
 		$unreads = array();
-		$results = $this->query("SELECT COUNT(event.id), feed.id FROM event INNER JOIN feed ON (event.feed = feed.id) WHERE event.unread = '1' GROUP BY feed.id") ;
+		$results = Feed::query("SELECT COUNT(event.id), feed.id FROM event INNER JOIN feed ON (event.feed = feed.id) WHERE event.unread = '1' GROUP BY feed.id") ;
 		while($item = $results->fetchArray()){
 			$unreads[$item[1]] = $item[0];
 		}
@@ -234,7 +232,7 @@ class Feed extends SQLiteEntity{
 
 	function getFeedsPerFolder(){
 		$feeds = array();
-		$results = $this->query("SELECT feed.name AS name, feed.id   AS id, feed.url  AS url, folder.id AS folder FROM feed INNER JOIN folder ON ( feed.folder = folder.id ) ;");
+		$results = Feed::query("SELECT feed.name AS name, feed.id   AS id, feed.url  AS url, folder.id AS folder FROM feed INNER JOIN folder ON ( feed.folder = folder.id ) ;");
 		while($item = $results->fetchArray()){
 			$feeds[$item['folder']][$item['id']]['id'] = $item['id'];
 			$feeds[$item['folder']][$item['id']]['name'] = html_entity_decode($item['name']);

+ 4 - 0
Folder.class.php

@@ -16,6 +16,10 @@ class Folder extends SQLiteEntity{
 		parent::__construct();
 	}
 
+	function setId($id){
+		$this->id = $id;
+	}
+
 	function getFeeds(){
 		$feedManager = new Feed();
 		return $feedManager->loadAll(array('folder'=>$this->getId()),'name');

+ 1 - 3
SQLiteEntity.class.php

@@ -214,10 +214,8 @@ class SQLiteEntity extends SQLite3
 			if(!$execQuery) 
 				echo $this->lastErrorMsg();
 			while($queryReturn = $execQuery->fetchArray() ){
-
 				$object = eval(' return new '.$this->CLASS_NAME.'();');
 				foreach($this->object_fields as $field=>$type){
-
 					if(isset($queryReturn[$field])) eval('$object->'.$field .'= html_entity_decode(\''. addslashes($queryReturn[$field]).'\');');
 				}
 				$objects[] = $object;
@@ -227,7 +225,7 @@ class SQLiteEntity extends SQLite3
 	}
 
 	public function loadAllOnlyColumn($selColumn,$columns,$order=null,$limit=null,$operation="=",$debug='false'){
-		eval('$objects = $this->loadAll($columns,null,null,\''.$operation.'\',\''.$debug.'\',\''.$selColumn.'\');');
+		eval('$objects = $this->loadAll($columns,\''.$order.'\',\''.$limit.'\',\''.$operation.'\',\''.$debug.'\',\''.$selColumn.'\');');
 		if(count($objects)==0)$objects = array();
 		return $objects;
 	}

+ 3 - 0
User.class.php

@@ -15,6 +15,9 @@ class User extends SQLiteEntity{
 		parent::__construct();
 	}
 
+	function setId($id){
+		$this->id = $id;
+	}
 
 	function exist($login,$password){
 		$userManager = new User();

+ 9 - 7
common.php

@@ -1,12 +1,14 @@
 <?php session_start();
 $start=microtime(true);
-require_once('SQLiteEntity.class.php');
-require_once('Feed.class.php');
-require_once('Event.class.php');
-require_once('Functions.class.php');
-require_once('User.class.php');
-require_once('Folder.class.php');
-require_once('Configuration.class.php');
+class_exists('SQLiteEntity') or require_once('SQLiteEntity.class.php');
+class_exists('Feed') or require_once('Feed.class.php');
+class_exists('Event') or require_once('Event.class.php');
+class_exists('Functions') or require_once('Functions.class.php');
+class_exists('User') or require_once('User.class.php');
+class_exists('Folder') or require_once('Folder.class.php');
+class_exists('Configuration') or require_once('Configuration.class.php');
+
+//error_reporting(E_ALL);
 
 //Calage de la date
 date_default_timezone_set('Europe/Paris'); 

+ 24 - 10
index.php

@@ -10,13 +10,10 @@ $folders = $folderManager->populate('name');
 $shareOption = ($configurationManager->get('plugin_shaarli')=='1'?$configurationManager->get('plugin_shaarli_link'):false);  
 //Recuperation de tous les non Lu
 $unread = $feedManager->countUnreadEvents();
-
+//recuperation de tous les flux
 $allFeeds = $feedManager->getFeedsPerFolder();
-
 ?>
 		<div id="main" class="wrapper clearfix">
-			
-
 			<!--//////-->
 			<!-- MENU -->
 			<!--//////-->
@@ -46,7 +43,12 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 						<!-- FIN FLUX DU DOSSIER -->
 					</li>
 					<!-- FIN DOSSIER -->
-					<?php } ?>
+					<?php }
+
+					unset($unread);
+					unset($allFeeds);
+					unset($folders);
+					 ?>
 				</ul>
 			</aside>
 
@@ -65,17 +67,27 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 				$articleDisplayDate = $configurationManager->get('articleDisplayDate');
 				$articleDisplayAuthor = $configurationManager->get('articleDisplayAuthor');
 
+				$target = 'title,unread,favorite,';
+				if($articleDisplayContent && $articleView=='partial') $target .= 'description,';
+				if($articleDisplayContent && $articleView!='partial') $target .= 'content,';
+				if($articleDisplayLink) $target .= 'link,';
+				if($articleDisplayDate) $target .= 'pubDate,';
+				if($articleDisplayAuthor) $target .= 'creator,';
+				$target .= 'id';
 				
 
 				switch($action){
 					/* AFFICHAGE DES EVENEMENTS D'UN FLUX EN PARTICULIER */
 					case 'selectedFeed':
 						$currentFeed = $feedManager->getById($_['feed']);
+
 						$numberOfItem = $eventManager->rowCount(array('feed'=>$currentFeed->getId()));
 						$page = (isset($_['page'])?$_['page']:1);
 						$pages = round($numberOfItem/$articlePerPages); 
 						$startArticle = ($page-1)*$articlePerPages;
-						$events = $currentFeed->getEvents($startArticle,$articlePerPages,'pubdate DESC');
+						
+
+						$events = $currentFeed->getEvents($startArticle,$articlePerPages,'pubdate DESC',$target);
 
 						?>
 						<h1><a target="_blank" href="<?php echo $currentFeed->getWebSite(); ?>"><?php echo $currentFeed->getName(); ?></a></h1>
@@ -89,7 +101,9 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 						$page = (isset($_['page'])?$_['page']:1);
 						$pages = round($numberOfItem/$articlePerPages); 
 						$startArticle = ($page-1)*$articlePerPages;
-						$events = $eventManager->loadAll(array('favorite'=>1),'pubDate DESC',$startArticle.','.$articlePerPages);
+
+
+						$events = $eventManager->loadAllOnlyColumn($target,array('favorite'=>1),'pubDate DESC',$startArticle.','.$articlePerPages);
 						?>
 						<h1>Articles favoris (<?php echo $numberOfItem; ?>)</h1>
 						<?php
@@ -102,7 +116,7 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 						$page = (isset($_['page'])?$_['page']:1);
 						$pages = round($numberOfItem/$articlePerPages); 
 						$startArticle = ($page-1)*$articlePerPages;
-						$events = $eventManager->loadAll(array('unread'=>1),'pubDate DESC',$startArticle.','.$articlePerPages);
+						$events = $eventManager->loadAllOnlyColumn($target,array('unread'=>1),'pubDate DESC',$startArticle.','.$articlePerPages);
 						?>
 						<h1>Non lu (<?php echo $numberOfItem; ?>)</h1>
 						<?php
@@ -113,7 +127,7 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 				</header>
 
 				<?php 
-					$time = time();
+					$time = $_SERVER['REQUEST_TIME'];
 					foreach($events as $event){ 
 					$plainDescription = strip_tags($event->getDescription());
 					?>
@@ -122,7 +136,7 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 					<!-- TITRE -->
 					<h2><a onclick="readThis(this,<?php echo $event->getId(); ?>);" target="_blank" href="<?php echo $event->getLink(); ?>" alt="<?php echo $plainDescription; ?>" title="<?php echo $plainDescription; ?>"><?php echo $event->getTitle(); ?></a> </h2>
 					<!-- DETAILS + OPTIONS -->
-					<h3><?php if ($articleDisplayAuthor){ ?>Par <?php echo $event->getCreator(); } if ($articleDisplayLink){ ?> <?php echo $event->getPubdateWithInstant($time); } if ($articleDisplayLink){ ?> - <a href="<?php echo $event->getLink(); ?>" target="_blank">Lien direct vers l'article</a><?php } if($event->getFavorite()!=1){ ?> -  <a class="pointer" onclick="addFavorite(this,<?php echo $event->getId(); ?>);" >Favoriser</a> <?php }else{ ?> <a class="pointer" onclick="removeFavorite(this,<?php echo $event->getId(); ?>);" >D&eacute;favoriser</a> <?php } if($shareOption!=false){ ?> <button  alt="partager sur shaarli" title="partager sur shaarli" onclick="window.location.href='<?php echo $shareOption.'/index.php?post='.rawurlencode($event->getLink()).'&title='.$event->getTitle().'&source=bookmarklet' ?>'">Shaare</button><?php } ?> - <span class="pointer" onclick="readThis(this,<?php echo $event->getId(); ?>);">(marquer comme lu)</span></h3>
+					<h3><?php if ($articleDisplayAuthor){ ?>Par <?php echo $event->getCreator(); } if ($articleDisplayDate){ ?> <?php echo $event->getPubdateWithInstant($time); } if ($articleDisplayLink){ ?> - <a href="<?php echo $event->getLink(); ?>" target="_blank">Lien direct vers l'article</a><?php } if($event->getFavorite()!=1){ ?> -  <a class="pointer" onclick="addFavorite(this,<?php echo $event->getId(); ?>);" >Favoriser</a> <?php }else{ ?> <a class="pointer" onclick="removeFavorite(this,<?php echo $event->getId(); ?>);" >D&eacute;favoriser</a> <?php } if($shareOption!=false){ ?> <button  alt="partager sur shaarli" title="partager sur shaarli" onclick="window.location.href='<?php echo $shareOption.'/index.php?post='.rawurlencode($event->getLink()).'&title='.$event->getTitle().'&source=bookmarklet' ?>'">Shaare</button><?php } ?> - <span class="pointer" onclick="readThis(this,<?php echo $event->getId(); ?>);">(marquer comme lu)</span></h3>
 					<!-- CONTENU/DESCRIPTION -->
 					<?php if($articleDisplayContent){ ?><p><?php if ($articleView=='partial'){echo $event->getDescription();}else{echo $event->getContent();} ?></p> <?php } ?>
 				</section>

+ 7 - 7
todo.txt

@@ -6,13 +6,10 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 ==== DERNIER COMMIT ====
 ========================
 
- - Affichage du temps d'execution en bas de page
- - Mutualisation des requêtes unread pour gain de perfs 
- - Mutualisation des requêtes de flux par dossiers pour gain de perfs
- - La requete perssonalisée pour supprimer les evenements lors de la supression d'un dossier fonctionne mieux
-
-(merci a remi wick pour les conseils de perfs)
-
+- Remplacement de time() par $_SERVER['REQUEST_TIME'] (gain de perf)
+- Supression de la colonne unread des flux qui ne sert plsu a rien
+- Résolution de l'affichage du pubdate qui ne correpondait pas aux preferences
+- Chargement uniquement des informations indispensables pour les evenements (gain de perf ennoooorme :D)
 =========================
 ==== BUGS CONSTATES  ====
 =========================
@@ -27,6 +24,7 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 ==== SUGGESTIONS ====
 =====================
 
+- Verifier que les connexions a la base sql ne sont pas multiples inutilement
 - Possibilité de choisir de classer les flux du plus récent au plus ancien (et inversement)
 - Ajout un plugin pour Sharrre ( http://sharrre.com/ )
 - Proposer un .sh d'installation complete du programme + cron automatique
@@ -34,6 +32,8 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 - Fermer un dossier lors d'une ouverture d'un autre (a configurer dans les prefs).
 - Possibilité de parser a travers un proxy
 - Mettre une verif sur le timeout et le safe mode a l'installation avec un warning si le safe mode est a 1 et le timeout !=0
+- Dissocier l'appel du menu de l'appl des flux via ajax pour eviter de recharhger inutilement le menu a chaque fois ? (gain de perfs...)
+Faire un loadAllOnlyColumn au lieu de loadAll surtout sur les events avec preference sans contenu ou desc.
 
 =================
 ==== A TRIER ====