<?php

/**------------------------------------------------
*
* Rooty, 2018 <rooty@rooty.me>
*
*
* This software is protected by copyright, please
* read the file COPYRIGHT.
* This program is distributed in the hope that it
* will be useful, but without any warranty; without
* even the implied warranty of merchantability or
* fitness for a particular purpose. Please
* read the file LICENCE.
*
* Fichier lib_system.php
*
* Ce fichier contient les fonctions system usuelles
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2018/04/02
* @version 0.2
* @package system_utils
* @copyright Copyright &copy; 2009-2018, Rooty
*/

if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* Fonction uid
* <P>Récupere l'uid de l'utilisateur courant</P>
* @return entier
*/
function uid ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->user->getId();
	}else{
		if (isset($GLOBALS["SYSTEM_DEFAULT_USER_GUEST"]))
		{
			return $GLOBALS["SYSTEM_DEFAULT_USER_GUEST"];
		}else{
			return 1;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction userFirstName
* <P>Récupere le "First Name" de l'utilisateur courant</P>
* @return entier
*/
function userFirstName ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->user->getFirstName();
	}else{
		return "";
	}
}

/**
*Fonction userLastName
* <P>Récupere le "Last Name" de l'utilisateur courant</P>
* @return entier
*/
function userLastName ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->user->getLastName();
	}else{
		return "";
	}
}

/**
* Fonction userMail
* <P>Récupere le "Mail" de l'utilisateur courant</P>
* @return entier
*/
function userMail ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->user->getMail();
	}else{
		return "";
	}
}

/**
*Fonction lid
* <P>Récupere l'identifiant de la langue courante d'affichage</P>
* @return entier
*/
function lid ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->langue->getId();
	}else{
		if (isset($GLOBALS["SYSTEM_DEFAULT_LANGUAGE"]))
		{
			return $GLOBALS["SYSTEM_DEFAULT_LANGUAGE"];
		}else{
			return 1;	/* Attention variable arbitraire */
		}
	}
}

/**
* Fonction lcode
* <P>Récépere le code de la langue courante (FR-GB) etc</P>
* @return param code
*/
function lcode ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
	}else{
		if (isset($GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"]))
		{
			return $GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		}else{
			return 1;	/* Attention variable arbitraire */
		}
	}
}

/**
* Fonction gid
* <P>Récupere un tableau contenant les identifiants des groupes de l'utilisateurs courant</P>
* @return tableau tableau d'entier
*/
function gid ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->listUserGroup->getFatherGroupId();
	}else{
		return array();		/* Attention variable arbitraire */
	}
}

/**
*Fonction nid
* <P>Récépere l'identifiant du noeud courant de navigation (endroit dans l'arbre)</P>
* @return tableau tableau d'entier
*/
function nid ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->navigationNodeId;
	}else{
		if (isset($GLOBALS["SYSTEM_DEFAULT_NODE"]))
		{
			return $GLOBALS["SYSTEM_DEFAULT_NODE"];
		}else{
			return NULL;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction eid
* <P>Récépere l'identifiant du noeud d'entrée de navigation (=> noeud d'entrée dans l'arbre)</P>
* @return tableau tableau d'entier
*/
function eid ()
{
	if (isset($GLOBALS["SYSTEM_USER_SESSION"]))
	{
		return $GLOBALS["SYSTEM_USER_SESSION"]->entryNodeId;
	}else{
		if (isset($GLOBALS["SYSTEM_DEFAULT_NODE"]))
		{
			return $GLOBALS["SYSTEM_DEFAULT_NODE"];
		}else{
			return NULL;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction oid
* <P>Récépere l'identifiant de l'objet a executer</P>
* @return tableau tableau d'entier
*/
function oid ()
{
	if (isset($GLOBALS["SYSTEM_CONTROL"]))
	{
		return $GLOBALS["SYSTEM_CONTROL"]->oid;
	}else{
		if (isset($GLOBALS["SYSTEM_CONTROL"]))
		{
			return $GLOBALS["SYSTEM_CONTROL"];
		}else{
			return NULL;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction className
* <P>Récépere le nom de la classe courante</P>
* @return tableau tableau d'entier
*/
function className ()
{
	if (isset($GLOBALS["SYSTEM_CONTROL"]))
	{
		return $GLOBALS["SYSTEM_CONTROL"]->className;
	}else{
		if (isset($GLOBALS["SYSTEM_CONTROL"]))
		{
			return $GLOBALS["SYSTEM_CONTROL"];
		}else{
			return NULL;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction methodName
* <P>Récépere le nom de la methode courante</P>
* @return tableau tableau d'entier
*/
function methodName ()
{
	if (isset($GLOBALS["SYSTEM_CONTROL"]))
	{
		return $GLOBALS["SYSTEM_CONTROL"]->methodName;
	}else{
		if (isset($GLOBALS["SYSTEM_CONTROL"]))
		{
			return $GLOBALS["SYSTEM_CONTROL"];
		}else{
			return NULL;	/* Attention variable arbitraire */
		}
	}
}

/**
*Fonction getMessage
* <P>Récépere le message de nom</P>
* @param chaine nom du message
* @return chaine Message
*/
function getMessage($nom)
{
	if (isset($GLOBALS["SYSTEM_MESSAGE"]))
	{
		return $GLOBALS["SYSTEM_MESSAGE"]->getMessage($nom);
	}else{
		return "";
	}
}

/**
*Fonction getMessage
* <P>Récépere le message de nom</P>
* @param chaine nom du message
* @return chaine Message
*/
function getMessageCode($nom)
{
	if (isset($GLOBALS["SYSTEM_MESSAGE"]))
	{
		return $GLOBALS["SYSTEM_MESSAGE"]->getMessageCode($nom);
	}else{
		return false;
	}
}

/**
*Fonction addMessageFile
* Ajoute un fichier de message dans la gestion des messages...<br>
* Ces messages pourront être exploités avec la function getMessage (NOM_ID)<br>
* Pour plus d'info voir la doc rubrique system_message
* <P>Récépere le message de nom</P>
* @param chaine nom du message
* @return booleen
*/
function addMessageFile($nom)
{
	if (isset($GLOBALS["SYSTEM_MESSAGE"]))
	{
		return $GLOBALS["SYSTEM_MESSAGE"]->addFile($nom);
	}else{
		return false;
	}
}

/**
*Fonction includeBo
* inclusion d'un fichier Business Object
* @param chaine chemin du fichier
* @return booleen
*/
function includeBo($path)
{
	if(is_file($GLOBALS["CONF_LIB_PATH"]."lib/object_business/".$path))
	{
		include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_business/".$path);
		return true;
	}else{
		$systemError=1;
		$classe="SystemControl";
		$message="Erreur fichier non disponible:".$path;
		addError($systemError,$classe,$message, __line__, __file__);
		return false;
	}
}

/**
*Fonction includeDep
* inclusion d'un fichier de dependance d'un objet de coordiantion: lib/object_coordination/xxxxxxxxxxxxx
* @param chaine chemin du fichier
* @return booleen
*/
function includeDep($path)
{
	if(is_file($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$path))
	{
		include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$path);
		return true;
	}else{
		$systemError=1;
		$classe="SystemControl";
		$message="Erreur fichier non disponible:".$path;
		addError($systemError,$classe,$message, __line__, __file__);
		return false;
	}
}

/**
*Fonction includePrinting
* inclusion d'un fichier de dependance d'un objet d'affichage : lib/object_printing/xxxxxxxxxxxxx
* @param chaine chemin du fichier
* @return booleen
*/
function includePrinting($path)
{
	if(is_file($GLOBALS["CONF_LIB_PATH"]."lib/object_printing/".$path))
	{
		include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_printing/".$path);
		return true;
	}else{
		$systemError=1;
		$classe="SystemControl";
		$message="Erreur fichier non disponible:".$path;
		addError($systemError,$classe,$message, __line__, __file__);
		return false;
	}
}

/**
*Fonction includePackage
* inclusion d'un fichier Package
* @param chaine chemin du fichier
* @return booleen
*/
function includePackage($path)
{
	if(is_file($GLOBALS["CONF_LIB_PATH"]."lib/package/".$path))
	{
		include_once($GLOBALS["CONF_LIB_PATH"]."lib/package/".$path);
		return true;
	}else{
		$systemError=1;
		$classe="SystemControl";
		$message="Erreur fichier non disponible:".$path;
		addError($systemError,$classe,$message, __line__, __file__);
		return false;
	}
}

/**
*Fonction includeCOnfig
* inclusion d'un fichier de configuration
* @param chaine chemin du fichier
* @return booleen
*/
function includeConfig($path)
{
	if(is_file($GLOBALS["COMMUN_PATH_CONFIG"]."config/".$path))
	{
		include_once($GLOBALS["COMMUN_PATH_CONFIG"]."config/".$path);
		return true;
	}else{
		$systemError=1;
		$classe="SystemControl";
		$message="Erreur fichier non disponible:".$path;
		addError($systemError,$classe,$message, __line__, __file__);
		return false;
	}
}

/**
* Fonction systemRedirect
* Formatte l'url pour l'execution d'une methode
* @param chaine url de redirection
* @return booleen
*/
function systemRedirect($url)
{
// 	var_dump($url);
	$GLOBALS["SYSTEM_CONTROL"]->setRedirect($url);
	return true;
}

/**
*Fonction systemPrint
* permet d'afficher une donnée directement sans utiliser le système de template
* @param chaine url de redirection
* @return booleen
*/
function systemPrint($data)
{
	return $GLOBALS["SYSTEM_CONTROL"]->setPrintData($data);
}

/**
* Function permettant de récupérer l'id du noeud racine de communauté
* @access private
* @return chaine entier noeud de configuration 
*/
	function recupCommunity($get='id', $langcode="fr")
	{
		/* Récupération de la communauté courante */
		$myEntryNode		=$GLOBALS["SYSTEM_USER_SESSION"]->entryNodeId;		/* Noeud d'entrée de l'utilisateur */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($myEntryNode);	/* Récupération du Tree correspondant */

		$nodeId=NULL;
		for ($i=0; $i<count($myTree->tabFather); $i++)
		{
			if ($myTree->tabFather[$i]->getIdPere()==1)
			{
				if( $get == 'id' ) { $nodeId=$myTree->tabFather[$i]->getId();}
				elseif( $get == 'domain' ) { $nodeId=$myTree->tabFather[$i]->getDomain();}
				elseif( $get == 'ctype' ) { $nodeId=$myTree->tabFather[$i]->getCType();}
				elseif( $get == 'lib' ) {$nodeId=$myTree->tabFather[$i]->getLibelle($langcode);}
				elseif( $get == 'usergroup' ) {$nodeId=$myTree->tabFather[$i]->getUserGroupId();}
				elseif( $get == 'subsgroup' ) {$nodeId=$myTree->tabFather[$i]->getSubsGroupId();}
				elseif( $get == 'subsgrouptemp' ) {$nodeId=$myTree->tabFather[$i]->getSubsGroupTempId();}
				elseif( $get == 'mailnode' ) {$nodeId=$myTree->tabFather[$i]->getMailNode();}
				
				break;
			}
		}
		if (is_null($nodeId))
		{
        		systemRedirect( $GLOBALS["CONF_PAGE_EXECUTION"] );
		}
		/* -- Fin Recup Communauté */
		return $nodeId;
	}
	
/**
* Function permettant de récupérer l'id du noeud racine de communauté
* @access private
* @return chaine entier noeud de configuration
*/
	function recupCommunityByDomain($domain)
	{
		/* Récupération de la communauté courante */
		$myEntryNode		=$GLOBALS["SYSTEM_USER_SESSION"]->entryNodeId;		/* Noeud d'entrée de l'utilisateur */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance($myEntryNode);	/* Récupération du Tree correspondant */

		$nodeId=NULL;
		for ($i=0; $i<count($myTree->tabFather); $i++)
		{
			if( ($myTree->tabFather[$i]->getIdPere()==1) AND ($myTree->tabFather[$i]->getDomain()==$_SERVER["HTTP_HOST"]) )
			{
				$nodeId=$myTree->tabFather[$i]->getId();
				break;
			}
		}
		/* -- Fin Recup Communauté */
		return $nodeId;
	}

/**
* Function permettant de récupérer l'id du noeud racine de communauté
* @access private
* @return chaine entier noeud de configuration
*/
	function recupCommunityPublic($domain=NULL)
	{
		if( !$domain )
			$domain=$_SERVER["HTTP_HOST"];
		
		/* Récupération de la communauté courante */
		$myTree			=$GLOBALS["SYSTEM_MANAGER"]["TREE_NODE"]->createInstance(1);	/* Récupération du Tree correspondant */

		$nodeId=NULL;
		for ($i=0; $i<count($myTree->tabSon); $i++)
		{
// 			if( ($myTree->tabSon[$i]->getIdPere()==1) AND ($myTree->tabSon[$i]->getHasPublic()=="on") )
		if( ($myTree->tabSon[$i]->getDomain()==$domain) AND ($myTree->tabSon[$i]->getHasPublic()=="on") )
			{
// 				if( $myTree->tabSon[$i]->getDomain()==$domain )
// 				{
					$nodeId=$myTree->tabSon[$i]->getId();
					break;
// 				}
			}
		}
		/* -- Fin Recup Communauté */
		return $nodeId;
	}

/** Extrait un paramètre à partir d'une URL brute (avant réécriture)
 * @param url
 * @param parameter
 * @return string
*/
	function extractParameterFromUrl($url, $parameter)
	{
// 		var_dump($url);
		//index.php?oid=95&action=actionSearch&navigationNodeId=123&abs=1
		list($page, $parameters) = explode("?", $url);
// 		var_dump($parameters);
		if( !strstr($parameters, "system=") )
		{
			$keys = explode("&", $parameters);
			if( strlen($parameters) > 0 )
			{
				foreach( $keys as $value)
				{
					$paramName = explode("=", $value);
					if( isset($paramName[1]) )
						$array[$paramName[0]] = $paramName[1];
				}
			}
	// 		var_dump($array[$parameter]);
			if( isset($array[$parameter]) )
				return $array[$parameter];
			else
				return false;
		} else {
			$keys = explode("&", $parameters);
			if( strlen($parameters) > 0 )
			{
				foreach( $keys as $value)
				{
// 					var_dump($keys);
					if( strstr($value, "system") )
					{
						$paramName = explode("=", $value);
						if( isset($paramName[1]) )
							$sysvalue = $paramName[1];
					}
				}
// 				var_dump($sysvalue);
				return $sysvalue;
			}
		}
// 		return 95;
	}
?>
