<?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 UserManagerDb.php
*
* Ce fichier contient la classe UserManagerDb
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/04/14
* @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 UserManagerDb
*
* classe de gestion des Users pour une do de données database (type gérés par database)<br><br>
* Sont configuré dans config_data_acces.php:<br>
* - La do d'information <br>
*    (actuellement seul DB possible->Pour ajouter une do reproduire UserUserManagerDb)<br>
* - Le Nom de la Table<br>
* - La configuration (Paramétrage des dos de do de données) est faite dans config_data_do.php<br>
* - La declaration de la connexion est faite à partir de config_system.php
*
* @package system_data
* @subpackage User
*/
class UserManagerDb extends UserManager
{

/**
* @var chaine
* @access private
* @desc nom de la table
*/
var $table		= "";

/**
* @var object
* @access private
* @desc objet database
*/
var $conn		= null;

	//
	// Constructor
	//
/**
*Constructeur de la classe UserManagerDb
*<p>Initialise la UserManagerDb</p>
* @access public
*/
	function UserManagerDb()
	{
		$this->__construct();
	}

	function __construct()
	{
		$this->setTable( DATA_ACCES_TABLE_USER );	/* Appel à la constant correspondant */
		$this->setConn($GLOBALS['SYSTEM_DATABASE_CONN']);
	}

/**
* getTable : recupere le nom de la table utilisée
* @access public
* @return chaine
*/
	function getTable()
	{
		return $this->table;
	}

/**
* setTable : recupere le nom de la table utilisée
* @access public
* @param chaine nom de la table
* @return chaine
*/
	function setTable($chaine)
	{
		if (!is_string($chaine))
			return false;

		$this->table=$chaine;
		return true;
	}

/**
* getTable : recupere le nom de la table utilisée
* @access public
* @return chaine
*/
	function getConn()
	{
		return $this->conn;
	}

/**
* setTable : recupere le nom de la table utilisée
* @access public
* @param object objet classe "database"
* @return chaine
*/
	function setConn(&$obj)
	{
		if (!is_object($obj))
			return false;

		$this->conn=&$obj;
		return true;
	}


/**
* doLoadFromLogin: Charge l'utilisateur depuis la BD
*
*<p>Retourne un tableau contenant les infos de l'objets
*<br>ou faux si n'existe pas;<br>
*Précondition : id doit être un entier
*</p>
*
* @access public
* @param chaine login
* @return tableau
*/
	function doLoadFromLogin($login)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_login='".$login."'";

		# Requete
		$resultat=$this->conn->sql_query($sql);

		if ($this->conn->sql_numrows()==0)
		{
			$systemError=1;
			$classe="User";
			$message="Erreur dans UserManagerDb";
			addError($systemError,$classe,$message, __line__, __file__);
			return array();
		}
		$this->tabinfo=$this->conn->sql_fetchrow();
		$this->tabinfo["user_comment"]=unserialize(base64_decode($this->tabinfo["user_comment"]));
		$this->tabinfo["user_info"]=unserialize(base64_decode($this->tabinfo["user_info"]));

		$result=array();
		$result["id"]=$this->tabinfo["user_id"];
		$result["title"]=$this->tabinfo["user_title"];
		$result["firstName"]=$this->tabinfo["user_first_name"];
		$result["lastName"]=$this->tabinfo["user_last_name"];
		$result["login"]=$this->tabinfo["user_login"];
		$result["password"]=base64_decode($this->tabinfo["user_password"]);
		$result["mail"]=$this->tabinfo["user_mail"];
		$result["birthDate"]=$this->tabinfo["user_birthdate"];
		$result["website"]=$this->tabinfo["user_website"];
		$result["msn"]=$this->tabinfo["user_msn"];
		$result["jabber"]=$this->tabinfo["user_jabber"];
		$result["facebook"]=$this->tabinfo["user_facebook"];
		$result["mastodon"]=$this->tabinfo["user_mastodon"];
		$result["postalAddress"]=$this->tabinfo["user_postal_address"];
		$result["postalCode"]=$this->tabinfo["user_postal_code"];
		$result["city"]=$this->tabinfo["user_city"];
		$result["state"]=$this->tabinfo["user_state"];
		$result["country"]=$this->tabinfo["user_country"];
		$result["organisation"]=$this->tabinfo["user_organisation"];
		$result["tel"]=$this->tabinfo["user_tel"];
		$result["fax"]=$this->tabinfo["user_fax"];
		$result["comment"]=$this->tabinfo["user_comment"];
		$result["info"]=$this->tabinfo["user_info"];
		$result["charteStatus"]=$this->tabinfo["user_charte_status"];
		$result["accountActive"]=$this->tabinfo["user_account_active"];

		# Destruction des éléments
		$this->conn->sql_freeresult();					# Libération Mémoire
		return $result;
	}

/**
* testLoadFromLogin: Teste la BDD pour voir si un utilisateur existe
*
* @access public
* @param chaine login
* @return integer 1/0
*/
	function testLoadFromLogin($login)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_login='".$login."'";
		# Requete
		$resultat=$this->conn->sql_query($sql);
		if ($this->conn->sql_numrows()==0)
		{
			return 0;
		} else {
			return 1;
		}
	}

/**
* doLoadFromId: Charge l'utilisateur depuis la BD
*
*<p>Retourne un tableau contenant les infos de l'objets
*<br>ou faux si n'existe pas;<br>
*Précondition : id doit être un entier
*</p>
*
* @access public
* @param entier
* @return tableau
*/
	function doLoadFromId($id)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_id=".$id;
// 		var_dump($sql);
		# Requete
		$resultat=$this->conn->sql_query($sql);

		if ($this->conn->sql_numrows()==0)
		{
			$systemError=1;
			$classe="User";
			$message="Erreur dans UserManagerDb";
			addError($systemError,$classe,$message, __line__, __file__);
			return array();
		}
		$this->tabinfo=$this->conn->sql_fetchrow();
		$this->tabinfo["user_comment"]=unserialize(base64_decode($this->tabinfo["user_comment"]));
		$this->tabinfo["user_info"]=unserialize(base64_decode($this->tabinfo["user_info"]));

		$result=array();
		$result["id"]=$this->tabinfo["user_id"];
		$result["title"]=$this->tabinfo["user_title"];
		$result["firstName"]=$this->tabinfo["user_first_name"];
		$result["lastName"]=$this->tabinfo["user_last_name"];
		$result["login"]=$this->tabinfo["user_login"];
		$result["password"]=base64_decode($this->tabinfo["user_password"]);
		$result["mail"]=$this->tabinfo["user_mail"];
		$result["birthDate"]=$this->tabinfo["user_birthdate"];
		$result["website"]=$this->tabinfo["user_website"];
		$result["msn"]=$this->tabinfo["user_msn"];
		$result["jabber"]=$this->tabinfo["user_jabber"];
		$result["facebook"]=$this->tabinfo["user_facebook"];
		$result["mastodon"]=$this->tabinfo["user_mastodon"];
		$result["postalAddress"]=$this->tabinfo["user_postal_address"];
		$result["postalCode"]=$this->tabinfo["user_postal_code"];
		$result["city"]=$this->tabinfo["user_city"];
		$result["state"]=$this->tabinfo["user_state"];
		$result["country"]=$this->tabinfo["user_country"];
		$result["organisation"]=$this->tabinfo["user_organisation"];
		$result["tel"]=$this->tabinfo["user_tel"];
		$result["fax"]=$this->tabinfo["user_fax"];
		$result["comment"]=$this->tabinfo["user_comment"];
		$result["info"]=$this->tabinfo["user_info"];
		$result["charteStatus"]=$this->tabinfo["user_charte_status"];
		$result["accountActive"]=$this->tabinfo["user_account_active"];

		# Destruction des éléments
		$this->conn->sql_freeresult();					# Libération Mémoire
		return $result;
	}

/**
* doInsert: Insert l'utilisateur dans la BD
*
*<p>les param doivent être traités avec la classe chaine!</p>
*
* @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 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 entier
*/
	function doInsert($title, $firstName, $lastName, $login, $password, $mail, $birthDate, $website, $msn, $jabber, $facebook, $mastodon, $postalAddress, $postalCode, $city, $state, $country, $organisation, $tel, $fax, $comment, $info, $charteStatus, $accountActive)
	{
		$sql="INSERT INTO ".$this->getTable()." (user_title, user_first_name, user_last_name, user_login, user_password, user_mail, user_birthdate, user_website, user_msn, user_jabber, user_facebook, user_mastodon, user_postal_address, user_postal_code, user_city, user_state, user_country, user_organisation, user_tel, user_fax, user_comment, user_info, user_charte_status, user_account_active) VALUES (";

		$sql.="'".$title."', '".$firstName."', '".$lastName."', '".$login."', '".base64_encode($password)."', '".$mail."', '".$birthDate."', '".$website."', '".$msn."', '".$jabber."', '".$facebook."', '".$mastodon."', '".$postalAddress."', '".$postalCode."', '".$city."', '".$state."', '".$country."', '".$organisation."', '".$tel."', '".$fax."', '".base64_encode(serialize($comment))."', '".base64_encode(serialize($info))."', '".$charteStatus."', '".$accountActive."')";

		# Requete
		$result=$this->conn->sql_query($sql);

		if ($this->conn->sql_affectedrows()==0)
		{
			$systemError=1;
			$classe="User";
			$message="Erreur dans UserManagerDb";
			addError($systemError,$classe,$message, __line__, __file__);
			return array();
		}
		$retour=$this->conn->sql_nextid();
		return $retour;
	}

/**
* doUpdate:Modifie l'utilisateur dans la BD
*
*<p>les param doivent être traités avec la classe chaine!</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 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 entier
*/
	function doUpdate($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)
	{
		$sql="UPDATE ".$this->getTable()." SET user_title='".$title."', user_first_name='".$firstName."', user_last_name='".$lastName."', user_login='".$login."', user_password='".base64_encode($password)."', user_mail='".$mail."', user_birthdate='".$birthDate."', user_website='".$website."', user_msn='".$msn."', user_jabber='".$jabber."', user_facebook='".$facebook."', user_mastodon='".$mastodon."', user_postal_address='".$postalAddress."', user_postal_code='".$postalCode."', user_city='".$city."', user_state='".$state."', user_country='".$country."', user_organisation='".$organisation."', user_tel='".$tel."', user_fax='".$fax."', user_comment='".base64_encode(serialize($comment))."', user_info='".base64_encode(serialize($info))."', user_charte_status='".$charteStatus."', user_account_active='".$accountActive."' WHERE ";

		$sql.="user_id=".$id;

		# Requete
		$result=$this->conn->sql_query($sql);
		$retour=$id;

		return $retour;
	}
	
	function doUpdateAccountActive($id)
	{
		$sql="UPDATE ".$this->getTable()." SET user_account_active='1' WHERE ";

		$sql.="user_id=".$id;

		# Requete
		$result=$this->conn->sql_query($sql);
		$retour=$id;

		return $retour;
	}
	
	function doUpdateCharteStatus($id)
	{
		$sql="UPDATE ".$this->getTable()." SET user_charte_status='1' WHERE ";

		$sql.="user_id=".$id;

		# Requete
		$result=$this->conn->sql_query($sql);
		$retour=$id;

		return $retour;
	}

/**
* doDelete : Detruit l'utilisateur dans la BD
*
* @param entier identifiant de l'utilisateur
* @access public
* @return booleen
*/
	function doDelete($id)
	{
		$sql="DELETE FROM ".$this->getTable()." WHERE user_id=".$id;

		# Requete
		$result=$this->conn->sql_query($sql);

		if ($this->conn->sql_affectedrows()==0)
		{
			$systemError=1;
			$classe="User";
			$message="Erreur dans UserManagerDb";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}
		return true;
	}

/**
* doCheckValid:Utilisateur Valide
*
* <P>les param doivent être traités avec la classe chaine</P>
* @param chaine login de l'utilisateur
* @param chaine password de l'utilisateur
* @access public
* @return booleen
*/
	function doCheckValid($login, $password)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_login='".$login."' AND user_password='".base64_encode($password)."'";
		# Requete
		$result=$this->conn->sql_query($sql);

		if ($this->conn->sql_numrows() != 1 )return 0;

		$result=$this->conn->sql_fetchrow();

		# Destruction des éléments
		$this->conn->sql_freeresult();					# Libération Mémoire
		return $result["user_id"];
	}

/**
* doCheckAccountActive: Vérifie si le compte de l'utilisateur est activé
*
* <P>les param doivent être traités avec la classe chaine</P>
* @param chaine id de l'utilisateur
* @access public
* @return booleen
*/
	function doCheckAccountActive($id)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_id=".$id;
		# Requete
		$result=$this->conn->sql_query($sql);

		if ($this->conn->sql_numrows() != 1 )
            return 0;

		$result=$this->conn->sql_fetchrow();

		# Destruction des éléments
		$this->conn->sql_freeresult();					# Libération Mémoire
		return $result["user_account_active"];
	}

/**
* doCheckUserExist:Loin existant
*
* <P>les param doivent être traités avec la classe chaine</P>
* @param chaine login de l'utilisateur
* @access public
* @return booleen
*/
	function doCheckLoginExist($login)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_login='".$login."'";
		# Requete
		$result=$this->conn->sql_query($sql);

		if ($this->conn->sql_numrows() != 1 )return 0;

		$result=$this->conn->sql_fetchrow();

		# Destruction des éléments
		$this->conn->sql_freeresult();					# Libération Mémoire
		return $result["user_id"];
	}

/**
* doCheckValid:Utilisateur Valide
*
* <P>les param doivent être traités avec la classe chaine</P>
* @param chaine login de l'utilisateur
* @param chaine password de l'utilisateur
* @access public
* @return booleen
*/
	function doCheckValidUserId($id)
	{
		$sql="SELECT * FROM ".$this->getTable()." WHERE user_id=".$id.";";
// 		var_dump($sql);
		# Requete
		$result=$this->conn->sql_query($sql);

		if ( $this->conn->sql_numrows() == 0 )
			$value = false;
		else
			$value = true;

		$this->conn->sql_freeresult();					# Libération Mémoire
		return $value;
	}

/**
* Note : pas besoin ici de traduire la BD...
*/
}
?>
