Commit 32f025d0 authored by Julien Ait azzouzene's avatar Julien Ait azzouzene
Browse files

feat: le modèle des recettes modifiées est terminé

parent 07c53b04
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ require_once 'src/controllers/pageRecette.php';
require_once 'src/controllers/pageConnexion.php';
require_once 'src/controllers/connexion.php';

try{
//try{
    session_start();

    // Si 'action' n'est pas défini, on charge la page d'accueil
@@ -58,8 +58,8 @@ try{
    }

    $controleur->executer();
}
/*}
catch(Exception $e){
    $messageErreur = $e->getMessage();
    require 'templates/erreur.php';
}
 No newline at end of file
}*/
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ class Recette {
    private string $image;
    private string $date_creation;
    private string $date_modification;
    private string $statut;
    protected string $statut;
    private string $idAuteur;
    private string $pseudoAuteur;
    private string $categorie;
+100 −23
Original line number Diff line number Diff line
@@ -89,12 +89,12 @@ class RecetteManager extends Manager {
    public function getRecetteModifiee(string $id) : ?RecetteModifiee{
        $requete = 
        "SELECT REC_ID, REC_MOD_TITRE, REC_MOD_CONTENU, REC_MOD_RESUME, REC_MOD_IMAGE, REC_MOD_DATE_MODIFICATION,
        CUI_RECETTE_MODIFIEE.CAT_CODE CAT_CODE, UTIL_ID
        CAT_INTITULE, UTIL_ID, UTIL_PSEUDO, REC_DATE_CREATION
        FROM CUI_RECETTE_MODIFIEE
        JOIN CUI_RECETTE USING(REC_ID)
        JOIN CUI_CATEGORIE ON CUI_CATEGORIE.CAT_CODE = CUI_RECETTE_MODIFIEE.CAT_CODE
        JOIN CUI_UTILISATEUR USING (UTIL_ID)
        WHERE rec_id='1'";
        WHERE REC_ID='$id'";
        $resultat = self::projectionBdd($requete);
        
        if(! isset($resultat[0])) {
@@ -131,6 +131,7 @@ class RecetteManager extends Manager {
     * Renvoie un certain nombre de recettes triés par ordre chronologiques.
     * Par exemple, appelées avec la valeur 5, cette méthode 
     * renvoie les 5 dernières recettes.
     * Ne renvoie que les recettes validées.
     * @param int $nombre le nombre de recettes à renvoyer
     * @return array un tableau d'objets Recette
     */
@@ -139,6 +140,7 @@ class RecetteManager extends Manager {
        "SELECT * FROM CUI_RECETTE 
        JOIN CUI_CATEGORIE USING (CAT_CODE)
        JOIN CUI_UTILISATEUR USING (UTIL_ID)
        WHERE REC_STATUT = 'V' OR REC_STATUT = 'M'
        ORDER BY REC_DATE_CREATION DESC LIMIT $nombre";

        $resultat = self::projectionBdd($requete);
@@ -285,8 +287,8 @@ class RecetteManager extends Manager {
        REC_RESUME = ?,
        REC_IMAGE = ?,
        REC_DATE_MODIFICATION = NOW(),
        CAT_CODE = ?,
        WHERE ID = ?";
        CAT_CODE = ?
        WHERE REC_ID = ?";

        $codeCategorie = (new CategorieManager)->getCodeCategorie($recette->getCategorie());
        if(is_null($codeCategorie)){
@@ -315,21 +317,10 @@ class RecetteManager extends Manager {
        $recetteModifiee = self::getRecetteModifiee($recette->getId());

        if($recetteModifiee){
            // Suppression des tags et des ingrédients
            foreach($recetteModifiee->getTags() as $tag){
                $recetteModifiee->supprimerTag($tag);
            }

            foreach($recetteModifiee->getIngredients() as $ingredient){
                $recetteModifiee->supprimerIngredient($ingredient);
            self::supprimerRecetteModifiee($recetteModifiee);
        }

            // Suppression de la recette modifiée
            $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?";
            if(self::requetePrepare($requete, [$recette->getId()]) != 1){
                throw new Exception("Échec de la suppression de la recette.");
            }
        }
        $recetteModifiee = self::getRecetteModifiee($recette->getId());

        // Suppression des tags et des ingrédients
        foreach($recette->getTags() as $tag){
@@ -347,6 +338,23 @@ class RecetteManager extends Manager {
        }
    }

    public function supprimerRecetteModifiee(RecetteModifiee $recetteModifiee){
        // Suppression des tags et des ingrédients
        foreach($recetteModifiee->getTags() as $tag){
            $recetteModifiee->supprimerTag($tag);
        }

        foreach($recetteModifiee->getIngredients() as $ingredient){
            $recetteModifiee->supprimerIngredient($ingredient);
        }

        // Suppression de la recette modifiée
        $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?";
        if(self::requetePrepare($requete, [$recetteModifiee->getId()]) != 1){
            throw new Exception("Échec de la suppression de la recette modifiée.");
        }
    }

    /**
     * Soumet une recette modifiée à validation pour un administrateur.
     * La recette modifiée sera stocké dans une autre table en attendant d'être validé,
@@ -376,9 +384,9 @@ class RecetteManager extends Manager {
        }

        // Changement du statut de la recette
        $requete = "UPDATE CUI_RECETTE SET STATUT = 'M' WHERE REC_ID = ?";
        $requete = "UPDATE CUI_RECETTE SET REC_STATUT = 'M' WHERE REC_ID = ?";
        if(! self::requetePrepare($requete, [$recetteModifiee->getId()])){
            throw new Exception("Échec de la création de recette modifiée.");
            throw new Exception("Échec de la mide à jour du statut de la recette modifiée.");
        }

        // Copie des tags et ingrédients
@@ -400,7 +408,7 @@ class RecetteManager extends Manager {
     * @return void
     */
    public function validerRecette(Recette $recette): void{
        $requete = "UPDATE CUI_RECETTE SET STATUT='V' WHERE REC_ID = ?";
        $requete = "UPDATE CUI_RECETTE SET REC_STATUT='V' WHERE REC_ID = ?";
        if(! self::requetePrepare($requete, [$recette->getId()])){
            throw new Exception("Échec de l'ajout de la validation de la recette.");
        }
@@ -410,7 +418,76 @@ class RecetteManager extends Manager {
     * Valide une modification de recette.
     * @param Recette $recette la recette à valider
     */
    public function validerModification(RecetteModifiee $recette): void{
    public function validerModification(RecetteModifiee $recetteModifiee): void{
        $recette = new Recette(
            $recetteModifiee->getTitre(),
            $recetteModifiee->getContenu(),
            $recetteModifiee->getResume(),
            $recetteModifiee->getImage(),
            'V',
            $recetteModifiee->getIdAuteur(),
            $recetteModifiee->getCategorie(),
            $recetteModifiee->getId()
        );

        // Mise à jour des propriétés de la table Recette
        self::majRecette($recette);

        // Mise à jour des tags et ingrédients

        $ingredientsRecette = $recette->getIngredients();
        $ingredientsModifies = $recetteModifiee->getIngredients();

        $tagsRecette = $recette->getTags();
        $tagsModifies = $recetteModifiee->getTags();

        foreach($ingredientsModifies as $ingredientModifie){
            if(! self::contientIngredient($ingredientsRecette, $ingredientModifie)){
                $recette->ajouterIngredient($ingredientModifie);
            }
        }
        foreach($ingredientsRecette as $ingredientRecette){
            if(! self::contientIngredient($ingredientsModifies, $ingredientRecette)){
                $recette->supprimerIngredient($ingredientRecette);
            }
        }

        foreach($tagsModifies as $tagModifie){
            if(! self::contientTag($tagsRecette, $tagModifie)){
                $recette->ajouterTag($tagModifie);
            }
        }
        foreach($tagsRecette as $tagRecette){
            if(! self::contientTag($tagsModifies, $tagRecette)){
                $recette->supprimerTag($tagRecette);
            }
        }

        // Suppression de la recette modifiée, 
        // maintenant que la recette de base est mise à jour
        self::supprimerRecetteModifiee($recetteModifiee);

        // Rendre la recette valide à nouveau
        self::validerRecette($recette);
    }

    private function contientIngredient(array $ingredients, Ingredient $ingredient): bool{
        foreach($ingredients as $ingredientCourant){
            if($ingredient->getIntitule() === $ingredientCourant->getIntitule()){
                return true;
            }
        }

        return false;
    }

    private function contientTag(array $tags, Tag $tag): bool{
        foreach($tags as $tagCourant){
            if($tag->getIntitule() === $tagCourant->getIntitule()){
                return true;
            }
        }

        return false;
    }
}
 No newline at end of file
+14 −6
Original line number Diff line number Diff line
@@ -9,32 +9,40 @@ require_once 'src/model/ingredientManager.php';
require_once 'src/model/recette.php';

class RecetteModifiee extends Recette {

	public static function getInstanceFromRecette(Recette $recette): RecetteModifiee {
		return new RecetteModifiee($recette->getTitre(), $recette->getContenu(), 
		$recette->getResume(), $recette->getImage(), $recette->statut, $recette->getIdAuteur(),
		$recette->getCategorie(), $recette->getId(), $recette->getPseudoAuteur(), $recette->getDateCreation(),
		$recette->getDateModification());
	}

    /**
	 * Renvoie tous les tags de la recette.
	 * @return array un tableau d'objets Tag
	 * @see Tag
	 */
	public function getTags(): array{
		return (new TagManager)->getParRecetteModifiee($this->id);
		return (new TagManager)->getParRecetteModifiee($this->getId());
	}

	public function ajouterTag(Tag $tag){
		(new TagManager)->ajouterTagARecetteModifiee($tag, $this->id);
		(new TagManager)->ajouterTagARecetteModifiee($tag, $this->getId());
	}

	public function supprimerTag(Tag $tag){
		(new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->id);
		(new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->getId());
	}

	public function getIngredients(): array{
		return (new IngredientManager)->getParRecetteModifiee($this->id);
		return (new IngredientManager)->getParRecetteModifiee($this->getId());
	}

	public function ajouterIngredient(Ingredient $ingredient){
		(new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->id);
		(new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->getId());
	}

	public function supprimerIngredient(Ingredient $ingredient){
		(new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->id);
		(new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->getId());
	}
}
 No newline at end of file
+59 −0
Original line number Diff line number Diff line
@@ -3,9 +3,12 @@
require_once 'src/lib/assertion.php';

require_once 'src/model/recette.php';
require_once 'src/model/recetteModifiee.php';
require_once 'src/model/recetteManager.php';

testRecettes();
testRecettesModifiees();

function testRecettes() {
    $manager = new RecetteManager();

@@ -36,3 +39,59 @@ function testRecettes() {

    assertFalse($manager->getRecette($recetteBis->getId()));
}

function testRecettesModifiees(){
    $manager = new RecetteManager();

    $idAuteur = (new UtilisateurManager)->connecter('test', 'test')->getId();

    $recette = new Recette('Poulet cury', "J'ai la flemme d'écrire le contenu...", "Du poulet avec du curry (OMG)", "", "A", $idAuteur, 'Plat');
    $manager->creerRecette($recette);

    $recetteEnBase = $manager->getRecettes()[0];

    assertEquals('Poulet cury', $recetteEnBase->getTitre());

    $recetteEnBase->ajouterTag(new Tag('volaille'));
    $recetteEnBase->ajouterIngredient(new Ingredient('poulet'));
    $recetteEnBase->ajouterIngredient(new Ingredient('curry'));
    $recetteEnBase->ajouterIngredient(new Ingredient('onions'));

    assertFalse($recetteEnBase->estValide());
    $manager->validerRecette($recetteEnBase);
    $recetteEnBase = $manager->getRecette($recetteEnBase->getId());
    assertTrue($recetteEnBase->estValide());

    $recetteModifiee = RecetteModifiee::getInstanceFromRecette($recetteEnBase);

    $recetteModifiee->setTitre('Poulet curry');
    $manager->soumettreModification($recetteModifiee);
    $recetteEnBase = $manager->getRecette($recetteEnBase->getId());
    assertTrue($recetteEnBase->estValide());
    assertEquals('Poulet cury', $recetteEnBase->getTitre());

    //$recetteModifiee = $manager->getRecetteModifiee($recetteEnBase->getId());
    // finalement, je n'aime pas trop les onions...
    $recetteModifiee->supprimerIngredient(new Ingredient('onions'));

    $manager->validerModification($recetteModifiee);

    $recetteEnBase = $manager->getRecette($recetteEnBase->getId());
    assertEquals('Poulet curry', $recetteEnBase->getTitre());

    $exception = false;
    try{
        $recetteEnBase->supprimerIngredient(new Ingredient('onions'));
        $exception = true;
    }
    catch(Exception $e){}

    if($exception){
        throw new AssertionFailedException("expected exception to be thrown");
    }

    assertFalse($manager->getRecetteModifiee($recetteEnBase->getId()));

    $manager->soumettreModification(RecetteModifiee::getInstanceFromRecette($recetteEnBase));
    $manager->supprimerRecette($recetteEnBase);
}
 No newline at end of file