<?php
require "control_auth";
require "fonctions";
/* 		Programme : 	importation_oeuvre.php
		Description :	Ce programme permet d'envoyer un fichier sur le serveur. Ce fichier sera ensuite lu par ce
						programme pour importer les oeuvres et les détails dans la base.
						Le fichier est ensuite supprimé.
*/

$action=$_GET['action'];

switch ($action)
{

case "form":
	{
		echo "
		<H3>Sélectionner le fichier d'importation</H3><br><img src='../images/importer.gif'><br>
		Rappel : le fichier doit être de type csv (texte non compilé ou compressé) avec pour séparateur de champ \";\" et aucun encadrement de texte.
		<form method='post' enctype='multipart/form-data' action='importation_oeuvre.php?action=importation'>
		<p>

		<input type='file' name='fichier' size='30'>
		<input type='submit' name='upload' value='Importer le fichier'>";
		break;
	}// Fin du case new

case "importation":
{

	//On upload le fichier
	if( isset($_POST['upload']) ) // si formulaire soumis
		{
			$content_dir = "./importation/"; // dossier où sera déplacé le fichier

			$tmp_file = $_FILES['fichier']['tmp_name'];

			if( !is_uploaded_file($tmp_file) )
			{
				exit("Le fichier est introuvable");
			}

			// on copie le fichier dans le dossier de destination
			$name_file = $_FILES['fichier']['name'];

			if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
			{
				exit("Impossible de copier le fichier dans $content_dir");
			}

			echo "Le fichier a bien été uploadé ($name_file dans $content_dir)<p>";
		}
		else
		{
		echo "erreur : $_FILES[toto][error]";
		}



	//On lit le fichier pour l'importer dans la base
	$fichier=$content_dir.$name_file;


	if (file_exists($fichier))
		$fp = fopen("$fichier", "r"); // le fichier existe, on l'ouvre
	else{ // le fichier n'existe pas
		echo "Fichier introuvable !<br>Importation stoppée.";
		exit();
	}
	require "codbfile";

	while (!feof($fp)) // On parcours le fichier
	{
		unset($liste);
		$ligne = fgets($fp,4096); // On se déplace d'une ligne
		$liste = explode(";",$ligne); // Champs séparés par ; => on en fait un tableau
		$nom_oeuvre = $liste[0];
		$compositeur = $liste[1];
		$classification_oeuvre = $liste[2];
		$date_composition_oeuvre = $liste[3];
		$nom_type_oeuvre = $liste[4];
		$nom_tonalite = $liste[5];
		$commentaire_oeuvre=$liste[6];
		$detail_niveau_1 = $liste[7];
		$detail_niveau_2 = $liste[8];
		$detail_niveau_3 = $liste[9];
	
		//On commence le traitement de la ligne

		//On regarde si la ligne n'est pas vierge : Fin du fichier ou fichier vide
		if ($nom_oeuvre<>"" and $compositeur<>"" and $classification_oeuvre<>"" and $nom_type_oeuvre<>"" and $nom_tonalite<>"")
		{ echo "La 1ère ligne n'est pas vierge<br>";

			//On regarde si les champs indispensables sont remplis
			if ($nom_oeuvre=="" or $compositeur=="" or $classification_oeuvre=="" or $nom_type_oeuvre=="" or $nom_tonalite=="")
			{
				//La ligne n'est pas complète et on ne peut pas importeur l'oeuvre
				echo "Impossible d'importer l'oeuvre $nom_oeuvre : des informations indispensables sont manquantes.";
				exit;
			}

			//On regarde si on est sur la première ligne (c'est la ligne avec les entêtes de colonnes
			//qu'il ne faut pas importer.

			if ($nom_oeuvre<>"nom_oeuvre")
			{
				//On regarde si l'oeuvre de la ligne en cours est la même oeuvre que celle de la ligne précédente
				if ($classification_oeuvre<>@$classification_oeuvre_precedente)
				{	
					$classification_oeuvre_precedente=$classification_oeuvre;
					//On charge les informations nécessaire pour créer l'oeuvre

					//On récupère l'id compositeur
					$sql="select id_compositeur from compositeur
					where concat(nom_compositeur, ' ', prenom_compositeur)='$compositeur'";
					$result=mysql_query($sql)
								or die ("Impossible de charger l'id_compositeur de l'oeuvre \"$nom_oeuvre\". Importation
								interrompue.");
					$nb_ligne= mysql_num_rows($result);
					if ($nb_ligne>0)
					{
						$ligne=mysql_fetch_array($result);
						extract($ligne);
					}
					else
					{
						echo "Aucun compositeur ne correspond à votre demande ($compositeur). Merci de créer le compositeur : \"$compositeur\" (pour l'oeuvre : $nom_oeuvre) avant de tenter de créer l'oeuvre. L'importation a été interrompue.";
						exit;
					}
					//On récupère l'id_tonalite
					$sql="select id_tonalite from tonalite
					where nom_tonalite='$nom_tonalite'";
					$result=mysql_query($sql)
								or die ("Impossible de charger l'id_tonalite de l'oeuvre \"$nom_oeuvre\". Importation
								interrompue.");
					$nb_ligne= mysql_num_rows($result);
					if ($nb_ligne>0)
					{
						$ligne=mysql_fetch_array($result);
						extract($ligne);
					}
					else
					{
						echo "Aucun type d'oeuvre ne correspond à votre demande. Merci de créer le type d'oeuvre avant de tenter de créer l'oeuvre. L'importation a été interrompue.";
						exit;
					}

					//On récupère l'id_type_oeuvre
					$sql="select id_type_oeuvre from type_oeuvre
					where nom_type_oeuvre='$nom_type_oeuvre'";
					$result=mysql_query($sql)
								or die ("Impossible de charger l'id_type_oeuvre de l'oeuvre \"$nom_oeuvre\". Importation
								interrompue.");
					$nb_ligne= mysql_num_rows($result);
					if ($nb_ligne>0)
					{
						$ligne=mysql_fetch_array($result);
						extract($ligne);
					}
					else
					{
						echo "Aucun type d'oeuvre ne correspond à votre demande. Merci de créer le type d'oeuvre avant de tenter de créer l'oeuvre. L'importation a été interrompue.";
						exit;
					}

					//On crée l'oeuvre dans la base de donnée
					$sql="insert into oeuvre (nom_oeuvre, id_compositeur, classification_oeuvre, date_composition_oeuvre, id_type_oeuvre, id_tonalite, commentaire_oeuvre)
						values (\"$nom_oeuvre\", '$id_compositeur', \"$classification_oeuvre\", '$date_composition_oeuvre', '$id_type_oeuvre', '$id_tonalite', \"$commentaire_oeuvre\")";

					$result=mysql_query($sql)
						or die ("Impossible d'ajouter dans la base l'oeuvre \"$nom_oeuvre\". Importation interrompue.");
					echo "<p>Oeuvre : $nom_oeuvre ($classification_oeuvre) créé.";


					//On récupère l'id_oeuvre
					$sql="select id_oeuvre from oeuvre
						where nom_oeuvre=\"$nom_oeuvre\"
						and classification_oeuvre=\"$classification_oeuvre\"
						and id_compositeur=\"$id_compositeur\"";
					$result=mysql_query($sql)
							or die ("Impossible de récupérer l'id_oeuvre de l'oeuvre \"$nom_oeuvre\". Importation interrompue.");
					$ligne=mysql_fetch_array($result);
					extract($ligne);

				} //Fin de la création de la nouvelle oeuvre


				//On teste la présence de détail sur la ligne
				$longueur=strlen($detail_niveau_1);
				if ($longueur>0 and $detail_niveau_1<>@$detail_niveau_1_precedent)
				{
					$detail_niveau_1_precedent=$detail_niveau_1;
					//On va ajouter le détail
					$sql="insert into detail_oeuvre (id_oeuvre, niveau_detail_oeuvre, nom_detail)
					values ('$id_oeuvre','1',\"$detail_niveau_1\")";
					$result=mysql_query($sql)
						or die ("Impossible d'ajouter le détail \"$detail_niveau_1\" de l'oeuvre \"$nom_oeuvre\". Importation interrompue.");

				}
				$longueur=strlen($detail_niveau_2);
				if ($longueur>0 and $detail_niveau_2<>@$detail_niveau_2_precedent)
				{
					$detail_niveau_2_precedent=$detail_niveau_2;
					//On récupère l'id_detail_oeuvre du detail de niveau 1
					$sql="select id_detail_oeuvre from detail_oeuvre
					where id_oeuvre=$id_oeuvre
					and niveau_detail_oeuvre=1
					and nom_detail=\"$detail_niveau_1\"";
					$result=mysql_query($sql)
							or die ("Impossible de récupérer l'id_detail_oeuvre du détail (niveau 1) \"$detail_niveau_1\" de l'oeuvre
							\"$nom_oeuvre\". Importation interrompue.");
					$ligne=mysql_fetch_array($result);
					extract($ligne);
					$id_detail_oeuvre_niv1=$id_detail_oeuvre;

					//On ajoute le détail
					$sql="insert into detail_oeuvre (id_oeuvre, niveau_detail_oeuvre, id_detail_oeuvre_sup, nom_detail)
					values ('$id_oeuvre','2','$id_detail_oeuvre',\"$detail_niveau_2\")";
					$result=mysql_query($sql)
							or die ("Impossible d'ajouter le détail \"$detail_niveau_2\" de l'oeuvre \"$nom_oeuvre\". Importation interrompue.");
				}
				$longueur=strlen($liste[9]);
				if ($longueur>2 and $detail_niveau_3<>" ")
				{
					//On récupère l'id_detail_oeuvre du detail de niveau 2
					$sql="select id_detail_oeuvre from detail_oeuvre
					where id_oeuvre=$id_oeuvre
					and niveau_detail_oeuvre=2
					and nom_detail=\"$detail_niveau_2\"
					and id_detail_oeuvre_sup=$id_detail_oeuvre_niv1";
					$result=mysql_query($sql)
							or die ("Impossible de récupérer l'id_detail_oeuvre  du détail (niveau 2) \"$detail_niveau_2\" de l'oeuvre
							\"$nom_oeuvre\". Importation interrompue.");
					$ligne=mysql_fetch_array($result);
					extract($ligne);

					//On ajoute le détail
					$sql="insert into detail_oeuvre (id_oeuvre, niveau_detail_oeuvre, id_detail_oeuvre_sup, nom_detail)
					values ('$id_oeuvre','3','$id_detail_oeuvre',\"$detail_niveau_3\")";
					$result=mysql_query($sql)
							or die ("Impossible d'ajouter le détail \"$detail_niveau_3\" de l'oeuvre \"$nom_oeuvre\". Importation interrompue.");
				}
			}


		}
		else //la ligne n'est pas complète
		{
			//On regarde si c'est la fin du fichier
			if ($nom_oeuvre=="" and $compositeur=="" and $classification_oeuvre=="" and $nom_type_oeuvre=="" and $nom_tonalite=="")
			{
				//le fichier est vide ou terminé
				echo "Fin du fichier atteinte.";
			}
			else
			{
				//la ligne n'est pas complète, on affiche la liste des éléments incomplets
				echo "la ligne de l'oeuvre \"$nom_oeuvre\" n'est pas complète. Cette oeuvre n'est pas importée. Merci de compléter les éléments suivants:<br><b>\n";
				if ($nom_oeuvre=="") echo "nom_oeuvre<br>";
				if ($compositeur=="") echo "compositeur<br>";
				if ($classification_oeuvre=="") echo "classification_oeuvre<br>";
				if ($nom_type_oeuvre=="") echo "nom_type_oeuvre<br>";
				if ($nom_tonalite=="") echo "nom_tonalite<br>";
				echo "</b><p>";
				
					
			}
		}
	}
	fclose($fp); // Fermeture du fichier
	echo "<p>Importation terminée.<p>";

	//On supprime le fichier

		$erreur=unlink("$fichier"); //Supprime le fichier d'importation
		if ($erreur==1)
		{echo "Fichier d'importation supprimé avec succès";}
		else {echo "Erreur : $erreur";}

}//Fin du case importation
} //Fin du switch
?>
