<?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 TreeGroupManager.php
*
* Ce fichier contient la classe TreeGroupManager
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/04/14
* @version 0.3
* @package system_data
* @subpackage TreeGroup
* @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/TreeGroup
*/
require ($CONF_LIB_PATH."lib/system/system_data/treegroup/treegroup.php");

/**
* Classe TreeGroupManager
*
* <P>classe de gestion des TreeGroup</P>
* @package system_data
* @subpackage TreeGroup
*/
class TreeGroupManager extends Manager
{
/**
* Constructeur de la classe TreeGroupManager PHP5
*
* @access public
*/
	function __construct()
	{
	}

/**
* createInstance : charge à partir d'un identifiant
*
* <p>Permet le récupération des infos d'un objet TreeGroup à 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 identifiant du TreeGroup
* @access public
* @return tableau
*/
	function createInstance($id)
	{
		$tab=array();
		# On ajoute la gestion de cache
		if ( DATA_ACCES_CACHE_TREE_GROUP == true )
			$tab=$this->LoadFromIdCache($id);

		# Cas l'enregistrement n'existe pas dans la cache
		if (!is_object($tab))
		{
			# génération de l'TreeGroup
			### On Load les papa!! (+id courant...)
			$i=0;
			$idPere=$id;

			$tabFather=array();
			$tabSon=array();

			while ($idPere!=0)
			{

			$tabFather[$i]	=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance($idPere);
				$idPere=$tabFather[$i]->getIdPere();
				$i++;
			}
			### Chargement des enfants
			$tabSon=$this->LoadSon($id);
			
			$tab=new TreeGroup();
			$tab->doLoad($id, $tabFather, $tabSon);


		### Création du cache
			if ( DATA_ACCES_CACHE_TREE_GROUP == 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 TreeGroup
* @access private
* @return tableau
*/
	function LoadFromIdCache($id)
	{

	$result=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->createInstance($id);
	return $result->getData();
	}


/**
* Insertion de l'objet TreeGroup.
*
* 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"]["TREE_GROUP_CACHE"]->createNewInstance();
		$obj->doLoad($idCreation, $data);
		$this->CallSystemPlugin("__insertTreeGroup", $obj);
		return $GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->insertInstance($obj);
	}


/**
* Supression du cahce
*
* @access private
* @return entier identifiant numérique
*/	
	function DeleteCache($id)
	{
		$obj=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->createNewInstance();
		$obj->doLoad($id, "");
		$this->CallSystemPlugin("__deleteTreeGroup", $obj);
		return $GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->deleteInstance($obj);
	}
	
/**
* On load les enfants...
*
* @access private
* @return tableau tableau d'objets noeud
*/	
	function LoadSon($id)
	{
		### On Load les enfants...
		$tabSon=array();
		$i=0;
		$idPere 	=$id;
		$currentTab	=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->getInstanceFromIdPere($id);

		for ($i=0; $i<count($currentTab); $i++)
		{
			$k=count($tabSon);
			$tabSon[$k]	=$currentTab[$i];

			$m=0;
			$son=$this->LoadSon($currentTab[$i]->getId());
			
			while ($m<count($son))
			{
				$k++;
				$tabSon[$k]=$son[$m];
				$m++;				
			}
			$k++;
		}

		return $tabSon;
	}
}
?>
