<!-- Récupération des catégories -->
	<?php
		include("../connexion.php");	// on inclut le point de connexion à la BD (connexion.php)
		$sql_categorie="SELECT nom FROM categorie";	// cette requête permet de récupérer le nom des catégories
		$retour_categorie=$connexion->query($sql_categorie);	// on envoie ensuite la requête à notre BD via le point de connexion et query()
		$result_categorie=$retour_categorie->fetchAll(PDO::FETCH_ASSOC);	// on récupère tous les résultats renvoyés par MySQL
/* La récupération des noms de catégories que nous venons d'effectuer en PHP nous permet de proposer à l'utilisateur la sélection d'une catégorie parmi celles existantes lors de l'ajout d'un produit.
Voir ligne 94 dans le code HTML ci-bas */
	?>

<!-- Traitement du formulaire -->
	<?php
		if(isset($_POST["submit"])) {	// on vérifie si le bouton d'envoi du formulaire a été cliqué
			if(isset($_POST["designation"]) && !empty($_POST["designation"])) { $designation=$_POST["designation"]; }	// on vérifie que la variable $_POST["designation"] existe et n'est pas vide, le cas échéant on l'affecte à la variable $designation
			else { $designation=""; }	// sinon on affecte une chaîne vide à la variable $designation
			if(isset($_POST["description"]) && !empty($_POST["description"])) { $description=$_POST["description"]; }	// de même pour la variable $_POST["description"]
			else { $description=""; }
			if(isset($_POST["prix"]) && !empty($_POST["prix"])) { $prix=$_POST["prix"]; }	// idem pour $_POST["prix"]
			else { $prix=-1; }	// on lui affecte cependant -1 si le prix n'est pas renseigné
			if(isset($_POST["tva"]) && !empty ($_POST["tva"])) { $tva=$_POST["tva"]; }	// de même pour $_POST["tva"]
			else { $tva=-1; }
			$categorie=$_POST["categorie"];	// on affecte $_POST["categorie"] à la variable $categorie, on n'effectue pas de test puisque la catégorie est issue d'une liste déroulante n'incluant pas de choix vide
			if(empty($_POST["designation"]) && empty($_POST["designation"]) && empty($_POST["prix"]) && empty($_POST["tva"])) {	// ici, on teste si toutes les variables sont vides (sauf $categorie)
				$aff_champManquant="Veuillez remplir au moins un champ !";	// le cas échéant, on stocke un message d'avertissement dans la variable $aff_champManquant
			}
			else {	// sinon (si au moins un champ (hormis catégorie) est renseigné) :
				$sql_verif="SELECT designation FROM article";	// cette requête SQL permet de récupérer le nom de tous les articles
				$retour_verif=$connexion->query($sql_verif);	// on envoie la requête à la BD
				$result_verif=$retour_verif->fetchAll(PDO::FETCH_ASSOC);	// puis on récupère les résultats
				$temoin=0;	// on initialise une variable $temoin à 0
				foreach($result_verif as $val) {	// puis on parcourt les résultats de MySQL (tous les noms d'articles)
					if($val["designation"] == $designation) {	// si un nom est égal au nom d'article saisi par l'utilisateur à travers le formulaire
						$temoin+=1;	// alors on incrémente la variable $temoin
					}
				}
				if($temoin != 0) {	// si cette dernière variable a une valeur différente de 0, soit si l'article saisi par l'utilisateur existe déjà dans la BD
					$aff_artExistant="Cet article existe déjà dans la base de données !";	// le cas échéant on stocke un message d'avertissement dans une variable $aff_artExistant
				}
				else {	// sinon (si l'article est inexistant) :
					$sql_numCat="SELECT id FROM categorie WHERE nom=\"$categorie\"";	// cette requête SQL permet de récupérer l'id de la catégorie sélectionnée par l'utilisateur dans le formulaire
					$retour_numCat=$connexion->query($sql_numCat);	// on envoie la requête à MySQL
					$numCat=$retour_numCat->fetch(PDO::FETCH_ASSOC);	// on récupère ensuite le résultat retourné par MySQL
					$numCat=$numCat["id"];	// on stocke alors l'idée correspondant à la catégorie choisie dans une variable $numCat
					if(isset($_FILES) && $_FILES["image"]["error"] == 0) {	// si la variable $_FILES existe et que le code d'erreur de l'image traitée via $_FILES est égal à 0, càd si une image est jointe à l'envoi du formulaire
						$img=$_FILES["image"]["name"];	// alors on stocke le nom de l'image envoyée dans la variable $img
						$img=addslashes(str_replace(' ', '', $img));	// pour éviter des erreur avec le nom du fichier, on échappe les caractères pouvant poser problème (addslashes()) et on retire les espaces (str_replace(), les espaces sont remplacés par un rien)
						move_uploaded_file($_FILES["image"]["tmp_name"], "../images/magasin/$img");	// on déplace ensuite le fichier temporaire vers le dossier où sont stockées les images du site avec le nouveau nom ($img)
						$sql_envoi="INSERT INTO article (id_categorie, designation, prix, tva, description, img_article) VALUES ($numCat, \"$designation\", $prix, $tva, \"$description\", \"./images/magasin/$img\")";	// cette requête permet l'insertion d'un article dans la table prévue à cet effet avec id_categorie=$numCat, designation=$designation, etc
						$cmp=$connexion->exec($sql_envoi);	// on envoie ensuite la requête à la BD via exec(), MySQL retournant le nombre de lignes modifiées dans la variable $cmp
						if($cmp != 0) {	// si $cmp a une valeur différente de zéro, donc si MySQL a pu insérer la requête
							$aff_insertionOK="Article inséré avec succès.";	// alors on stocke un message d'avertissement dans la variable $aff_insertionOK
						}
						else {	// sinon (si MySQL retourne 0) :
							$aff_insertionNOK="Erreur lors de l'insertion !";	// on stocke un autre message d'avertissement dans la variable $aff_insertionNOK
						}
					}
					else {	// s'il n'y a pas d'image, on effetue le même traitement que précédemment, le traitement de l'image en moins, de même dans la requête d'insertion où l'on ne précise pas 'img_article'
						$sql_envoi="INSERT INTO article (id_categorie, designation, prix, tva, description) VALUES ($numCat, \"$designation\", $prix, $tva, \"$description\")";
						$cmp=$connexion->exec($sql_envoi);
                        if($cmp != 0) {
                            $aff_insertionOK="Article inséré avec succès.";
                        }
                        else {
                            $aff_insertionNOK="Erreur lors de l'insertion !";
                        }
					}
				}
			}
		}
	?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<link rel="stylesheet" type="text/css" href="../style/styleAdmin.css" />
		<title>OpenSHOP - Admin</title>
	</head>

<!-- Le résultat de ce code est visible en ligne à l'adresse suivante :
    https://iut.echodelta.fr/desr4/tp5/admin/ajout.php -->

	<body>
	<div id="container">
		<h1>Administration du site OpenSHOP</h1>
		<h2>Ajout d'article</h2>
		<form method="post" action="ajout.php" enctype="multipart/form-data">	<!-- Création d'un formulaire de méthode POST et dont les données sont à envoyer à ce même fichier, l'enctype permet quant à lui l'envoi d'image -->
		<fieldset id="ajoutArticle">
			<legend>Ajout d'un article</legend>
			<p><label for="designation" id="idDesignation">Designation :</label>
			<input type="text" name="designation" id="designation" maxlength="128" /></p>	<!-- ce champ de type text permet de renseigner le nom de l'article -->
			<p><label for="description" id="idDescription">Description :</label>
			<input type="text" name="description" id="description" maxlength="65535" /></p>	<!-- celui-ci pour la description -->
			<p><label for="categorie" id="idCategorie">Catégorie :</label>
			<select name="categorie" id="categorie">	<!-- liste déroulante pour sélectionner la catégorie -->
				<?php
					foreach($result_categorie as $valeur) {	// on parcourt la variable $result_categorie issue de la section 'traitement des catégories' (ligne 1) qui contient tous les noms de catégorie
						echo "<option value=\"". $valeur["nom"] ."\" >". $valeur["nom"] ."</option>";// pour chaque nom, on l'ajoute dans une balise option qui est l'élément de la liste déroulante
					}
				?>
			</select></p>
			<p><label for="prix" id="idPrix">Prix :</label>
			<input type="text" name="prix" id="prix" maxlength="6" /></p>	<!-- ce champ permet de renseigner le prix -->
			<p><label for="tva" id="idTva">TVA :</label>
			<input type="text" name="tva" id="tva" maxlength="5" /></p>	<!-- celui-ci permet de renseigner la TVA -->
			<p><label for="image" id="idImage">Image :</label>
			<input type="file" name="image" id="image" accept="image/jpg" /></p>	<!-- enfin, ce champ de type file permet d'envoyer un fichier vers le serveur -->
		</fieldset>
			<input type="submit" value="Envoyer" name="submit" />	<!-- ceci est le bouton d'envoi du formulaire -->
			<input type="reset" value="Annuler" id="reset" />	<!-- ce bouton de type reset permet d'effacer tout le contenu du formulaire -->
		</form>
		<?php	// ici, on effectue le traitement d'affichage selon la réussite ou non des actions en tête de page (avant DOCTYPE) : on teste si les variables contenant les messages ($aff_*) existent, le cas échéant on les affiche ici (après le formulaire) dans des paragraphes HTML
			if(isset($aff_champManquant)) { echo "<p>$aff_champManquant</p>"; }	// si aucun champ renseigné (Erreur)
			if(isset($aff_artExistant)) { echo "<p>$aff_artExistant</p>"; }	// si article existant (Erreur)
			if(isset($aff_insertionOK)) { echo "<p>$aff_insertionOK</p>"; }	// si insertion possible
			if(isset($aff_insertionNOK)) { echo "<p>$aff_insertionNOK</p>"; }	// si insertion impossible (Erreur)
		?>
	</div>
	</body>
</html>
