<!--
 * @ Author: JunkJumper
 * @ Link: https://github.com/JunkJumper
 * @ Copyright: Creative Common 4.0 (CC BY 4.0)
 * @ Create Time: 05-10-2020 11:19:49
 * @ Modified by: JunkJumper
 * @ Modified time: 12-10-2020 10:43:41
 * -->

<?php

// Definition de la table pour servir de support
$tab_car[] = array("Renault", "Prix", "Peugeot", "Prix", "Volkswagen", "Prix");
$tab_car[] = array("Twingo", 8999, "107", 7999, "Lupo", 8549);
$tab_car[] = array("Clio", 11999, "207", 12499, "Polo", 11549);
$tab_car[] = array("Megane", 13999, "308", 14999, "Golf", 16549);
$tab_car[] = array("Laguna", 18999, "508", 19999, "Passat", 22549);

// Get Nb Maeque & Model
function GetNbMarqueModel($tab_car, &$nb_marque, &$nb_modele) {
	$nb_marque = count($tab_car[0])/2;
	$nb_modele = count($tab_car)-1;
}

// Ecriture dans fichier
function WriteTabCar2File($file_path, $tab_car) {
	global $debug_flag;
	
	if ($debug_flag) echo "<h1>Ecriture de la table voiture dans un fichier</h1>";
	
	// effacemet du fichier s'il existe
	if ( file_exists($file_path) ) {
		if ($debug_flag) echo "effacement ancien".$file_path."<br/>";
		unlink($file_path);
	}
	
	// ouverture du fichier en ecriture
	if ($debug_flag) echo "ouverture ".$file_path."<br/>";
	$fp = fopen($file_path, "w");
	if ($debug_flag) echo "pointeur de fichier fp = ".$fp."<br/>";
	
	// Ecriture du fichier CSV grace a fputcsv()
	if ( $fp != false ) {
		if ($debug_flag) echo "Ecriture dans ".$file_path." <br/>";
		
		GetNbMarqueModel($tab_car, $nb_marque, $nb_modele);
		
		// Entete table
		fputcsv($fp, $tab_car[0], "\t");
		if ($debug_flag) print_r($tab_car[0]);
		if ($debug_flag) echo "<br/>";
		
		// Lignes	
		for ($k = 1; $k <= $nb_modele; $k++) {
			fputcsv($fp, $tab_car[$k], "\t");
			
			if ($debug_flag) print_r($tab_car[$k]);
			if ($debug_flag) echo "<br/>";
		}
			
		fclose($fp);
	}  else {
		print("Impossible d'ouvrir le fichier $file_path <br/>");
		return(false);
	}
	return(true);
}

// Mapping de la table initiale vers une table formatée pour le formulaire
function MakeTable4Form($tab_car, &$nb_lig_tab_car, &$nb_marque, &$nb_modele) {
	global $debug_flag;
	$table4form = array();
	
	GetNbMarqueModel($tab_car, $nb_marque, $nb_modele);
	
	$nb_lig_tab_car = $nb_marque * ($nb_modele+1);
	if ($debug_flag) echo "nb_marque = ".$nb_marque." nb_modele = ".$nb_modele."<br/>";
	for($i=0; $i< $nb_marque; $i++ ) {
		$num_marque_ligne = $i*($nb_modele+1);
		$table4form[$num_marque_ligne][0] = $tab_car[0][2*$i];
		$table4form[$num_marque_ligne][1] = "Prix";
		if ($debug_flag) echo $num_marque_ligne." : ".$table4form[$num_marque_ligne][0]." - ".$table4form[$num_marque_ligne][1]."<br/>";

		for($j = 0; $j < $nb_modele; $j++) {
			$num_modele_ligne = $i*($nb_modele+1)+1+$j;
			$table4form[$num_modele_ligne][0] = $tab_car[$j+1][2*$i];
			$table4form[$num_modele_ligne][1] = $tab_car[$j+1][2*$i+1];
			if ($debug_flag) echo $num_modele_ligne." : ".$table4form[$num_modele_ligne][0]." - ".$table4form[$num_modele_ligne][1]."<br/>";
		}
	}
	return($table4form);
}

// Creation formulaire a partir de la table formatée pour le formulaire
function CreateForm($tab4form, $nb_modele, $nb_marque) {
	global $debug_flag;
	$formstring = "";
	$formstring = "<form action=\"voitures.php\" method=\"POST\">\n";
	$formstring .= "<table>\n";
	
	for ($i = 0; $i < $nb_marque; $i++) {
		// Marque 
		$k = $i*($nb_modele+1);
		$current_marque = $tab4form[$k][0];
		// Entete Marque
		$formstring .= "<tr>\n";
			$formstring .= "<td colspan=\"4\" align=\"center\"><b>".$current_marque."</b></td>\n";
		$formstring .= "</tr>\n";
		// Modèles de la Marque
		for ( $j=1; $j <= $nb_modele; $j++) {
			$k++;
			$formstring .= "<tr>\n";
				// Lignes formulaire
				if ($debug_flag) echo "ligne ".$k."  ".$current_marque." - modele ".$j." : modele".$k." =>".$tab4form[$k][0]."<br/>";
				$formstring .= "<input type=\"hidden\" name=\"marque".$k."\" value=\"".$current_marque."\"/>";
				$formstring .= "<td>Modele ".$j." </td><td>: <input type=\"text\" name=\"modele".$k."\" value=\"".$tab4form[$k][0]."\"/></td>";
				$formstring .= "<td>Prix </td><td>: <input name=\"prix".$k."\" value=\"".$tab4form[$k][1]."\"/></td>";
			$formstring .= "</tr>\n";
		}	
	}
	// Bouton valider
	$formstring .= "<tr>\n";
	$formstring .= "<td colspan=\"4\" align=\"center\">";
	$formstring .= "<input name=\"Valider\" type=\"submit\" />";
	$formstring .= "</center></td>";
	$formstring .= "</tr>\n";
	$formstring .= "</table>\n";
	$formstring .= "</form>";
	return($formstring);
	
}

// Copie des résultat du formulaire dans la table
function Form2TableCar($nb_modele, $nb_marque) {
	global $debug_flag;
	$nb_marque = 0;
	$k = 1;
	$tab_car[] = array();
	if ($debug_flag) echo "<h1>Creation de la table voiture apres validation formulaire</h1>";
	while (isset($_POST["marque".$k])) {
		$marque = $_POST["marque".$k];
		$tab_car[0][2*$nb_marque] = $marque;
		$tab_car[0][2*$nb_marque+1] = "Prix";
		for($j=1;$j<=$nb_modele;$j++) {
			if ($debug_flag) echo $marque." - Modele ".$j." ".$_POST["modele".$k]." - ".$_POST["prix".$k]."<br/>";
			$tab_car[$j][2*$nb_marque] = $_POST["modele".$k];
			$tab_car[$j][2*$nb_marque+1] = $_POST["prix".$k];
			$k++;
		}
		$nb_marque++;
		$k = $nb_marque*($nb_modele+1)+1;
	}
	return($tab_car);
}

?>

<!DOCTYPE html>
<html lang="fr-FR">

<head>
	<meta charset="utf-8" />
	<title>TD3 - Génération et traitement des formulaires HTML</title>
</head>

<body>
	<h1>TD3 - Génération et traitement des formulaires HTML</h1>

	<?php
		// ###################
		// Programme principal
		// ###################
		
		// Teste si le formulaire existe sinon le générer.
		$genere_form = true;
		GetNbMarqueModel($tab_car, $nb_marque, $nb_modele);
		for ( $i = 0; $i < $nb_marque; $i++) {
			$k = $i*($nb_modele+1)+1;
			$marque = $tab_car[0][2*$i];
			if ($debug_flag)  echo "_POST[marque".$k."] = ".$_POST["marque".$k]."<br/>";
			if (isset($_POST["marque".$k])) {
				$genere_form = false;
			}
		}
		if ($debug_flag) echo "genere_form : ".$genere_form."<br/>";
		
		if ( $genere_form ) {
			// Genere formulaire
			$table4form = MakeTable4Form($tab_car, $dim_tab_car, $nb_marque, $nb_modele);
			echo CreateForm($table4form, $nb_modele, $nb_marque);	
		} else {
			echo 'Le formulaire a bien écris les données !';
			echo '<a href="./index.php">
					<button class="button blue">Retour à l\'exercice précédent </button>
				</a>';
			//Lit formulaire en cree une nouvelle table
			$new_tab_car = Form2TableCar($nb_modele, $nb_marque);
			// vérification table
			if ($debug_flag) print_r($new_tab_car);
			
			// Ecriture en fichier
			WriteTabCar2File("./voiture.txt", $new_tab_car);
		}

	?>

	<style>
		h1 {
			text-align: center;
			color: blue;
		}

		h2 {
			text-align: left;
			color: DeepSkyBlue;
		}

		p {
			font-weight: bold;
			color: grey;
		}

		br {
			line-height: 3em;
		}

		br#long {
			line-height: 10em;
		}

		strong.mandatory {
			color: red;
		}

		.button {
			border: none;
			color: white;
			padding: 15px 32px;
			text-align: center;
			text-decoration: none;
			display: inline-block;
			font-size: 16px;
			margin: 4px 2px;
			cursor: pointer;
		}

		.blue {
			background-color: #4c6e8a;
		}
	</style>

	<p>Les champs marqués d'une <strong class="mandatory">*</strong> sont obligatoires</p>

	<a href="./index.php">
        <button class="button blue">Exo 11</button>
    </a>
	<a href="..">
        <button class="button blue">Retour à la page précédente</button>
    </a>
</body>

</html>