<?php
require "control_auth";
/*			Nom du programme : admin_detail_oeuvre.php
			Description : Permet d'administrer la table du détail des oeuvres :
				- Affiche la liste des oeuvres si aucune n'a été choisie
				- Quand une oeuvre est choisie, on affiche le détail existant et des liens
				pour créer de nouveaux détails;
*/
?>
<html>
<head>
<title>Administration du détail des oeuvres</title>
</head>
<body>
<h1 align="center">Administration du détails des oeuvres</h1><hr>
<?php
/* On  fait le test pour savoir si une oeuvre a été sélectionnée. Si aucune oeuvre n'est sélectionnée,
on affiche la liste des oeuvres.
*/


$id_oeuvre_get=$_GET['id_oeuvre'];
$id_oeuvre_post=$_POST['id_oeuvre'];
if ($id_oeuvre_get=="" and $id_oeuvre_post=="") // Aucune oeuvre n'est sélectionnée
{  // On affiche un formulaire pour sélectionner les oeuvres

	// On se connecte à la base de données
	require "codbfile";

	//On exécute la requete
	$sql="select o.id_oeuvre, o.nom_oeuvre, c.nom_compositeur, c.prenom_compositeur
	from oeuvre o, compositeur c
	where o.id_compositeur=c.id_compositeur
	order by nom_oeuvre";

	$result=mysql_query($sql)
		or die ("Impossible de récupérer la liste des oeuvres");

	// On créer le formulaire
	echo "
	<div align='center'>Sélectionnez une oeuvre dans la liste puis cliquez sur \"Sélectionner\"</div>
	<form action='admin_detail_oeuvre.php?action=show' method='post'>
	<select name='id_oeuvre'>";
	while ($ligne = mysql_fetch_array($result))
	{ extract($ligne);
	echo "<option value='$id_oeuvre'><b>$nom_oeuvre</b> de $nom_compositeur, $prenom_compositeur</option>\n";
	}
	echo "</select><p>
	<input type='submit' value='Sélectionner'>
	</form>";
	exit();
}

else // Une oeuvre a déjà été sélectionnée

//On récupère l'id_oeuvre envoyé soit par POST ou GET
if ($id_oeuvre_get=="")
$id_oeuvre=$id_oeuvre_post;
else
$id_oeuvre=$id_oeuvre_get;



/* 		On fait le test pour savoir l'action choisie :
		- Montrer (show) : On affiche les détails de l'oeuvre
		- créer (new)
			* form : affiche le formulaire
			* sql : enregistre les données
		- supprimer (del)
			* sql : supprime le détail de l'oeuvre
		- modifier (edit)
			* form : Affiche le formulaire pour modifier les données
			* sql : Enregistre les modifications
*/

require ("fonctions");

$action=$_GET['action'];



Switch ($action)
{
	case ("show"):  //On veut afficher le détail  de l'oeuvre sélectionnée
	{
		// On récupère les données sur l'oeuvre

		$sql_oeuvre="select o.id_oeuvre, o.nom_oeuvre, c.nom_compositeur, c.prenom_compositeur
	from oeuvre o, compositeur c
	where o.id_compositeur = c.id_compositeur
	and o.id_oeuvre = '$id_oeuvre'
	order by nom_oeuvre";


		require "codbfile";
		$result=mysql_query($sql_oeuvre)
					or die ("Impossible de récupérer les information sur
					l'oeuvre et le compositeur");
		$ligne=mysql_fetch_array($result);
		extract($ligne);



	echo "<div align='center'><h3><u>$nom_oeuvre</u><br>de $prenom_compositeur $nom_compositeur</h3></div><hr>";

		// On affiche le lien pour créer un détail de premier niveau
		echo "
		<a href=admin_detail_oeuvre.php?action=new_form&id_oeuvre=$id_oeuvre&niveau_detail_oeuvre=1>Créer un détail de
		premier niveau</a><p>";

		// On affiche le détail de l'oeuvre

		//On test la présence de détail
		$sql="select id_detail_oeuvre from detail_oeuvre
		      where id_oeuvre=$id_oeuvre";

require "codbfile";

		$result=mysql_query($sql)
				or die ("Impossible de tester la présence de détails dans cette oeuvre");
		$nb_ligne=mysql_num_rows($result);
		if ($nb_ligne<1) // Il n'y a aucun résultat
		{break;} // On arrête le programme
		else

		//On cherche le plus bas niveau de détail
		$sql="select max(niveau_detail_oeuvre) as niveau_detail_oeuvre from detail_oeuvre
		where id_oeuvre=$id_oeuvre";

		$result=mysql_query($sql)
			or die ("Impossible de récupérer le plus bas niveau de détail de l'oeuvre");
		$ligne=mysql_fetch_array($result);
		extract($ligne);
		$max_niveau_detail=$niveau_detail_oeuvre;


		//On contruit le début du tableau pour afficher les détails
		echo "<table align='left'>";

		//On affiche les détails


require "codbfile";


for ($i=1;$i<=$max_niveau_detail;$i++)
{
	//On détruit les dimension du tableau $nom_detail_oeuvre_traite des sous-détails
	foreach ($nom_detail_oeuvre_traite as $clé => $valeur)
	{
		if ($clé>$i) {unset($nom_detail_oeuvre_traite[$clé]);}
	}
	If ($i==1)
	{	$sql="select * from detail_oeuvre where id_oeuvre='$id_oeuvre'
		and niveau_detail_oeuvre='$i'
		order by nom_detail";
	}
	else
	{	$j=$i-1;
		$sql="select * from detail_oeuvre where id_oeuvre='$id_oeuvre'
		and niveau_detail_oeuvre='$i' and id_detail_oeuvre_sup=$id_detail_oeuvre_traite[$j]
		order by nom_detail";
	}

	$result=mysql_query($sql)
		or die ("Impposible d'exécuter le chargement des données");


	while($ligne=mysql_fetch_array($result))
	{	extract($ligne);
		if ($nom_detail>$nom_detail_oeuvre_traite[$i])
		{	$niveau_detail_cree=$i+1; //Permet de déterminer le niveau de détail du "sous-détail"
			echo "<tr><td colspan='$i'></td><td>$nom_detail</td><td><a href=\"admin_detail_oeuvre.php?action=new_form&id_oeuvre=$id_oeuvre&niveau_detail_oeuvre=$niveau_detail_cree&
			id_detail_oeuvre_sup=$id_detail_oeuvre\">
			<img src='../images/plus.png' border='0'></a>&nbsp;&nbsp;&nbsp;
			<a href=\"admin_detail_oeuvre.php?action=edit_form&id_oeuvre=$id_oeuvre&id_detail_oeuvre=$id_detail_oeuvre&nom_detail=$nom_detail\"><img src='../images/button_edit.png' border='0'></a>&nbsp;&nbsp;&nbsp;
			<a href='admin_detail_oeuvre.php?action=del_sql&id_oeuvre=$id_oeuvre&id_detail_oeuvre=$id_detail_oeuvre'&nom_detail=$nom_detail'>
			<img src='../images/button_drop.png' border='0'></a></td></tr>\n";

			$nom_detail_oeuvre_traite[$i]=$nom_detail;
			$id_detail_oeuvre_traite[$i]=$id_detail_oeuvre;

			//On regarde s'il y a un détail de niveau inférieur
			$sql="select id_detail_oeuvre from detail_oeuvre
					where id_oeuvre=$id_oeuvre
					and id_detail_oeuvre_sup=$id_detail_oeuvre";
			$result_test=mysql_query($sql)
						or die ("Impossible de tester s'il y a un niveau inférieur.");
			$nb_ligne=mysql_num_rows($result_test);

			if ($nb_ligne<>0)
			{	//Il y a un détail de niveau inférieur lié à ce détail
				$niveau_inf="oui";
				break;
			}
			else
			{ $niveau_inf="non";
			}
		}

	} //Fin du while

	if ($niveau_inf=="non")
	{
		$i=$i-2; //Pour traiter le niveau inférieur après le +1 de la boucle "For"
		//echo "$i<br>";
		if ($i<0)
		{	break;
		}

	}
} // Fin du for

echo "</table>";


     break;
     } //Fin du case show

        case ("new_form"):
        {
        $id_oeuvre = $_GET['id_oeuvre'];
        $niveau_detail_oeuvre=$_GET['niveau_detail_oeuvre'];
        $id_detail_oeuvre_sup=$_GET['id_detail_oeuvre_sup'];
        echo "
        <table align='center'>
        <tr><td colspan='2'>
        <form action='admin_detail_oeuvre.php?action=new_sql' method='post' name='form'>\n
        <input type='hidden' name='id_oeuvre' value='$id_oeuvre'>\n
        <input type='hidden' name='niveau_detail_oeuvre' value='$niveau_detail_oeuvre'>\n
        <input type='hidden' name='id_detail_oeuvre_sup' value='$id_detail_oeuvre_sup'>\n

        </td></tr>
        <tr><td>Nom du détail</td><td>
        <input type='text' name='nom_detail' size='20' maxlength='100'>\n
		<SCRIPT>document.form.nom_detail.focus();</script>
        </td><td colspan='2'>
        <input type='submit' value='Enregistrer'>\n
        </td></tr>
         </form>
         </table>\n";
         break;
        } // Fin du case new_form
        
        case ("new_sql"): // On insert la nouvelle ligne dans la table
        {
        $id_oeuvre = $_POST['id_oeuvre'];
        $niveau_detail_oeuvre=$_POST['niveau_detail_oeuvre'];
        $id_detail_oeuvre_sup=$_POST['id_detail_oeuvre_sup'];
        $nom_detail=$_POST['nom_detail'];
        
        //Création de la requête
        $sql = "insert into detail_oeuvre (id_oeuvre, niveau_detail_oeuvre, id_detail_oeuvre_sup, nom_detail)
                       values ('$id_oeuvre', '$niveau_detail_oeuvre', '$id_detail_oeuvre_sup', '$nom_detail')";
                       

        //Exécution de la requête
        require "codbfile";
        
        $result=mysql_query($sql)
                or die ("Impossible d'insérer le nouveau détail.");

        //Redirection vers la visualisation des détails
        redirection ("admin_detail_oeuvre.php?action=show&id_oeuvre=$id_oeuvre");
		break;
        } // Fin du case new_sql

		case ("edit_form"):
		{
		$id_detail_oeuvre=$_GET['id_detail_oeuvre'];
		$nom_detail=$_GET['nom_detail'];


		echo "
		<div align='center'><h3>Saisissez le nouveau nom de détail dans le formulaire ci_dessous.<p></h3></div>
		<table align='center'>\n
		<form action='admin_detail_oeuvre.php?id_oeuvre=$id_oeuvre&action=edit_sql&id_detail_oeuvre=$id_detail_oeuvre' method='post'>\n
		<tr><td>Nom du détail :</td><td><input type='text' name=\"nom_detail\" value='$nom_detail'></td></tr>\n
		<tr><td colspan='2' align='center'><input type='submit' value='Sauvegarder'></td></tr>
		</form></table>\n";
		break;
		} //Fin du case edit_form

		case ("edit_sql");
		{
		$id_detail_oeuvre=$_GET['id_detail_oeuvre'];
		$nom_detail=$_POST['nom_detail'];

		$sql="update detail_oeuvre set nom_detail=\"$nom_detail\"
				where id_detail_oeuvre=$id_detail_oeuvre";


		require "codbfile";
		$resul=mysql_query($sql)
				or die ("Impossible de mettre à jour le détail de l'oeuvre.");

		//Redirection vers la visualisation des détails
        redirection ("admin_detail_oeuvre.php?action=show&id_oeuvre=$id_oeuvre");

		break;
		} //Fin du case edit_sql



		case (del_sql): // Permet de supprimer un détail et tous ses sous-détails
		{
		$id_detail_oeuvre=$_GET['id_detail_oeuvre'];
		$confirmation=@$_GET['confirmation']; //Permet de savoir si on a confirmer la demande de suppression
		$nom_detail=@$_GET['nom_detail'];

		//On regarde si la demande de suppression a été confirmée
		if (@$confirmation<>"oui")
		{
		echo "
		<div align='center'><h3>Voulez-vous vraiment supprimer le détail : <b>$nom_detail</b> </h3>
		<a href='admin_detail_oeuvre.php?action=del_sql&id_oeuvre=$id_oeuvre&id_detail_oeuvre=$id_detail_oeuvre
		&confirmation=oui'>Oui</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href='admin_detail_oeuvre.php?action=show&id_oeuvre=$id_oeuvre'>Non</a></div><p>\n";

		}
		else
		{ // On a choisit de supprimer le détail et ses sous-détails

		require "codbfile";

		$liste_id_detail_a_suppr=$id_detail_oeuvre;



		while ($liste_id_detail_a_suppr<>"")
		{
			// On supprime les détails en cascade
			$sql_suppr = "delete from detail_oeuvre
					where id_detail_oeuvre in ($liste_id_detail_a_suppr)";

			$result_suppr=mysql_query($sql_suppr)
							or die ("Impossible de supprimer les lignes de détail.");

			//On cherche les sous-détails à supprimer
			$sql_search = "select id_detail_oeuvre from detail_oeuvre
					where id_detail_oeuvre_sup in ($liste_id_detail_a_suppr)";
			$result_search = mysql_query ($sql_search)
								or die ("Impossible de trouver les sous-détails.");
			$nb_ligne=mysql_num_rows ($result_search);
			$liste_id_detail_a_suppr=""; //On réinitialise la liste
			for ($i=1;$i<=$nb_ligne;$i++)
			{
				$ligne=mysql_fetch_array($result_search);
				extract ($ligne);
				$liste_id_detail_a_suppr=$liste_id_detail_a_suppr.$id_detail_oeuvre;
				if ($i<>$nb_ligne)
				{ $liste_id_detail_a_suppr=$liste_id_detail_a_suppr.",";}
			}
		}

		// On supprime les ligne de la table corresp_cd_oeuvre_detail
		purge_corresp_cd_oeuvre_detail();
		redirection("admin_detail_oeuvre.php?action=show&id_oeuvre=$id_oeuvre");
		}


		}//Fin du case del_sql















} //Fin du switch

?>

</body>
</html>
