<?php
//include($BIB."bib_jeu.php3");
#####################################################
# MEMBERS CLASS
#####################################################

class Membre
{
	var $Id;
	var $Login;
	var $Email;
	var $Password;
	var $Vip;
	var $Origine;
	var $IsOff;
		
	var $tabParams;
	
	function Membre($Login, $Email, $Password, $Vip, $Origine, $tabParams)
	{
		$this->Id = $Id;
		$this->Login = $Login;
		$this->Email = $Email;
		$this->Password = $Password;
		$this->Vip = $Vip;
		$this->Origine = $Origine;
		$this->IsOff = 0; # par défaut il n'est pas off
			
		# 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()
	{	
		
		# 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))."'";

		# insère le membre
		main_db_query("INSERT INTO Members (".
			" Login, Email, Password, Vip, Origine, IsOff, coregOk, ".$sKeyParams.
			" ) VALUES (".
			"'".$this->Login."',".
			"'".$this->Email."',".
			"'".$this->Password."',".
			"'".$this->Vip."',".
			"'".$this->Origine."',".
			"'".$this->IsOff."',".
			"'1',".
			$sValueParams.
			")");
			
		# on récupère le MId (on force la requete sur le master)
		$row = db_fetch_array(main_db_query("SELECT Id FROM Members WHERE Vip='".$this->Vip."' AND Origine='".$this->Origine."'", true));

		$this->Id = $row['Id'];
		
		# on retourne le nouveau memberId du joueur
		return $row;
	}
}

class Joueur
{
	var $Id;
	var $NickName;
	var $MemberId;

	var $tabParams;
		
	function Joueur($NickName, $MemberId, $tabParams )
	{
		$this->NickName = $NickName;
		$this->MemberId = $MemberId;

		# les tabParams sont dans un tableau
		while(list($key, $val) = each($tabParams))
			$this->tabParams[$key] = $val;
	}
	
	function createInDB()
	{
		global $TICKET_RAISON,$TICKET_NB;
		
		# 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))."'";

		main_db_query("INSERT INTO Players (".
			"Id, NickName, MemberId, ".$sKeyParams.
			" ) VALUES (".
			"'".$this->MemberId."',".
			"'".$this->NickName."',".
			"'".$this->MemberId."',".
			$sValueParams.
			")");
			
		
		# on récupère le PId (on force la requete sur le master)
		$row = db_fetch_array(main_db_query("SELECT * FROM Players WHERE MemberId='".$this->MemberId."'", true));
		
		# 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)
		{
			$sQuery = "UPDATE Players SET FatherPId='".$father['Id']."', RootPId='".$father['RootPId']."' WHERE Id='".$this->Id."'";
			main_db_query($sQuery);
			
			# on met à jour les ascendant
			updateFathers(getplayer($this->Id));
		}
		# il n'a pas de parrain
		else
		{
			$sQuery = "UPDATE Players SET FatherPId='0', RootPId='".$this->Id."' WHERE Id='".$this->Id."'";
			main_db_query($sQuery);
		}
	}
}

#####################################################
# MEMBERS FUNCTIONS
#####################################################
# vérifie si on retrouve le couple login/pass
# retourne le MId et l'origine du compte
function getMemberFromLoginPass($NickName, $Password)
{
	$row = db_fetch_array(main_db_query("SELECT Members.Id, Origine FROM Members LEFT JOIN Players ON Players.MemberId=Members.Id WHERE NickName='".$NickName."' AND Password='".$Password."'"));
	return array($row['Id'], $row['Origine']);
}


# cette fonction verifie si l'Email existe déjà dans la base
function isEmailExists($email, $origine)
{
	$row = db_fetch_array(main_db_query("SELECT Id FROM Members WHERE Email='".$email."' AND Origine='".$origine."'"));

	return $row;
}

# cette fonction verifie si le login existe déjà dans la base
function isLoginExists($login, $origine)
{
	$row = db_fetch_array(main_db_query("SELECT Id FROM Members WHERE Login='".$login."' AND Origine='".$origine."'"));

	return $row;
}


# cette fonction verifie si le NickName existe déjà dans la base
function isNickExists($NickName)
{
	# check in $DATABASSE
	$row = db_fetch_array(main_db_query("SELECT Id,MemberId FROM Players WHERE NickName='".$NickName."'"));
	
	return $row;
}

# cette fonction verifie si le NickName existe déjà dans la base
function isNickNameExists($NickName)
{
	# check in $DATABASSE
	$row = db_fetch_array(main_db_query("SELECT Id FROM Players WHERE NickName='".$NickName."'"));
	
	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 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."'";
	$row = db_fetch_array(main_db_query($query, true));
	
	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."'";
	$row = db_fetch_array(main_db_query($query, true));
	
	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
	main_db_query("UPDATE Players SET Sons=Sons+1 WHERE Id='".$player['FatherPId']."'");
	$father = getplayer($player['FatherPId']);
	
	# on récup le gd-père
	$Gfather = getplayer($father['FatherPId']);
	
	# parrain : on rajoute 1 à GrandSons du grand père
	main_db_query("UPDATE Players SET GrandSons = GrandSons + 1 WHERE Id='".$Gfather['Id']."'");
	
	# on rerécupère le father pour la maj des Offsprings
	$row['FatherPId'] = $player['FatherPId'];
	# on met à jour tous les offsprings (sauf du filleul)
	while ($row['FatherPId'] > 0)
	{
		main_db_query("UPDATE Players SET Offsprings=Offsprings+1 WHERE Id='".$row['FatherPId']."'");
		$row = db_fetch_array(main_db_query("SELECT FatherPId FROM Players WHERE Id='".$row['FatherPId']."'"));
	}
}
/*
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
	/*
  	return db_fetch_array(main_db_query("SELECT Guests.FatherPId AS Id, Players.RootPId AS RootPId, Players.Rank AS Rank FROM Guests".
		" LEFT JOIN Players ON Players.Id=Guests.FatherPId".
		" WHERE GuestId='".$id."' AND Member='0'"));
	*/
	$rowFather = db_fetch_assoc(main_db_query("SELECT FatherPId FROM Guests WHERE GuestId='".$GuestId."' AND Member='0'"));
	return getplayer2($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)
{
	main_db_query("UPDATE Guests SET Member = '".$memberId."' WHERE GuestId='".$id."'");
}

/*
retourne le dernier guestId d'un email donné 
s'il y en a plus il retourne le plus recent
*/
function getGestIdFromEmail($Email)
{
	$row = db_fetch_assoc(main_db_query("SELECT GuestId FROM Guests WHERE Email='".$Email."' ORDER BY Id DESC LIMIT 0,1"));
	
	return $row['GuestId'];
}


function encryptePassword( $password )
{
	global $PASSWORD_SECRET_KEY;
	
	return md5($PASSWORD_SECRET_KEY.$password);
}

# cette fonction verifie si l'Email est dans une des deux bases
# auquel cas, elle retourne un tableau associatifs avec m[Base] la base 
# dans laquelle se trouve le Member, et le MemberId m[Id]
function checkEmailInBases($email, $oldemail = "")
{
	global $DATABASE;
	
	$result = array("base" => "0","Id" => "0");
	
	if ($oldemail != "")
		$oldemailreq = " AND Email != '".$oldemail."'";
	else
		$oldemailreq = "";
			
	# check in $DATABASSE
	$m = db_fetch_array(main_db_query("SELECT Id FROM Members WHERE Email='".$email."'".$oldemailreq));
	
	if (!empty($m[Id]))
	{
		$result[base]=1;
		$result[Id]=$m[Id];
		return $result;
	}

	return $result;
}

# cette fonction verifie si le NickName est dans une des deux bases
# auquel cas, elle retourne un tableau associatifs avec m[Base] la base 
# dans laquelle se trouve le Player, et le PlayerId m[Id]
function checkNickInBases($NickName)
{
	global $DATABASE;
	
	$result = array("base" => "0","Id" => "0");
	
	# check in $DATABASSE
	$m = db_fetch_array(main_db_query("SELECT Id FROM Players WHERE NickName='".$NickName."'"));
	
	if (!empty($m[Id]))
	{
		$result[base]=1;
		$result[Id]=$m[Id];
		return $result;
	}
		
	return $result;
}

?>