<?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 List.php
*
* Ce fichier contient la classe List
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2018/05/17
* @version 0.3
* @package system_data
* @subpackage model
* @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 List
*
* Classe de gestion des List d'arbre<br>
* Attention, ces listes ne sont gérés uniqument que pour un utilisateur.
* si les caches sys sont activés, il faut les générer proprement.
*
* @abstract
* @package system_data
* @subpackage model
*/
class TreeList
{

/**#@+
* @access private
*/

/**
* @var entier
* @desc contient l'id numerique de l'utilisateur
*/
var $userId = null;

/**
* @var tableau
* @desc tableau des noeud fils.
*/
var $tabTree = array();

/**#@-*/
/**
* Constructeur de la classe List PHP5
*
* <p>Initialise la classe List</p>
* @access public
*/
	function __construct()
	{
		$this->userId=0;
		$this->tabTree=array();
	}

/**
* "getteur" de l'attribut Id.
* @access public
* @return entier Id du List
*/
	function getId()
	{
		return $this->userId;
	}

/**
* "setteur" de l'attribut Id.
* @access public
* @param entier Id du List
*/
	function setId($Id)
	{
		$this->userId=$Id;
		return true;
	}

/**
* doload de l'objet List.
* (utilisé essentiellement pour charger un List depuis une base de données)
* @access public
* @param entier identifiant numérique du List père
* @param chaine libelle du List
* @return booleen chargé ou non chargé
*/
	function doLoad($userId, $tabTree)
	{
		$this->userId=$userId;
		$this->tabTree=$tabTree;
		return true;
	}

/**
* getFatherId: Recupere tous les identifiant des noeuds parents
*
* @param entier
* @access public
* @return tableau
*/
	function getFatherArray()
	{
		$tab=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=array_merge($tab, $Tree->getFatherArray());
		}
		return array_values(array_unique($tab));
	}

/**
* getFather: Recupere tous les noeuds parents
*
* @param entier
* @access public
* @return tableau
*/
	function getFather()
	{
		$tab=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=array_merge($tab, $Tree->getFather());
		}
		return array_values(array_unique($tab));
	}

/**
* getSonId: Recupere tous les identifiant des noeuds fils
*
* @param entier
* @access public
* @return tableau
*/
	function getSonArray()
	{
		$tab=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=array_merge($tab, $Tree->getSonArray());
		}
		return array_values(array_unique($tab));
	}

/**
* getSon: Recupere tous les noeuds fils
*
* @param entier
* @access public
* @return tableau
*/
	function getSon()
	{
		$tab=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=array_merge($tab, $Tree->getSon());
		}
		return array_values(array_unique($tab));
	}

/**
* getAllId: recupere tous les identifiants des arbres
*
* @param entier
* @access public
* @return tableau
*/
	function getAllId()
	{
		return array_values( array_unique( array_merge($this->getFatherId(), $this->getSonId())) );
	}

/**
* getAllId: recupere tous les identifiants des arbres
*
* @param entier
* @access public
* @return tableau
*/
	function getAllNode()
	{
		return array_values( array_unique( array_merge($this->getFather(), $this->getSon())) );
	}

/**
* getConfiguredId: Recupere tous les identifiant de groupes configurés (liaisons seulement)
*
* @param entier
* @access public
* @return tableau
*/
	function getConfiguredId($id="")
	{
		$tab=array();
		$k=0;

		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if( $Tree->getDomain($Tree->getId()) === $_SERVER["HTTP_HOST"] )
				$tab[]=$Tree->getId();
		}
		return array_values(array_unique($tab));
	}

/**
* getConfiguredNode: Recupere tous les identifiant de groupes configurés (liaisons seulement)
*
* @param entier
* @access public
* @return tableau
*/
	function getConfiguredNode($id="")
	{
		$tab=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab[]=$Tree->getNode( $Tree[$i]->getId() );
		}
		return array_values(array_unique($tab));
	}

/**
* getLibelle Recupere le libelle d'un element du tableau
*
* @param entier
* @access public
* @return tableau
*/
	function getLibelle($id, $langue)
	{
		$tmp=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=$Tree->getAllNodeId();

			if (in_array($id,$tab))
			{
				return ($Tree->getLibelle($id, $langue));
			}
		}
		return $tmp;
	}

/**
* getDomain Recupere le fqdn d'un element du tableau
*
* @param entier
* @access public
* @return fqdn
*/
	function getDomain($id)
	{
		$tmp=array();
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			$tab=$Tree->getAllNodeId();

			if (in_array($id,$tab))
			{
				return ($Tree->getDomain($id));
			}
		}
		return $tmp;
	}

/**
* getNode recupere un noeud ds l'arbre donne
*
* @param entier identifiant de l'arbre
* @param entier identifiant du noeud du noeud
* @access public
* @return objet Noeud correspondant ou nouveau noeud
*/
	function getNode($treeId, $nodeId)
	{
		/* on recherche le Tree correspondant */
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			/* Pour le tree correspondant :  */
			if ($Tree->getId()==$treeId)
			{
				/* on aliment $tab avec le noeud... */
				$Node=$Tree->getNode($nodeId);
				return $Node;
			}
		}
		return new Node();
	}

/**
* getAllNodeIdOnTreeId: Recupere tous les identifiant de Nodes autorisés pour l'utilisateur
*
* @param entier
* @access public
* @return tableau
*/
	function getNodeIdOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id==$Tree->getId())
			{
				return ($Tree->getAllNodeId($id));
			}
		}
		return array();
	}

/**
* getAllNodeOnTreeId: Recupere tous les identifiant de Nodes autorisés pour l'utilisateur
*
* @param entier
* @access public
* @return tableau
*/
	function getNodeOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id==$Tree->getId())
			{
				return ($Tree->getAllNode($id));
			}
		}
		return array();
	}

/**
* getAllFatherNodeIdOnTreeId Recupere tous les identifiant de Nodes peres
*
* @param entier
* @access public
* @return tableau
*/
	function getFatherNodeIdOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id=$Tree->getId())
			{
				return ($Tree->getFatherArray());
			}
		}
		return array();
	}

/**
* getFatherNodeOnTreeId: Recupere tous les Objets de Nodes peres pour l'arbre donné
*
* @param entier
* @access public
* @return tableau
*/
	function getFatherNodeOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id=$Tree->getId())
			{
				return ($Tree->getFather());
			}
		}
		return array();
	}

/**
* getSonNodeIdOnTreeId: Recupere tous les identifiant de Nodes fils pour l'arbre donné
*
* @param entier
* @access public
* @return tableau
*/
	function getSonNodeIdOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id=$Tree->getId())
			{
				return ($Tree->getSonArray());
			}
		}
		return array();
	}

/**
* getSonNodeOnTreeId: Recupere tous les Objets Nodes fils pour l'arbre donné
*
* @param entier
* @access public
* @return tableau
*/
	function getSonNodeOnTreeId($id)
	{
		reset($this->tabTree);

		foreach($this->tabTree as $Tree)
		{
			if ($id=$Tree->getId())
			{
				return ($Tree->getSon());
			}
		}
		return array();
	}
}
?>
