From 3b039f83638a6c97a689ddc1cb97fbc5ef204589 Mon Sep 17 00:00:00 2001 From: SofianeLasri <alasri250@gmail.com> Date: Tue, 29 Nov 2022 20:40:00 +0100 Subject: [PATCH] =?UTF-8?q?TP8=20Ex1=20&=202=20termin=C3=A9s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ controller/ControleurAuteur.php | 5 ++- controller/ControleurLivre.php | 2 ++ index.php | 2 ++ models/Auteur.php | 21 +++++++++++- models/Livre.php | 61 +++++++++++++++++++++++++++++++++ models/Objet.php | 6 ++-- resources/views/data-grid.php | 8 +++++ 8 files changed, 102 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cdc4a95..41d92b2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # 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. + ## 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 2cabde1..db27686 100644 --- a/controller/ControleurAuteur.php +++ b/controller/ControleurAuteur.php @@ -22,6 +22,8 @@ class ControleurAuteur extends ControleurObjet $object['title'] = $auteur->prenom . " " . $auteur->nom; $object['desc'] = "ID: $auteur->numAuteur<br>Date de naissance: $auteur->anneeNaissance"; $object['url'] = "index.php?action=lireAuteur&numAuteur=$auteur->numAuteur"; + $object['specialLink']['text'] = '<span><i class="fa fa-flag"></i> Définir ses nationalités</span>'; + $object['specialLink']['url'] = "index.php?action=definirNationalites&numAuteur=$auteur->numAuteur"; $objects[] = $object; } return view('data-grid', [ @@ -49,6 +51,7 @@ class ControleurAuteur extends ControleurObjet public static function definirNationalites(): string { - return ""; + $auteurs = Auteur::getAuteursByNumLivre(15); + return print_r($auteurs); } } diff --git a/controller/ControleurLivre.php b/controller/ControleurLivre.php index 48e0225..8d47615 100644 --- a/controller/ControleurLivre.php +++ b/controller/ControleurLivre.php @@ -23,6 +23,8 @@ class ControleurLivre extends ControleurObjet $object['title'] = $livre->titre; $object['desc'] = "ID: $livre->numLivre<br>Année de parution: $livre->anneeParution"; $object['url'] = "index.php?action=lireLivre&numLivre=$livre->numLivre"; + $object['specialLink']['text'] = '<span><i class="fa fa-users"></i> Définir les auteurs</span>'; + $object['specialLink']['url'] = "index.php?action=definirAuteurs&numLivre=$livre->numLivre"; $objects[] = $object; } return view('data-grid', [ diff --git a/index.php b/index.php index 3bdc285..03d008d 100644 --- a/index.php +++ b/index.php @@ -31,6 +31,8 @@ if (empty($_REQUEST["action"])) { "describeTable" => ControleurObjet::describeTable(), "modifierObjet" => ControleurObjet::modifyObject(), "supprimerObjet" => ControleurObjet::supprimerObjet(), + "definirAuteurs" => ControleurLivre::definirAuteurs(), + "definirNationalites" => ControleurAuteur::definirNationalites(), default => ControleurAuteur::lireAuteur(), }; } catch (Exception $e) { diff --git a/models/Auteur.php b/models/Auteur.php index da14485..e005950 100644 --- a/models/Auteur.php +++ b/models/Auteur.php @@ -33,7 +33,7 @@ class Auteur extends Objet return $tableau; } - public static function getAuteurByNum($numAuteur) + public static function getAuteurByNum($numAuteur): Auteur { // écriture de la requête $requetePreparee = "SELECT * FROM Auteur WHERE numAuteur = :num_tag;"; @@ -56,6 +56,25 @@ class Auteur extends Objet return $response; } + /** + * Récupère les auteurs d'un livre. + * @param int $i + * @return array + * @throws ErrorException + */ + public static function getAuteursByNumLivre(int $i): array + { + // On prépare la requête + $queryString = ("SELECT * FROM Auteur NATURAL JOIN estAuteurDe WHERE numLivre = ?"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([$i]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur'); + } + // méthode static qui retourne un auteur identifié par son numAuteur public function afficher() diff --git a/models/Livre.php b/models/Livre.php index bde6024..4691948 100644 --- a/models/Livre.php +++ b/models/Livre.php @@ -64,6 +64,67 @@ class Livre extends Objet return $response; } + /** + * Récupère les auteurs n'ayant pas écrit ce livre. + * @param int $i + * @return array + * @throws ErrorException + */ + public static function getNonAuteursByNumLivre(int $i): array + { + // On prépare la requête + $queryString = ("SELECT * FROM Auteur WHERE numAuteur NOT IN (SELECT numAuteur FROM Auteur NATURAL JOIN estAuteurDe WHERE numLivre = ?)"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([$i]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur'); + } + + /** + * Supprime un auteur d'un livre + * @param int $numLivre + * @param int $numAuteur + * @return void + */ + public static function deleteAuteurForLivre(int $numLivre, int $numAuteur): void + { + // On prépare la requête + $queryString = ("DELETE FROM estAuteurDe WHERE numAuteur = :numAuteur AND numLivre = :numLivre"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([ + "numAuteur" => $numAuteur, + "numLivre" => $numLivre + ]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + } + + /** + * Ajout un auteur à un livre + * @param int $numLivre + * @param int $numAuteur + * @return void + */ + public static function addAuteurForLivre(int $numLivre, int $numAuteur): void + { + // On prépare la requête + $queryString = ("INSERT INTO estAuteurDe (numAuteur, numLivre) VALUES (:numAuteur, :numLivre)"); + $query = Database::pdo()->prepare($queryString); + try{ + $query->execute([ + "numAuteur" => $numAuteur, + "numLivre" => $numLivre + ]); + } catch (PDOException $e) { + throw new ErrorException($e->getMessage()); + } + } + /** * @return string */ diff --git a/models/Objet.php b/models/Objet.php index 614f259..149b867 100644 --- a/models/Objet.php +++ b/models/Objet.php @@ -156,15 +156,15 @@ class Objet // On prépare la requête $queryString = ("SELECT * FROM $tableName WHERE " . $id["name"] . "=?"); - $insertQuery = Database::pdo()->prepare($queryString); + $query = Database::pdo()->prepare($queryString); try { // Et on l'exécute - $insertQuery->execute([$id["value"]]); + $query->execute([$id["value"]]); } catch (PDOException $e) { throw new ErrorException($e->getMessage()); } - return $insertQuery->fetch(PDO::FETCH_ASSOC); + return $query->fetch(PDO::FETCH_ASSOC); } /** diff --git a/resources/views/data-grid.php b/resources/views/data-grid.php index a0a6b07..ee9de8b 100644 --- a/resources/views/data-grid.php +++ b/resources/views/data-grid.php @@ -30,6 +30,14 @@ <span><i class="fa fa-pencil"></i> Modifier</span> </a> </li> + @if(!empty($object['specialLink'])) + <li> + <a class="btn btn-sm btn-outline-primary d-flex align-items-center ms-2" + href="{{ $object['specialLink']['url'] }}"> + {{ $object['specialLink']['text'] }} + </a> + </li> + @endif <li> <a class="btn btn-sm btn-outline-danger d-flex align-items-center ms-2" href="index.php?action=supprimerObjet&tableName={{ $object['type'] }}&idName={{ $object['idName'] }}&idValue={{ $object['idValue'] }}"> -- GitLab