Browse Source

- Passage de la base de donnée SQLite3 à MySQL, gain de rapidité, supression naturelle de bugs divers type :
- Lorsque le fichier SQl devient trop gros, certains hosts type ovh sortent un :Unknown: write failed: No space left on device (28)

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

Valentin CARRUESCO 8 years ago
parent
commit
8bb37d60a7
14 changed files with 623 additions and 41 deletions
  1. 4 4
      Configuration.class.php
  2. 2 2
      Event.class.php
  3. 3 3
      Feed.class.php
  4. 2 2
      Folder.class.php
  5. 197 0
      MysqlConnector.class.php
  6. 386 0
      MysqlEntity.class.php
  7. 4 3
      README
  8. 1 1
      SQLiteEntity.class.php
  9. 1 1
      User.class.php
  10. 2 1
      common.php
  11. 9 0
      constant.php
  12. 1 1
      index.php
  13. 8 8
      install.php
  14. 3 15
      todo.txt

+ 4 - 4
Configuration.class.php

@@ -7,7 +7,7 @@
  @description: Classe de gestion des préférences, fonctionne sur un simple système clé=>valeur avec un cache session pour eviter les requête inutiles
  */
 
-class Configuration extends SQLiteEntity{
+class Configuration extends MysqlEntity{
 
 	protected $id,$key,$value,$confTab;
 	protected $TABLE_NAME = 'configuration';
@@ -28,11 +28,11 @@ class Configuration extends SQLiteEntity{
 		if(!isset($_SESSION['configuration'])){
 	
 		$configurationManager = new Configuration();
-		$configsQuery = $configurationManager->customQuery('SELECT key,value FROM configuration');
+		$configs = $configurationManager->populate();
 		$confTab = array();
 
-		while($config = $configsQuery->fetchArray() ){
-			$this->confTab[$config['key']] = $config['value'];
+		foreach($configs as $config){
+			$this->confTab[$config->getKey()] = $config->getValue();
 		}
 
 		$_SESSION['configuration'] = serialize($this->confTab);

+ 2 - 2
Event.class.php

@@ -6,7 +6,7 @@
  @description: Classe de gestion des évenements/news liés a chaques flux RSS/ATOM
  */
 
-class Event extends SQLiteEntity{
+class Event extends MysqlEntity{
 
 	protected $id,$title,$guid,$content,$description,$pudate,$link,$feed,$category,$creator,$unread,$favorite;
 	protected $TABLE_NAME = 'event';
@@ -45,7 +45,7 @@ class Event extends SQLiteEntity{
 		$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()){
+		while($item = mysql_fetch_array($results)){
 			$events[$item[1]] = $item[0];
 		}
 		

+ 3 - 3
Feed.class.php

@@ -6,7 +6,7 @@
  @description: Classe de gestion des flux RSS/ATOM
  */
 
-class Feed extends SQLiteEntity{
+class Feed extends MysqlEntity{
 
 	protected $id,$name,$url,$events=array(),$description,$website,$folder,$lastupdate;
 	protected $TABLE_NAME = 'feed';
@@ -153,7 +153,7 @@ class Feed extends SQLiteEntity{
 	function countUnreadEvents(){
 		$unreads = array();
 		$results = Feed::customQuery("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()){
+		while($item = mysql_fetch_array($results)){
 			$unreads[$item[1]] = $item[0];
 		}
 		return $unreads;
@@ -162,7 +162,7 @@ class Feed extends SQLiteEntity{
 	function getFeedsPerFolder(){
 		$feeds = array();
 		$results = Feed::customQuery("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 ) ORDER BY feed.name ;");
-		while($item = $results->fetchArray()){
+		while($item = mysql_fetch_array($results)){
 			$feeds[$item['folder']][$item['id']]['id'] = $item['id'];
 			$feeds[$item['folder']][$item['id']]['name'] = html_entity_decode($item['name']);
 			$feeds[$item['folder']][$item['id']]['url'] = $item['url'];

+ 2 - 2
Folder.class.php

@@ -6,7 +6,7 @@
  @description: Classe de gestion des dossiers/catégories contenant les flux
  */
 
-class Folder extends SQLiteEntity{
+class Folder extends MysqlEntity{
 
 	protected $id,$name,$parent,$isopen;
 	protected $TABLE_NAME = 'folder';
@@ -29,7 +29,7 @@ class Folder extends SQLiteEntity{
 		$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()){
+		while($item = mysql_fetch_array($results)){
 			$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);');

+ 197 - 0
MysqlConnector.class.php

@@ -0,0 +1,197 @@
+<?php
+	
+/*
+	@nom: mysql
+	@auteur: Idleman (idleman@idleman.fr)
+	@date de création: 
+	@description: Classe de gestion des connexions Mysql
+*/
+
+class MysqlConnector
+{
+	private $id;
+	private $hote;
+	private $login;
+	private $mdp;
+	private $bdd;
+	private $port;
+	public $debug=0;
+	public static $instance = null;
+	
+	private function __construct(){
+		$this->connect();
+	}
+
+	
+
+	/**
+	* Methode de recuperation unique de l'instance
+	* @author Valentin CARRUESCO
+	* @category Singleton
+	* @param <Aucun>
+	* @return <mysql> $instance
+	*/
+	
+	public static function getInstance(){
+		
+		if (MysqlConnector::$instance === null) {
+			MysqlConnector::$instance = new self(); 
+		}
+		return MysqlConnector::$instance;
+	}
+
+
+	
+	public function connect(){
+		$connexion = mysql_connect(MYSQL_HOST,MYSQL_LOGIN,MYSQL_MDP);
+		mysql_select_db(MYSQL_BDD,$connexion);
+	}
+	
+
+
+	public function __toString(){
+		$retour = "";
+		$retour .= "instance de la classe MysqlConnector : <br/>";
+		$retour .= '$hote : '.$this->hote.'<br/>';
+		$retour .= '$login : '.$this->login.'<br/>';
+		$retour .= '$mdp : '.$this->mdp.'<br/>';
+		$retour .= '$bdd : '.$this->bdd.'<br/>';
+		$retour .= '$port : '.$this->port.'<br/>';
+		return $retour;
+	}
+
+	private  function __clone(){
+		//Action lors du clonage de l'objet
+	}
+
+	// ACCESSEURS
+
+	public function getId(){
+		return $this->id;
+	}
+
+	public function setId($id){
+		$this->id = $id;
+	}
+
+	/**
+	* Méthode de récuperation de l'attribut hote de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> hote
+	*/
+
+	public function getHote(){
+		return $this->hote;
+	}
+
+	/**
+	* Méthode de définition de l'attribut hote de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <Attribute> $hote
+	* @return Aucun retour
+	*/
+
+	public function setHote($hote){
+		$this->hote = $hote;
+	}
+
+	/**
+	* Méthode de récuperation de l'attribut login de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> login
+	*/
+
+	public function getLogin(){
+		return $this->login;
+	}
+
+	/**
+	* Méthode de définition de l'attribut login de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <Attribute> $login
+	* @return Aucun retour
+	*/
+
+	public function setLogin($login){
+		$this->login = $login;
+	}
+
+	/**
+	* Méthode de récuperation de l'attribut mdp de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> mdp
+	*/
+
+	public function getMdp(){
+		return $this->mdp;
+	}
+
+	/**
+	* Méthode de définition de l'attribut mdp de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <Attribute> $mdp
+	* @return Aucun retour
+	*/
+
+	public function setMdp($mdp){
+		$this->mdp = $mdp;
+	}
+
+	/**
+	* Méthode de récuperation de l'attribut bdd de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> bdd
+	*/
+
+	public function getBdd(){
+		return $this->bdd;
+	}
+
+	/**
+	* Méthode de définition de l'attribut bdd de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <Attribute> $bdd
+	* @return Aucun retour
+	*/
+
+	public function setBdd($bdd){
+		$this->bdd = $bdd;
+	}
+
+	/**
+	* Méthode de récuperation de l'attribut port de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> port
+	*/
+
+	public function getPort(){
+		return $this->port;
+	}
+
+	/**
+	* Méthode de définition de l'attribut port de la classe Mysql
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <Attribute> $port
+	* @return Aucun retour
+	*/
+
+	public function setPort($port){
+		$this->port = $port;
+	}
+}
+?>

+ 386 - 0
MysqlEntity.class.php

@@ -0,0 +1,386 @@
+<?php
+require_once('MysqlConnector.class.php');
+/*
+	@nom: MysqlEntity
+	@auteur: Valentin CARRUESCO (valentincarruesco@yahoo.fr)
+	@date de création: 16/04/2012 02:34:15
+	@description: Classe parent de tous les modèles (classe entitées) liées a la base de donnée,
+	 cette classe est configuré pour agir avec une base MySQL, mais il est possible de redefinir ses codes SQL pour l'adapter à un autre SGBD sans affecter 
+	 le reste du code du projet.
+
+*/
+
+class MysqlEntity
+{
+	
+	private $debug = false;
+
+		
+	function sgbdType($type){
+		$return = false;
+		switch($type){
+			case 'string':
+			case 'timestamp':
+				$return = 'VARCHAR(225)';
+			break;
+			case 'longstring':
+				$return = 'TEXT';
+			break;
+			case 'key':
+				$return = 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY';
+			break;
+			case 'object':
+			case 'integer':
+				$return = 'INT(11)';
+			break;
+			case 'boolean':
+				$return = 'INT(1)';
+			break;
+			default;
+				$return = 'TEXT';
+			break;
+		}
+		return $return ;
+	}
+	
+	public function __construct(){
+		MysqlConnector::getInstance();
+	}
+
+	public function __destruct(){
+		
+	}
+
+	// GESTION SQL
+
+	/**
+	* Methode de suppression de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return Aucun retour
+	*/
+	public function destroy($debug='false')
+	{
+		$query = 'DROP TABLE IF EXISTS '.$this->TABLE_NAME.';';
+		if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+		$myQuery = mysql_query($query) or die(mysql_error());
+	}
+
+	/**
+	* Methode de nettoyage de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return Aucun retour
+	*/
+	public function truncate($debug='false')
+	{
+			$query = 'TRUNCATE TABLE '.$this->TABLE_NAME.';';
+			if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+			$myQuery = mysql_query($query) or die(mysql_error());
+	}
+
+	/**
+	* Methode de creation de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return Aucun retour
+	*/
+	public function create($debug='false'){
+		$query = 'CREATE TABLE IF NOT EXISTS `'.$this->TABLE_NAME.'` (';
+
+		$end = end(array_keys($this->object_fields));
+		foreach($this->object_fields as $field=>$type){
+			$query .='`'.$field.'`  '. $this->sgbdType($type).'  NOT NULL';
+			if($field != $end)$query .=',';
+		}
+
+		$query .= ');';
+		if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+		$myQuery = mysql_query($query) or die(mysql_error());
+	}
+
+
+
+	public function massiveInsert($events){
+		$query = 'INSERT INTO `'.$this->TABLE_NAME.'`(';
+			$i=false;
+			foreach($this->object_fields as $field=>$type){
+				if($type!='key'){
+					if($i){$query .=',';}else{$i=true;}
+					$query .='`'.$field.'`';
+				}
+			}
+			$query .=') select';
+			$u = false;
+			foreach($events as $event){
+				if($u){$query .=' union select ';}else{$u=true;}
+				
+				$i=false;
+				foreach($event->object_fields as $field=>$type){
+					if($type!='key'){
+						if($i){$query .=',';}else{$i=true;}
+						$query .='"'.eval('return htmlentities($event->'.$field.');').'"';
+					}
+				}
+				
+			}
+
+			$query .=';';
+		//echo '<i>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>';
+		mysql_query($query) or die(mysql_error());
+
+	}
+
+	/**
+	* Methode d'insertion ou de modifications d'elements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param  Aucun
+	* @return Aucun retour
+	*/
+	public function save(){
+		if(isset($this->id)){
+			$query = 'UPDATE `'.$this->TABLE_NAME.'`';
+			$query .= ' SET ';
+
+			$end = end(array_keys($this->object_fields));
+			foreach($this->object_fields as $field=>$type){
+				$id = eval('return htmlentities($this->'.$field.');');
+				$query .= '`'.$field.'`="'.$id.'"';
+				if($field != $end)$query .=',';
+			}
+
+			$query .= ' WHERE `id`="'.$this->id.'";';
+		}else{
+			$query = 'INSERT INTO `'.$this->TABLE_NAME.'`(';
+			$end = end(array_keys($this->object_fields));
+			foreach($this->object_fields as $field=>$type){
+				$query .='`'.$field.'`';
+				if($field != $end)$query .=',';
+			}
+			$query .=')VALUES(';
+			$end = end(array_keys($this->object_fields));
+			foreach($this->object_fields as $field=>$type){
+				$query .='"'.eval('return htmlentities($this->'.$field.');').'"';
+				if($field != $end)$query .=',';
+			}
+
+			$query .=');';
+		}
+		//echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+		mysql_query($query)or die(mysql_error());
+		$this->id =  (!isset($this->id)?mysql_insert_id():$this->id);
+	}
+
+	/**
+	* Méthode de modification d'éléments de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <Array> $colonnes=>$valeurs
+	* @param <Array> $colonnes (WHERE) =>$valeurs (WHERE)
+	* @param <String> $operation="=" definis le type d'operateur pour la requete select
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return Aucun retour
+	*/
+	public function change($columns,$columns2,$operation='=',$debug='false'){
+		$query = 'UPDATE `'.$this->TABLE_NAME.'` SET ';
+		$end = end(array_keys($columns));
+		foreach ($columns as $column=>$value){
+			$query .= '`'.$column.'`="'.$value.'" ';
+			if($column != $end)$query .=',';
+		}
+		$query .=' WHERE '; 
+		$end = end(array_keys($columns2));
+		foreach ($columns2 as $column=>$value){
+			$query .= '`'.$column.'`'.$operation.'"'.$value.'" ';
+			if($column != $end)$query .='AND ';
+		}
+		if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+		mysql_query($query)or die(mysql_error());
+	}
+
+	/**
+	* Méthode de selection de tous les elements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <String> $ordre=null
+	* @param <String> $limite=null
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return <Array<Entity>> $Entity
+	*/
+	public function populate($order='null',$limit='null',$debug='false'){
+		eval('$results = '.$this->CLASS_NAME.'::loadAll(array(),"'.$order.'",'.$limit.',\'=\','.$debug.');');
+		return $results;
+	}
+
+	/**
+	* Méthode de selection multiple d'elements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <Array> $colonnes (WHERE)
+	* @param <Array> $valeurs (WHERE)
+	* @param <String> $ordre=null
+	* @param <String> $limite=null
+	* @param <String> $operation="=" definis le type d'operateur pour la requete select
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return <Array<Entity>> $Entity
+	*/
+	public function loadAll($columns,$order=null,$limit=null,$operation="=",$debug='false',$selColumn='*'){
+		$objects = array();
+		$whereClause = '';
+	
+			if($columns!=null && sizeof($columns)!=0){
+			$whereClause .= ' WHERE ';
+				$i = false;
+				foreach($columns as $column=>$value){
+
+					if($i){$whereClause .=' AND ';}else{$i=true;}
+					$whereClause .= '`'.$column.'`'.$operation.'"'.$value.'"';
+				}
+			}
+			$query = 'SELECT '.$selColumn.' FROM `'.$this->TABLE_NAME.'` '.$whereClause.' ';
+			if($order!=null) $query .='ORDER BY '.$order.' ';
+			if($limit!=null) $query .='LIMIT '.$limit.' ';
+			$query .=';';
+
+			// echo '<br>'.__METHOD__.' : Requete --> '.$query.'<br>';
+			$execQuery = mysql_query($query) or die(mysql_error());
+			while($queryReturn = mysql_fetch_assoc($execQuery)){
+
+				$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;
+				unset($object);
+			}
+			return $objects;
+	}
+
+		public function loadAllOnlyColumn($selColumn,$columns,$order=null,$limit=null,$operation="=",$debug='false'){
+		eval('$objects = $this->loadAll($columns,\''.$order.'\',\''.$limit.'\',\''.$operation.'\',\''.$debug.'\',\''.$selColumn.'\');');
+		if(count($objects)==0)$objects = array();
+		return $objects;
+	}
+
+
+	/**
+	* Méthode de selection unique d'élements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <Array> $colonnes (WHERE)
+	* @param <Array> $valeurs (WHERE)
+	* @param <String> $operation="=" definis le type d'operateur pour la requete select
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return <Entity> $Entity ou false si aucun objet n'est trouvé en base
+	*/
+	public function load($columns,$operation='=',$debug='false'){
+		eval('$objects = $this->loadAll($columns,null,\'1\',\''.$operation.'\',\''.$debug.'\');');
+		if(!isset($objects[0]))$objects[0] = false;
+		return $objects[0];
+	}
+
+	/**
+	* Méthode de selection unique d'élements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <Array> $colonnes (WHERE)
+	* @param <Array> $valeurs (WHERE)
+	* @param <String> $operation="=" definis le type d'operateur pour la requete select
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return <Entity> $Entity ou false si aucun objet n'est trouvé en base
+	*/
+	public function getById($id,$operation='=',$debug='false'){
+		return $this->load(array('id'=>$id),$operation,$debug);
+	}
+
+	/**
+	* Methode de comptage des éléments de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return<Integer> nombre de ligne dans l'entité'
+	*/
+	public function rowCount($columns=null)
+	{
+		$whereClause ='';
+		if($columns!=null){
+			$whereClause = ' WHERE ';
+			$i=false;
+			foreach($columns as $column=>$value){
+					if($i){$whereClause .=' AND ';}else{$i=true;}
+					$whereClause .= '`'.$column.'`="'.$value.'"';
+			}
+		}
+		$query = 'SELECT COUNT(id) FROM '.$this->TABLE_NAME.$whereClause;
+		if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+		$myQuery = mysql_query($query) or die(mysql_error());
+		$number = mysql_fetch_array($myQuery);
+		return $number[0];
+	}	
+	
+	/**
+	* Méthode de supression d'elements de l'entité
+	* @author Valentin CARRUESCO
+	* @category manipulation SQL
+	* @param <Array> $colonnes (WHERE)
+	* @param <Array> $valeurs (WHERE)
+	* @param <String> $operation="=" definis le type d'operateur pour la requete select
+	* @param <String> $debug='false' active le debug mode (0 ou 1)
+	* @return Aucun retour
+	*/
+	public function delete($columns,$operation='=',$debug='false'){
+		$whereClause = '';
+
+			$start = reset(array_keys($columns));
+			foreach($columns as $column=>$value){
+				if($column != $start)$whereClause .= ' AND ';
+				$whereClause .= '`'.$column.'`'.$operation.'"'.$value.'"';
+			}
+			$query = 'DELETE FROM `'.$this->TABLE_NAME.'` WHERE '.$whereClause.' ;';
+			if($this->debug)echo '<hr>'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'<br>'.mysql_error();
+			mysql_query($query);
+		
+	}
+
+	public function customExecute($request){
+		mysql_query($request);
+	}
+	public function customQuery($request){
+		return mysql_query($request);
+	}
+	
+
+	// ACCESSEURS
+		/**
+	* Méthode de récuperation de l'attribut debug de l'entité
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param Aucun
+	* @return <Attribute> debug
+	*/
+	
+	public function getDebug(){
+		return $this->debug;
+	}
+	
+	/**
+	* Méthode de définition de l'attribut debug de l'entité
+	* @author Valentin CARRUESCO
+	* @category Accesseur
+	* @param <boolean> $debug 
+	*/
+
+	public function setDebug($debug){
+		$this->debug = $debug;
+	}
+
+	public function getObject_fields(){
+		return $this->object_fields;
+	}
+
+}
+?>

+ 4 - 3
README

@@ -31,9 +31,10 @@ Licence : CC by-nc-nd (http://creativecommons.org/licenses/by-nc-nd/2.0/fr/) Nb
 
 	1. Récuperez le projet sur le dépot SVN de la version courante : http://hades.idleman.fr/leed
 	2. Placez le projet dans votre repertoire web et appliquez une permission chmod 775 (nb si vous êtes sur un hebergement ovh, préférez un 0755 ou vous aurez une erreur 500) sur le dossier et son contenu
-	3. Depuis votre navigateur, accedez à la page d'installation install.php (ex : http://votre.domaine.fr/leed/install.php) et suivez les instructions.
-	4. Une fois l'installation terminée, supprimez le fichier install.php par mesure de sécurité
-	5. Mettez en place un cron (sudo crontab -e pour ouvrir le fichier de cron) et placez y un appel vers la page http://votre.domaine.fr/leed/action.php?action=synchronize ex : 
+	3. Editez le fichier constant.php pour y placer vos parametres de connexion a MySQL
+	4. Depuis votre navigateur, accedez à la page d'installation install.php (ex : http://votre.domaine.fr/leed/install.php) et suivez les instructions.
+	5. Une fois l'installation terminée, supprimez le fichier install.php par mesure de sécurité
+	6. Mettez en place un cron (sudo crontab -e pour ouvrir le fichier de cron) et placez y un appel vers la page http://votre.domaine.fr/leed/action.php?action=synchronize ex : 
 
 	0 * * * * wget -q -O /var/www/leed/logsCron http://127.0.0.1/leed/action.php?action=synchronize
 

+ 1 - 1
SQLiteEntity.class.php

@@ -239,7 +239,7 @@ class SQLiteEntity extends SQLite3
 			if($limit!=null) $query .='LIMIT '.$limit.' ';
 			$query .=';';
 			  
-			//echo '<hr>'.__METHOD__.' : Requete --> '.$query.'<br>';
+			echo '<hr>'.__METHOD__.' : Requete --> '.$query.'<br>';
 			$execQuery = $this->query($query);
 
 			if(!$execQuery) 

+ 1 - 1
User.class.php

@@ -6,7 +6,7 @@
  @description:  Classe de gestion des utilisateurs
  */
 
-class User extends SQLiteEntity{
+class User extends MysqlEntity{
 
 	protected $id,$login,$password;
 	protected $TABLE_NAME = 'user';

+ 2 - 1
common.php

@@ -8,7 +8,8 @@
 
 session_start();
 $start=microtime(true);
-class_exists('SQLiteEntity') or require_once('SQLiteEntity.class.php');
+require_once('constant.php');
+class_exists('MysqlEntity') or require_once('MysqlEntity.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');

+ 9 - 0
constant.php

@@ -9,4 +9,13 @@
 	define('VERSION_NUMBER','1');
 	define('VERSION_NAME','Beta (rev 48)');
 
+	//Host de Mysql, le plus souvent localhost ou 127.0.0.1
+	define('MYSQL_HOST','localhost'); 
+	//Identifiant MySQL
+	define('MYSQL_LOGIN','root');
+	//mot de passe MySQL
+	define('MYSQL_MDP','');
+	//Nom de la base MySQL ou se toruvera leed
+	define('MYSQL_BDD','test');
+
 ?>

+ 1 - 1
index.php

@@ -82,7 +82,7 @@ $allEvents = $eventManager->getEventCountPerFolder();
 				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($articleDisplayDate) $target .= 'event.pubdate,';
 				if($articleDisplayAuthor) $target .= 'event.creator,';
 				$target .= 'event.id';
 				

+ 8 - 8
install.php

@@ -60,7 +60,8 @@ $_[$key]=Functions::secure($val);
 
 
 if(isset($_['installButton'])){
-	require_once('SQLiteEntity.class.php');
+	require_once('constant.php');
+	require_once('MysqlEntity.class.php');
 	require_once('Feed.class.php');
 	require_once('Event.class.php');
 	
@@ -168,17 +169,17 @@ if(isset($_['installButton'])){
 						}else{
 							 $test['Succ&egrave;s'][] = 'Fonction requise "file_put_contents" : OK';	
 						}
-						if (@version_compare(PHP_VERSION, '5.3.0') <= 0){
+						if (@version_compare(PHP_VERSION, '5.1.0') <= 0){
 						 $test['Erreur'][] = 'Votre version de PHP ('.PHP_VERSION.') est trop ancienne, il est possible que certaines fonctionalitees du script comportent des disfonctionnements.';
 						}else{
 						 $test['Succ&egrave;s'][] = 'Compabilit&eacute; de version PHP ('.PHP_VERSION.') : OK';	
 						}
 
-						if (!@extension_loaded('sqlite3')){
-						 $test['Erreur'][] = 'L\'Extension Sqlite3 n\'est pas activ&eacute;e sur votre serveur, merci de bien vouloir l\'installer';
-						}else{
-						 $test['Succ&egrave;s'][] = 'Extension Sqlite3 : OK';	
-						}
+						// if (!@extension_loaded('sqlite3')){
+						//  $test['Erreur'][] = 'L\'Extension Sqlite3 n\'est pas activ&eacute;e sur votre serveur, merci de bien vouloir l\'installer';
+						// }else{
+						//  $test['Succ&egrave;s'][] = 'Extension Sqlite3 : OK';	
+						// }
 
 						if(ini_get('safe_mode') && ini_get('max_execution_time')!=0){
 							$test['Erreur'][] = 'Le script ne peux pas gerer le timeout tout seul car votre safe mode est activ&eacute;,<br/> dans votre fichier de configuration PHP, mettez la variable max_execution_time à 0 ou désactivez le safemode.';
@@ -212,7 +213,6 @@ if(isset($_['installButton'])){
 					<h2>Administrateur</h2>
 					<p>Identifiant de l'administrateur: <input type="text" name="login" placeholder="Identifiant"></p>
 					<p>Mot de passe de l'administrateur: <input type="text" name="password" placeholder="Mot de passe"></p>
-					<h3>Si vous perdez vos identifiants admin, supprimez le fichier database.db pour reinitialiser le script (nb: l'ensemble des donn&eacute;es seront perdues)</h3>
 				</section>
 
 				<section>

+ 3 - 15
todo.txt

@@ -6,19 +6,8 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 ==== DERNIER COMMIT ====
 ========================
 
-- [RESOLUTION BUG] Lorsqu'on ajoute un flux, le nom n'est pas ajouté automatique ; à la place, c'est l'adresse du lien du flux qui s'affiche.
-
-- [RESOLUTION BUG] Le nom des flux personnalisés n'est pas conservé lors des mises à jour CRON.
-
-- [RESOLUTION REGRESSION] La preference racine du serveur n'etait pas pris en compte
-
-- [RESOLUTION REGRESSION] Certaines preferences ne pouvaient plus être modifiées
-
-- [VERIFIE + FONCTIONNE = AUCUNE ACTION] le bouton déplier ne marche pas sur Safari
-
-- [FONCTIONNALITE] Possibilité de modifier le login et le mot de passe admin
-
-- [RESOLUTION BUG] L'export genere un modèle mal encodé
+- Passage de la base de donnée SQLite3 à MySQL, gain de rapidité, supression naturelle de bugs divers type :
+- Lorsque le fichier SQl devient trop gros, certains hosts type ovh sortent un :Unknown: write failed: No space left on device (28)
 
 =======================
 ==== BUGS VALIDES  ====
@@ -26,7 +15,6 @@ Cette feuille existe dans l'unique but d'organiser ma petite tête sur le projet
 
 - A cause de la rotation des evenements, certains evenements sont reparsé et remis en non lu, au lieu de supprimer les events qui tournent, ne garder que l'uid et vider le reste.
 
-
 =====================================
 ==== ECARTS FONCTIONNELS VALIDES ====
 =====================================
@@ -39,7 +27,7 @@ C'est une porte ouverte à ajouter une option twitter puis facebook etc... (j'ex
 ==============================
 ==== SUGGESTIONS VALIDEES ====
 ==============================
-
+- dans les non lu : effacer le message avant la réponse de la requete de supression pour gagner en rapidité de lisibilité
 - AJouter une options purge de la bdd
 - 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