<?php

echo "V3\n<BR>";

function print_table($table){

	echo "<TABLE BORDER=1>";
	foreach ($table  as $k => $v){
		echo "<TR>";
		if (is_array($v)) {
			foreach ($v as $kk=>$vv){
				echo "<TD>";
				echo $kk."=>".$vv;
				echo "</TD>";
			}
		}else
			echo "<TD>".$k."=>".$v."</TD";
		echo "</TR>";
	}
	echo "</TABLE>";
}

function charge_table($nom_fichier){
	$fp=fopen($nom_fichier,"r");
	$c=fread($fp,filesize($nom_fichier));
	fclose($fp);

	$a=unserialize($c);
	return $a;
}

function ajout_resultat($table,$nom_fichier){
	$b=$_GET;
	$b["ip"]=$_SERVER["REMOTE_ADDR"];
	$b["date"]= time();
	$table[]=$b;
	$fp=fopen($nom_fichier,"w");
	fwrite($fp,serialize($table) );
	fclose($fp);
}

function calcule_classements($table){

	foreach($table as $k => $v){

		if (!isset($v["revision"])){
			unset($table[$k]);
			continue;
		}
		if (!isset($v["lap_time"]))
		{
			unset($table[$k]);
			continue;
		}
		if(!isset($v["nom_circuit"]))
		{
			unset($table[$k]);
			continue;
		}
		if(!isset($v["nomjoueur"]))
		{
			unset($table[$k]);
			continue;
		}
		//echo "<P>Ok</P>";

		if ($v["lap_time"]<=0) {
			$table[$k]["lap_time"]=(float)9999;
			$table[$k]["perc"]=(int)($table[$k]["checkpoint_num"]/$table[$k]["checkpoint_total"]*100);
		}else{
			$table[$k]["perc"]=(int)100;
		}
		if($v["checkpoint_time"]<=0){
			$table[$k]["checkpoint_time"]=(int)9999;
		}

		$id[$k]=$k;
		$trev[$k]=(int)$table[$k]["revision"];
		$ttime[$k]=(float)$table[$k]["lap_time"];
		switch($table[$k]["nom_circuit"]){
			case "simple.tri": $tcir[$k]="3";break;
			case "hopla.tri":  $tcir[$k]="2";break;
			case "waou.tri":   $tcir[$k]="1";break;
			default:		   $tcir[$k]="0";break;
		} // switch
		//$tcir[$k]=$table[$k]["nom_circuit"];
		$tlapnum[$k]=(int)$table[$k]["lap_num"]; // A effacer
		$tperc[$k]=(int)$table[$k]["perc"];
		$tcheckt[$k]=(float)$table[$k]["checkpoint_time"];
	}

	array_multisort($tcir,SORT_ASC,$trev,SORT_DESC,$ttime,SORT_ASC,$tperc,SORT_DESC,$tcheckt,SORT_ASC,$id);

	//$tcir=array_unique($tcir);
	//$trev=array_unique($trev);
	$lncir=$lnrev=$table[$id[0]]["nom_circuit"];
	$lnrev=$table[$id[0]]["revision"];
	$lnom=array();
	$rang_general=1;
	$rang_spec=1;

	foreach ($id as $ind){
		settype($table[$ind]["lap_time"],'float');
		if ($table[$ind]["revision"]!=$lnrev) {
			$lnrev=$table[$ind]["revision"];
			$rang_spec=1;
			$lmon=array();
		}
		if ($table[$ind]["nom_circuit"]!=$lncir) {
			$lncir=$table[$ind]["nom_circuit"];
			$rang_spec=1;
			$rang_general=1;
			$lmon=array();
		}
		if (array_key_exists($table[$ind]["nomjoueur"],$lnom)) {
			$table[$lnom[$table[$ind]["nomjoueur"]]]["essais"]++;
			if($table[$ind]["lap_time"]<9999)
				$table[$lnom[$table[$ind]["nomjoueur"]]]["duree_totale"]+=(float)$table[$ind]["lap_time"];
			else if ($table[$ind]["checkpoint_time"]<9999)
				$table[$lnom[$table[$ind]["nomjoueur"]]]["duree_totale"]+=(float)$table[$ind]["checkpoint_time"];
			unset($table[$ind]);
		}else{
			$table[$ind]["classement_general"]=(int)$rang_general++;
			$table[$ind]["classement_specifique"]=(int)$rang_spec++;
			$table[$ind]["essais"]=(int)1;
			if($table[$ind]["lap_time"]<9999){
				$table[$ind]["duree_totale"]=(float)$table[$ind]["lap_time"];
				$table[$ind]["checkpoint_time"]=(float)$table[$ind]["lap_time"];
			}
			else if ($table[$ind]["checkpoint_time"]<9999){
				$table[$ind]["duree_totale"]=(float)$table[$ind]["checkpoint_time"];
				$table[$ind]["lap_time"]=(float)$table[$ind]["checkpoint_time"];
			}
			else
				$table[$ind]["duree_totale"]=0;

			$lnom[$table[$ind]["nomjoueur"]]=$ind;
		}
	}
	foreach($id as $ind){
		if (array_key_exists($ind,$table )) {
			$tablesort[$ind]=$table[$ind];

		}
	}
	return $tablesort;
}

function tri_regroupe_filtre($table,$tri=null,$dtri=SORT_DESC,$regroupe=null,$filtre_champ=null,$filtre_val=null){
	foreach ($table as $k => $aa){
		//echo "<P>".$k."**".$aa["ref_time"]."<BR></P>";

		//echo "<P>**".empty($aa[$tri])."</P>";
		if (!isset($aa["rev"]))
			continue;
		if (!isset($aa["ref_time"]))
			continue;
		if(!isset($aa["checkpoint"]))
			continue;
		if(!isset($aa["nom"]))
			continue;
		if (!isset($aa[$tri]))
			continue;
		if (isset($filtre_champ) && isset($filtre_val))
			if ($aa[$filtre_champ]!=$filtre_val){
				//echo"<P>filtré</P>";
				continue;
			}
		$id[$k]=$k;
		$trev[$k]=$aa["rev"];
		$ttime[$k]=$aa["ref_time"];
		$tchkp[$k]=$aa["checkpoint"];
		$tnom[$k]=$aa["nom"];

		$ttri[$k]=$aa[$tri];
		$treg[$k]=$aa[$regroupe];
		$tfilt[$k]=$aa[$filtre_champ];
		$ftable[$k]=$table[$k];
			//echo"<P>".$aa[$filtre_champ]."</P>";
	}


	$table=$ftable;

	array_multisort($ttri,$dtri,$trev,SORT_DESC,$tchkp,SORT_DESC,$ttime,SORT_DESC,$tnom,$id);

	if (isset($regroupe)){
		$treg=array_unique($treg);
	}

	foreach ($treg as $k => $v){
		//echo "Key:".$k."<P></P>";
		$b[]=$table[$id[$k]];
	}
	$table=$b;
//	echo "<P><BR></P>";
//	var_dump($tfilt);
//	echo "<P><BR></P>";

	return $table;
}

function tri($table,$champ=NULL,$direction=NULL){
	$table=array_reverse($table,TRUE);
	if (!isset($champ)) return $table;
	if (!isset($direction)) return $table;

	function ftrida($a,$b){
		$da=$a["date"];
		$db=$b["date"];
		return ($da>$db)?-1:1;
	}
	function ftridd($a,$b){
		$da=$a["date"];
		$db=$b["date"];
		return ($da<$db)?-1:1;
	}

	if ($champ=="date") {
		if($direction=="desc")
			uasort($table,'ftrida');
		else
			uasort($table,'ftridd');
	}
	return $table;
}

function filtre($table,$champ,$valeur){
	foreach($table as $k=>$v){
		if($v[$champ]==$valeur)
			$s[]=$v;
	}
	return $s;
}

function list_circuits_revision_noms($table,&$tnoms,&$trevisions,&$tcircuits){

	global $trevisions,$tcircuits;

	foreach ($table  as $k =>$v){
		$noms[]=$v["nomjoueur"];
		$revisions[]=$v["revision"];
		$circuits[]=$v["nom_circuit"];
	}
	$tnoms=array_unique($noms);
	$trevisions=array_unique($revisions);
	$tcircuits=array_unique($circuits);

	sort($tcircuits,SORT_ASC);
	sort($trevisions,SORT_DESC);
}

function extract_table($table,$champs_alias){
	$out=array();
	foreach($table as $k => $v){
		$b=array();
		foreach($champs_alias as $kk => $vv){
			if (array_key_exists($vv["champs"],$v)) {
				if (isset($vv["alias"]))
					$b[$vv['alias']]=$v[$vv["champs"]];
				else
					$b[$vv["champs"]]=$v[$vv["champs"]];
			}
		}
		$out[]=$b;
	}
	return $out;
}


	//echo htmlspecialchars($_GET["nom"]);
	$mode="classement";

	if (array_key_exists("mode",$_GET )) $mode=$_GET["mode"];

	//if (array_key_exists("add",$_GET)) $mode="add";

	//if (array_key_exists("detail_nom",$_GET)) $mode="joueur";

	if (array_key_exists("filtre_circuit",$_GET)) $filtre_circuit=$_GET["filtre_circuit"];

	if (array_key_exists("filtre_revision",$_GET)) $filtre_revision=$_GET["filtre_revision"];

	if (array_key_exists("filtre_joueur",$_GET)) $filtre_joueur=$_GET["filtre_joueur"];

	if (array_key_exists("tri",$_GET)) $tri=$_GET["tri"];
	if (array_key_exists("dir",$_GET)) $dir=$_GET["dir"];


	switch($mode){
		case "classement":
			$a=charge_table("test.1st");

			$a=calcule_classements($a);

			list_circuits_revision_noms($a,$tjoueurs ,$trevisions ,$tcircuits );

			$sel=$a;

			if (isset($filtre_circuit))	$sel=filtre($sel,"nom_circuit",$filtre_circuit);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			if (isset($filtre_revision)) $sel=filtre($sel,"revision",$filtre_revision);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			if (isset($filtre_joueur)) $sel=filtre($sel,"nomjoueur",$filtre_joueur);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			if ((!isset($filtre_circuit)) && (!isset($filtre_revision)))
				$ext[]=array("champs"=>"classement_general","alias"=>"Classement<BR>Général");
			else
				$ext[]=array("champs"=>"classement_specifique","alias"=>"Classement");

			$ext[]=array("champs"=>"nomjoueur","alias"=>"Nom<BR>du<BR>programmeur");
			if (!((!isset($filtre_circuit)) && (!isset($filtre_revision)))){
				$ext[]=array("champs"=>"classement_general","alias"=>"Classement<BR>Général");
				if (!isset($filtre_circuit)) {
					$ext[]=array("champs"=>"nom_circuit","alias"=>"Circuit");
				}
				if (!isset($filtre_revision)) {
					$ext[]=array("champs"=>"revision","alias"=>"Version");
				}
			}
			else{
				$ext[]=array("champs"=>"nom_circuit","alias"=>"Circuit");
				$ext[]=array("champs"=>"revision","alias"=>"Version");
			}

			$ext[]=array("champs"=>"lap_time","alias"=>"Temps<BR>de<BR>Course");
			$ext[]=array("champs"=>"perc","alias"=>"Parcours<BR>(%)");
			$ext[]=array("champs"=>"essais","alias"=>"Nombre<BR>d'essais");
			$ext[]=array("champs"=>"duree_totale","alias"=>"Durée<BR>des<BR>essais");

			$aff_table=extract_table($sel,$ext);
			break;
		case "add":
			$table=charge_table("test.1st");
			ajout_resultat($table,"test.1st");
			echo count($table);
			die(0);
			break;
		case "reset":
				$a=array();
			   	$fp=fopen("test.1st","w");
   				fwrite($fp,serialize($a));
   				fclose($fp);
			break;
		case "joueur":
			$a=charge_table("test.1st");
			$aff_table=$a;
			//$a=tri_regroupe_filtre($a,"ref_time",null,"nom",$joueur);
			break;
		case "logs":
		case "logss":
			$a=charge_table("test.1st");

			list_circuits_revision_noms($a,$tjoueurs ,$trevisions ,$tcircuits );

			$sel=$a;

			if (isset($filtre_circuit))	$sel=filtre($sel,"nom_circuit",$filtre_circuit);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			if (isset($filtre_revision)) $sel=filtre($sel,"revision",$filtre_revision);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			if (isset($filtre_joueur)) $sel=filtre($sel,"nomjoueur",$filtre_joueur);

			list_circuits_revision_noms($sel,$tjoueurs ,$trevisions ,$tcircuits );

			$aff_table=tri($sel,$tri,$dir);
			break;

	}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
	<TITLE></TITLE>
</HEAD>
<BODY LANG="fr-FR" DIR="LTR">
<H1>
<?php
	switch($mode){
		case "classement":
			$titre="Classement";
			break;
		case "joueur":
			$titre = "Informations Joueur: ".$joueur;
			break;
		case "logs":
		case "logss":
			$titre = "Journal des courses.";
			break;

	}


echo "<P ><A HREF='index.php?mode=".$mode."'>".$titre."</A></P><H2>";
?>
<H3>
<?php
if (isset($filtre_circuit)) {
	echo "Resultats Circuit:".$filtre_circuit."<BR>";
}else{
	echo "Circuits : ";
	foreach($tcircuits as $k => $v){
		$lien="?mode=".$mode;
		$lien.="&filtre_circuit=".$v;

		if (isset($filtre_joueur)) $lien.="&filtre_joueur=".$filtre_joueur;
		if (isset($filtre_revision)) $lien.="&filtre_revision=".$filtre_revision;

		echo "<A href='".$lien."'>".$v."</A>  /  ";
	}
}
echo "<BR>";
if (isset($filtre_revision)) {
	echo "Resultats Version:".$filtre_revision."<BR>";
}else{
	echo "Versions : ";
	foreach($trevisions as $k => $v){
		$lien="?mode=".$mode;
		if (isset($filtre_circuit))	$lien.="&filtre_circuit=".$filtre_circuit;
		if (isset($filtre_joueur))	$lien.="&filtre_joueur=".$filtre_joueur;
		$lien.="&filtre_revision=".$v;

		echo "<A href='".$lien."'>".$v."</A>  /  ";
	}
}
if ($mode!="classement")
	echo "<P><A HREF=index.php?mode=classement>Classement</A></P>";
if (($mode!="logs") && ($mode!="logss"))
	echo "<P><A HREF=index.php?mode=logs>Journal</A></P>";

?>
</H3>
<P ><BR>
</P>
<P><BR>
</P>

<TABLE BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
	<THEAD>
		<TR VALIGN=TOP>
<?php
		switch($mode){
			case "classement":
				foreach ($aff_table as $k => $v){
					foreach ($v as $kk => $vv){
						echo "<TH><P>".$kk."</TH>";
					}
					break;
				}
				break;
			case "logs":
			case "logss":
				foreach ($aff_table as $k => $v){
					foreach ($v as $kk => $vv){
						if ($kk=="date") {
							if($dir=="desc")
								echo "<TH><P><A href=index.php?mode=logs&tri=date&dir=asc>date</A></TH>";
							else
								echo "<TH><P><A href=index.php?mode=logs&tri=date&dir=desc>date</A></TH>";
						}else
							echo "<TH><P>".$kk."</TH>";
					}
					break;
				}
				break;

		}

?>
		</TR>
	</THEAD>
	<TBODY>
<?php
	foreach ($aff_table as $k=>$v) {
	echo "<TR>";
		foreach($v as $kk => $vv){
			if (($kk=="nomjoueur") || ($kk=="Nom<BR>du<BR>programmeur")) {
				$lien="?mode=".$mode;
				if (isset($filtre_revision)) {
					$lien.="&filtre_revision=".$filtre_revision;
				}
				if (isset($filtre_circuit)) {
					$lien.="&filtre_circuit=".$filtre_circuit;
				}
				$lien.="&filtre_joueur=".$vv;
				echo "<TD ALIGN=CENTER><A HREF='".$lien."'>".$vv."</A></TD>";
			}else if (($kk=="nom_circuit") || ($kk=="Circuit")) {
				$lien="?mode=".$mode;
				if (isset($filtre_revision)) {
					$lien.="&filtre_revision=".$filtre_revision;
				}
				if (isset($filtre_joueur)) {
					$lien.="&filtre_joueur=".$filtre_joueur;
				}
				$lien.="&filtre_circuit=".$vv;
				echo "<TD ALIGN=CENTER><A HREF='".$lien."'>".$vv."</A></TD>";
			}else if (($kk=="Version") || ($kk=="revision")) {
				$lien="?mode=".$mode;
				if (isset($filtre_circuit)) {
					$lien.="&filtre_circuit=".$filtre_circuit;
				}
				if (isset($filtre_joueur)) {
					$lien.="&filtre_joueur=".$filtre_joueur;
				}
				$lien.="&filtre_revision=".$vv;
				echo "<TD ALIGN=CENTER><A HREF='".$lien."'>".$vv."</A></TD>";
			}else if ($kk=="date") {
				$d=date("H:i:s d/m/Y",$vv);
				echo "<TD ALIGN=CENTER>".$d."</TD>";
			}else if (is_float($vv)) {
					$vv=sprintf("%3.2f",$vv);
					echo "<TD ALIGN=CENTER>".htmlspecialchars($vv)."</TD>";
			}else
				echo "<TD ALIGN=CENTER>".htmlspecialchars($vv)."</TD>";

		}
	if ($mode=="logss") {
		echo "<TD ALIGN=CENTER><A href=index.php?mode=delete&id=".$k.">Suppr</A></TD>";
	}
	echo "</TR>";
	}
?>
	</TBODY>
</TABLE>
<P><BR>
</P>
</BODY>
</HTML>