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

/**
* Classe AdminGroup
*
* classe de gestion des instance d'objets de coordination
*
* @package object_coordination
* @subpackage AdminGroup
*/

Class AdminGroup extends CoordinationObj
{
/**
* @access private
* @return true
*/
	function tabeCreate()
	{
		$tabPictoTabe = array("plus","cogs","minus");
		$tabTabe = array("BtnAdd","BtnModify","BtnDelete");
		$tabAction = array(array("actionAdmin"), array("updateAdmin"), array("deleteAdmin"));
		$tabUrlTabe = array(formatUrl($this->getId(), "AdminGroup", "actionAdmin"),formatUrl($this->getId(), "AdminGroup", "updateAdmin"),formatUrl($this->getId(), "AdminGroup", "deleteAdmin"));
		printTabeAdmin("TabeB",$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" AdminGroup.ini</P>
*<P>      # Les nom de Classe "CoordinationObj" et Methodes peuvent être traduites!!!<BR>
*              Ajouter simplement un message dansle fichier xml AdminGroup 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 actionAdmin()
	{
		/* Ajout du fichier AdminGroup.ini */
		addMessageFile("admingroup.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("actionAdminTitlePage");
		
		$arrayRawJs[] = "function imgPicto(){if(document.getElementById){if(document.getElementById(\"configGroup\")){document.getElementById(\"pictoObject\").src=\"data/image/icons/node/\"+document.getElementById(\"configGroup\").iconeN.options[(document.getElementById(\"configGroup\").iconeN.selectedIndex)].value;}}else if(document.all){if(document.all[\"configGroup\"]){document.all[\"pictoObject\"].src=\"data/image/icons/node/\"+document.all[\"configGroup\"].iconeN.options[(document.all[\"configGroup\"].iconeN.selectedIndex)].value;}}}";
        mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("admingroup", "actionadmin");

		/*On affiche les onglets d'administration*/
		$this->tabeCreate();

		/* Récupération de toutes les langues actives */
		$tab=$GLOBALS["SYSTEM_MANAGER"]["LANGUAGE"]->createLanguageList();

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* 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
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....
		printTabTreeNode($tabTreeGroup, 0, "GROUP", "group_id", false, "", "", "class=\"form\" required=\"true\" title=\"".htmlspecialchars(getMessage("TxtGroupIn"), ENT_QUOTES)."\"");
		/* -- Fin Affichage des groupes d'ajout */

		$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminGroup", "execCreateAdmin"));

		/* 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 */

		# Affichage de la liste déroulante
		# Détermine le chemin des icones
		$chemintotal = $GLOBALS['CONF_DATA_PATH']."data/image/icons/node/";

		# Lecture du dossier correspondant aux icones
		$handle  = @opendir($chemintotal);
		while ($file = @readdir($handle))
		{
			if($file !="" && $file !="." && $file !=".." && (substr($file, -3)== "gif" || substr($file,-3)=="jpg" || substr($file,-4)=="jpeg" || substr($file,-3)=="png"))
			{
				$tabIcone[$file]=$file;
			}
		}
		@closedir($handle);
		asort($tabIcone);
// 		if ( $Node->getIcone() == "") $nodeIcone = "defaultnode.gif"; else $nodeIcone = $Node->getIcone();
		$GLOBALS['SYSTEM_TEMPLATE']->MxSelect("icone", "iconeN", '', $tabIcone, 'Icône du groupe', '', 'id="iconeN"', "class=\"form\" title=\"".htmlspecialchars(getMessage("TxtPictoGroup"), ENT_QUOTES)."\"", getMessage("TxtPictoGroup"));
		$GLOBALS["SYSTEM_TEMPLATE"]->MxImage("pictoObject", $GLOBALS['CONF_DATA_PATH']."data/image/icons/node/defaultnode.gif", getMessage("PreviewPicto"));
		

		for ($i=0; $i<count($tab);$i++)
		{
			$lib=$tab[$i]->getLibelle($currentCode);
			if ($lib=="")
			{
				$lib=$tab[$i]->getLibelle($defaultCode);
			}

			$img =$tab[$i]->getIcone();
			$GLOBALS['SYSTEM_TEMPLATE']->MxImage("blocName.pictoLanguage", $img, htmlentitiesconv($lib));
			$GLOBALS["SYSTEM_TEMPLATE"]->MxFormField("blocName.nameInput", "text", "nameLanguage".$tab[$i]->getCode(), "", "class=\"form\" required=\"true\" title=\"".htmlspecialchars(getMessage("TxtGroupName"), ENT_QUOTES)."\"", getMessage("TxtGroupName"));

			//Récupère le nom de l'objet dans la langue correspondante à la boucle
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("blocName", "loop");
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* execCreateAdmin: Enregistre le groupe dans la Bd...
*<P>Remarque: l'objet doit recevoir ses args en POST</P>
*<P>Note: cette methode se sert de $GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]</P>
* @access public
* @return chaine code Message
*/
	function execCreateAdmin()
	{
		$tabCodeLangue=array();
		$isValid=true;
		$group_id	=( (isset($_POST["group_id"])) && ($_POST["group_id"]!="") )?$_POST["group_id"]:0;
		$node_id	=( (isset($_POST["node_id"])) && ($_POST["node_id"]!="") )?$_POST["node_id"]:0;
		$Group=new Group();
		$Group->SetIcone( ((isset($_POST["iconeN"]))?(htmlentitiesconv($_POST["iconeN"])):"") );

		# Variables de configuration de l'objet
		/* Pour le nom de l'objet... */
		while (list($key, $val) = each($_POST)) {
			if (!(strpos($key, "name")===false))							// on a trouvé un nom pour une langue
			{
				if ( $val!="" )
				{
					$tabCodeLangue[]=str_replace("name", "",$key);					// on stocke le tableau des codes pour test
					// on ajoute le lib
					$Group->setLibelle(str_replace("name", "",$key), $val);
				}
			}
		}
		if ( !(in_array($GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"],$tabCodeLangue)) )
		{
			$isValid=false;
		}
		if ($group_id!=0)
		{
			$Group->setIdPere($group_id);
		}else{
			$isValid=false;
		}
		if ($isValid==true)
		{
			$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->insertInstance($Group);
			$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->emptyCache();
			systemRedirect( formatUrl($this->getId(), "AdminGroup", "actionAdmin", "msgSave")."&groupId=".$Group->getId() );
			return "msgSave";
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminGroup", "actionAdmin", "wrongArgument"));
			return "wrongArgument";
		}
	}

/**
* updateAdmin:fonction de mise à jour des groups
* @access public
* @return chaine code message
*/
	function updateAdmin()
	{
		/* Ajout du fichier AdminGroup.ini */
		addMessageFile("admingroup.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("updateAdminTitlePage");
		
		$arrayRawJs[] = "function imgPicto(){if(document.getElementById){if(document.getElementById(\"modifGroup\")){document.getElementById(\"pictoObject\").src=\"data/image/icons/node/\"+document.getElementById(\"modifGroup\").iconeN.options[(document.getElementById(\"modifGroup\").iconeN.selectedIndex)].value;}}else if(document.all){if(document.all[\"modifGroup\"]){document.all[\"pictoObject\"].src=\"data/image/icons/node/\"+document.all[\"modifGroup\"].iconeN.options[(document.all[\"modifGroup\"].iconeN.selectedIndex)].value;}}}";
        mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("AdminGroup", "updateAdmin");

		/*On affiche les onglets d'administration*/
		$this->tabeCreate();

		/* Récupération de toutes les langues actives */
		$tab=$GLOBALS["SYSTEM_MANAGER"]["LANGUAGE"]->createLanguageList();
		$group_id	=((isset($_POST["group_id"]) && is_numeric($_POST["group_id"]))?$_POST["group_id"]:((isset($_GET["group_id"]) && is_numeric($_GET["group_id"]))?$_GET["group_id"]:Null));

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* 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
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....

		# Affichage de la liste déroulante
		# Détermine le chemin des icones
		$chemintotal = $GLOBALS['CONF_DATA_PATH']."data/image/icons/node/";

		/* -- Affichage des Group d'ajout */
		printTabTreeGroup($tabTreeGroup, $group_id, "GROUP", "group_id", false, "", "", "class=\"form\" required=\"true\" title=\"".htmlspecialchars(getMessage("TxtDeplacer"), ENT_QUOTES)."\"");
		/* -- Fin Affichage des groupes d'ajout */

		if ($group_id!=NULL)
		{
			//On load le Group
			$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance($group_id);

			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminGroup", "execUpdateAdmin"));
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("IdHiddenUpdate", $group_id);
			/* -- Fin d'affichage des noeud d'ajout */
			# Lecture du dossier correspondant aux icones
			$handle  = @opendir($chemintotal);
			while ($file = @readdir($handle))
			{
				if($file !="" && $file !="." && $file !=".." && (substr($file, -3)== "gif" || substr($file,-3)=="jpg" || substr($file,-4)=="jpeg" || substr($file,-3)=="png"))
				{
					$tabIcone[$file]=$file;
				}
			}
			@closedir($handle);
			asort($tabIcone);
			if ( $Group->getIcone() == "") $groupIcone = "defaultnode.gif"; else $groupIcone = $Group->getIcone();
			$GLOBALS['SYSTEM_TEMPLATE']->MxSelect("ToHidde".".icone", "iconeN", $groupIcone, $tabIcone, '', '', 'id="iconeN"', "class=\"form\" title=\"".htmlspecialchars(getMessage("txtNodeIcon"), ENT_QUOTES)."\"", getMessage("txtNodeIcon"));
			$GLOBALS["SYSTEM_TEMPLATE"]->MxImage("ToHidde.pictoObject", $GLOBALS['CONF_DATA_PATH']."data/image/icons/node/".$groupIcone, getMessage("PreviewPicto"));

			for ($i=0; $i<count($tab);$i++)
			{
				$lib=$tab[$i]->getLibelle($currentCode);
				if ($lib=="")
				{
					$lib=$tab[$i]->getLibelle($defaultCode);
				}

				$img =$tab[$i]->getIcone();
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.GroupName",$Group->getLibelle($tab[$i]->getCode() ));
				$GLOBALS['SYSTEM_TEMPLATE']->MxImage("ToHidde.blocName.pictoLanguage", $img,htmlentitiesconv($lib));
				$GLOBALS["SYSTEM_TEMPLATE"]->MxFormField("ToHidde.blocName.nameInput", "text", "nameLanguage".$tab[$i]->getCode(), htmlentitiesconv($Group->getLibelle($tab[$i]->getCode())), "class=\"form\" required=\"true\" title=\"".htmlspecialchars(getMessage("txtNodeName"), ENT_QUOTES)."\"", getMessage("txtNodeName"));
				//Récupère le nom de l'objet dans la langue correspondante à la boucle
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.blocName", "loop");
			}
			// Pour déplacer le Group
			$tabMove=array();
			$k=0;
			for ($i=0; $i<count($tabTreeGroup); $i++)
			{
				// si le Noeud est dans l'arbre on change l'arbre
				if (in_array($Group->getId(),$tabTreeGroup[$i]->getSonArray()))
				{
					// on Fait un truc un peu exotique... on vide le tabson
					$currentTree=$tabTreeGroup[$i];
					$currentSon=$currentTree->getSonOfIdPereArray($Group->getId());	// Tous les Fils de l'id selectionné
					for ($i=0; $i<count($currentTree->tabSon); $i++)
					{
						if ( (in_array($currentTree->tabSon[$i]->getId(), $currentSon)) || ($currentTree->tabSon[$i]->getId()==$Group->getId()) )
						{
							unset($currentTree->tabSon[$i]);
						}
					}
					$currentTree->tabSon=array_values($currentTree->tabSon);
					$tabMove[$k]=$currentTree;
					$k++;
				}else if (in_array($Group->getId(),$tabTreeGroup[$i]->getFatherArray()) || $Group->getId()==$tabTreeGroup[$i]->getId())
				{
					// on ignore le group action??
				}else{
					$tabMove[$k]=$tabTreeGroup[$i];
					$k++;
				}
			}
			if (count($tabMove)==0)
			{
				systemRedirect(formatUrl($this->getId(), "AdminGroup", "updateAdmin", "enableGroup"));
				return "enableGroup";
			}
			printTabTreeGroup($tabMove, $Group->getIdPere(), "ToHidde.GROUP_PERE", "group_id_pere");
		}else{
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminGroup", "updateAdmin"));
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde", "delete");
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* execUpdateAdmin:fonction de mise à jour des groups(traitement)
* @access public
* @return chaine code Message
*/
	function execUpdateAdmin()
	{
		$tabCodeLangue=array();
		$isValid=true;
		$group_id	=( (isset($_POST["group_id"])) && ($_POST["group_id"]!="") )?$_POST["group_id"]:0;
		$group_id_pere	=( (isset($_POST["group_id_pere"])) && ($_POST["group_id_pere"]!="") )?$_POST["group_id_pere"]:0;
		$node_id	=( (isset($_POST["node_id"])) && ($_POST["node_id"]!="") )?$_POST["node_id"]:0;

		if ($group_id==0)
		{
			systemRedirect(formatUrl($this->getId(), "AdminGroup", "actionAdmin", "wrongArgument"));
			return "wrongArgument";
		}

		$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance($group_id);
		$Group->setIcone( ((isset($_POST["iconeN"]))?(htmlentitiesconv($_POST["iconeN"])):"") );
		# Variables de configuration de l'objet
		/* Pour le nom de l'objet... */
		while (list($key, $val) = each($_POST)) {
			if (!(strpos($key, "name")===false))							// on a trouvé un nom pour une langue
			{
				if ( $val!="" )
				{
					$tabCodeLangue[]=str_replace("name", "",$key);					// on stocke le tableau des codes pour test
					// on ajoute le lib
					$Group->setLibelle(str_replace("name", "",$key), $val);
				}
			}
		}
		if ( !(in_array($GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"],$tabCodeLangue)) )
		{
			$isValid=false;
		}
		// Pour le cas une seule racine du site!!!
		if ($group_id_pere!=0)
		{
			$MyTree=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance($group_id);
			// Son pere ne peu pas être un de ses fils ou lui même !!!
			if ( (in_array($group_id_pere, $MyTree->getSonArray())) && ($MyTree->getId()!=$group_id_pere) )
			{
				$isValid=false;
			}else{
				$Group->setIdPere($group_id_pere);
			}
		}else{
			$isValid=false;
		}
		if ($isValid==true)
		{
			$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->updateInstance($Group);

			$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->emptyCache();

			systemRedirect( formatUrl($this->getId(), "AdminGroup", "updateAdmin", "msgSave")."&group_id=".$Group->getId() );
			return "msgSave";
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminGroup", "updateAdmin", "wrongArgument"));
			return "wrongArgument";
		}
	}

/**
* deleteAdmin:fonction de mise à jour des groups
* @access public
* @return chaine code Message
*/
	function deleteAdmin()
	{
		/* Ajout du fichier AdminGroup.ini */
		addMessageFile("admingroup.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("deleteAdminTitlePage");
		
		$arrayRawJs[] = "function SelectGroup(){if(document.getElementById){if (document.getElementById(\"RecapGroup\")){document.getElementById(\"RecapGroup\").action=document.getElementById(\"RecapGroup\").urlUpdate.value;document.getElementById(\"RecapGroup\").submit();}}else if(document.all){if(document.all[\"RecapGroup\"]){document.all[\"RecapGroup\"].action=document.all[\"RecapGroup\"].urlUpdate.value;document.all[\"RecapGroup\"].submit();}}}";
        mxRawJs($arrayRawJs);
		
		/* On inclus la template (voir package.template.php) */
		withBlocPath("AdminGroup", "deleteAdmin");

		/*On affiche les onglets d'administration*/
		$this->tabeCreate();
		$group_id	=( (isset($_POST["group_id"])) && ($_POST["group_id"]!="") )?$_POST["group_id"]:0;

		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		/* 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
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....

		# Affichage de la liste déroulante
		# Détermine le chemin des icones
		$chemintotal = $GLOBALS['SYSTEM_TEMPLATE_PATH'].$GLOBALS['SYSTEM_TEMPLATE_DIR']."media/picto/node/";

		/* -- Affichage des Group d'ajout */
		printTabTreeGroup($tabTreeGroup, $group_id, "GROUP", "group_id", false, "", "", "class=\"form\" required=\"true\" title=\"".htmlspecialchars(getMessage("TxtDeplacer"), ENT_QUOTES)."\"");
		/* -- Fin Affichage des groupes d'ajout */

		if ($group_id!=NULL)
		{
			for ($i=0; $i<count($tabTreeGroup); $i++)
			{
				if ($tabTreeGroup[$i]->getId()==$group_id)
				{
					systemRedirect(formatUrl($this->getId(), "AdminGroup", "deleteAdmin", "enableDeleteGroup"));
					return "enableDeleteGroup";
				}
			}
			//On load le Group
			$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance($group_id);

			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("ToHidde.urlHiddenUpdate", $group_id);
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("ToHidde.urlAction", formatUrl($this->getId(), "AdminGroup", "execDeleteAdmin"));

			$lib=$Group->getLibelle($currentCode);
			if ($lib=="")
				$lib=$Group->getLibelle($defaultCode);

			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.GroupName", $lib );
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteGroup", getMessage("TxtDeleteGroup") );
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteUser", getMessage("TxtDeleteUser") );
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteEntryNode", getMessage("TxtDeleteEntryNode") );
			$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteRight", getMessage("TxtDeleteRight") );

			/* Affichage des Dependance */
			$MyTreeGroup=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance($group_id);
			// Pour l'objet en Lui MM
			$this->printGroupDependancy($group_id, $lib);

			$tab=$MyTreeGroup->getSonArray();
			for($i=0; $i<count($tab); $i++)
			{
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteUser", getMessage("TxtDeleteUser") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteEntryNode", getMessage("TxtDeleteEntryNode"));
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteRight", getMessage("TxtDeleteRight") );
				$this->printGroupDependancy($tab[$i], $MyTreeGroup->getLibelleFromGroup($tab[$i], $defaultCode) );
			}
		}else{
			$GLOBALS['SYSTEM_TEMPLATE']->MxAttribut("urlAction", formatUrl($this->getId(), "AdminGroup", "deleteAdmin"));
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde", "delete");
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}


/**
* Affichage des dependances entre groupes 	
* @access public
* @param entier id du groupe
* @param chaine nom du groupe
* @return chaine chaine html
*/

	function printGroupDependancy($groupId, $GroupName)
	{
		/* 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 */

		// Recuperation des association Utilisateur/Group
		$tabUserGroup		=$GLOBALS["SYSTEM_MANAGER"]["GROUP_USER"]->getInstanceFromGroupId($groupId);
		$tabNodeGroupUser	=$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->getInstanceFromGroupId($groupId);
		$tabRight		=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromGroupId($groupId);

		$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.TxtDeleteGroup", getMessage("TxtDeleteGroup") );
		$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.GroupName", $GroupName );

		if (count($tabNodeGroupUser)!=0)
		{
			for ($i=0; $i<count($tabNodeGroupUser); $i++)
			{
				$NodeGroupUser	=$GLOBALS["SYSTEM_MANAGER"]["NODE"]->createInstance($tabNodeGroupUser[$i]->getNodeId());
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_NODE.TxtDeleteEntryNode", getMessage("TxtDeleteEntryNode") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_NODE.NodeName", $NodeGroupUser->getLibelle($defaultCode) );
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_NODE", "loop" );
			}
		}else{
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_NODE", "delete" );
		}
		if (count($tabUserGroup)!=0)
		{
			for ($i=0; $i<count($tabUserGroup); $i++)
			{
				$User	=$GLOBALS["SYSTEM_MANAGER"]["USER"]->createInstance($tabUserGroup[$i]->getUserId());
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_USER.TxtDeleteUser", getMessage("TxtDeleteUser") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_USER.UserFirstName", $User->getFirstName() );
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_USER.UserLastName", $User->getLastName() );
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_USER", "loop" );
			}
		}else{
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_USER", "delete" );
		}
		if (count($tabRight)!=0)
		{
			for ($i=0; $i<count($tabRight); $i++)
			{
				$Obj	=$GLOBALS["SYSTEM_MANAGER"]["COORDINATION_OBJ"]->createInstance($tabRight[$i]->getObjectId());
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_RIGHT.TxtDeleteRight", getMessage("TxtDeleteRight") );
				$GLOBALS['SYSTEM_TEMPLATE']->MxText("ToHidde.DELETE.DELETE_RIGHT.ObjectName", $Obj->getName($defaultCode) );
				$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_RIGHT", "loop" );
			}
		}else{
			$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE.DELETE_RIGHT", "delete" );
		}
		$GLOBALS['SYSTEM_TEMPLATE']->MxBloc("ToHidde.DELETE", "loop" );
	}

/**
* execDeleteAdmin:fonction de mise à jour des groups(traitement)
* @access public
* @return chaine code Message
*/
	function execDeleteAdmin()
	{
		/* Récuperation du noeud à administrer sinon noeud d'entrée de l'admin */
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */
		$group_id=((isset($_POST["group_id"]) && is_numeric($_POST["group_id"]))?$_POST["group_id"]:((isset($_GET["groupId"]) && is_numeric($_GET["groupId"]))?$_GET["groupId"]:Null));

		/* 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
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....

		/* 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 */

		# Affichage de la liste déroulante
		# Détermine le chemin des icones
		//$chemintotal = $GLOBALS['SYSTEM_TEMPLATE_PATH'].$GLOBALS['SYSTEM_TEMPLATE_DIR']."media/picto/node/";

		/* -- Affichage des Group d'ajout */
		if ($group_id!=NULL)
		{
			for ($i=0; $i<count($tabTreeGroup); $i++)
			{
				if ($tabTreeGroup[$i]->getId()==$group_id)
				{
					systemRedirect(formatUrl($this->getId(), "AdminGroup", "deleteAdmin", "enableDeleteGroup"));
					return "enableDeleteGroup";
				}
			}
			//On load le Group
			$Group=$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->createInstance($group_id);
			$lib=$Group->getLibelle($currentCode);
			if ($lib=="")
				$lib=$Group->getLibelle($defaultCode);

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

			/* Affichage des Dependance */
			$MyTreeGroup=$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP"]->createInstance($group_id);

			$tab=$MyTreeGroup->getSonArray();
			for($i=0; $i<count($tab); $i++)
			{
				$this->deleteGroupDependancy($tab[$i] );
			}
			// Pour l'objet en Lui MM
			$this->deleteGroupDependancy($group_id);
			$GLOBALS["SYSTEM_MANAGER"]["TREE_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_GROUP_CACHE"]->emptyCache();
			$GLOBALS["SYSTEM_MANAGER"]["LIST_USER_NODE_CACHE"]->emptyCache();
			systemRedirect(formatUrl($this->getId(), "AdminGroup", "deleteAdmin", "msgDelete"));
			return "msgDelete";
		}else{
			systemRedirect(formatUrl($this->getId(), "AdminGroup", "deleteAdmin", "wrongArgument"));
			return "wrongArgument";
		}
		/* Sortie de la Template */
		exitBloc();
		return "";
	}

/**
* deletegroupedependancy:fonction de suppression de groupe
* @access public
* @param entier id groupe
* @return chaine chaine html
*/
	function deleteGroupDependancy($groupId)
	{
		/* 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 */

		// Recuperation des association Utilisateur/Group
		$tabUserGroup		=$GLOBALS["SYSTEM_MANAGER"]["GROUP_USER"]->getInstanceFromGroupId($groupId);
		$tabNodeGroupUser	=$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->getInstanceFromGroupId($groupId);
		$tabRight		=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromGroupId($groupId);

		for ($i=0; $i<count($tabUserGroup); $i++)
		{
			//on regarde ici pour les utilisateurs correspondants
			/* Selection de tous les groupes utilisateurs */
			$tabGroupUser=$GLOBALS["SYSTEM_MANAGER"]["GROUP_USER"]->getInstanceFromUserId( $tabUserGroup[$i]->getUserId() );
			if (count($tabGroupUser)==1)
			{
				/* cas un seul group... on supprime l'utilisateur et ses droits */
				$tabRight=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->getInstanceFromUserId( $tabUserGroup[$i]->getUserId(), array() );		/* Droits seulement pour l'utilisateur */
				#--> suppression des droits
				for ($i=0;$i<count($tabRight);$i++)
				{
					$tabRight[$i]=$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->deleteInstance( $tabRight[$i] );		/* Droits seulement pour l'utilisateur */
				}
				$tabEntryNode=$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->getInstanceFromUserId( $tabUserGroup[$i]->getUserId(), array() );		/* Droits seulement pour l'utilisateur */
				#--> suppression des droits
				for ($i=0;$i<count($tabEntryNode);$i++)
				{
					$tabEntryNode[$i]=$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->deleteInstance( $tabEntryNode[$i] );		/* Droits seulement pour l'utilisateur */
				}
				#--> on supprime l'utilisateur
				$User=$GLOBALS["SYSTEM_MANAGER"]["USER"]->createInstance( $tabUserGroup[$i]->getUserId() );
				$User=$GLOBALS["SYSTEM_MANAGER"]["USER"]->deleteInstance( $User );
			}
			$GLOBALS["SYSTEM_MANAGER"]["GROUP_USER"]->deleteInstance($tabUserGroup[$i]);
		}

		for ($i=0; $i<count($tabNodeGroupUser); $i++)
		{
			/* on verifie la présence d'un user... */
			$GLOBALS["SYSTEM_MANAGER"]["NODE_GROUP_USER"]->deleteInstance($tabNodeGroupUser[$i]);
		}

		for ($i=0; $i<count($tabRight); $i++)
		{
			$GLOBALS["SYSTEM_MANAGER"]["RIGHT"]->deleteInstance($tabRight[$i]);
		}

		/* Suppression du Groupe */
		$GLOBALS["SYSTEM_MANAGER"]["GROUP"]->sourceDelete($groupId);
	}

#######################################################################################################################################
### 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
/**
* Surcharge des methodes de la classe CoordinationObjet
* @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, $tabForbiddenPass)
	{
		addMessageFile("object.ini");
		$end=parent::configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabForbiddenPass);

		// 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 */
		$tabForbidden=(is_array($this->getData("tabForbidden")))?$this->getData("tabForbidden"):array();
		$groupId=($this->getData("groupId")!="")?$this->getData("groupId"):1; 		/* Tous les Groupes par défaut */

		// --> 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
		$tabTreeGroup[0]=$myTreeGroup;		//--> treeNodeUnique....
		printTabTreeGroup($tabTreeGroup, $groupId, "GROUP_ADMIN", "group_admin_id", '');
		/* -- Fin Affichage des groupes d'ajout */
		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, $tabForbiddenPass)
	{
		withBlocPath("AdminGroup", "configuration");
		$end=$this->configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabForbiddenPass);
		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, $tabForbiddenPass)
	{
		if (isset($_POST["group_admin_id"]))
			$this->setData("groupId", $_POST["group_admin_id"]);
		else
			$this->setData("groupId", nid());

		$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, $tabForbiddenPass)
	{
		if (isset($_POST["group_admin_id"]))
			$this->setData("groupId", $_POST["group_admin_id"]);
		else
			$this->setData("groupId", 1);

		$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, $tabForbiddenPass)
	{
		withBlocPath("AdminGroup", "configuration");
		$end=$this->configurePrint($url, $urlReturn, $groupIdPass, $nodeIdPass, $tabForbiddenPass);
		exitBloc();
		return $end;
	}
}
?>
