diff --git a/README.md b/README.md index cdc4a95c78df85c3d9b151a2c8840c79eb47e356..41d92b2e3de6daed1b02f43a7e6e6ecf35ef04c1 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 2cabde191b5051afc9b96128d6122e269d06f623..db27686e1ff907a87b764d1ec5b99f910fac04fa 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 48e02257add1e6c2507cdd1eff6a0a473a257b22..8d47615b2cd0028d2ce3b7ce2ccc8359de001277 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 3bdc28580dbb75ccd88d6c62e6667431bbea083e..03d008de26b38a49323e47e84becf99fb1adde24 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 da14485a82ed2d45d2461cb9b2c81c4c9d66bede..e00595053748615a712207a36bf8bcd64339a43d 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 bde6024f752931bccd03f7fef748ea6955b78cea..4691948c7e62169cf8a68fe4ce59577eaa720cf8 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 614f2597d554a83a2450b7cb20723536754db4ed..149b8670a86ebf94bae0330f77a284977f90b3a2 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 a0a6b0786b22e13536590c086cbb2f55579f46ab..ee9de8b7031ac10ce57b80996595f34b9d09b368 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'] }}">