diff --git a/README.md b/README.md index 41d92b2e3de6daed1b02f43a7e6e6ecf35ef04c1..9a7dd8526e7c29d402b24f88857c37cb6a7c6423 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Documentation **Note :** Non mise à jour depuis le TP7 (ou TP6). La gestion des erreurs et des retours de résultat a changé depuis. Les définitions des fonctions restent cependant pour la plupart encore valables. +Il est recommandé de visualiser le site sur cette adresse pour éviter tout problème avec la base de donnée: https://iut-dev.sl-projects.com/ + ## Objet Les fonctions publiques statiques retournent des arrays se basant sur ce format : ````php diff --git a/controller/ControleurAuteur.php b/controller/ControleurAuteur.php index db27686e1ff907a87b764d1ec5b99f910fac04fa..2dec0caf6fa90c4a64fd613579f4f05a015e67aa 100644 --- a/controller/ControleurAuteur.php +++ b/controller/ControleurAuteur.php @@ -1,6 +1,7 @@ <?php require_once "ControleurObjet.php"; require_once("models/Auteur.php"); +require_once("models/Nationalite.php"); class ControleurAuteur extends ControleurObjet { @@ -51,7 +52,89 @@ class ControleurAuteur extends ControleurObjet public static function definirNationalites(): string { - $auteurs = Auteur::getAuteursByNumLivre(15); - return print_r($auteurs); + if (!empty($_GET["numAuteur"])){ + $nationalities = Nationalite::getAllNationalite(); + $autorNationalities = Nationalite::getNationalitesByNumAuteur($_GET["numAuteur"]); + $autor = Auteur::getAuteurByNum($_GET["numAuteur"]); + + $nationalityList = []; + foreach ($nationalities as $nationality){ + $isHisNationality = false; + foreach ($autorNationalities as $autorNationality){ + if($nationality->numNationalite == $autorNationality->numNationalite){ + $isHisNationality = true; + break; + } + } + $nationalityList[] = [ + "numNationalite" => $nationality->numNationalite, + "pays" => $nationality->pays, + "abrege" => $nationality->abrege, + "isHisNationality" => $isHisNationality + ]; + } + + return view('auteur.definir-nationalite', [ + "nationalityList" => $nationalityList, + "autor" => $autor + ]); + }else{ + return view('return-message', [ + 'pageTitle' => "Définir les nationalités d'un auteur", + 'returnMessage' => [ + "status" => "danger", + "title" => "Erreur", + "message" => "Il manque des paramètres dans l'url" + ] + ]); + } + } + + public static function supprimerNationaliteAuteur(): string + { + if (!empty($_GET["numNationalite"]) && !empty($_GET["numAuteur"])){ + Auteur::deleteNationaliteForAuteur($_GET["numAuteur"], $_GET["numNationalite"]); + return view('return-message', [ + 'pageTitle' => "Supprimer la nationalité d'un auteur", + 'returnMessage' => [ + "status" => "success", + "title" => "Supprimer la nationalité d'un auteur", + "message" => "Suppression de la nationalité réussie." + ] + ]); + } + + return view('return-message', [ + 'pageTitle' => "Supprimer la nationalité d'un auteur", + 'returnMessage' => [ + "status" => "danger", + "title" => "Erreur", + "message" => "Il manque des paramètres dans l'url" + ] + ]); + } + + public static function ajouterNationaliteAuteur(): string + { + if (!empty($_GET["numNationalite"]) && !empty($_GET["numAuteur"])){ + Auteur::addNationaliteForAuteur($_GET["numAuteur"], $_GET["numNationalite"]); + return view('return-message', [ + 'pageTitle' => "Supprimer la nationalité d'un auteur", + 'returnMessage' => [ + "status" => "success", + "title" => "Supprimer la nationalité d'un auteur", + "message" => "Suppression de la nationalité réussie." + ] + ]); + } + + return view('return-message', [ + 'pageTitle' => "Supprimer la nationalité d'un auteur", + 'returnMessage' => [ + "status" => "danger", + "title" => "Erreur", + "message" => "Il manque des paramètres dans l'url" + ] + ]); } } diff --git a/controller/ControleurLivre.php b/controller/ControleurLivre.php index 1cbfc5a223771af9c86c397a330f79ea465991b3..bbf8346317692a429c91bdb982469e7057718b87 100644 --- a/controller/ControleurLivre.php +++ b/controller/ControleurLivre.php @@ -62,8 +62,8 @@ class ControleurLivre extends ControleurObjet $autorsList = []; foreach ($autors as $auteur){ $isBookAutor = false; - foreach ($bookAutors as $livreAuteur){ - if($auteur->numAuteur == $livreAuteur->numAuteur){ + foreach ($bookAutors as $bookAutor){ + if($auteur->numAuteur == $bookAutor->numAuteur){ $isBookAutor = true; break; } diff --git a/index.php b/index.php index 482514483442f6f6260c1f7624564015df14d6c7..c1e688fee86bfaeaed1514d261e8a68ca8bddc52 100644 --- a/index.php +++ b/index.php @@ -35,6 +35,8 @@ if (empty($_REQUEST["action"])) { "definirNationalites" => ControleurAuteur::definirNationalites(), "supprimerAuteurDuLivre" => ControleurLivre::supprimerAuteurDuLivre(), "ajouterAuteurDuLivre" => ControleurLivre::ajouterAuteurDuLivre(), + "supprimerNationaliteAuteur" => ControleurAuteur::supprimerNationaliteAuteur(), + "ajouterNationaliteAuteur" => ControleurAuteur::ajouterNationaliteAuteur(), default => ControleurAuteur::lireAuteur(), }; } catch (Exception $e) { diff --git a/models/Auteur.php b/models/Auteur.php index e00595053748615a712207a36bf8bcd64339a43d..5fb9abace8a9527325d3eb80df246cdc57644304 100644 --- a/models/Auteur.php +++ b/models/Auteur.php @@ -57,7 +57,7 @@ class Auteur extends Objet } /** - * Récupère les auteurs d'un livre. + * Récupère les auteurs d'un livre * @param int $i * @return array * @throws ErrorException @@ -75,6 +75,48 @@ class Auteur extends Objet return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur'); } + /** + * Supprime une nationalité à un auteur + * @param int $numAuteur + * @param int $numNationalite + * @return void + */ + public static function deleteNationaliteForAuteur(int $numAuteur, int $numNationalite): void + { + // On prépare la requête + $queryString = ("DELETE FROM estDeNationalite WHERE numAuteur = :numAuteur AND numNationalite = :numNationalite"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([ + "numNationalite" => $numNationalite, + "numAuteur" => $numAuteur + ]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + } + + /** + * Ajoute une nationalité à un auteur + * @param int $numAuteur + * @param int $numNationalite + * @return void + */ + public static function addNationaliteForAuteur(int $numAuteur, int $numNationalite): void + { + // On prépare la requête + $queryString = ("INSERT INTO estDeNationalite (numAuteur, numNationalite) VALUES (:numAuteur, :numNationalite)"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([ + "numAuteur" => $numAuteur, + "numNationalite" => $numNationalite + ]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + } + // méthode static qui retourne un auteur identifié par son numAuteur public function afficher() diff --git a/models/Nationalite.php b/models/Nationalite.php index aee6ad6413dab3ca78624c8d508dab4189f71951..8b1eea383848dc9611462ef4e812836d055d8ac7 100644 --- a/models/Nationalite.php +++ b/models/Nationalite.php @@ -1,36 +1,58 @@ <?php +require_once "Objet.php"; -class Nationalite +class Nationalite extends Objet { - private int $numNationalite; - private string $pays; - private string $abrege; + protected ?int $numNationalite; + protected ?string $pays; + protected ?string $abrege; /** * @param int $numNationalite * @param string $pays * @param string $abrege */ - public function __construct(int $numNationalite, string $pays, string $abrege) + public function __construct(int $numNationalite=NULL, string $pays=NULL, string $abrege=NULL) { - $this->numNationalite = $numNationalite; - $this->pays = $pays; - $this->abrege = $abrege; + if(!is_null($numNationalite)){ + $this->numNationalite = $numNationalite; + $this->pays = $pays; + $this->abrege = $abrege; + } } /** - * @return int + * Récupète toutes les nationalités + * @return array */ - public function getNumNationalite(): int + public static function getAllNationalite(): array { - return $this->numNationalite; + // écriture de la requête + $requete = "SELECT * FROM Nationalite;"; + // envoi de la requête et stockage de la réponse + $resultat = Database::pdo()->query($requete); + // traitement de la réponse + $resultat->setFetchmode(PDO::FETCH_CLASS, 'Nationalite'); + $tableau = $resultat->fetchAll(); + return $tableau; } /** - * @param int $numNationalite + * Récupère les nationalités d'un auteur + * @param int $i + * @return array + * @throws ErrorException */ - public function setNumNationalite(int $numNationalite): void + public static function getNationalitesByNumAuteur(int $i): array { - $this->numNationalite = $numNationalite; + // On prépare la requête + $queryString = ("SELECT * FROM Nationalite NATURAL JOIN estDeNationalite WHERE numAuteur = ?"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([$i]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + return $query->fetchAll(PDO::FETCH_CLASS, 'Nationalite'); } } \ No newline at end of file diff --git a/models/Objet.php b/models/Objet.php index 149b8670a86ebf94bae0330f77a284977f90b3a2..b1f21ecc85beea12682d4960de331f7043900efe 100644 --- a/models/Objet.php +++ b/models/Objet.php @@ -1,5 +1,4 @@ <?php -require_once "Objet.php"; /** * Implémente les magic methods. diff --git a/resources/views/auteur/definir-nationalite.php b/resources/views/auteur/definir-nationalite.php new file mode 100644 index 0000000000000000000000000000000000000000..7c5c1649fd925b972abd47a80fb818ffa5d9ed8a --- /dev/null +++ b/resources/views/auteur/definir-nationalite.php @@ -0,0 +1,37 @@ +@extends('layouts.page-layout') + +@section('title', 'Définir les nationalités d'un auteur') + +@section('content') +<div class="container mt-3"> + <h1>Définir les nationalités d'un auteur</h1> + <p>Voici la liste des nationalités. Vous pouvez choisir de les associer ou de les dissocier de l'auteur.</p> + + <table class="table"> + <thead> + <tr class="table-dark"> + <th scope="col">n°</th> + <th scope="col">Pays</th> + <th scope="col">Abrégé</th> + <th scope="col">Action</th> + </tr> + </thead> + <tbody> + @foreach($nationalityList as $nationality) + <tr> + <th scope="row">{{ $nationality['numNationalite'] }}</th> + <td>{{ $nationality['pays'] }}</td> + <td>{{ $nationality['abrege'] }}</td> + @if($nationality['isHisNationality']) + <td><a href="index.php?action=supprimerNationaliteAuteur&numNationalite={{ $nationality['numNationalite'] }}&numAuteur={{ $autor->numAuteur }}" + class="btn btn-sm btn-danger">Dissocier</a> </td> + @else + <td><a href="index.php?action=ajouterNationaliteAuteur&numNationalite={{ $nationality['numNationalite'] }}&numAuteur={{ $autor->numAuteur }}" + class="btn btn-sm btn-success">Associer</a> </td> + @endif + </tr> + @endforeach + </tbody> + </table> +</div> +@endsection \ No newline at end of file diff --git a/resources/views/livre/definir-auteur.php b/resources/views/livre/definir-auteur.php index 91e9af5488dee1502bc37ee663f5582dd899f879..987aa0dbf51b73e65aafd06dad9608567bc57736 100644 --- a/resources/views/livre/definir-auteur.php +++ b/resources/views/livre/definir-auteur.php @@ -5,7 +5,7 @@ @section('content') <div class="container mt-3"> <h1>Définir les auteurs d'un livre</h1> - <p>Voici la liste des auteurs. Vous pouvez choisir de les associers ou de les dissociers du livre.</p> + <p>Voici la liste des auteurs. Vous pouvez choisir de les associer ou de les dissocier du livre.</p> <table class="table"> <thead>