<?php

/**------------------------------------------------
*
* Rooty, 2018 <rooty@rooty.me>
*
*
* This software is protected by copyright, please
* read the file COPYRIGHT.
* This program is distributed in the hope that it
* will be useful, but without any warranty; without
* even the implied warranty of merchantability or
* fitness for a particular purpose. Please
* read the file LICENCE.
*
* Fichier CacheManager.php
*
* Ce fichier contient la classe CacheManager
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/04/14
* @version 0.3
* @package system_data
* @subpackage cache
* @copyright Copyright &copy; 2009-2018, Rooty
*/
#####################################################################################################
################################# Parametrage
#####################################################################################################
/**
* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas...
* cette variable est déclarée sur la page d'execution du script.
* <P> if ( !defined('SYSTEM_IN') )
* {
* die("Hacking attempt");
* }</p>
*/
if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* Classe de dialogue Base de donnée/Cache
*/
include_once($CONF_LIB_PATH."lib/system/system_data/cache/cache.php");

/**
* Classe de gestion des Caches système
* <i>Gére une ou plusieurs instances de l'objet cache</i><br>
* Classe d'abstraction permettant de gérer plusieurs configuration de ressources pour l'objet cache<br>
* Cette classe gère de plus le formatage des données avant leur enregistrement<br>
* <br>
* Contient 3 grands types de methodes:<br>
* - do... : qui sont à surcharger dans l'objet ressource<br>
* - source... : qui s'occupe de la conversion des données<br>
* - ...Instance...: qui gére des instances de l'objet cache (méthodes à utiliser)<br>
* <br>
* Sont configuré dans /config/config.data_source.php:<br>
* - La Source d'information <br>
*   (actuellement seul DB possible->Pour ajouter une source reproduire CacheManagerDB)<br>
* - Le Nom de la Table<br>
* - La Cache par défaut<br>
* - La configuration (Paramétrage des sources de données) est faite dans config/config.data_source.php<br>
* @package system_data
* @subpackage cache
*/
class CacheManager extends Manager
{

/**
* Constructeur de la classe CacheManager PHP5
*
* @access public
*/
	function __construct()
	{
	}

#######################################################################
#### Methodes abstraites
#######################################################################
/**
* doInsert: Insert la Cache dans la ressource
*
* <P>Insertion dans la ressource</P>
* @param entier id du noeud parent
* @param chaine libelle de la Cache
* @access public
* @abstract
* @return entier
*/
	function doInsert($id, $data)
	{
		return 0;
	}

/**
* doLoadFromId: Charge la Cache depuis la ressource
*
* <P>Retourne un tableau contenant les infos de l'objet
* <br>ou faux si n'existe pas;<br>
* Précondition : id doit être un entier
* </p>
*
* @access public
* @abstract
* @param entier identifiant du Cache
* @return tableau
*/
	function doLoadFromId($id)
	{
		return array();
	}

/**
* doUpdate:Modifie la Cache dans la ressource
*
* <P>Mise à jour de la Cache</p>
* @param entier identifiant
* @param mixed données
* @access public
* @abstract
* @return booleen
*/
	function doUpdate($id, $data)
	{
		return array();
	}

/**
* doDelete : Detruit la Cache dans la ressource
*
* <P>Suppression de la Cache à partir de son identifiant</p>
* @param entier identifiant
* @access public
* @abstract
* @return booleen
*/
	function doDelete($id)
	{
		return true;
	}

/**
* doEmptyCache : Vide la Cache dans la ressource
* @access public
* @abstract
* @return booleen
*/
	function doEmptyCache()
	{
		return true;
	}

#######################################################################
#### Methodes privees
#######################################################################
/**
* sourceLoadFromId: charge à partir d'un identifiant
* Permet le récupération des infos d'un objet Cache à partir de son identifiant<br>
* Retourne un tableau contenant les infos de l'objet<br>
* </p>
* @param identifiant du Cache
* @access private
* @return tableau
*/
	function sourceLoadFromId($id)
	{
		$tab=$this->doLoadFromId($id);

		# Gestion d'un tableau intermediaire avec la reprise des elements
		if (!Is_array($tab) || !Isset($tab["id"]))
		{
			return array();
		}
		return $tab;
	}

/**
* sourceInsert: Insert la Cache
*
* <P>Insertion de l'objet Cache dans la source de données<br>
* indifférement du type de cette source</p>
* <P>Retourne L'identifiant de l'objet inséré</p>
* @param entier identifiant du noeud
* @param raw contenu du champ blob à stocker
* @access private
* @return entier
*/
	function sourceInsert($id,$data)
	{
		# Gestion d'un tableau intermediaire avec la reprise des elements
		if (!Is_numeric($id))
		{
			$systemError=2;
			addError($systemError,"CacheManager","Echec d'insertion! > l'id n'est pas numérique",__LINE__,__FILE__);
			return 0;
		}
		return $this->doInsert($id, $data);
	}

/**
* sourceUpdate: Met à jour la Cache
*
* <P>Mise à jour de l'objet indifferemment de la source de données</p>
* @param entier identifiant
* @param raw données à mettre en cache
* @access private
* @return booleen
*/
	function sourceUpdate($id,$data)
	{
		# Gestion d'un tableau intermediaire avec la reprise des elements
		if (!Is_numeric($id))
			return  addError(1,"CacheManager","Echec de maj! > l'id n'est pas numérique",__LINE__,__FILE__);
		return $this->doUpdate($id, $data);
	}

/**
* sourceDelete: Detruit la Cache
*
* <P>Suppression de l'objet à partir de son identifiant</p>
* @param entier identifiant de la Cache
* @access private
* @return booleen
*/
	function sourceDelete($id)
	{
		if (!Is_numeric($id))
			return  addError(1,"CacheManager","Echec de suppression! > l'id n'est pas numérique",__LINE__,__FILE__);
		return $this->doDelete($id);
	}

#######################################################################
#### Methodes public
#######################################################################
/**
* EmptyCache: Detruit la Cache (vide tous les élèments)
* @access public
* @return booleen
*/
	function emptyCache()
	{
		return $this->doEmptyCache();
	}

/**
* createNewInstance : créer un objet vierge
* @access public
* @return booleen
*/
	function createNewInstance()
	{
		return new Cache();
	}

/**
* createInstance : récupere l'objet Cache avec l'identifiant $id
* @param entier identifiant de l'association Cache
* @access public
* @return object retourne un objet de type Cache
*/
	function createInstance($id)
	{
		$return = new Cache();
		if (is_numeric($id))
		{
			/* Récupération des infos */
			$tab=$this->sourceLoadFromId($id);
			if (is_array($tab) && isset($tab["id"]) && is_numeric($tab["id"]))
			{
				/* création et alimentation de l'objet */
				$return->doLoad($tab["id"], $tab["data"]);
			}
		}else{
			$systemError=3;
			$classe="CacheManager";
			$message="addError id invalide ".$id;
			addError($systemError, $classe, $message, __line__, __file__);
		}
		return $return;
	}

/**
* deleteInstance : detruit l'objet
* L'objet doit posseder la methode getId()<br>
* et son identifiant doit correspondre à celui de la cache
* @param object objet Cache à effacer
* @access public
* @return object objetCache mis à jour
*/
	function deleteInstance($obj)
	{
		$return = false;
		if (strtolower(get_class($obj))=="cache")
		{
			if($obj->isLoaded()==true)
			{
				/* Récupération des infos */
				$return=$this->sourceDeleteFromId($obj->getId());
				$obj->setId(0);
				return $obj;
			}
		}
		/* addError */
		$systemError=3;
		$classe="CacheManager";
		$message="addError objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		return $obj;
	}

/**
* updateInstance : met à jour l'objet
* L'objet doit posseder la methode getId()<br>
* et son identifiant doit correspondre à celui de la cache
* @param object objet Cache à modifier
* @access public
* @return object objetCache mis à jour
*/
	function updateInstance($obj)
	{
		if ((strtolower(get_class($obj))=="cache"))
		{
			/* Récupération des infos */
			$id=$this->sourceUpdate($obj->getId(), $obj->getData());
			return $obj;
		}
		/* addError */
		$systemError=3;
		$classe="CacheManager";
		$message="addError objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		return $obj;
	}

/**
* insertInstance : créer enregistre l'objet
* <P>affecte l'id de l'objet si nécessaire</p>
* <P>L'objet doit posseder la methode getId()<br>
* et son identifiant doit correspondre à celui de la cache</p>
* @param object objet Cache à inserer
* @access public
* @return object objetCache mis à jour
*/
	function insertInstance($obj)
	{
		if ((strtolower(get_class($obj))==strtolower("cache")))
		{
			/* Récupération des infos */
			$id=$this->sourceInsert($obj->getId(), $obj->getData());
			$obj->setId($id);
			return $obj;
		}
		/* addError */
		$systemError=3;
		$classe="CacheManager";
		$message="addError objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		return $obj;
	}
}
?>
