<?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()
	{	
		# 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)
		$iNbTabParams = count($this->tabParams); 
		$sKeyParams = ($iNbTabParams > 0) ? ",".implode(",", array_keys($this->tabParams)) : "";
		$sValueParams = ($iNbTabParams > 0) ? ",'".implode("','", array_values($this->tabParams))."'" : "";

		# insère le membre
		main_db_query("INSERT INTO Members (".
			" Email, Password, Vip, Origine, IsOff, ".
			" Time, IP, Host, Browser, ".
			" Gender, Name, FirstName, Age, Address, Zip, Town, Telephone ".$sKeyParams.
			" ) VALUES (".
			"'".$this->Email."',".
			"'".$this->Password."',".
			"'".$this->Vip."',".
			"'".$this->Origine."',".
			"'".$this->IsOff."',".
			"'".$this->DateInscription."',".
			"'".$this->IP."',".
			"'".$this->Host."',".
			"'".$this->Browser."',".
			"'".$this->Gender."',".
			"'".$this->Name."',".
			"'".$this->FirstName."',".
			"'".$this->Age."',".
			"'".$this->Address."',".
			"'".$this->Zip."',".
			"'".$this->Town."',".
			"'".$this->Telephone."'".
			$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 $Credits;
		
	var $DateInscription;
	var $MemberId;
	
	var $tabParams;
	
	function Joueur($NickName, $Credits, $DateInscription, $MemberId, $tabParams)
	{
		$this->NickName = $NickName;
		$this->Credits = $Credits;
		$this->DateInscription = $DateInscription;
		$this->MemberId = $MemberId;

		# les tabParams sont dans un tableau
		while(list($key, $val) = each($tabParams))
			$this->tabParams[$key] = $val;		
	}
	
	function createInDB()
	{		
		global $NB_PTS_INSCRIPTION;
		
		# 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)
		$iNbTabParams = count($this->tabParams); 
		$sKeyParams = ($iNbTabParams > 0) ? ",".implode(",", array_keys($this->tabParams)) : "";
		$sValueParams = ($iNbTabParams > 0) ? ",'".implode("','", array_values($this->tabParams))."'" : "";

		main_db_query("INSERT INTO Players (".
			"Id, NickName, Credits, Score, Time, MemberId ".$sKeyParams.
			" ) VALUES (".
			"'".$this->MemberId."',".
			"'".$this->NickName."',".
			"'".$this->Credits."',".
			"'".$NB_PTS_INSCRIPTION."',".
			"'".$this->DateInscription."',".
			"'".$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 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 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;
}

# sur les Genders sont écrits
function setGenderM6($civilite)
{
	switch($civilite)
	{
		case "Monsieur":
			$civ = 1;
		break;

		case "Madame":
			$civ = 2;
		break;

		default:
			$civ = 3;
		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;
}


#####################################################
# 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 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)
{
	main_db_query("UPDATE Guests SET Member = '".$memberId."' WHERE GuestId='".$id."'");
}


#####################################################
# PAU M6 FUNCTIONS
#####################################################
# vérifie chez M6 si le login/pass est correct
# retourne : un tableau avec tab[Id] = -1 s'il n'existe pas
# soit : un tableau associatif array(Id => ... , sessionid, Name, FirstName, Town, Email)
function checkPAU($NickName, $Password)
{
	# URL de test
	#$URL = "http://qlf-www.m6.fr/common/outils/part/index.jhtml?";
	
	# URL de prod
	$URL = "http://www.m6.fr/common/outils/part/index.jhtml?";
	$data = "m6part=PART-W2&m6svc=login&m6lg=".stripslashes($NickName)."&m6psw=".stripslashes($Password);
	
	$return_message_array = file($URL.$data);
	
	for($r=0 ; $r < count($return_message_array) ; $r++)
	{
		$tmpTab = explode("=", $return_message_array[$r]);
		$tab[$tmpTab[0]] = addslashes(trim($tmpTab[1]));
	}
	
	//mail("serei@viralgames.com", "pau m6 1", $tab['status']." - ".$tab['sessionid']." - ".$tab['Nom']." - ".$tab['Prenom']."<br><br>".$URL.$data);
	
	if ($tab['status'] == "ok")
	{
		$tmpAge = explode("/", $tab['Date de naissance']);
		$tmpGender = (!empty($tab['Civilite'])) ? setGenderM6($tab['Civilite']) : "";
		$tmpAddress = $tab['Numero de voie']." ".$tab['TypeVoie']." ".$tab['Voie']." ".$tab['Hameau Lieu-dit'];
		
		return array(
			"Id" => "0", 
			"sessionid" => $tab['sessionid'], 
			"Name" => $tab['Nom'], 
			"FirstName" => $tab['Prenom'], 
			"Gender" => $tmpGender,
			"Zip" => $tab['Code postal'],
			"Age" => $tmpAge[2]."-".$tmpAge[1]."-".$tmpAge[0],
			"Address" => $tmpAddress,
			"Town" => $tab['Ville'], 
			"Country" => $tab['Pays'], 
			"Telephone" => $tab['Téléphone'], 
			"Email" => $tab['Email']
			);
	}
	else
	{
		return array("Id" => "-1");
	}
}

# fonction de vérification du login/pass adapté au PAU M6
# on va d'abord vérifier si le login/pass existe chez M6 via le PAU M6
# si oui ensuite on va regarder si il existe chez nous. Si non on l'indique et il faudra le créer
function getMemberFromLoginPass_M6($NickName, $Password)
{
	global $ORIGINE;
	
	# on vérifie chez M6
	$pau = checkPAU($NickName, $Password);

	# s'il existe, on va vérifie s'il existe en local
	if ($pau['Id'] == 0)
	{
		# on a utilisé getUVip pour créer le compte à l'origine, on va l'utiliser pour le retrouver
		# le UVip est basé sur un id et son origine. Pour M6 l'identifiant est le NickName.
		$row = getMemberFromVip(getUVip($NickName, $ORIGINE));
		
		# s'il est déjà inscrit en local on retourne l'Id
		if ($row)
		{
			return $row;
		}
	}
	
	return $pau;	
}
?>