<?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 ListUserNodeManager.php
*
* Ce fichier contient la classe ListUserNodeManager
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/04/14
* @version 0.3
* @package system_data
* @subpackage ListUserNode
* @copyright Copyright &copy; 2004-2005, ARD Limousin
*/

#####################################################################################################
################################# 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/ListUserNode
*/
require($CONF_LIB_PATH."lib/system/system_data/listusernode/listusernode.php");

/**
* Classe ListUserNodeManager
*
* Classe de gestion des ListUserNodes<br>
* Classe d'abstraction permettant de gérer plusieurs configuration de ressources<br>
* Cette classe gère de plus le formatage des données (classe chaine et chiffre)<br>
* <br>
* Sont configuré dans /config/config.php:<br>
* - La Source d'information <br>
* -- actuellement seul DB possible->Pour ajouter une source reproduire FetchListUserNodeDB<br>
* -- et adapter le constructeur de ListUserNodeManager<br>
* - Le Nom de la Table<br>
* - L'ListUserNode par défaut<br>
* - La configuration (Paramétrage des sources de données) est faite dans lib/data_source/config_data_source.php<br>
* 
* @package system_data
* @subpackage ListUserNode
*/
class ListUserNodeManager extends Manager
{

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

/**
* LoadFromId: charge à partir d'un identifiant
*
* <p>Permet le récupération des infos d'un objet ListUserNode à partir de son identifiant</p>
* <p>Retourne un tableau contenant les infos de l'objet<br>
* <br>ou faux si n'existe pas
* </p>
* @param entier identifiant du ListUserNode (=identifiant utilisateur)
* @param tableau tableau des identifiant des groupes
* @access public
* @return tableau
*/
	function createInstance($id, $array)
	{
		$tab=null;
		
		# On ajoute la gestion de cache
		if ( DATA_ACCES_CACHE_LIST_USER_NODE==true )
			$tab=$this->LoadFromIdCache($id);

		# Cas l'enregistrement n'existe pas dans la cache
		if (!is_object($tab))
		{
			$idUser=$id;

			/* récuperation des instance d'objet Node et user */
			$currentData	=$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->getInstanceFromUserId($idUser, $array);

			$tabTreeNODE=array();
			/* On charge tous les tree NODE en fonction */
			for ($i=0; $i<count($currentData); $i++)
			{
				$tabTreeNODE[$i]=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($currentData[$i]->getNodeId());
			}

			$tab=new ListUserNode();
			$tab->doLoad($idUser, $tabTreeNODE);

			### Création du cache
			if ( DATA_ACCES_CACHE_LIST_USER_NODE==true )
					$this->InsertCache($id, $tab);

		}
		return $tab;

	}

/**
* LoadFromCache: charge à partir d'un identifiant et dans le cahce
*
* <p>Affecte les champs de l'objet depuis la base et retourne vrai si tout est ok, faux sinon.</p>
* @param identifiant du TreeNode
* @access private
* @return tableau
*/
	function LoadFromIdCache($id)
	{
		$result=$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->createInstance($id);
		return $result->getData();
	}

/**
* Insertion de l'objet TreeNode.
* insere l'objet dans la base de données et retourne l'identifiant obtenu.
* @access private
* @return entier identifiant numérique
*/	
	function InsertCache($idCreation, $data)
	{
		$obj=$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->createNewInstance();
		$obj->doLoad($idCreation, $data);
		$this->CallSystemPlugin("__insertListUserNode", $obj);
		return $GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->insertInstance($obj);
	}


/**
* Suppression du cache 
*
* @access private
* @return entier identifiant numérique
*/	
	function DeleteCache($id)
	{
		$obj=$GLOBALS["SYSTEM_MANAGER"]["LIST_NODE_USER_CACHE"]->createNewInstance();
		$obj->doLoad($id, "");
		$this->CallSystemPlugin("__deleteListUserNode", $obj);
		return $GLOBALS["SYSTEM_MANAGER"]["LIST_NODE_USER_CACHE"]->deleteInstance($obj);
	}
}
?>
