<?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 Right.php
*
*Ce fichier contient la classe Right
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/05/25
* @version 0.3
* @package system_data
* @subpackage Right
* @copyright Copyright &copy; 2009-2018, Rooty
*/

#####################################################################################################
################################# Parametrage
#####################################################################################################
/**
* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas...
* cette variable est déclarée sur la page d'execution du script.
*<p> if ( !defined('SYSTEM_IN') )
* {
* die("Hacking attempt");
* }</p>
*/
if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* Classe Right
*
* classe de gestion des Droits
*
* @package system_data
* @subpackage Right
*/
class Right
{

/**
* @var entier
* @access private
* @desc ID du Right
*/
var $id			= null;

/**
* @var chaine
* @desc Nom de la classe d'objet ou vide pour toutes les Classes
*/
var $className	= null;

/**
* @var chaine
* @desc nom de la methode
*/
var $methodName	= null;

/**
* @var entier
* @desc identifiant de l'objet
*/
var $objectId	= null;

/**
* @var entier
* @desc identifiant de l'arborescence
*/
var $noeudId	= null;

/**
* @var entier
* @desc identifiant de l'arborescence
*/
var $userId		= null;

/**
* @var entier
* @desc identifiant de l'arborescence
*/
var $groupId	= null;

/**#@-*/

	//
	// Constructor
	//

/**
* Constructeur de la classe Right
*
*<P>Initialise le droit</P>
*
* @access public
*/
	function __construct()
	{
		$this->id			=null;
		$this->className	=null;
		$this->methodName	=null;
		$this->objectId		=null;
		$this->noeudId		=null;
		$this->userId		=0;
		$this->groupId		=0;
	}

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

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

/**
* "getteur" de l'attribut className.
* @access public
* @return chaine nom de la classe
*/
	function getClassName()
	{
		return $this->className;
	}

/**
* "setteur" de l'attribut className.
* @access public
* @param chaine nom de la classe
* @return booleen
*/
	function setClassName($nom)
	{
		$this->className=$nom;
		return true;
	}

/**
* "getteur" de l'attribut methodName.
* @access public
* @return chaine nom de la methode
*/
	function getMethodName()
	{
		return $this->methodName;
	}

/**
* "setteur" de l'attribut methodName.
* @access public
* @param chaine nom de la methode
* @return booleen
*/
	function setMethodName($value)
	{
		$this->methodName=$value;
		return true;
	}

/**
* "getteur" de l'attribut objectId.
* @access public
* @return chaine nom de la classe
*/
	function getObjectId()
	{
		return $this->objectId;
	}

/**
* "setteur" de l'attribut objectId.
* @access public
* @param entier identifiant de l'objet
* @return booleen
*/
	function setObjectId($value)
	{
		if (!is_numeric($value))
			return false;

		$this->objectId=$value;
		return true;
	}

/**
* "getteur" de l'attribut noeudId.
* @access public
* @return entier identifiant du noeud
*/
	function getNodeId()
	{
		return $this->noeudId;
	}

/**
* "setteur" de l'attribut noeudId.
* @access public
* @param entier identifiant du noeud
* @return booleen
*/
	function setNodeId($value)
	{
		if (!is_numeric($value))
			return false;

		$this->noeudId=$value;
		return true;
	}

/**
* "getteur" de l'attribut userId.
* @access public
* @return entier identifiant de l'utilisateur
*/
	function getUserId()
	{
		return $this->userId;
	}

/**
* "setteur" de l'attribut userId.
* @access public
* @param entier identifiant de l'utilisateur
* @return booleen
*/
	function setUserId($value)
	{
		if (!is_numeric($value))
			return false;

		$this->userId=$value;
		return true;
	}

/**
* "getteur" de l'attribut groupId.
* @access public
* @return entier identifiant du groupe
*/
	function getGroupId()
	{
		return $this->groupId;
	}

/**
* "setteur" de l'attribut groupId.
* @access public
* @param entier identifiant du group?
* @return booleen
*/
	function setGroupId($value)
	{
		if (!is_numeric($value))
			return false;

		$this->groupId=$value;
		return true;
	}

/**
* isRightOn: les Rights sur l'objet
* @access public
* @return entier 0 droit non concerné, 1 droit validé, 2 permission refusée
*/
	function isRightOn($className, $methodName, $objectId, $noeudId, $userId, $groupId)
	{
		# Pour la Classe ou toutes les Classes (nom de la classe obligatoire)
		if (strtolower($this->className)==strtolower($className))
		{
			# Pour la methode ou toutes les methodes
			if (!(strpos(strtolower($methodName), strtolower(str_replace("action","", $this->methodName)))===false))
			{
				# Pour l'objet ou tous les objets
				if ($this->objectId==$objectId)
				{
					/* on a ici l'objet concerné */
					# Pour l'objet ou tous les objets
					if ($this->noeudId==$noeudId || $this->noeudId==0) /* 0 pour tous les noeud */
					{
						/* si l'utilisateur est concerné */
						# Pour l'utilisateur ou tous les utilisateur
						if ($this->userId==$userId || $this->userId==0) /* 0 pour tous les utilisateurs */
						{
							# Pour l'utilisateur ou tous les utilisateur
							if ($this->groupId==$groupId || $this->groupId==0) /* 0 pour tous les groupes */
							{
								/* la personne est bien concernée....... */
								/* On regarde les interdictions */
								return 1;
							}
						}
					}
				}
			}
		}
		return 0;
	}

/**
* doLoad: Charge la Right a partir de ses éléments
*
* @access public
* @param entier id du Right...
* @param chaine nom de la classe concernée
* @param chaine nom de la methode concernée
* @param entier identifiant de l'objet
* @param entier identifiant du noeud
* @param booleen si l'objet a des Rights recursifs ou non?!
* @param entier identifiant utilisateur
* @param entier identifiant du groupe utilisateur
* @param booleen si l'objet est interdit pour le noeud
* @return booleen
*/
	function doLoad($id, $className, $methodName, $objectId, $noeudId, $userId, $groupId)

{
		$this->setId($id);
		$this->setClassName($className);
		$this->setMethodName($methodName);
		$this->setObjectId($objectId);
		$this->setNodeId($noeudId);
		$this->setUserId($userId);
		$this->setGroupId($groupId);
		return true;
	}

/**
* isLoaded: droit chargé ?
* @access public
* @return object object droit modifié
*/
	function isLoaded()
	{
		return ((($this->id!=null) && (Is_numeric($this->id)) && ($this->id!=0))? true:false);
	}
}
?>
