<?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.
*
*Ce fichier contient la classe AdminObject
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @since 2004/06/07
* @version 0.3
* @link www.rooty.me
* @package object_coordination
* @subpackage AdminObject
* @copyright Copyright &copy; 2009-2018, Rooty
*/
if ( !defined('SYSTEM_IN') )
{
die("Hacking attempt");
}

/**
* Classe AdminObject
*
* Classe de gestion des instance d'objets de coordination
* @package object_coordination
* @subpackage AdminObject
*/
Class AdminObject extends CoordinationObj
{
/**
* function tabeCreate()
*<P>creation des tabulation</P>
* @access private
* @return booleen true
*/
	function tabeCreate()
	{
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));
		$tabPictoTabe = array("eye","plus");
		$tabTabe = array("TxtTabeListObject","TxtTabeCreateObject");
		$tabAction = array( array("actionAdmin", "updateObjectAdmin", "deleteObjectAdmin", "rightAdmin", "rightDeleteAdmin"), array("addObjectAdmin", "createNewObjectAdmin") );
		$tabUrlTabe = array(formatUrl($this->getId(), "AdminObject", "actionAdmin","", "&ListNode=".$NodeSelect."&optList=".$optList),formatUrl($this->getId(), "AdminObject", "addObjectAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList));
		printTabeAdmin("TabeB", $tabTabe, $tabUrlTabe, $tabPictoTabe, $tabAction);
		return true;
	}

/**
* function subTabeCreate()
*<P>creation des tabulation Modifier/configurer les droits/supprimer</P>
* @access private
* @param entier id
* @return booleen true
*/
	function subTabeCreate($id)
	{
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		$tabPictoTabe = array("cogs","cogs","minus");
		$tabTabe = array("TxtUpdateObject","TxtConfigObject", "TxtDeleteObject");
		$tabAction = array( array("updateObjectAdmin"), array("rightAdmin", "rightDeleteAdmin"), array("deleteObjectAdmin") );
		$tabUrlTabe = array(formatUrl($this->getId(), "AdminObject", "updateObjectAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList)."&amp;objectId=".$id, formatUrl($this->getId(), "AdminObject", "rightAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList)."&amp;objectId=".$id, formatUrl($this->getId(), "AdminObject", "deleteObjectAdmin","", "&ListNode=".$NodeSelect."&optList=".$optList)."&amp;objectId=".$id);
		printTabeAdmin("TabeSecond", $tabTabe, $tabUrlTabe, $tabPictoTabe, $tabAction);
		return true;
	}

/**
* function subTabeCreate()
*<P>creation des tabulation Modifier/configurer les droits/supprimer</P>
* @access private
* @return booleen true
*/
	function subTabeInstallCreate()
	{
		$tabPictoTabe = array("cogs","ban","ban");
		$tabTabe = array("TxtInstallObject","TxtConfigObject", "TxtDeleteObject");
		$tabAction = array( array("createNewObjectAdmin"), array("rightAdmin", "rightDeleteAdmin"), array("deleteObjectAdmin") );
		$tabUrlTabe = array("#", "#", "#");
		printTabeAdmin("TabeSecond", $tabTabe, $tabUrlTabe, $tabPictoTabe, $tabAction);
		return true;
	}
/**
* actionAdmin:affichage de l'interface principale de gestion des droits utilisateurs
*<P>Permet l'affichage des objets disponibles pour l'administrateur</P>
*<P>Cette interface permet de lister,modifier et gérer les droits propres à chaque objets</P>
*<P>Note: # Cette methode se sert du fichier "message" AdminObject.ini</P>
*<P>      # La variable prise en compte est "nodeId" pour le noeud d'administration</P>
*<P>      # Les nom de Classe "CoordinationObj" et Methodes peuvent être traduites!!!<BR>
*              Ajouter simplement un message dansle fichier xml AdminObject portant dans Name le nom de votre classe<br>
*              (en minuscule) et le nom de votre Methode (composée de nomclasse_nommethode)
*<P>
* @access public
* @return chaine chaine vide
*/
	function actionAdmin()
	{
		/* Ajout du fichier AdminObject.ini */
		addMessageFile("adminobject.ini");
		addMessageFile("object.ini");
		
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */
		
		mxPageTitle("lblAdminObjectAdmin");
		
		$arrayCallCss = array();
		$arrayCallCss[] = "data/css/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.css";
		$arrayCallCss[] = "data/css/bootstrap-toggle/2.2.2/bootstrap-toggle.min.css";
		mxCallCss($arrayCallCss);

		$arrayCallJs = array();
		$arrayCallJs[] = "data/javascript/jquery.dataTables/1.10.22/jquery.dataTables.min.js";
		$arrayCallJs[] = "data/javascript/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.js";
		$arrayCallJs[] = "data/javascript/bootstrap-toggle/2.2.2/bootstrap-toggle.min.js";
		mxCallJs($arrayCallJs);
		
		$arrayRawJs[] = "\$(document).ready(function(){\$(\"#tabAdminObject\").dataTable({\"bPaginate\": true,\"sPaginationType\":\"full_numbers\",\"bAutoWidth\": true,\"bSort\": true,\"aaSorting\": [[ 1, \"asc\" ]],\"iDisplayLength\": 10,\"aLengthMenu\": [[5, 10, 25, -1], [5, 10, 25, \"All\"]],\"oLanguage\":{\"sUrl\": \"data/message/".$currentCode."/datatables_adminobject.txt\"}});});";
		mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("adminobject", "actionadmin");

		/* creation des onglets principaux */
		$this->tabeCreate();

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):nid();
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];

		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Creation du Tree d'admin */
		$myTree	=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);
		//$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromObjectId($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->islib/object_coordination/objectblob/Loaded()==false ){
				systemRedirect(formatUrl($this->getId(), "adminobject", "actionAdmin", "wrongArgument"));
				return "";
			}
		}

		$GLOBALS['SYSTEM_TEMPLATE']->MxText("langCode", $currentCode);
		
		$GLOBALS['SYSTEM_TEMPLATE']->MxText("CurrentTemplate", $GLOBALS['CONF_DATA_PATH']."data/image/icons/object/defaultobject.gif");

		if($optList==0)
		{
			$checked0=true;
			$checked1=false;

			/* Recupération des Noeuds autorisés */
			//$arrayOfNodes = $myTree->getAllNodeId();
			/* Récupération des objets du noeud choisi */
			$tabObject	= $GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->getInstanceFromNodeId ($NodeSelect);
		}
		else
		{
			$checked0=false;
			$checked1=true;
			/*Recupération des droits du noeud choisi */
			$arrayRightNodes=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromNodeId($NodeSelect);
			$arrayOfIdObject = array();

			for($r=0;$r<count($arrayRightNodes);$r++)
			{
				$arrayOfIdObject[] = $arrayRightNodes[$r]->getObjectId();
			}

			/* Récupération des objets de la communautée dans SYSTEM_MANAGER */
			$tabObject	= $GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromIds($arrayOfIdObject);
		}
		$GLOBALS['SYSTEM_TEMPLATE']->MxCheckerField("coche0", "radio", "optList", 0, $checked0);
		$GLOBALS['SYSTEM_TEMPLATE']->MxCheckerField("coche1", "radio", "optList", 1, $checked1);

		/*Affichage des Noeuds pour filtrer les instances*/
		$tabTreeNode[0]=$myTree;		//--> treeNodeUnique....
		printTabTreeNode($tabTreeNode, $NodeSelect, "listNode", "ListNode", true, '', getMessage("TxtListNode"));
		$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlActionNode", formatUrl($this->getId(), "AdminObject", "actionAdmin"));

		/* Pour le Tri/Nom */
		$tabName=array();
		for ($i=0; $i<count($tabObject);$i++)
		{
			$lib=$tabObject[$i]->getName($currentCode);
			if ($lib=="")
			{
				$lib=$tabObject[$i]->getName($defaultCode);
			}
			$tabName[$i]=$lib;
		}
		asort($tabName);
		reset($tabName);

		//Initialisation d'un compteur du nombre d'objets trouvés
		$cpt_objet=0;
		while (list($i, $lib) = each($tabName))
		{
			/* Test si l'objet est accessible ou non et si n'est pas propriétaire */
			if ( ($tabObject[$i]->getId() != $this->getId() ) )
			{
			$cpt_objet++;

				//En fonction du choix d'affichage on va chercher les partages ou le chemin de création
				if($optList==1)
				{
					//On récupère l'instance de l'arbo des noeuds liée au noeud de la boucle
					$wayTreeNode = $GLOBALS['SYSTEM_MANAGER']['TREE_NODE']->createInstance($tabObject[$i]->getNode());

					//On récupère le tableau des Libellés des Pères du noeud pour les afficher
					$tabFatherTreeWay = $wayTreeNode->getFatherLibelleArray($currentCode);
					$lib=$tabFatherTreeWay[0];

					if ($lib==""){ $tabFatherTreeWay = $wayTreeNode->getFatherLibelleArray($defaultCode); }
				}
				else
				{
					//On récupère l'instance de l'arbo des noeuds liée au noeud de la boucle
					$wayTreeNode = $GLOBALS['SYSTEM_MANAGER']['TREE_NODE']->createInstance($NodeSelect);

					//On récupère le tableau des Libellés des Pères du noeud pour les afficher
					$tabFatherTreeWay = $wayTreeNode->getFatherLibelleArray($currentCode);
					$lib=$tabFatherTreeWay[0];

					if ($lib==""){ $tabFatherTreeWay = $wayTreeNode->getFatherLibelleArray($defaultCode); }
				}

				/* Récupération des droits */
				$tabRight=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromObjectId($tabObject[$i]->getId());
				$name	=$tabObject[$i]->getName($currentCode);
				$name	=( (isset($name)) && ($name!="") )?$name:$tabObject[$i]->getName($defaultCode);
				$treeWay = "";

				for($n=(count($tabFatherTreeWay)-1);$n>=0;$n--)
				{
					if($n>0)
					{
						$treeWay .= "/ ".$tabFatherTreeWay[$n];
					}
					else
					{
						$treeWay .= "/ <b>".$tabFatherTreeWay[$n]."</b>";
					}
				}

				$resume	=$tabObject[$i]->getResume($currentCode);
				$resume	=( (isset($resume)) && ($resume!=""))?$resume:$tabObject[$i]->getResume($defaultCode);

				/* recuperation de l'icone */
				if (file_exists($GLOBALS['CONF_DATA_PATH']."data/image/icons/object/".$tabObject[$i]->getIcone()) && ($tabObject[$i]->getIcone()!=""))
				{
					$img=$GLOBALS['CONF_DATA_PATH']."data/image/icons/object/".$tabObject[$i]->getIcone();
				}else{
					$img=$GLOBALS['CONF_DATA_PATH']."data/image/icons/object/defaultobject.gif";
				}

				/* gestion de la template */
				$GLOBALS['SYSTEM_TEMPLATE']->MxImage("actionAdminObject.imgObject", $img, $name, " width=\"24px\"");
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.nameObject", $name);

				$value	=get_class($tabObject[$i]);
				addMessageFile($value);
				$name	=getMessage("class".strtolower($value));
				$name	=( (isset($name)) && ($name!="") )?$name:$value;
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.classObject", $name);
				//$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.resumeObject", $resume);
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.treeWay", $treeWay);

				// Pour la Gestion des déroulés
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.TxtNbRight", getMessage("TxtNbRight"));
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.objectId", htmlspecialchars($value));
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.objectTextId", htmlspecialchars($value));
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.js", "javascript:visible('".$tabObject[$i]->getId()."');");

				for ($j=0; $j<count($tabRight); $j++)
				{
					$lib=getMessage("method".strtolower($tabRight[$j]->getMethodName()));
					if ($lib=="")
						$lib=$tabRight[$j]->getMethodName();
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.MethodName", $lib );

					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.TxtRightA", getMessage("TxtRightA"));
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.TxtRightB", getMessage("TxtRightB"));
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.TxtRightC", getMessage("TxtRightC"));
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.TxtRightD", getMessage("TxtRightD"));

					/* gestion de la template */
					if ( ($tabRight[$j]->getGroupId() != 0) && (!Is_null($tabRight[$j]->getGroupId())) )
					{
						$Group=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance( $tabRight[$j]->getGroupId() );

						//On récupère le tableau des Libellés des Pères du noeud pour les afficher
						$tabWayTreeGroup = $Group->getFatherLibelleArray($currentCode);
						$lib=$tabWayTreeGroup[0];

						if ($lib=="")
						{
							$tabWayTreeGroup = $Group->getFatherLibelleArray($defaultCode);
						}

						$treeGroup = "";

						for($n=(count($tabWayTreeGroup)-1);$n>=0;$n--)
						{
							if($n>0)
							{
								$treeGroup .= "/ ".$tabWayTreeGroup[$n];
							}
							else
							{
								$treeGroup .= "/ <b>".$tabWayTreeGroup[$n]."</b>";
							}
						}
						$lib = $treeGroup;

						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.GroupName", $lib);

					}else{
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.GroupName", "");
					}

					if ( ($tabRight[$j]->getUserId() != 0) && (!Is_null($tabRight[$j]->getUserId())) )
					{
						$user=$GLOBALS["SYSTEM_MANAGER"]["USER"]->createInstance( $tabRight[$j]->getUserId() );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserFirstName", $user->getFirstname() );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserLastName", $user->getFirstname() );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserLogin", $user->getLogin() );
					}else{
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserFirstName", "");
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserLastName", "" );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.UserLogin", "" );
					}

					if ( ($tabRight[$j]->getNodeId() != 0) && (!Is_null($tabRight[$j]->getNodeId())) )
					{
						//if($optList==0)
						//{
						$treeWay ="";
						$node=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance( $tabRight[$j]->getNodeId() );

						//On récupère le tableau des Libellés des Pères du noeud pour les afficher
						$tabWayTreeNode = $node->getFatherLibelleArray($currentCode);
						$lib=$tabWayTreeNode[0];

						if ($lib=="")
						{
							$tabWayTreeNode = $node->getFatherLibelleArray($defaultCode);
						}

							for($n=(count($tabWayTreeNode)-1);$n>=0;$n--)
							{
								if($n>0)
								{
									$treeWay .= "/ ".$tabWayTreeNode[$n];
								}
								else
								{
									$treeWay .= "/ <b>".$tabWayTreeNode[$n]."</b>";
								}
							}
							$lib = $treeWay;
							$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.NodeName", $lib);
							$treeWay ="";
						//}
					}else{
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.RIGHT.NodeName", "");
					}

					$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject.RIGHT", "loop");

				}
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminObject.nbRight", count($tabRight));

				/* Test si l'objet est accessible ou non et si n'est pas propriétaire */
				if ( ($myTree->isSon($tabObject[$i]->node) || $tabObject[$i]->node==$myTree->getId()) && ($tabObject[$i]->getId() != $this->getId() ) )
				{
					/* on est bien sur l'arbre propriétaire-> on peut modifier la configuration de l'objet */
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.UPDATE.urlUpdateObject", formatUrl($this->getId(), "AdminObject", "updateObjectAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$tabObject[$i]->getId()));
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.UPDATE.BtnModify", getMessage("BtnModify"));
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.DELETE.urlDeleteObject", formatUrl($this->getId(), "AdminObject", "deleteObjectAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$tabObject[$i]->getId()));
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.DELETE.BtnDelete", getMessage("BtnDelete"));
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.BtnView", getMessage("BtnView"));
				}else{
					/* on est pas sur l'arbre propriétaire-> on ne peut pas modifier la configuration de l'objet */
					$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject.UPDATE", "delete");
					$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject.DELETE", "delete");
				}
				/* --Fin test du droit de modif */
				if  ( ($myTree->isSon($tabObject[$i]->node)) || ($tabObject[$i]->node==$myTree->getId()) || ($myTree->isFather($tabObject[$i]->node)) )
				{
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.PERMISSION.urlRightObject", formatUrl($this->getId(), "AdminObject", "rightAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$tabObject[$i]->getId()));
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminObject.PERMISSION.BtnRight", getMessage("BtnRight"));
				}else{
					/* on est pas sur l'arbre propriétaire-> on ne peut pas modifier la configuration de l'objet */
					$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject.PERMISSION", "delete");
				}
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject", "loop");
			}
		}//Fin While

		if ($cpt_objet==0)
		{
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminObject", "delete");
		}
		if ($GLOBALS['SYSTEM_TEMPLATE']->isMxFlag("nbObject", "text"))
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("nbObject", $cpt_objet);
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* addObjectAdmin : ajout d'un objets...
*<P>cet methode appelle le "createObject" de coordinationObj du type selectionné</P>
* @access public
* @return chaine chaine vide
*/
	function addObjectAdmin()
	{
		$this->autoRegister();
		
		/* Ajout du fichier AdminObject.ini */
		addMessageFile("adminobject.ini");
		addMessageFile("object.ini");
	
		/* On inclus la template (voir package.template.php) */
		withBlocPath("adminobject", "addobjectadmin");

		/* creation des onglets principaux */
		$this->tabeCreate();

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */

		$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminObject", "createNewObjectAdmin","&ListNode=".$NodeSelect."&optList=".$optList));
		/* Pour le Tri/Nom */
		$tabName=array();
		for ($i=0; $i<count($tabAllowed);$i++)
		{
			$value	=$tabAllowed[$i];
			addMessageFile($value);
			$name	=getMessage("class".strtolower($tabAllowed[$i]));
			$name	=( (isset($name)) && ($name!="") )?$name:$value;
			$tabName[$i]=$name;
		}
		asort($tabName);
		reset($tabName);

		//Initialisation d'un compteur du nombre d'objets trouvés
		$cpt_objet=0;
		while (list($i, $lib) = each($tabName))
		{
			$value	=$tabAllowed[$i];
			$name	=getMessage("class".strtolower($tabAllowed[$i]));
			$name	=( (isset($name)) && ($name!="") )?$name:$value;

			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("actionAdminClass.classValue", $value);
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminClass.className", $name);

			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminClass", "loop");
		}
	}

/**
* createNewObjectAdmin : affichage de L'INTERFACE de création d'un objet
*<P>cet methode appelle le "createObject" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de createobject
*/
	function createNewObjectAdmin()
	{
		$this->autoRegister();

		mxPageTitle("createNewObjectAdminTitlePage");
		
		$arrayRawJs[] = "function imgPicto(){if(document.getElementById){if(document.getElementById(\"configObject\")){document.getElementById(\"pictoObject\").src=\"data/image/icons/object/\"+document.getElementById(\"configObject\").iconeN.options[(document.getElementById(\"configObject\").iconeN.selectedIndex)].value;}}else if(document.all){if(document.all[\"configObject\"]){document.all[\"pictoObject\"].src=\"data/image/icons/object/\"+document.all[\"configObject\"].iconeN.options[(document.all[\"configObject\"].iconeN.selectedIndex)].value;}}}imgPicto();";
		mxRawJs($arrayRawJs);
		
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));
		$contentType=( (isset($_POST["contentType"])) && ($_POST["contentType"]!="") )?$_POST["contentType"]:NULL;
		if ($contentType!=NULL)
		{
			$lib_name=strtolower($contentType);
			include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");
			eval ('$obj= new '.$contentType.'();' );

			if ( is_object($obj) )
			{
				$data=$obj->__createObject(formatUrl($this->getId(), "AdminObject", "execNewObjectAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList), formatUrl($this->getId(), "AdminObject", "actionAdmin","","&ListNode=".$NodeSelect."&optList=".$optList),  $groupId, $nodeId, $tabAllowed);
				/* Ajout du fichier AdminObject.ini */
				addMessageFile("adminobject.ini");

				/* creation des onglets principaux */
				$this->tabeCreate();
				$this->subTabeInstallCreate();

				return $data;				/* donne le retour de __createObject */
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument"));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument"));
			return "";
		}
	}

/**
* execNewObjectAdmin : affichage de L'INTERFACE de création d'un objet
*<P>cet methode appelle le "execObject" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de execcreateobject
*/
	function execNewObjectAdmin()
	{
		$this->autoRegister();
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):nid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));
		$contentType=( (isset($_POST["contentType"])) && ($_POST["contentType"]!="") )?$_POST["contentType"]:NULL;
		if ($contentType!=NULL)
		{
			$lib_name=strtolower($contentType);
			include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");
			eval ('$obj= new '.$contentType.'();' );

			if ( is_object($obj) )
			{
				$data=$obj->__execCreateObject($groupId, $nodeId, $tabAllowed);		// Passage des args pour validation
				systemRedirect(formatUrl($this->getId(), "AdminObject", "rightAdmin", $data, "&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$obj->getId() ));
				return $data;
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* updateObjectAdmin : affichage de L'INTERFACE de modification d'un objet
*<P>cet methode appelle le "updateObject" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de updateobject
*/
	function updateObjectAdmin()
	{
		$this->autoRegister();
		
		$arrayRawJs[] = "function imgPicto(){if(document.getElementById){if(document.getElementById(\"configObject\")){document.getElementById(\"pictoObject\").src=\"data/image/icons/object/\"+document.getElementById(\"configObject\").iconeN.options[(document.getElementById(\"configObject\").iconeN.selectedIndex)].value;}}else if(document.all){if(document.all[\"configObject\"]){document.all[\"pictoObject\"].src=\"data/image/icons/object/\"+document.all[\"configObject\"].iconeN.options[(document.all[\"configObject\"].iconeN.selectedIndex)].value;}}}imgPicto();function imgTemplate(){if(document.getElementById){var obj=document.getElementById(\"TEMPLATE_ADMIN\");document.getElementById(\"screenTemplate\").src=\"data/template/\"+obj.options[(obj.selectedIndex)].value+\"/preview.png\";}else{var obj=document.all[\"TEMPLATE_ADMIN\"];document.all[\"screenTemplate\"].src=\"data/template/\"+obj.options[(obj.selectedIndex)].value+\"/preview.png\";}}imgTemplate();";
		mxRawJs($arrayRawJs);

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		# --> A voir en fonction des restrictions des objets
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);
		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);

		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				/* Test si l'objet est accessible ou non et si n'est pas propriétaire */
				if ( $myTree->isSon($tabObject[$i]->node) || $tabObject[$i]->node==$myTree->getId() )
				{
					$isValid=true;
					break;
				}
			}
		}

		if ( ($objectId!=NULL) && ($isValid=true) )
		{
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);

			if ( is_object($obj) )
			{
				$data=$obj->__updateObject(formatUrl($this->getId(), "AdminObject", "execUpdateObjectAdmin", "","&ListNode=".$NodeSelect."&optList=".$optList),formatUrl($this->getId(), "AdminObject", "actionAdmin","","&ListNode=".$NodeSelect."&optList=".$optList), $groupId, $nodeId,$tabAllowed);
				/* Ajout du fichier AdminObject.ini */
				addMessageFile("adminobject.ini");

				/* creation des onglets principaux */
				$this->tabeCreate();
				$this->subTabeCreate($obj->getId());

				return $data;				/* donne le retour de __updateObject */
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* execNewObjectAdmin : affichage de L'INTERFACE de modification d'un objet (traitement)
*<P>cet methode appelle le "execUpdate" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de execUpdateObject
*/
	function execUpdateObjectAdmin()
	{
		$this->autoRegister();

		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		# --> A voir en fonction des restrictions des objets
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}
		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);
		$objectId=( (isset($_POST["objectId"])) && ($_POST["objectId"]!="") )?$_POST["objectId"]:NULL;

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				/* Test si l'objet est accessible ou non et si n'est pas propriétaire */
				if ( $myTree->isSon($tabObject[$i]->node) || $tabObject[$i]->node==$myTree->getId() )
				{
					$isValid=true;
					break;
				}
			}
		}

		if ( ($objectId!=NULL) && ($isValid==true) )
		{
			$contentType=( (isset($_POST["contentType"])) && ($_POST["contentType"]!="") )?$_POST["contentType"]:NULL;
			if ($contentType!=NULL)
			{
				$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);
				$data=$obj->__execUpdateObject($groupId, $nodeId, $tabAllowed);
				systemRedirect(formatUrl($this->getId(), "AdminObject", "updateObjectAdmin",  $data, "&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$obj->getId() ));

				return $data;
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* deleteObjectAdmin : affichage de L'INTERFACE de suppression d'un objet
*<P>cet methode appelle le "updateObject" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de deleteobject
*/
	function deleteObjectAdmin()
	{
		$this->autoRegister();

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);
		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);
		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				/* Test si l'objet est accessible ou non et si n'est pas propriétaire */
				if ( $myTree->isSon($tabObject[$i]->node) || $tabObject[$i]->node==$myTree->getId() )
				{
					$isValid=true;
					break;
				}
			}
		}

		if ( ($objectId!=NULL) && ($isValid=true) )
		{
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);
			if ( is_object($obj) )
			{
				$data=$obj->__deleteObject(formatUrl($this->getId(), "AdminObject", "execDeleteObjectAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList), formatUrl($this->getId(), "AdminObject", "actionAdmin","","&ListNode=".$NodeSelect."&optList=".$optList), $groupId, $nodeId, $tabAllowed);
				
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("urlReturn", formatUrl($this->getId(), "AdminObject", "actionAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList) );

				/* Ajout du fichier AdminObject.ini */
				addMessageFile("adminobject.ini");

				/* creation des onglets principaux */
				$this->tabeCreate();
				$this->subTabeCreate($obj->getId());

				return $data;				/* donne le retour de __deleteObject */
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* execDeleteObjectAdmin : affichage de L'INTERFACE de suppression d'un objet traitement)
*<P>cet methode appelle le "execUpdate" de coordinationObj du type selectionné</P>
* @access public
* @return chaine retour de execDeleteObject
*/
	function execDeleteObjectAdmin()
	{
		$this->autoRegister();
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		/* On récupère la valeur url return */
		$UrlReturn=( (isset($_POST["urlReturn"])) && ($_POST["urlReturn"]!="") )?$_POST["urlReturn"]:$GLOBALS["SYSTEM_USER_SESSION"]->entryNodeId;

		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* Creation du Tree d'admin */
		$myTree=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);
		$objectId=( (isset($_POST["objectId"])) && ($_POST["objectId"]!="") )?$_POST["objectId"]:NULL;

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				/* Test si l'objet est accessible ou non */
				if ( $myTree->isSon($tabObject[$i]->node) || $tabObject[$i]->node==$myTree->getId() )
				{
					$isValid=true;
					break;
				}
			}
		}

		if ( ($objectId!=NULL) && ($isValid==true) )
		{
			$contentType=( (isset($_POST["contentType"])) && ($_POST["contentType"]!="") )?$_POST["contentType"]:NULL;
			if ($contentType!=NULL)
			{
				$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);
				$data=$obj->__execDeleteObject($groupId, $nodeId, $tabAllowed);
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", $data));
				return $data;
			}else{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* rightAdmin : affichage de l'interface principale de gestion des droits utilisateurs
*<P>Permet l'affichage des objets disponibles pour l'administrateur</P>
*<P>Cette interface permet de lister,modifier et gérer les droits propres à chaque objets</P>
*<P>Note: # Cette methode se sert du fichier "message" AdminObject.ini</P>
*<P>      # La variable prise en compte est "nodeId" pour le noeud d'administration</P>
*<P>      # Les nom de Classe "CoordinationObj" et Methodes peuvent être traduites!!!<BR>
*              Ajouter simplement un message dansle fichier xml AdminObject portant dans Name le nom de votre classe<br>
*              (en minuscule) et le nom de votre Methode (composée de nomclasse_nommethode)
*<P>
* @access public
* @return chaine code message
*/
	function rightAdmin()
	{
		/* Ajout du fichier AdminObject.ini pour les traductions */
		addMessageFile("adminobject.ini");
		addMessageFile("object.ini");
		
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */
		
		mxPageTitle("");
		
		$arrayCallCss = array();
		$arrayCallCss[] = "data/css/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.css";
		$arrayCallCss[] = "data/css/bootstrap-toggle/2.2.2/bootstrap-toggle.min.css";
		mxCallCss($arrayCallCss);

		$arrayCallJs = array();
		$arrayCallJs[] = "data/javascript/jquery.dataTables/1.10.22/jquery.dataTables.min.js";
		$arrayCallJs[] = "data/javascript/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.js";
		$arrayCallJs[] = "data/javascript/bootstrap-toggle/2.2.2/bootstrap-toggle.min.js";
		mxCallJs($arrayCallJs);
		
		$arrayRawJs[] = "\$(document).ready(function(){\$(\"#tabRightAdmin\").dataTable({\"bPaginate\": true,\"sPaginationType\": \"full_numbers\",\"bAutoWidth\": true,\"aaSorting\": [[ 0, \"asc\" ]],\"iDisplayLength\": 10,\"aLengthMenu\": [[5, 10, 25, -1], [5, 10, 25, \"All\"]],\"oLanguage\": {\"sUrl\": \"data/message/".$currentCode."/datatables_rightadmin.txt\"}});});";
		mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("AdminObject", "rightAdmin");

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */
		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;
		$this->tabeCreate();
		$this->subTabeCreate($objectId);

		# --> A voir en fonction des restrictions des objets
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}
		// --> recuperation du treeNode correspondant au noeud
		/* Creation du Tree d'admin */
		$myTreeGroup			=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance($groupId);
		/* Verification de l'existance du Tree */
		if ( !is_object($myTreeGroup) ){
			if ( $myTreeGroup->isLoaded()==false ){
				systemRedirect($urlReturn."&msg=WrongArgument");
				return "WrongArgument";
			}
		}
		// --> recuperation du treeNode correspondant au noeurd
		$tabTreeNode[0]=$myTree;		//--> treeNodeUnique....
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				$isValid=true;
				break;
			}
		}

		/* -- Affichage des Group d'ajout */
		$tabUser=$GLOBALS["SYSTEM_CONTROL"]->arrayOfAdministrableUserFromTabTreeGroup($tabTreeGroup, 0, "GROUP");
		/* -- Fin Affichage des groupes d'ajout */

		$tabUserId=array();
		for ($i=0; $i<count($tabUser); $i++)
		{
			$tabUserId[]=$tabUser[$i]->getId();
		}
		$tabGroupId=array();
		for ($i=0; $i<count($tabTreeGroup); $i++)
		{
			$tabGroupId[]=$tabTreeGroup[$i]->getId();
			$tabGroupId=array_merge($tabGroupId, $tabTreeGroup[$i]->getSonArray());
		}

		if ( ($objectId!=NULL) && ($isValid==true) )
		{
			$tabTreeNode[0]=$myTree;		//--> treeNodeUnique....
			//PrintTabTreeNode($tabTreeNode, $nodeId, "NODE");
			printTabTreeNode($tabTreeNode, $nodeId, "listNode", "node_id", false, '');
			/* -- Fin d'affichage des noeud d'ajout */

			printTabTreeGroup($tabTreeGroup, $groupId, "GROUP", "group_id", ' onchange="javascript:document.configObject.user_id.selectedIndex=0;"', getMessage("TxtChoose"));
			/* -- Fin Affichage des groupes d'ajout */

			/* -- Affichage des Group d'ajout */
			$tabUser=$GLOBALS["SYSTEM_CONTROL"]->arrayOfAdministrableUserFromTabTreeGroup($tabTreeGroup, 0, "GROUP");
			printTabUser($tabUser, 0, "USER", "user_id" , ' onchange="javascript:document.configObject.group_id.selectedIndex=0;"', getMessage("TxtChoose"));
			/* -- Fin Affichage des groupes d'ajout */

			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminObject", "rightAddAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$objectId));
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlReturn", formatUrl($this->getId(), "AdminObject", "actionAdmin","","&ListNode=".$NodeSelect."&optList=".$optList) );

			/* Récupération des droits */
			$tabRight=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromObjectId($objectId);

			/* Creation de l'objet */
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);

			$lib=$obj->getName($currentCode);
			if ($lib=="")
				$lib=$obj->getName($defaultCode);

			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ObjectName", $lib);

			/* affichage des classe de l'objet... */
			$tabMethod=array();
			$arrayClass=get_class_methods( get_class($obj) );
			addMessageFile(strtolower(get_class($obj)));
			for ( $i=0; $i<count($arrayClass); $i++)
			{
				if ( !(strpos($arrayClass[$i], "action")===false) )
				{
					$lib=getMessage("method".strtolower($arrayClass[$i]) );
					if ( $lib=="" )
						$lib=$arrayClass[$i];
					$tabMethod[$arrayClass[$i]]=$lib;
				}
			}
			$GLOBALS['SYSTEM_TEMPLATE']->MxSelect("METHOD", "method_name", '', $tabMethod, '','', '');

			/* Pour le Type de l'objet */
			addMessageFile($obj->getContentType());
			$name	=getMessage("class".$obj->getContentType());
			$name	=( (!isset($name)) || ($name=="") )?$obj->getContentType():$name;
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ObjectType", $name);

			for ($i=0; $i<count($tabRight); $i++)
			{
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.TxtDetail", getMessage("TxtDetail") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("RIGHT.DELETE.BtnDelete", getMessage("BtnDelete") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("RIGHT.rightId", $tabRight[$i]->getId());
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("RIGHT.js", "javascript:visible('".$tabRight[$i]->getId()."');");
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.TxtGroupName", getMessage("TxtGroupName"));
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.TxtUserName", getMessage("TxtUserName"));
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.TxtDetail", getMessage("TxtDetail"));
				$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("RIGHT.BtnViewRight", getMessage("BtnView"));
				/* gestion de la template */
				if ( ($tabRight[$i]->getGroupId() != 0) && (!Is_null($tabRight[$i]->getGroupId())) )
				{
					$Group=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance( $tabRight[$i]->getGroupId() );
					$tabWayTreeGroup = $Group->getFatherLibelleArray($currentCode);
					$lib=$tabWayTreeGroup[0];

					if ($lib=="")
					{
						$tabWayTreeGroup = $Group->getFatherLibelleArray($defaultCode);
					}

					$treeGroup = "";
					for($n=(count($tabWayTreeGroup)-1);$n>=0;$n--)
					{
						if($n>0)
						{
							$treeGroup .= "/ ".$tabWayTreeGroup[$n];
						}
						else
						{
							$treeGroup .= "/ <b>".$tabWayTreeGroup[$n]."</b>";
						}
					}
					$lib = $treeGroup;

					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.GroupName", $lib);
				}else{
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.GroupName", "");
				}

				if ( ($tabRight[$i]->getUserId() != 0) && (!Is_null($tabRight[$i]->getUserId())) )
				{
					$user=$GLOBALS["SYSTEM_MANAGER"]["USER"]->createInstance( $tabRight[$i]->getUserId() );
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserFirstName", $user->getFirstname() );
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserLastName", $user->getFirstname() );
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserLogin", $user->getLogin() );
				}else{
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserFirstName", "");
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserLastName", "" );
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.UserLogin", "" );
				}

				if ( ($tabRight[$i]->getNodeId() != 0) && (!Is_null($tabRight[$i]->getNodeId())) )
				{
					$node=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance( $tabRight[$i]->getNodeId() );
					$tabWayTreeNode = $node->getFatherLibelleArray($currentCode);
					$lib=$tabWayTreeNode[0];

					if ($lib=="")
					{
						$tabWayTreeNode = $node->getFatherLibelleArray($defaultCode);
					}

					$treeWay = "";
					for($n=(count($tabWayTreeNode)-1);$n>=0;$n--)
					{
						if($n>0)
						{
						$treeWay .= "/ ".$tabWayTreeNode[$n];
						}
						else
						{
						$treeWay .= "/ <b>".$tabWayTreeNode[$n]."</b>";
						}
					}
					$lib = $treeWay;

					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.NodeName", $lib);
				}else{
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.NodeName", "");
				}

				$lib=getMessage("method".strtolower($tabRight[$i]->getMethodName()));
				if ($lib=="")
					$lib=$tabRight[$i]->getMethodName();
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.MethodName", $lib );

				/* Test si l'objet est accessible ou non */
				if ( ($myTree->isSon($tabRight[$i]->getNodeId() ) || $tabRight[$i]->getNodeId() ==$myTree->getId()) && ( ( in_array($tabRight[$i]->getUserId(), $tabUserId)) ||  (in_array($tabRight[$i]->getGroupId(), $tabGroupId)) ) )
				{
					/* Pour les bouton */
					$GLOBALS['SYSTEM_TEMPLATE']->MxText("RIGHT.DELETE.imgPath", $GLOBALS['SYSTEM_TEMPLATE_PATH'].$GLOBALS['SYSTEM_TEMPLATE_DIR']);
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("RIGHT.DELETE.urlDeleteObject", formatUrl($this->getId(), "AdminObject", "rightDeleteAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$tabRight[$i]->getObjectId()."&rightId=".$tabRight[$i]->getId()));
				}else{
					$GLOBALS["SYSTEM_TEMPLATE"]->MxBloc("RIGHT.DELETE", "delete");
				}

				$GLOBALS["SYSTEM_TEMPLATE"]->MxBloc("RIGHT", "loop");
			}
			if (count($tabRight)==0)
			{
				$GLOBALS["SYSTEM_TEMPLATE"]->MxBloc("RIGHT", "delete");
				$GLOBALS["SYSTEM_CONTROL"]->messageSystem="MsgNoRight";
			}
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("nbRight", count($tabRight));

		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* rightAddAdmin : affichage de l'interface principale de gestion des droits utilisateurs
*<P>ajout d'un droit pour l'objet</P>
* @access public
* @return chaine chaine vide
*/
	function rightAddAdmin()
	{
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */
		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;

		/* Elements à postés */
		$group_id	=( (isset($_POST["group_id"])) && ($_POST["group_id"]!="") )?$_POST["group_id"]:0;
		$user_id	=( (isset($_POST["user_id"])) && ($_POST["user_id"]!="") )?$_POST["user_id"]:0;
		$node_id	=( (isset($_POST["node_id"])) && ($_POST["node_id"]!="") )?$_POST["node_id"]:0;
		$method_name	=( (isset($_POST["method_name"])) && ($_POST["method_name"]!="") )?$_POST["method_name"]:NULL;

		# --> A voir en fonction des restrictions des objets
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);

		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				$isValid=true;
				break;
			}
		}

		if ( ($objectId!=NULL) && ($isValid==true) && ($node_id!=0) && ( ($user_id!=0) || ($group_id!=0) ) && (!is_null($method_name)) )
		{
			/* Creation de l'objet */
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);

			$data=$obj->__execAddRight($node_id, $user_id, $group_id, $method_name);
			systemRedirect(formatUrl($this->getId(), "AdminObject", "rightAdmin", $data,"&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$objectId));
			return "";
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}

	}

/**
* rightDeleteAdmin : suppression d'un droit
*<P>suppression d'un droit pour l'objet</P>
* @access public
* @return chaine chaine vide
*/
	function rightDeleteAdmin()
	{
		/* Ajout du fichier AdminObject.ini pour les traductions */
		addMessageFile("adminobject.ini");
		addMessageFile("object.ini");
		
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */
		
		mxPageTitle("");
		
// 		$arrayCallCss = array();
// 		$arrayCallCss[] = "data/css/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.css";
// 		$arrayCallCss[] = "data/css/bootstrap-toggle/2.2.2/bootstrap-toggle.min.css";
// 		mxCallCss($arrayCallCss);
// 
// 		$arrayCallJs = array();
// 		$arrayCallJs[] = "data/javascript/jquery.dataTables/1.10.22/jquery.dataTables.min.js";
// 		$arrayCallJs[] = "data/javascript/dataTables.bootstrap4/1.10.22/dataTables.bootstrap4.min.js";
// 		$arrayCallJs[] = "data/javascript/bootstrap-toggle/2.2.2/bootstrap-toggle.min.js";
// 		mxCallJs($arrayCallJs);
// 		
// 		$arrayRawJs[] = "\$(document).ready(function(){\$(\"#tabAdminObject\").dataTable({\"bPaginate\": true,\"sPaginationType\":\"full_numbers\",\"bAutoWidth\": true,\"bSort\": true,\"aaSorting\": [[ 1, \"asc\" ]],\"iDisplayLength\": 10,\"aLengthMenu\": [[5, 10, 25, -1], [5, 10, 25, \"All\"]],\"oLanguage\":{\"sUrl\": \"data/message/".$currentCode."/datatables_adminobject.txt\"}});});";
// 		mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("AdminObject", "rightDeleteAdmin");
		
		$this->tabeCreate();

		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */
		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;
		$rightId=( (isset($_GET["rightId"])) && ($_GET["rightId"]!="") )?$_GET["rightId"]:NULL;

		# --> A voir en fonction des restrictions des objets

		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();

		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				$isValid=true;
				break;
			}
		}

		if ( ($objectId!=NULL) && ($isValid==true) )
		{
			/* -- Affichage des Noeud d'ajout */
			// --> recuperation du treeNode correspondant au noeurd
			$tabTreeNode[0]=$myTree;		//--> treeNodeUnique....

			/* -- Affichage des Group d'ajout */
			$tabTreeGroup=$GLOBALS["SYSTEM_CONTROL"]->arrayOfAdministrableGroup($nodeId);

			/* -- Affichage des Group d'ajout */
			$tabUser=$GLOBALS["SYSTEM_CONTROL"]->arrayOfAdministrableUserFromTabTreeGroup($tabTreeGroup, 0, "GROUP");
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlReturn", formatUrl($this->getId(), "AdminObject", "rightAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$objectId) );

			/* Récupération des droits */
			$tabRight=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromObjectId($objectId);

			/* Creation de l'objet */
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);
			$lib=$obj->getName($currentCode);
			if ($lib=="")
				$lib=$obj->getName($defaultCode);

			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ObjectName", $lib);

			/* Pour le Type de l'objet */
			addMessageFile($obj->getContentType());
			$name	=getMessage("class".strtolower($obj->getContentType()));
			$name	=( (!isset($name)) || ($name=="") )?$obj->getContentType():$name;
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ObjectType", $name);

			for ($i=0; $i<count($tabRight); $i++)
			{
				if ($rightId==$tabRight[$i]->getId())
				{
					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminObject", "execRightDeleteAdmin","","&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$tabRight[$i]->getObjectId()."&rightId=".$tabRight[$i]->getId()));

					$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlReturn", formatUrl($this->getId(), "AdminObject", "rightAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList)."&objectId=".$tabRight[$i]->getId() );

					$GLOBALS['SYSTEM_TEMPLATE']->MxText("urlReturn", formatUrl($this->getId(), "AdminObject", "rightAdmin", "", "&ListNode=".$NodeSelect."&optList=".$optList)."&objectId=".$tabRight[$i]->getObjectId() );
					/* gestion de la template */
					if ( ($tabRight[$i]->getGroupId() != 0) && (!Is_null($tabRight[$i]->getGroupId())) )
					{
						$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance( $tabRight[$i]->getGroupId() );
						$lib=$Group->getLibelle($currentCode);
						if ($lib=="")
							$lib=$Group->getLibelle($defaultCode);

						$GLOBALS['SYSTEM_TEMPLATE']->MxText("GroupName", $lib);
					}else{
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("GroupName", "");
					}

					if ( ($tabRight[$i]->getUserId() != 0) && (!Is_null($tabRight[$i]->getUserId())) )
					{
						$user=$GLOBALS["SYSTEM_MANAGER"]["USER"]->createInstance( $tabRight[$i]->getUserId() );

						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserFirstName", $user->getFirstname() );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserLastName", $user->getFirstname() );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserLogin", $user->getLogin() );
					}else{
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserFirstName", "" );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserLastName", "" );
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("UserLogin", "" );
					}

					if ( ($tabRight[$i]->getNodeId() != 0) && (!Is_null($tabRight[$i]->getNodeId())) )
					{
						$node=$GLOBALS["SYSTEM_MANAGER"]["NODE"]->createInstance( $tabRight[$i]->getNodeId() );
						$lib=$node->getLibelle($currentCode);
						if ($lib=="")
							$lib=$node->getLibelle($defaultCode);

						$GLOBALS['SYSTEM_TEMPLATE']->MxText("NodeName", $lib);
					}else{
						$GLOBALS['SYSTEM_TEMPLATE']->MxText("NodeName", "");
					}

					$lib=getMessage("method".strtolower($tabRight[$i]->getMethodName()));
					if ($lib=="")
						$lib=$tabRight[$i]->getMethodName();

					$GLOBALS['SYSTEM_TEMPLATE']->MxText("MethodName", $lib );
					break;
				}
			}
			if (count($tabRight)==0)
			{
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument", "&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* rightDeleteAdmin: suppression d'un droit (traitement)
*<P>suppression d'un droit pour l'objet</P>
* @access public
* @return chaine chaine vide
*/
	function execRightDeleteAdmin()
	{
		/* Récuperation du radio sélectionné */
		$optList=(( (isset($_POST["optList"])) && ($_POST["optList"]!="") )?$_POST["optList"]:((isset($_GET["optList"]) && ($_GET["optList"]!=""))?$_GET["optList"]:0));
		/* On récupère la valeur postée de sélection du noeud */
		$NodeSelect=((isset($_POST["ListNode"])) && ($_POST["ListNode"]!="")?$_POST["ListNode"]:((isset($_GET["ListNode"]) && ($_GET["ListNode"]!=""))?$_GET["ListNode"]:$this->getData("nodeId")));

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		// --> verification du noeud d'administration
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("nodeId"):1; 		/* Tous les Groupes par défaut */
		$objectId=( (isset($_GET["objectId"])) && ($_GET["objectId"]!="") )?$_GET["objectId"]:NULL;
		$rightId=( (isset($_GET["rightId"])) && ($_GET["rightId"]!="") )?$_GET["rightId"]:NULL;

		# --> A voir en fonction des restrictions des objets
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeId);

		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
				return "";
			}
		}

		/* Recupération des Noeuds autorisés */
		$arrayOfNodes		=$myTree->getAllNodeId();
		/* Récupération des objets de la communautée dans SYSTEM_CONTROL */
		$tabObject		=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstanceFromNodeIds($arrayOfNodes);
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* -- fin récupération des codes par defaut */

		// Verification de l'administrabilitée de l'objets
		$isValid=false;
		for ($i=0; $i<count($tabObject); $i++)
		{
			if ($objectId==$tabObject[$i]->getId())
			{
				$isValid=true;
				break;
			}
		}

		if ( ($objectId!=NULL) && ($isValid==true) && ($rightId!=NULL) )
		{
			/* Creation de l'objet */
			$obj=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($objectId);
			$data=$obj->__execDeleteRight($rightId);
			systemRedirect(formatUrl($this->getId(), "AdminObject", "rightAdmin", $data,"&ListNode=".$NodeSelect."&optList=".$optList."&objectId=".$objectId));
			return "";
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminObject", "actionAdmin", "wrongArgument","&ListNode=".$NodeSelect."&optList=".$optList));
			return "";
		}
	}

/**
* Auto Register $GLOBALS["OBJ_INIT_VARS"] -> enregistre les éléments dans la variable globale $GLOBALS["OBJ_INIT_VARS"]
* cette fonction declare toutes les variables d'environement pour <BR/>
* que la création d'un élément n'ait pas besoin de passer d'arg (récursivitée des droits) <BR/>
* ces éléments peuvent ainsi être récupérés par les sous objets...
* @access public
*/
	function autoRegister()
	{
		/* Noeud d'administration */
		$GLOBALS["OBJ_INI_VARS"]["nodeId"]=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		/*liste des objets configurables*/
		$GLOBALS["OBJ_INI_VARS"]["tabAllowed"]=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		/*Groupe d'administration*/
		$GLOBALS["OBJ_INI_VARS"]["groupId"]=($this->getData("groupId")!="")?$this->getData("groupId"):1;
		/*Template disponible et déléguables*/
		$GLOBALS["OBJ_INI_VARS"]["template"]=($this->getData("groupId")!="")?$this->getData("template"):array();
	}
	
#######################################################################################################################################
### Parametrage de l'instance!!!
#######################################################################################################################################
#### On surcharge
###### ici les methodes de CoordinationObj pour avoir un form permettant de saisir la racine de fonctionnement de l'objet
/**
* Surchage de la methode de coordinationObj
* @param chaine url pour le form
* @param chaine url pour le form de retour
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @param tableau
* @access public
* @return chaine code Message
*/
	function configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass)
	{
		addMessageFile("object.ini");
		$end=parent::configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass);

		// On affiche en plus la liste des noeud et des groupes paramétrables
		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$nodeId=($this->getData("nodeId")!="")?$this->getData("nodeId"):eid();
		$tabAllowed=(is_array($this->getData("tabAllowed")))?$this->getData("tabAllowed"):$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$tabAllowedPass=( (is_array($tabAllowedPass)) && (count($tabAllowedPass)!=0) )?$tabAllowedPass:$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */
		$tabTemplate=($this->getData("template")!="")?$this->getData("template"):$GLOBALS["OBJ_INI_VARS"]["template"];
		
		/* Creation du Tree d'admin */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($nodeIdPass);
		/* Verification de l'existance du Tree */
		if ( !is_object($myTree) ){
			if ( $myTree->isLoaded()==false ){
				systemRedirect($urlReturn."&msg=WrongArgument");
				return "WrongArgument";
			}
		}
		// --> recuperation du treeNode correspondant au noeurd
		/* Creation du Tree d'admin */
		$myTreeGroup			=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance($groupIdPass);
		/* Verification de l'existance du Tree */
		if ( !is_object($myTreeGroup) ){
			if ( $myTreeGroup->isLoaded()==false ){
				systemRedirect($urlReturn."&msg=WrongArgument");
				return "WrongArgument";
			}
		}
		// --> recuperation du treeNode correspondant au noeurd

		$tabTreeNode[0]=$myTree;		//--> treeNodeUnique....
		printTabTreeNode($tabTreeNode, $nodeId, "NODE_ADMIN", "node_admin_id", false, '');
		/* -- Fin d'affichage des noeud d'ajout */

		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....
		printTabTreeGroup($tabTreeGroup, $groupId, "GROUP_ADMIN", "group_admin_id", '');
		/* -- Fin Affichage des groupes d'ajout */

		/* pour chaque classe et en fonction de la langue */
		for ($i=0; $i<count($tabAllowedPass); $i++)
		{
			$value	=$tabAllowedPass[$i];
			addMessageFile($value);
			$name	=getMessage("class".strtolower($tabAllowedPass[$i]));
			$name	=( (!isset($name)) || ($name=="") )?$value:$name;

			if ( (in_array($value, $tabAllowedPass)) )
			{
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminClass.classValue", $value);
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("actionAdminClass.className", $name);

				if ( !in_array($value, $tabAllowed) )
					$check="";
				else
					$check="checked";
				$GLOBALS["SYSTEM_TEMPLATE"]->MxCheckerField("actionAdminClass.classId", "checkbox", "class_id[]", $value, $check,"class='BUTTON'");
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("actionAdminClass", "loop");
			}
		}
		
		/* Affichage des templates */
		# Affichage de la liste déroulante
		# Détermine le chemin des icones
		$chemintotal = $GLOBALS['SYSTEM_TEMPLATE_PATH'];
		$tabIcone    = array();
		$tabTpl=(isset($GLOBALS["OBJ_INI_VARS"]["template"]) && is_array($GLOBALS["OBJ_INI_VARS"]["template"]))?$GLOBALS["OBJ_INI_VARS"]["template"] : array();
		# Lecture du dossier correspondant aux icones
		$handle      = @opendir($chemintotal);
		while ($file = @readdir($handle))
		{
			if (in_array($file, $tabTpl ) || count($tabTpl)==0 )
			{
				if($file !="" && $file !="." && $file !=".." && (strpos("CACHE",$file, 0)===FALSE) && (strpos("cache",$file, 0)===FALSE) && (strpos(".SVN",$file, 0)===FALSE) && (strpos(".CVS",$file, 0)===FALSE) && is_dir($chemintotal.$file))
				{
					$tabIcone[$file]=$file;
				}
			}
		}
		@closedir($handle);
		$GLOBALS['SYSTEM_TEMPLATE']->MxSelect("TEMPLATE_ADMIN", "template", $tabTemplate, $tabIcone, '', 13, ' onchange="javascript:imgTemplate();" id="TEMPLATE_ADMIN"');
		/* Fin Affichage des templates */
		return $end;
	}

/**
* __createObject : retourne la chaine d'affichage de création de l'objet (/défaut)
* @param chaine url pour le form
* @param chaine url pour le form de retour
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @param tableau
* @access public
* @return chaine code Message
*/
	function __createObject($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass)
	{
		withBlocPath("AdminObject", "configuration");
		$end=$this->configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass);
		exitBloc();
		return $end;
	}

/**
* __execCreateObject : retourne la chaine d'affichage de création de l'objet (/traitement)
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @param tableau
* @access public
* @return chaine code Message
*/
	function __execCreateObject($groupIdPass, $nodeIdPass, $tabAllowedPass)
	{
		if (isset($_POST["class_id"]))
		{
			$tabPost=array();
			if ( is_array($_POST["class_id"]) )
			{
				$tabPost=$_POST["class_id"];
			}else{
				$tabPost=$tabAllowedPass;
			}
			$this->setData("tabAllowed", $tabPost);
		}
		else{
			return "wrongArgument";
		}

		if (isset($_POST["group_admin_id"]))
			$this->setData("groupId", $_POST["group_admin_id"]);
		else
			$this->setData("groupId", $this->getData("nodeId"));

		if (isset($_POST["node_admin_id"]))
			$this->setData("nodeId", $_POST["node_admin_id"]);
		else
			$this->setData("nodeId", $this->getData("nodeId"));

		if ( is_array($_POST["template"]) )
		{
			$tabTemplate=$_POST["template"];
		}else{
			$tabTemplate=$GLOBALS["OBJ_INI_VARS"]["template"];
		}
		$this->setData("template", $tabTemplate);
		$end=parent::__execCreateObject($groupIdPass, $nodeIdPass, $tabForbiddenPass);
		return $end;
	}

/**
* __ExecUpdateObject : retourne la chaine d'affichage de modification de l'objet (/traitement)
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @param tableau
* @access public
* @return chaine code Message
*/
	function __execUpdateObject($groupIdPass, $nodeIdPass, $tabAllowedPass)
	{
		if (isset($_POST["class_id"]))
		{
			$tabPost=array();
			if ( is_array($_POST["class_id"]) )
			{
				$tabPost=$_POST["class_id"];
			}else{
				$tabPost=$tabAllowedPass;
			}
			$this->setData("tabAllowed", $tabPost);
		}
		else{
			return "wrongArgument";
		}
		if (isset($_POST["group_admin_id"]))
			$this->setData("groupId", $_POST["group_admin_id"]);
		else
			$this->setData("groupId", 1);

		if (isset($_POST["node_admin_id"]))
			$this->setData("nodeId", $_POST["node_admin_id"]);
		else
			$this->setData("nodeId", 1);
			
		if ( is_array($_POST["template"]) )
		{
			$tabTemplate=$_POST["template"];
		}else{
			$tabTemplate=$GLOBALS["OBJ_INI_VARS"]["template"];
		}
		$this->setData("template", $tabTemplate);
		$end=parent::__execUpdateObject($groupIdPass, $nodeIdPass, $tabForbiddenPass);
		return $end;
	}

/**
* __updateObject : surchage updateObject de l'objet de coordination
* @param chaine url pour le form
* @param chaine url pour le form de retour
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @param tableau
* @access public
* @return chaine code Message
*/
	function __updateObject($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass)
	{
		withBlocPath("AdminObject", "configuration");
		$end=$this->configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabAllowedPass);
		exitBloc();
		return $end;
	}
}
?>
