<?php

#####################################################
# MEMBERS CLASS
#####################################################

class Membre
{
	var $Id;
	var $Email;
	var $Password;
	var $Vip;
	var $Origine;
	var $IsOff;
		
	var $DateInscription;
	var $IP;
	var $Host;
	var $Browser;

	var $Gender;
	var $Name;
	var $FirstName;
	var $Age;
	var $Address;
	var $Zip;
	var $Town;
	var $Telephone;
	
	var $tabParams;
	
	function Membre($Email, $Password, $Vip, $Origine, $DateInscription, $IP, $Host, $Browser, $Gender, $Name, $FirstName, $Age, $Address, $Zip, $Town, $Telephone, $tabParams)
	{
		$this->Id = $Id;
		$this->Email = $Email;
		$this->Password = $Password;
		$this->Vip = $Vip;
		$this->Origine = $Origine;
		$this->IsOff = 0; # par défaut il n'est pas off
			
		$this->DateInscription = $DateInscription;
		$this->IP = $IP;
		$this->Host = $Host;
		$this->Browser = $Browser;
	
		$this->Gender = $Gender;
		$this->Name = $Name;
		$this->FirstName = $FirstName;
		$this->Age = $Age;
		$this->Address = $Address;
		$this->Zip = $Zip;
		$this->Town = $Town;
		$this->Telephone = $Telephone;
		
		# les tabParams sont dans un tableau
		while(list($key, $val) = each($tabParams))
			$this->tabParams[$key] = $val;
	}
	
	# crée le joueur en base de donnée
	function createInDB()
	{	
		
		$args = Array(
			":EMAIL" => $this->Email
			,":PASSWORD" => $this->Password
			,":VIP" => $this->Vip
			,":ORIGINE" => $this->Origine
			,":ISOFF" => $this->IsOff
			,":TIME" => $this->DateInscription
			,":IP" => $this->IP
			,":HOST" => $this->Host
			,":BROWSER" => $this->Browser
			,":GENDER" => $this->Gender
			,":NAME" => $this->Name
			,":FIRSTNAME" => $this->FirstName
			,":AGE" => $this->Age
			,":ADDRESS" => $this->Address
			,":ZIP" => $this->Zip
			,":TOWN" => $this->Town
			,":TELEPHONE" => $this->Telephone
		);

		# on crée les string de params (les noms des champs et les valeurs)
		# on utilise pas implode car on veut être sur d'avoir toutes les values (même qd il n'y en a pas)
		$sKeyParams = implode(",", array_keys($this->tabParams));
		//$sValueParams = "'".implode("','", array_values($this->tabParams))."'";
		
		$sprepare = "";
		if($this->tabParams){
			$i = 1;
			foreach ($this->tabParams as $key => $value) {
				$sprepare .= ",:KEY".$i;
				$args[":KEY".$i] = $value;
				$i++;
			}
		}

		# insère le membre
		$query = "INSERT INTO Members (".
			" Email, Password, Vip, Origine, IsOff, ".
			" Time, IP, Host, Browser, ".
			" Gender, Name, FirstName, Age, Address, Zip, Town, Telephone, ".$sKeyParams.
			" ) VALUES (".
			":EMAIL,".
			":PASSWORD,".
			":VIP,".
			":ORIGINE,".
			":ISOFF,".
			":TIME,".
			":IP,".
			":HOST,".
			":BROWSER,".
			":GENDER,".
			":NAME,".
			":FIRSTNAME,".
			":AGE,".
			":ADDRESS,".
			":ZIP,".
			":TOWN,".
			":TELEPHONE".
			$sprepare.
			")";
		
		$GLOBALS["vg_pdo"]->query($query,$args);

		# on récupère le MId (on force la requete sur le master)		
		$query = "SELECT Id FROM Members WHERE Vip=:VIP AND Origine=:ORIGINE";
		$args = Array(
			":VIP"			=>$this->Vip
			,":ORIGINE"	=>$this->Origine
		);
		$GLOBALS["vg_pdo"]->query($query,$args);
		$row = $GLOBALS["vg_pdo"]->fetch_assoc();

		$this->Id = $row['Id'];
		
		# on retourne le nouveau memberId du joueur
		return $row;
	}
}

class Joueur
{
	var $Id;
	var $NickName;
	var $Credits;
		
	var $DateInscription;
	var $MemberId;
	
	
	function Joueur($NickName, $Credits, $DateInscription, $MemberId)
	{
		$this->NickName = $NickName;
		$this->Credits = $Credits;
		$this->DateInscription = $DateInscription;
		$this->MemberId = $MemberId;
	}
	
	function createInDB()
	{
		global $TICKET_RAISON,$TICKET_NB;
		
		$query = "INSERT INTO Players (".
			"Id, NickName, Credits, ".
			"Time, MemberId".
			" ) VALUES (".
			":MID,".
			":NICKNAME,".
			":CREDITS,".
			":DATEINSCRIPTION,".
			":MID".
			")";
		$args = Array(
			":MID"=>$this->MemberId
			,":NICKNAME"=>$this->NickName
			,":CREDITS"=>$this->Credits
			,":DATEINSCRIPTION"=>$this->DateInscription
		);
		$GLOBALS["vg_pdo"]->query($query,$args);	
		
		# on récupère le PId (on force la requete sur le master)
		$query = "SELECT * FROM Players WHERE MemberId=:MID";
		$args = Array(
			":MID"=>$this->MemberId
		);
		$GLOBALS["vg_pdo"]->query($query,$args);	
		$row = $GLOBALS["vg_pdo"]->fetch_assoc();


		# on le stocke dans la structure
		$this->Id = $row['Id'];
		
		#on insere un ticket dans l'historique
		addticket2histo($this->Id,$TICKET_RAISON["INSCRIPTION"],$TICKET_NB["INSCRIPTION"]);
		
		# on retourne le nouveau PlayerId du joueur
		return $row;
	}
	
	function updatePlayerAscending($father)
	{
		# il a un parrain on le met
		if ($father['Id'] > 0)
		{
			$query = "UPDATE Players SET FatherPId=:FATHERPID, RootPId=:ROOTPID WHERE Id=:ID";
			$args = Array(
				":FATHERPID"=>$father['Id']
				,":ROOTPID"=>$father['RootPId']
				,":ID"=>$this->Id
			);
			$GLOBALS["vg_pdo"]->query($query,$args);	
			
			# on met à jour les ascendant
			updateFathers(getplayer($this->Id));
		}
		# il n'a pas de parrain
		else
		{
			$query = "UPDATE Players SET FatherPId=0, RootPId=:ROOTPID WHERE Id=:ID";
			$args = Array(
				":ROOTPID"=>$this->Id
				,":ID"=>$this->Id
			);
			$GLOBALS["vg_pdo"]->query($query,$args);	
		}
	}
}

#####################################################
# MEMBERS FUNCTIONS
#####################################################
# vérifie si on retrouve le couple login/pass
# retourne le MId et l'origine du compte
function getMemberFromLoginPass($NickName, $Password)
{
	$query = "SELECT Members.Id, Origine FROM Members LEFT JOIN Players ON Players.MemberId=Members.Id WHERE NickName=:NICKNAME AND Password=:PASSWORD";
	$args = Array(
		":NICKNAME"=>$NickName
		,":PASSWORD"=>$Password
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();

	return array($row['Id'], $row['Origine']);
}

function getMemberFromEmailPass($Email, $Password)
{
	$query = "SELECT Members.Id, Origine FROM Members LEFT JOIN Players ON Players.MemberId=Members.Id WHERE Email=:EMAIL AND Password=:PASSWORD";
	$args = Array(
		":EMAIL"=>$Email
		,":PASSWORD"=>$Password
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();

	return array($row['Id'], $row['Origine']);
}


# cette fonction verifie si l'Email existe déjà dans la base
function isEmailExists($email, $origine)
{
	$query = "SELECT Id FROM Members WHERE Email=:EMAIL AND Origine=:ORIGINE";
	$args = Array(
		":EMAIL"=>$email
		,":ORIGINE"=>$origine
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	return $row;
}

# cette fonction verifie si l'Email existe déjà dans la base
function isEmailInDB($email)
{
	$query = "SELECT Id FROM Members WHERE Email=:EMAIL";
	$args = Array(
		":EMAIL"=>$email
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();

	return $row;
}



# cette fonction verifie si le NickName existe déjà dans la base
function isNickNameExists($NickName)
{
	# check in $DATABASSE
	$query = "SELECT Id FROM Players WHERE NickName=:NICKNAME";
	$args = Array(
		":NICKNAME"=>$NickName
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	
	return ($row) ? true : false;
}


# retourne un nickname valide. ie : unique dans la base.
# Dans le cas ou le nickname existe déjà, on lui ajoute (n) (n étant le nombre de fois qu'il
# apparait déjà)
function getValidNickName($NickName)
{
	# si le nickName est vide on met au moins un _
	$nick = $NickName;
	
	# on vérifie d'abord si son pseudo wanadoo est déjà existant dans la base
	$r=0;
	while(isNickNameExists($nick))
	{
		# si le pseudo existe, on lui rajoute (r) tant que le pseudo existe !
		$r++;
		$nick = $NickName."_".$r;
	}
	
	return $nick;
}


function setGenderRTL($civilite)
{
	return $civilite;
}

# sur Wanadoo les Genders sont inversés !
function setGenderWAN($civilite)
{
	switch($civilite)
	{
		case 1:
			$civ = 3;
		break;

		case 3:
			$civ = 1;
		break;

		default:
			$civ = 2;
		break;
	}
	
	return $civ;
}

function passwordEncode($password){
	global $KEY_MD5;
	return sha1( $password.substr( md5( $password.$KEY_MD5 ), 3, 12 ) );
}



function genRandomPassword()
{
	return substr(uniqid(""),7,6);
}

#####################################################
# VIP FUNCTIONS
#####################################################

# créée le Vip = l'identifiant unique pour une origine donnée
function getUVip($id, $origine)
{
	return $origine."_".$id;
}


# récupère un MId à partir du Vip et de l'origine du compte
function getMemberFromVip($vip)
{
	# on va chercher le vip
	$query = "SELECT * FROM Members WHERE Vip=:VIP";
	$args = Array(
		":VIP"=>$vip
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	
	return $row;
}
# récupère un MId à partir de l'email
function getMemberFromMail($email)
{
	# on va chercher le vip
	$query = "SELECT * FROM Members WHERE Email=:EMAIL";
	$args = Array(
		":EMAIL"=>$email
	);
	$GLOBALS["vg_pdo"]->query($query,$args);	
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	
	return $row;
}



#####################################################
# PARRAINAGE FUNCTIONS
#####################################################
/*
cette fonction met à jour les Offsprings de toute la dynastie en remontant
elle met à jour le champs Sons du parrain
*/
function updateFathers($player)
{
	# parrain : on rajoute 1 à Sons du père
	$query ="UPDATE Players SET Sons=Sons+1 WHERE Id=:PLAYERID";
	$args = Array(
		":PLAYERID"=>$player['FatherPId']
	);
	$GLOBALS["vg_pdo"]->query($query,$args);

	$father = getplayer($player['FatherPId']);
	
	# on récup le gd-père
	$Gfather = getplayer($father['FatherPId']);
	
	# parrain : on rajoute 1 à GrandSons du grand père
	$query = "UPDATE Players SET GrandSons = GrandSons + 1 WHERE Id=:ID";
	$args = Array(
		":ID"=>$Gfather['Id']
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	
	# on rerécupère le father pour la maj des Offsprings
	$row['FatherPId'] = $player['FatherPId'];
	# on met à jour tous les offsprings (sauf du filleul)
	if ($row['FatherPId'] > 0)
	{
		$query = "UPDATE Players SET Offsprings=Offsprings+1 WHERE Id=:ID";
		$args = Array(
			":ID"=>$row['FatherPId']
		);
		$GLOBALS["vg_pdo"]->query($query,$args);

		/*$query = "SELECT FatherPId FROM Players WHERE Id=:ID";
		$args = Array(
			":ID"=>$row['FatherPId']
		);
		$GLOBALS["vg_pdo"]->query($query,$args);
		$row = $GLOBALS["vg_pdo"]->fetch_assoc();*/

	}
}

/*
récupère le FatherPId (PId du parrain)
le RootPId (PId du père de la dynastie du parrain)
Rank (rang dans la dynastie du parrain)
*/
function getFatherFromGuest($GuestId)
{
	# recupere les infos sur le Guest
	$query = "SELECT FatherPId FROM Guests WHERE GuestId=:GID AND Member='0'";	
	$args = Array(
			":GID"=>$GuestId
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	$rowFather = $GLOBALS["vg_pdo"]->fetch_assoc();


	return getplayer($rowFather['FatherPId']);
}

/*
met à jour l'enregistrement où on a indiqué que ce joueur était invité
En mettant le champs Member à !=0, on indique que la personne invitée s'est inscrite.
*/
function updateGuest($id, $memberId)
{
	$query = "UPDATE Guests SET Member = :MID WHERE GuestId=:GID";
	$args = Array(
		":MID"=>$memberId
		,":GID"=>$id
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
}

/*
retourne le dernier guestId d'un email donné 
s'il y en a plus il retourne le plus recent
*/
function getGestIdFromEmail($Email)
{
	$query = "SELECT GuestId FROM Guests WHERE Email=:EMAIL ORDER BY Id DESC LIMIT 0,1";

	$args = Array(
		":EMAIL"=>$Email
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();

	return $row['GuestId'];
}

function encryptePassword( $password )
{
	global $PASSWORD_SECRET_KEY;
	
	return md5($PASSWORD_SECRET_KEY.$password);
}


# Insert un ticket dans l'historique des tickets...
function addticket2histo($PlayerId,$Raison,$Tickets)
{
	$Time=date("Y-m-d H:i:s", my_local_time());
	$query = "INSERT INTO HistoTicket(PlayerId,Time,Raison,Tickets) VALUES (:PID,:TIME,:RAISON,:TICKETS)";
	$args = Array(
		":PID"=>$PlayerId
		,":TIME"=>$Time
		,":RAISON"=>$Raison
		,":TICKETS"=>$Tickets
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	
}

?>