From 7bbb0e5cc2364ca68061233f984ff2f99094d960 Mon Sep 17 00:00:00 2001 From: SofianeLasri <alasri250@gmail.com> Date: Tue, 29 Nov 2022 22:21:32 +0100 Subject: [PATCH] =?UTF-8?q?TP8=20Ex4=20termin=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + controller/ControleurAuteur.php | 87 ++++++++++++++++++- controller/ControleurLivre.php | 4 +- index.php | 2 + models/Auteur.php | 44 +++++++++- models/Nationalite.php | 50 ++++++++--- models/Objet.php | 1 - .../views/auteur/definir-nationalite.php | 37 ++++++++ resources/views/livre/definir-auteur.php | 2 +- 9 files changed, 208 insertions(+), 21 deletions(-) create mode 100644 resources/views/auteur/definir-nationalite.php diff --git a/README.md b/README.md index 41d92b2..9a7dd85 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 db27686..2dec0ca 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 1cbfc5a..bbf8346 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 4825144..c1e688f 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 e005950..5fb9aba 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 aee6ad6..8b1eea3 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 149b867..b1f21ec 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 0000000..7c5c164 --- /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 91e9af5..987aa0d 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> -- GitLab