Skip to content
Snippets Groups Projects
Commit 7bbb0e5c authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

TP8 Ex4 terminé.

parent 8933d420
No related branches found
No related tags found
No related merge requests found
# Documentation # 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. **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 ## Objet
Les fonctions publiques statiques retournent des arrays se basant sur ce format : Les fonctions publiques statiques retournent des arrays se basant sur ce format :
````php ````php
......
<?php <?php
require_once "ControleurObjet.php"; require_once "ControleurObjet.php";
require_once("models/Auteur.php"); require_once("models/Auteur.php");
require_once("models/Nationalite.php");
class ControleurAuteur extends ControleurObjet class ControleurAuteur extends ControleurObjet
{ {
...@@ -51,7 +52,89 @@ class ControleurAuteur extends ControleurObjet ...@@ -51,7 +52,89 @@ class ControleurAuteur extends ControleurObjet
public static function definirNationalites(): string public static function definirNationalites(): string
{ {
$auteurs = Auteur::getAuteursByNumLivre(15); if (!empty($_GET["numAuteur"])){
return print_r($auteurs); $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"
]
]);
} }
} }
...@@ -62,8 +62,8 @@ class ControleurLivre extends ControleurObjet ...@@ -62,8 +62,8 @@ class ControleurLivre extends ControleurObjet
$autorsList = []; $autorsList = [];
foreach ($autors as $auteur){ foreach ($autors as $auteur){
$isBookAutor = false; $isBookAutor = false;
foreach ($bookAutors as $livreAuteur){ foreach ($bookAutors as $bookAutor){
if($auteur->numAuteur == $livreAuteur->numAuteur){ if($auteur->numAuteur == $bookAutor->numAuteur){
$isBookAutor = true; $isBookAutor = true;
break; break;
} }
......
...@@ -35,6 +35,8 @@ if (empty($_REQUEST["action"])) { ...@@ -35,6 +35,8 @@ if (empty($_REQUEST["action"])) {
"definirNationalites" => ControleurAuteur::definirNationalites(), "definirNationalites" => ControleurAuteur::definirNationalites(),
"supprimerAuteurDuLivre" => ControleurLivre::supprimerAuteurDuLivre(), "supprimerAuteurDuLivre" => ControleurLivre::supprimerAuteurDuLivre(),
"ajouterAuteurDuLivre" => ControleurLivre::ajouterAuteurDuLivre(), "ajouterAuteurDuLivre" => ControleurLivre::ajouterAuteurDuLivre(),
"supprimerNationaliteAuteur" => ControleurAuteur::supprimerNationaliteAuteur(),
"ajouterNationaliteAuteur" => ControleurAuteur::ajouterNationaliteAuteur(),
default => ControleurAuteur::lireAuteur(), default => ControleurAuteur::lireAuteur(),
}; };
} catch (Exception $e) { } catch (Exception $e) {
......
...@@ -57,7 +57,7 @@ class Auteur extends Objet ...@@ -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 * @param int $i
* @return array * @return array
* @throws ErrorException * @throws ErrorException
...@@ -75,6 +75,48 @@ class Auteur extends Objet ...@@ -75,6 +75,48 @@ class Auteur extends Objet
return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur'); 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 // méthode static qui retourne un auteur identifié par son numAuteur
public function afficher() public function afficher()
......
<?php <?php
require_once "Objet.php";
class Nationalite class Nationalite extends Objet
{ {
private int $numNationalite; protected ?int $numNationalite;
private string $pays; protected ?string $pays;
private string $abrege; protected ?string $abrege;
/** /**
* @param int $numNationalite * @param int $numNationalite
* @param string $pays * @param string $pays
* @param string $abrege * @param string $abrege
*/ */
public function __construct(int $numNationalite, string $pays, string $abrege) public function __construct(int $numNationalite=NULL, string $pays=NULL, string $abrege=NULL)
{ {
if(!is_null($numNationalite)){
$this->numNationalite = $numNationalite; $this->numNationalite = $numNationalite;
$this->pays = $pays; $this->pays = $pays;
$this->abrege = $abrege; $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
<?php <?php
require_once "Objet.php";
/** /**
* Implémente les magic methods. * Implémente les magic methods.
......
@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
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
@section('content') @section('content')
<div class="container mt-3"> <div class="container mt-3">
<h1>Définir les auteurs d'un livre</h1> <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"> <table class="table">
<thead> <thead>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment