<?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 User.php
*
* Ce fichier contient la classe User (Utilisateur)
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/05/05
* @version 0.3
* @package system_data
* @subpackage User
* @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 User
*
* classe de gestion des Utilisateurs
*
* @package system_data
* @subpackage User
*/
class User
{
/**#@+
* @access private
*/

/**
* @var entier
* @desc ID de l'utilisateur
*/
var $id			= null;

/**
* @var entier
* @desc Titre de la personne (Mr Mrs etc...)
*/
var $title		= null;

/**
* @var chaine
* @desc prenom de l'utilisateur
*/
var $firstName		= null;

/**
* @var chaine
* @desc Nom de l'utilisateur
*/
var $lastName		= null;

/**
* @var chaine
* @desc nom de connection de l'utilisateur
*/
var $login		= null;

/**
* @var chaine
* @desc Mot de Passe de l'utilisateur
*/
var $password	= null;

/**
* @var chaine
* @desc mail de l'utilisateur
*/
var $mail		= null;

/**
* @var chaine
* @desc mail de l'utilisateur
*/
var $birthDate		= null;

/**
* @var chaine
* @desc site web de l'utilisateur
*/
var $website		= null;

/**
* @var chaine
* @desc msn de l'utilisateur
*/
var $msn		= null;

/**
* @var chaine
* @desc jabber de l'utilisateur
*/
var $jabber		= null;

/**
* @var chaine
* @desc facebook de l'utilisateur
*/
var $facebook		= null;

/**
* @var chaine
* @desc mastodon de l'utilisateur
*/
var $mastodon		= null;

/**
* @var chaine
* @desc addresse Postale
*/
var $postalAddress	= null;

/**
* @var chaine
* @desc Code postal
*/
var $postalCode		= null;

/**
* @var chaine
* @desc ville
*/
var $city			= null;

/**
* @var chaine
* @desc ?tat ou r?gion
*/
var $state			= null;

/**
* @var chaine
* @desc pays
*/
var $country		= null;

/**
* @var chaine
* @desc organisation
*/
var $organisation	= null;

/**
* @var chaine
* @desc Téléphone de l'utilisateur
*/
var $tel		= null;

/**
* @var chaine
* @desc Numero de fax
*/
var $fax		= null;

/**
* @var tableau
* @desc tableau de commentaire
*/
var $comment	= null;

/**
* @var tableau
* @desc tableau d'information
*/
var $info		= null;

/**
* @var boléen
* @desc Charte Acceptée
*/
var $charteStatus		= 0;

/**
* @var boléen
* @desc Compte actif
*/
var $accountActive		= 0;

/**#@-*/

	//
	// Constructor
	//
/**
* Constructeur de la classe Utilisateur PHP5
*
* <p>Initialise l'utilisateur</p>
* @access public
*/
	function __construct()
	{
		$this->Defaut();
	}

/**
*Defaut: Initialise l'utilisateur/defaut du site
*
* @access public
* @return entier
*/
	function Defaut()
	{
		$this->id		       =0;				// identifiant de l'utilisateur/d?faut
		$this->title		    ="Mr/Mrs";			// Titre de la Personne
		$this->firstName	 ="Anonyme";			// Nom anonyme
		$this->lastName		 ="";
		$this->login		    ="guest";			// login de l'utilisateur
		$this->password		 ="anonymous";			// password de l'utilisateur
		$this->mail		     ="";				// mail
		$this->birthDate	 ="";				// birthdate
		$this->website		  ="";				// site web
		$this->msn		      ="";				// msn
		$this->jabber		   ="";				// jabber
		$this->facebook		 ="";				// facebook
		$this->mastodon		 ="";				// mastodon

		# Information d'adresse postal
		$this->postalAddress="";
		$this->postalCode	="";
		$this->city		="";
		$this->states		="";
		$this->country		="";
		$this->organisation	="";

		# Info tel
		$this->tel		="";
		$this->fax		="";

		# Info d'administration
		$this->comment		="";					// commentaires sur l'utilisateur
		$this->info		="";					// informations sur l'utilisateur
		$this->charteStatus	= 0;
		$this->accountActive	= 0;
	}

/**
* getId: Recupere l'identifiant de l'utilisateur
*
* <p>Retourne l'identifiant de l'utilisateur <br> 0 étant l'utilisateur par défaut</p>
*
* @access public
* @return entier
*/
	function getId()
	{
		return $this->id;
	}

/**
* setId: Affecte l'identifiant de l'utilisateur
*
* <p>Retourne l'identifiant de l'utilisateur <br> 0 étant l'utilisateur par défaut</p>
* @access public
* @return entier
*/
	function setId($id)
	{
		if (Is_numeric($id))
		{
			$this->id=$id;
			return true;
		}else
		{
			return false;
		}
	}

/**
* getTitle: retourne le titre (Mr Mrs etc...)
*
* @access public
* @return chaine
*/
	function getTitle()
	{
		return $this->title;
	}

/**
* setTitle: affecte le titre utilisateur (MR MRS etc...)
*
* @access public
* @param chaine
* @return booleen
*/
	function setTitle($src)
	{
		$this->title=$src;
		return true;
	}

/**
* getFirstName: retourne le Nom de l'utilisateur
*
* @access public
* @return chaine
*/
	function getFirstName()
	{
		return $this->firstName;
	}

/**
* setFirstName: affecte le nom de l'utilisateur
*
* @access public
* @param chaine
* @return booleen
*/
	function setFirstName($name)
	{
		$this->firstName=$name;
		return true;
	}

/**
* getLastName: retourne le Nom de l'utilisateur
*
* @access public
* @return chaine
*/
	function getLastName()
	{
		return $this->lastName;
	}

/**
* setFirstName: affecte le nom de l'utilisateur
*
* @access public
* @param chaine
* @return booleen
*/
	function setLastName($name)
	{
		$this->lastName=$name;
		return true;
	}

/**
* getLogin: retourne le login utilisateur
*
* @access public
* @return chaine
*/
	function getLogin()
	{
		return $this->login;
	}

/**
* setLogin: affecte le login utilisateur
*
* @access public
* @return booleen
*/
	function setLogin($src)
	{
		$this->login=$src;
		return true;
	}

/**
* getPassword: retourne le password utilisateur
*
* @access public
* @return entier
*/
	function getPassword()
	{
		return $this->password;
	}

/**
* setPassword: Affecte l'?tat de la langue
*
* @access public
* @return booleen
*/
	function setPassword($str)
	{
		$this->password=$str;
		return false;
	}

/**
* getMail: retourne le mail utilisateur
*
* @access public
* @return entier
*/
	function getMail()
	{
		return $this->mail;
	}

/**
* setMail: affecte le mail utilisateur
*
* @access public
* @return booleen
*/
	function setMail($src)
	{
		$this->mail=$src;
		return true;
	}
	
/**
* getMail: retourne le mail utilisateur
*
* @access public
* @return entier
*/
	function getBirthDate()
	{
		return $this->birthDate;
	}

/**
* setMail: affecte le mail utilisateur
*
* @access public
* @return booleen
*/
	function setBirthDate($date)
	{
// 		if (is_string($date)) {
			$this->birthDate=$date;
			return true;
// 		}else{
// 			return false;
// 		}
	}

/**
* getWebSite: retourne le site web de l'utilisateur
*
* @access public
* @return entier
*/
	function getWebSite()
	{
		return $this->website;
	}

/**
* setWebSite: affecte le site web de l'utilisateur
*
* @access public
* @return booleen
*/
	function setWebSite($src)
	{
		$this->website=$src;
		return true;
	}

/**
* getMsn: retourne le MSN utilisateur
*
* @access public
* @return entier
*/
	function getMsn()
	{
		return $this->msn;
	}

/**
* setMsn: affecte le MSN utilisateur
*
* @access public
* @return booleen
*/
	function setMsn($src)
	{
		$this->msn=$src;
		return true;
	}

/**
* getJabber: retourne le Jabber utilisateur
*
* @access public
* @return entier
*/
	function getJabber()
	{
		return $this->jabber;
	}

/**
* setJabber: affecte le Jabber utilisateur
*
* @access public
* @return booleen
*/
	function setJabber($src)
	{
		$this->jabber=$src;
		return true;
	}

/**
* getFb: retourne le Jabber utilisateur
*
* @access public
* @return entier
*/
	function getFacebook()
	{
		return $this->facebook;
	}

/**
* setJabber: affecte le Jabber utilisateur
*
* @access public
* @return booleen
*/
	function setFacebook($src)
	{
		$this->facebook=$src;
		return true;
	}
	
/**
* getMastodon: retourne le Mastodon utilisateur
*
* @access public
* @return entier
*/
	function getMastodon()
	{
		return $this->mastodon;
	}

/**
* setMastodon: affecte le Mastodon utilisateur
*
* @access public
* @return booleen
*/
	function setMastodon($src)
	{
		$this->mastodon=$src;
		return true;
	}

/**
* getPostalAdress: retourne l'adresse postal de l'utilisateur
*
* @access public
* @return entier
*/
	function getPostalAddress()
	{
		return $this->postalAddress;
	}

/**
* setPostalAdress: affecte l'adresse postale
*
* @access public
* @return booleen
*/
	function setPostalAddress($src)
	{
		$this->postalAddress=$src;
		return true;
	}

/**
* getPostalCode: retourne le code postal
*
* @access public
* @return entier
*/
	function getPostalCode()
	{
		return $this->postalCode;
	}

/**
* setPostalCode: affecte le Code Postal
*
* @access public
* @return booleen
*/
	function setPostalCode($src)
	{
		$this->postalCode=$src;
		return true;
	}

/**
* getState: retourne l'état
*
* @access public
* @return entier
*/
	function getState()
	{
		return $this->state;
	}

/**
* setState: affecte l'?tat
*
* @access public
* @return booleen
*/
	function setState($src)
	{
		$this->state=$src;
		return true;
	}

/**
* getCountry: retourne le pays
*
* @access public
* @return entier
*/
	function getCountry()
	{
		return $this->country;
	}

/**
* setCountry: affecte le pays
*
* @access public
* @return booleen
*/
	function setCountry($src)
	{
		$this->country=$src;
		return true;
	}

/**
* getCity: retourne la ville
*
* @access public
* @return entier
*/
	function getCity()
	{
		return $this->city;
	}

/**
*setCity: affecte la ville
*
* @access public
* @return booleen
*/
	function setCity($src)
	{
		$this->city=$src;
		return true;
	}

/**
* getOrganisation: retourne l'organisation
*
* @access public
* @return entier
*/
	function getOrganisation()
	{
		return $this->organisation;
	}

/**
* setOraganisation: affecte l'organisation
*
* @access public
* @return booleen
*/
	function setOrganisation($src)
	{
		$this->organisation=$src;
		return true;
	}

/**
* getTel: retourne le tel
*
* @access public
* @return entier
*/
	function getTel()
	{
		return $this->tel;
	}

/**
* setTel: affecte le Tel
*
* @access public
* @return booleen
*/
	function setTel($src)
	{
		$this->tel=$src;
		return true;
	}

/**
* getFax: retourne le fax
*
* @access public
* @return entier
*/
	function getFax()
	{
		return $this->fax;
	}

/**
* setFax: affecte le Fax
*
* @access public
* @return booleen
*/
	function setFax($src)
	{
		$this->fax=$src;
		return true;
	}

/**
* getComment: retourne le Tableau de commentaire
*
* @access public
* @return entier
*/
	function getComment()
	{
		return $this->comment;
	}

/**
* setComment: affecte un Tableau de commentaires
*Doit être un tableau
* @access public
* @return booleen
*/
	function setComment($tab)
	{
// 		if (is_array($tab))
// 		{
// 			$this->comment=$tab;
// 			return true;
// 		}else{
			$this->comment=$tab;
			return true;
// 		}
	}

/**
* getInfo: retourne le Tableau des informations
*
* @access public
* @return entier
*/
	function getInfo()
	{
		return $this->info;
	}

/**
* setComment: affecte un Tableau d'information
*
* @access public
* @return booleen
*/
	function setInfo($tab)
	{
		if (is_array($tab))
		{
			$this->info=$tab;
			return true;
		}else{
			return false;
		}
	}

/**
* getAccountActive: Recupere 0 si charte non validé, 1 si validée
*
* @access public
* @return entier
*/
	function getCharteStatus()
	{
		return $this->charteStatus;
	}

/**
* setCharteStatus: Affecte le statut d'acceptation de la charte
*
* @access public
* @return entier
*/
	function setCharteStatus($charteStatus)
	{
		$this->charteStatus=$charteStatus;
	}

/**
* getAccountActive: Recupere 1 si le compte est actif, 0 si inactif
*
* @access public
* @return entier
*/
	function getAccountActive()
	{
		return $this->accountActive;
	}

/**
* setAccountActive: Affecte le statut actif ou pas du compte
*
* @access public
* @return entier
*/
	function SetAccountActive($accountActive)
	{
		$this->accountActive=$accountActive;
	}

/**
* Load: Charge l'utilisateur
*
*<p>Affectation d'un utilisateur directement
*<br> avec une source de données externe a la classe et à ses sous classe !!!!</p>
*
* @param entier identifiant
* @param chaine titre de la personne
* @param chaine prénom de la personne
* @param chaine nom de la personne
* @param chaine login
* @param chaine password
* @param chaine mail
* @param chaine website
* @param chaine msn
* @param chaine jabber
* @param chaine facebook
* @param chaine mastodon
* @param chaine adresse
* @param chaine code postal
* @param chaine état
* @param chaine pays
* @param chaine telephone
* @param chaine fax
*
* @param tableau commentaires
* @param tableau informations
* @param entier chartestatus
* @param entier accountactive
*
* @access public
* @return booleen
*
*/
	function doLoad($id, $title, $firstName, $lastName, $login, $password, $mail, $birthDate, $website, $msn, $jabber, $facebook, $mastodon, $postalAddress, $postalCode, $city, $state, $country, $organisation, $tel, $fax, $comment, $info, $charteStatus, $accountActive)
	{
		$retour=0;
		$retour =$this->setId($id);
		$retour+=$this->setTitle($title);
		$retour+=$this->setFirstName($firstName);
		$retour+=$this->setLastName($lastName);
		$retour+=$this->setLogin($login);
		$retour+=$this->setPassword($password);
		$retour+=$this->setMail($mail);
		$retour+=$this->setBirthDate($birthDate);
		$retour+=$this->setWebSite($website);
		$retour+=$this->setMsn($msn);
		$retour+=$this->setJabber($jabber);
		$retour+=$this->setFacebook($facebook);
		$retour+=$this->setMastodon($mastodon);
		$retour+=$this->setPostalAddress($postalAddress);
		$retour+=$this->setPostalCode($postalCode);
		$retour+=$this->setCity($city);
		$retour+=$this->setState($state);
		$retour+=$this->setCountry($country);
		$retour+=$this->setOrganisation($organisation);
		$retour+=$this->setTel($tel);
		$retour+=$this->setFax($fax);
		$retour+=$this->setComment($comment);
		$retour+=$this->setInfo($info);
		$retour+=$this->setCharteStatus($charteStatus);
		$retour+=$this->setAccountActive($accountActive);
		return ($retour==25)?true:false;
	}

/**
* isDefault: Utilisateur par d?faut du site
*
* Détermine si l'objet courant correspond a l'utilisateur par d?faut du site .
*
* @access public
* @return booleen
*/
	function isDefault()
	{
		return (($this->id==$GLOBALS['SYSTEM_DEFAULT_USER_GUEST'])? true:false);
	}

/**
* isValid: Utilisateur valide ou non
*
* Determine si l'utilisateur est valide.
*
* @param chaine login de l'utilisateur
* @param chaine password de l'utilisateur
* @access public
* @return booleen
*/
	function isValid($login=null, $password=null)
	{
		if (is_null($login)) $login=$this->login;
		if (is_null($password)) $password=$this->password;

		$todata=new FetchUserData();
		$result=$todata->IsValid($login, $password);
		
		return $result;
	}
/*
	function isAccountActive($id=null)
	{
		if (is_null($id)) $id=$this->id;

		$todata=new FetchUserData();
		$result=$todata->IsAccountActive($id);
		
		return $result;
	}*/
	
/**
* IsLoaded: Utilisateur chargé
*
* @access public
* @return booleen
*/
	function isLoaded()
	{
		return (($this->id!=0 && Is_numeric($this->id))? true:false);
	}

/**
* __sleep : sur sommeil (dans la session et relatif a serialize)
*
* <P>voir doc php sur serialise et __sleep...</P>
* <P>permet de crypter le mot de passe stocké dans USER_SESSION</P>
* @access public
* @return booleen
*/
	function __sleep()
	{
		global $SYSTEM_KEY;
		$ObjPassword=new Chaine($this->password);
		$this->setPassword($ObjPassword->Encrypt($SYSTEM_KEY));
		return array_keys(get_class_vars("User"));
	}

/**
* __wake :sur reveil de l'objet (dans la session et relatif a serialise)
*
* <P>voir doc php sur serialise et __wake...</P>
* <P>permet de décrypter le mot de passe stocké dans USER_SESSION</P>
* @access public
* @return booleen
*/
	function __wakeup()
	{
		global $SYSTEM_KEY;
		$libelle=new Chaine($this->password);
		$this->setPassword($libelle->Decrypt($SYSTEM_KEY));
		return array_keys(get_class_vars("User"));
	}
}
?>
