Browse Source

- Ajout automatique du "/" en fin de racine de projet
- Mise à jour de l'installation pour préciser un chemin perssonalisé dans l'exemple du cron (fichier de sortie)
- En cas de contenu absent , leed copie bien la description et reciproquement
- [IMPOSSIBLE DE REPRODUIRE LE BUG] il y a un petit problème avec l'option d'affichage partiel/complet (passage en complet qui fait disparaître les "contenus"), d'ailleurs une option de déploiement des contenus des flux serait un plus, surtout sur la page d'accueil.
- Possibilité de pouvoir renommer un flux
- Possibilité de voir le nombre d'event non lu par dossier (au lieu du nombre de flux)
- Possibilité de lire les non lu par dossiers
- Ajout du numéro de version de Leed en rapport avec le Release dans a propos

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

Valentin CARRUESCO 8 years ago
parent
commit
53ecd43c8e
12 changed files with 164 additions and 28 deletions
  1. 19 5
      Event.class.php
  2. 5 0
      Feed.class.php
  3. 23 0
      Folder.class.php
  4. 4 0
      SQLiteEntity.class.php
  5. 9 1
      action.php
  6. 5 1
      addFeed.php
  7. 1 1
      constant.php
  8. 26 0
      css/style.css
  9. 30 10
      index.php
  10. 3 3
      install.php
  11. 29 0
      js/script.js
  12. 10 7
      todo.txt

+ 19 - 5
Event.class.php

@@ -40,7 +40,19 @@ class Event extends SQLiteEntity{
 		parent::__construct();
 	}
 
-function setId($id){
+
+	function getEventCountPerFolder(){
+		$events = array();
+		$results = $this->customQuery('SELECT COUNT('.$this->TABLE_NAME.'.id),folder.id FROM '.$this->TABLE_NAME.' INNER JOIN feed ON (event.feed = feed.id) INNER JOIN folder ON (folder.id = feed.folder) WHERE '.$this->TABLE_NAME.'.unread=1 GROUP BY folder.id');
+		
+		while($item = $results->fetchArray()){
+			$events[$item[1]] = $item[0];
+		}
+		
+		return $events;
+	}
+
+	function setId($id){
 		$this->id = $id;
 	}
 
@@ -64,8 +76,9 @@ function setId($id){
 		return utf8_encode($this->description);
 	}
 
-	function setDescription($description){
-		$this->description = utf8_decode(str_replace('’','\'',$description));
+	function setDescription($description,$encoding = true){
+		$this->description =  str_replace('’','\'',$description);
+		if($encoding)$this->description = utf8_decode($this->description);
 	}
 
 	function getPubdate($format=false){
@@ -116,8 +129,9 @@ function setId($id){
 		return utf8_encode($this->content);
 	}
 
-	function setContent($content){
-		$this->content = utf8_decode(str_replace('’','\'',$content));
+	function setContent($content,$encoding=true){
+		$this->content = str_replace('’','\'',$content);
+		if($encoding)$this->content = utf8_decode($this->content);
 	}
 
 

+ 5 - 0
Feed.class.php

@@ -142,6 +142,11 @@ class Feed extends SQLiteEntity{
 					if(trim($event->getDescription())=='')
 						$event->setDescription(substr($event->getContent(),0,300).'...<br><a href="'.$event->getLink().'">Lire la suite de l\'article</a>');
 					
+
+					if(trim($event->getContent())=='')
+						$event->setContent($event->getDescription());
+					
+
 						/*//Tentative de detronquage si la description existe
 						if($event->getDescription()!=''){
 							  // preg_match('#<a(.+)href=(.+)>#isU', $event->getDescription(), $matches);

+ 23 - 0
Folder.class.php

@@ -19,6 +19,29 @@ class Folder extends SQLiteEntity{
 		'isopen'=>'integer'
 	);
 
+	function unreadCount(){
+
+	}
+
+
+	function getEvents($start=0,$limit=10000,$order,$columns='*'){
+		$eventManager = new Event();
+		$objects = array();
+		$results = $this->customQuery('SELECT '.$columns.' FROM event INNER JOIN feed ON (event.feed = feed.id) WHERE event.unread=1 AND feed.folder = '.$this->getId().' ORDER BY '.$order.' LIMIT '.$start.','.$limit);
+		
+		while($item = $results->fetchArray()){
+			$object = new Event();
+				foreach($object->getObject_fields() as $field=>$type){
+					if(isset($item[$field])) eval('$object->set'.ucFirst($field) .'(html_entity_decode(\''. addslashes($item[$field]).'\'),false);');
+				}
+				$objects[] = $object;
+				unset($object);
+		}
+
+		
+		return $objects;
+	}
+
 	function __construct(){
 		parent::__construct();
 	}

+ 4 - 0
SQLiteEntity.class.php

@@ -339,5 +339,9 @@ class SQLiteEntity extends SQLite3
 		$this->debug = $debug;
 	}
 
+	public function getObject_fields(){
+		return $this->object_fields;
+	}
+
 }
 ?>

+ 9 - 1
action.php

@@ -72,8 +72,9 @@ switch ($_['action']){
 	case 'updateConfiguration':
 		if($myUser==false) exit('Vous devez vous connecter pour cette action.');
 
+
 			//Ajout des préférences et reglages
-			$configurationManager->put('root',$_['root']);
+			$configurationManager->put('root',(substr($_['root'], strlen($_['root'])-1)=='/'?$_['root']:$_['root'].'/'));
 			//$configurationManager->put('view',$_['view']);
 			$configurationManager->put('articleView',$_['articleView']);
 			$configurationManager->add('articleDisplayContent',$_['articleDisplayContent']);
@@ -248,6 +249,13 @@ switch ($_['action']){
 		}
 	break;
 
+	case 'renameFeed':
+		if($myUser==false) exit('Vous devez vous connecter pour cette action.');
+		if(isset($_['id'])){
+			$feedManager->change(array('name'=>$_['name']),array('id'=>$_['id']));
+		}
+	break;
+
 	case 'removeFolder':
 		if($myUser==false) exit('Vous devez vous connecter pour cette action.');
 		if(isset($_['id'])){

+ 5 - 1
addFeed.php

@@ -114,12 +114,16 @@ require_once('header.php'); ?>
 						<table  style="width:100%;">
 							<?php if (count($feeds)!=0 ) {foreach($feeds as $feed){ ?>
 								<tr>
-									<td style="width:50%;"><a href="index.php?action=selectedFeed&feed=<?php echo $feed->getId();?>" alt="<?php echo $feed->getUrl(); ?>" title="<?php echo $feed->getUrl(); ?>"><?php echo $feed->getName(); ?> </a></td>
+
+
+
+									<td style="width:50%;"><a href="index.php?action=selectedFeed&feed=<?php echo $feed->getId();?>"><?php echo $feed->getName(); ?></a></td>
 									<td><select onchange="changeFeedFolder(this,<?php echo $feed->getId();?>);">
 										<?php foreach($folders as $listFolder){ ?>
 											<option <?php if($feed->getFolder()==$listFolder->getId()){?>selected="selected"<?php } ?> value="<?php echo $listFolder->getId(); ?>"><?php echo $listFolder->getName(); ?></option>
 										<?php } ?>
 									</select></td>
+									<td><button onclick="renameFeed(this,<?php echo $feed->getId(); ?>)">Renommer</button></td>
 									<td><button onclick="window.location='action.php?action=removeFeed&id=<?php echo $feed->getId() ?>'">Supprimer</button></td></tr>
 							<?php }} ?>
 						</table>

+ 1 - 1
constant.php

@@ -7,6 +7,6 @@
  */
 
 	define('VERSION_NUMBER','1');
-	define('VERSION_NAME','Beta');
+	define('VERSION_NAME','Beta (rev 44)');
 
 ?>

+ 26 - 0
css/style.css

@@ -169,7 +169,33 @@ header a,header a:hover,header a:visited{
 	border-radius: 30px;
 }
 
+#main aside a.unreadForFolder,#main aside a.readFolder{
+	
+	background-color:#F16529;
+	border:0px;
+	color:#ffffff;
+	margin:3px 3px 3px 0px;
+	font-size:10px;
+	font-weight:bold;
+	padding:0px 3px 0px 3px;
+	line-height: 20px;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	min-width:20px;
+	display:block;
+	float:right;
+}
 
+#main aside a.readFolder{
+	background-color:#222222;
+	margin-left:3px;
+}
+
+#main aside ul li h1.folder{
+	text-align:left;
+	padding-left:5px;
+}
 
 .loginBloc span{
 	color:#fff;

+ 30 - 10
index.php

@@ -20,6 +20,9 @@ $shareOption = ($configurationManager->get('plugin_shaarli')=='1'?$configuration
 $unread = $feedManager->countUnreadEvents();
 //recuperation de tous les flux
 $allFeeds = $feedManager->getFeedsPerFolder();
+//recuperation de tous les event nons lu par dossiers
+$allEvents = $eventManager->getEventCountPerFolder();
+
 ?>
 		<div id="main" class="wrapper clearfix">
 			<!--//////-->
@@ -37,15 +40,15 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 							//on récupere tous les flux lié au dossier
 						  	//$feeds = $folder->getFeeds();
 						  	$feeds = (isset($allFeeds[$folder->getId()])?$allFeeds[$folder->getId()]:array());
-
+						  	$unreadEventsForFolder = (isset($allEvents[$folder->getId()])?$allEvents[$folder->getId()]:0);
 					?>
 					<!-- DOSSIER -->
-					<li><h1 class="folder" <?php if(count($feeds)!=0){ ?>onclick="toggleFolder(this,<?php echo $folder->getId(); ?>);"<?php } ?>><?php  echo $folder->getName().' ('.count($feeds).')'; ?> <?php if(count($feeds)!=0){ ?> - <a href="action.php?action=readFolder&folder=<?php  echo $folder->getId() ?>">lire tout</a><?php } ?></h1>
+					<li><h1 class="folder" <?php if(count($feeds)!=0){ ?>onclick="toggleFolder(this,<?php echo $folder->getId(); ?>);"<?php } ?>><?php  echo $folder->getName();?><?php if($unreadEventsForFolder!=0){ ?> <a class="unreadForFolder" alt="marquer comme lu le(s) <?php echo $unreadEventsForFolder; ?> evenement(s) non lu(s) de ce dossier" title="marquer comme lu le(s) <?php echo $unreadEventsForFolder; ?> evenement(s) non lu(s) de ce dossier" onclick="if(confirm('Tout marquer comme lu pour ce dossier?'))window.location='action.php?action=readFolder&folder=<?php  echo $folder->getId(); ?>';"><?php echo $unreadEventsForFolder.' non lu</a>'; } ?><a class="readFolder" title="Parcourir les non lus du dossier" alt="Parcourir les non lus du dossier" href="index.php?action=selectedFolder&folder=<?php echo $folder->getId(); ?>">Parcourir</a></h1>
 						<!-- FLUX DU DOSSIER -->
 						<ul <?php if(!$folder->getIsopen()){ ?>style="display:none;"<?php } ?>>
 							<?php if (count($feeds)!=0 ) {
 								foreach($feeds as $feed){ ?>
-								<li><a href="index.php?action=selectedFeed&feed=<?php echo $feed['id'];?>" alt="<?php echo $feed['url']; ?>" title="<?php echo $feed['url']; ?>"><?php echo $feed['name']; ?> </a><?php if(isset($unread[$feed['id']])){ ?>  <button style="margin-left:10px;" onclick="if(confirm('Tout marquer comme lu pour ce flux?'))window.location='action.php?action=readAll&feed=<?php echo $feed['id']; ?>'"><span alt="marquer comme lu" title="marquer comme lu"><?php echo $unread[$feed['id']]; ?></span></button><?php } ?> </li>
+								<li><a href="index.php?action=selectedFeed&feed=<?php echo $feed['id'];?>" alt="<?php echo $feed['url']; ?>" title="<?php echo $feed['url']; ?>"><?php echo $feed['name']; ?> </a><?php if(isset($unread[$feed['id']])){ ?>  <button style="margin-left:10px;" onclick="if(confirm('Tout marquer comme lu pour ce flux?'))window.location='action.php?action=readAll&feed=<?php echo $feed['id']; ?>;'"><span alt="marquer comme lu" title="marquer comme lu"><?php echo $unread[$feed['id']]; ?></span></button><?php } ?> </li>
 							<?php }} ?>
 						</ul>
 						<!-- FIN FLUX DU DOSSIER -->
@@ -75,13 +78,13 @@ $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';
+				$target = 'event.title,event.unread,event.favorite,';
+				if($articleDisplayContent && $articleView=='partial') $target .= 'event.description,';
+				if($articleDisplayContent && $articleView!='partial') $target .= 'event.content,';
+				if($articleDisplayLink) $target .= 'event.link,';
+				if($articleDisplayDate) $target .= 'event.pubDate,';
+				if($articleDisplayAuthor) $target .= 'event.creator,';
+				$target .= 'event.id';
 				
 
 				switch($action){
@@ -105,6 +108,23 @@ $allFeeds = $feedManager->getFeedsPerFolder();
 						<?php
 
 					break;
+					/* AFFICHAGE DES EVENEMENTS D'UN DOSSIER EN PARTICULIER */
+					case 'selectedFolder':
+						$currentFolder = $folderManager->getById($_['folder']);
+						$numberOfItem = $currentFolder->unreadCount();
+						$page = (isset($_['page'])?$_['page']:1);
+						$pages = round($numberOfItem/$articlePerPages); 
+						$startArticle = ($page-1)*$articlePerPages;
+						
+
+						$events = $currentFolder->getEvents($startArticle,$articlePerPages,'event.pubdate DESC',$target);
+
+						?>
+						<h1>Dossier : <?php echo $currentFolder->getName(); ?></h1>
+						<p>Tous les evenements non lu pour le dossier <?php echo $currentFolder->getName(); ?></p>
+						<?php
+
+					break;
 					/* AFFICHAGE DES EVENEMENTS FAVORIS */
 					case 'favorites':
 						$numberOfItem = $eventManager->rowCount(array('favorite'=>1));

+ 3 - 3
install.php

@@ -88,7 +88,7 @@ if(isset($_['installButton'])){
 	//Identification de l'utilisateur en session
 	$_SESSION['currentUser'] = serialize($admin);
 	//Ajout des préférences et reglages
-	$configurationManager->add('root',$_['root']);
+	$configurationManager->put('root',(substr($_['root'], strlen($_['root'])-1)=='/'?$_['root']:$_['root'].'/'));
 	//$configurationManager->put('view',$_['view']);
 	$configurationManager->add('articleView',$_['articleView']);
 	$configurationManager->add('articleDisplayContent',$_['articleDisplayContent']);
@@ -125,7 +125,7 @@ if(isset($_['installButton'])){
 					<p>N'oubliez pas de mettre en place le CRON adapt&eacute; pour que vos flux se mettent &agrave; jour, exemple :</p>
 					<code>sudo crontab -e</code>
 					<p>Dans le fichier qui s'ouvre ajoutez la ligne :</p>
-					<code>0 * * * * wget -q -O /var/www/leed/logsCron http://127.0.0.1/leed/action.php?action=synchronize	#Commande de mise a jour de leed</code>
+					<code>0 * * * * wget -q -O <?php echo (str_replace(basename(__FILE__),'logs/cron.log',__FILE__)); ?> http://127.0.0.1/leed/action.php?action=synchronize	#Commande de mise a jour de leed</code>
 					<p>Quittez et sauvegardez le fichier.</p>
 					<p>Cet exemple mettra &agrave; jour vos flux toutes les heures et ajoutera le rapport de mise a jour sous le nom "logsCron" dans votre dossier leed</p>
 	 				
@@ -133,7 +133,7 @@ if(isset($_['installButton'])){
 					<p>N'oubliez pas de mettre en place le CRON adapt&eacute; pour que vos flux se mettent &agrave; jour, exemple :</p>
 					<code>sudo crontab -e</code>
 					<p>Dans le fichier qui s'ouvre ajoutez la ligne :</p>
-					<code>0,5,10,15,20,25,30,35,40,45,50,55 * * * * wget -q -O /var/www/leed/logsCron http://127.0.0.1/leed/action.php?action=synchronize	#Commande de mise a jour de leed</code>
+					<code>0,5,10,15,20,25,30,35,40,45,50,55 * * * * wget -q -O <?php echo (str_replace(basename(__FILE__),'logs/cron.log',__FILE__)); ?> http://127.0.0.1/leed/action.php?action=synchronize	#Commande de mise a jour de leed</code>
 					<p>Quittez et sauvegardez le fichier.</p>
 					<p>Cet exemple mettra &agrave; jour vos flux toutes les 5 minutes(conseill&eacute; pour une synchronisation gradu&eacute;e) et ajoutera le rapport de mise a jour sous le nom "logsCron" dans votre dossier leed</p>
 	 				

+ 29 - 0
js/script.js

@@ -51,6 +51,35 @@ function saveRenameFolder(element,folder){
 	});
 }
 
+
+function renameFeed(element,feed){
+	var feedLine = $(element).parent().parent();
+	var feedNameCase = $('td:first a',feedLine);
+	var url = feedNameCase.attr('href');
+	var value = feedNameCase.html();
+	$(element).html('Enregistrer');
+	$(element).attr('style','background-color:#0C87C9;');
+	$(element).attr('onclick','saveRenameFeed(this,'+feed+',"'+url+'")');
+	feedNameCase.replaceWith('<input type="text" name="feedName" value="'+value+'"/>');
+}
+
+function saveRenameFeed(element,feed,url){
+	var feedLine = $(element).parent().parent();
+	var feedNameCase = $('td:first',feedLine);
+	var value = $('input',feedNameCase).val();
+	$(element).html('Renommer');
+	$(element).attr('style','background-color:#F16529;');
+	$(element).attr('onclick','renameFeed(this,'+feed+')');
+	feedNameCase.replaceWith('<a href="'+url+'">'+value+'</a>');
+	$.ajax({
+				  url: "./action.php?action=renameFeed",
+				  data:{id:feed,name:value}
+	});
+}
+
+
+
+
 function changeFeedFolder(element,id){
 	var value = $(element).val();
 	window.location = "./action.php?action=changeFeedFolder&feed="+id+"&folder="+value;

+ 10 - 7
todo.txt

@@ -6,15 +6,22 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 ==== DERNIER COMMIT ====
 ========================
 
-- Correction d'un fichier js non trouvé dans la page d'install
+- Ajout automatique du "/" en fin de racine de projet
+- Mise à jour de l'installation pour préciser un chemin perssonalisé dans l'exemple du cron (fichier de sortie)
+- En cas de contenu absent , leed copie bien la description et reciproquement
+- [IMPOSSIBLE DE REPRODUIRE LE BUG] il y a un petit problème avec l'option d'affichage partiel/complet (passage en complet qui fait disparaître les "contenus"), d'ailleurs une option de déploiement des contenus des flux serait un plus, surtout sur la page d'accueil.
+- Possibilité de pouvoir renommer un flux
+- Possibilité de voir le nombre d'event non lu par dossier (au lieu du nombre de flux)
+- Possibilité de lire les non lu par dossiers
+- Ajout du numéro de version de Leed en rapport avec le Release dans a propos
 
 =========================
 ==== BUGS CONSTATES  ====
 =========================
 
-- il y a un petit problème avec l'option d'affichage partiel/complet (passage en complet qui fait disparaître les "contenus"), d'ailleurs une option de déploiement des contenus des flux serait un plus, surtout sur la page d'accueil.
 - Le bookmarlket a l'air d'avoir subis une regression
-- Verifier qu'en cas de contenu absent , leed copie bien la description (retours négatif de la part de certains utilisateurs)
+-Bug : L'ajout du flux RSS de Ouest France (www.ouest-france.fr/actu/actualite-RSS.php) ne fonctionne pas. Une seule actu est prise en compte.
+
 =============================
 ==== ECARTS FONCTIONNELS ====
 =============================
@@ -27,10 +34,6 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 - Afin d'economiser des requetes sur l'import, voir si on ne peux pas integrer tous les evenements d'unflux en une seule requete
 - Tu devrais utiliser le nommage dynamique pour éviter d'utiliser les fonctions eval()
 - Ajouter le titre du blog sur les evenements non lu
-- Ajouter la possibilité de pouvoir renommer un flux
-- Pouvoir faire la lecture des flux non lu d'un dossier complet (lors du clic sur le nom dossier, une fleche servirais a deplier)
-- Mettre le numéro de version de Leed en rapport avec le Release : 1 Apha Release 36
-- Voir le nombre d'event non lu par dossier
 - Dans le cas ou la description est trop longue, penser a la tronquer
 - Dans les catégories unread, il serait bien de voir le titre du blog emetteur quelque part
 - Verifier que les connexions a la base sql ne sont pas multiples inutilement