Commit 60653ff0 authored by victorfriboulet07's avatar victorfriboulet07
Browse files

Merge branch 'liste-filtrée'

# Conflicts:
#	index.php
#	templates/layout.php
parents 24cbe718 ee647bc3
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
document.getElementById('tag').addEventListener("click", () => {
    document.getElementById("searchbar").classList.remove('visually-hidden');
    document.getElementById('filtre').setAttribute('value','tag')
    document.getElementById("info_recherche").classList.remove('visually-hidden');
})
document.getElementById('titre').addEventListener("click", () => {
    document.getElementById("searchbar").classList.remove('visually-hidden');
    document.getElementById('filtre').setAttribute('value','titre')
})
document.getElementById('ingredients').addEventListener("click", () => {
    document.getElementById("searchbar").classList.remove('visually-hidden');
    document.getElementById('filtre').setAttribute('value','ingredient')
    document.getElementById("info_recherche").classList.remove('visually-hidden');
})
 No newline at end of file
+6 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ require_once 'src/controllers/accueil.php';
require_once 'src/controllers/pageRecette.php';
require_once 'src/controllers/pageConnexion.php';
require_once 'src/controllers/connexion.php';
require_once 'src/controllers/ListeRecettesFiltreesControleur.php';
require_once 'src/controllers/recettesAdmin.php';
require_once 'src/controllers/validationRecette.php';
require_once 'src/controllers/pageModifierEdito.php';
@@ -75,6 +76,11 @@ try{
            $controleur = new ModifierEditoControleur();
            break;

        case 'recette-filtre':
            $filtre = getVariable_GET('filtre');
            $search = getVariable_GET('search');
            $controleur = new ListeRecettesFiltreesControleur($filtre,$search);
            break;
        default:
            throw new Exception("la page demandée n'a pas été trouvée");
    }
+27 −0
Original line number Diff line number Diff line
<?php
require_once 'src/model/recetteManager.php';
require_once 'src/controllers/controleur.php';

require_once 'templates/carteRecette.php';
require_once 'templates/nosRecettes.php';


class ListeRecettesFiltreesControleur extends Controleur
{
    private String $Filtre;
    private String $ID;
    public function __construct($Filtre , $ID)
    {
        $this->Filtre=$Filtre;
        $this->ID=$ID;
    }

    /**
     * @throws Exception
     */
    public function executer()
    {
        $recettes = (new RecetteManager)->getRecettesFiltre($this->Filtre,$this->ID);
        afficherListeRecettes($recettes);
    }
}
 No newline at end of file
+51 −0
Original line number Diff line number Diff line
@@ -491,4 +491,55 @@ class RecetteManager extends Manager {

        return false;
    }
    public function getRecettesFiltre(string $Filtre,string $VALUE): array{
        $requete = '';
        switch($Filtre) {
            default: throw(new Exception("filtre inexistant"));
            break;
            case "tag":
                $VALUE= explode(',', $VALUE);
                $requete = "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE)
        JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE CUI_RECETTE.REC_ID IN(SELECT REC_ID FROM CUI_ETIQUETTAGE WHERE CUI_ETIQUETTAGE.TAG_ID IN (";
                foreach ($VALUE as $item){
                    $requete=$requete."SELECT TAG_ID FROM CUI_TAG WHERE UPPER(CUI_TAG.TAG_INTITULE)=UPPER('{$item}')";
                    if ($VALUE[count($VALUE)-1]!==$item){
                        $requete=$requete." UNION ";
                    }
                }
                $requete=$requete."))";
                break;
            case "ingredient" :
                $VALUE= explode(',', $VALUE);
                $requete = "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE)
        JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE CUI_RECETTE.REC_ID IN(SELECT REC_ID FROM CUI_COMPOSITION WHERE ING_ID IN (";
                foreach ($VALUE as $item){
                    $requete=$requete."
SELECT ING_ID FROM CUI_INGREDIENT WHERE UPPER(ING_INTITULE)=UPPER('{$item}') ";
                    if ($VALUE[count($VALUE)-1]!==$item){
                        $requete=$requete." UNION ";
                    }
                }
                $requete=$requete." ))";
                break;
            case "titre" :
                $VALUE=strtoupper($VALUE);
                $requete = "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE)
        JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE UPPER(REC_TITRE) LIKE (UPPER('%{$VALUE}%'))";
                break;
            case "categorie"  :
                $VALUE=(new CategorieManager())->getCodeCategorie($VALUE);
                $requete = "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE)
        JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE CAT_CODE='{$VALUE}'";
        }
        $resultat = self::projectionBdd($requete) ;

        $recettes = [];

        foreach($resultat as $ligne){
            $recettes[] = self::recetteFromLigne($ligne);
        }


        return $recettes;
    }
}
 No newline at end of file
+34 −4
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
<?php
require_once 'src/controllers/connexion.php';

$utilisateur = ConnexionController::estConnecte();
$connecte = ConnexionController::estConnecte();
?>

<!DOCTYPE html>
@@ -36,8 +36,21 @@ $utilisateur = ConnexionController::estConnecte();
                    <li class="nav-item"><a class="nav-link active" href=".">Accueil</a></li>
                    <li class="nav-item"><a class="nav-link" href=".?action=listeRecettes">Nos recettes</a></li>
                    <li class="nav-item"></li>
                    <li class="nav-item dropdown show"><a class="dropdown-toggle nav-link" aria-expanded="true" data-bs-toggle="dropdown" href="#">Filtres&nbsp;</a>
                        <div class="dropdown-menu" data-bs-popper="none" style="--bs-body-bg: var(--bs-primary);background: var(--bs-secondary);" data-bs-theme="light"><a class="dropdown-item" href="#" data-bs-theme="light"><span style="color: rgb(42, 57, 144); background-color: rgba(42, 57, 144, 0);">Catégories</span></a><a class="dropdown-item" href="#"><span style="color: rgb(42, 57, 144);">Titre</span></a><a class="dropdown-item" href="#"><span style="color: rgb(42, 57, 144);">Ingredients</span></a></div>
                    <li class="nav-item dropdown"><a class="dropdown-toggle nav-link" aria-expanded="true" data-bs-toggle="dropdown" href="#">Filtres&nbsp;</a>
                        <div class="dropdown-menu has-submenu" data-bs-popper="none" style="--bs-body-bg: var(--bs-primary);background: var(--bs-secondary);" data-bs-theme="light">
                            <a id="tag" class="dropdown-item" data-bs-theme="light"><span style="color: rgb(42, 57, 144); background-color: rgba(42, 57, 144, 0);">Tag</span></a>
                            <a id="titre" class="dropdown-item" ><span style="color: rgb(42, 57, 144);">Titre</span></a>
                            <a id="ingredients" class="dropdown-item"><span style="color: rgb(42, 57, 144);">Ingredients</span></a>
                        </div>
                    </li>
                    <li class="nav-item dropdown"><a class="dropdown-toggle nav-link" aria-expanded="true" data-bs-toggle="dropdown" href="#">Catégories&nbsp;</a>
                        <div class="dropdown-menu has-submenu" data-bs-popper="none" style="--bs-body-bg: var(--bs-primary);background: var(--bs-secondary);" data-bs-theme="light">
                            <?php
                            foreach ((new CategorieManager())->getCategories() as $category ){
                                ?><a class="dropdown-item" data-bs-theme="light" href="?action=recette-filtre&filtre=categorie&search=<?=$category?>"><span style="color: rgb(42, 57, 144); background-color: rgba(42, 57, 144, 0);"><?=$category?></span></a>
                            <?php ;}
                            ?>
                        </div>
                    </li>

                    <?php
@@ -73,6 +86,22 @@ $utilisateur = ConnexionController::estConnecte();
            </div>
        </div>
    </nav>

    <div class="row visually-hidden" id="searchbar">
        <div class="col-md-10 offset-md-1">
            <div class="card m-auto" style="max-width:850px">
                <div class="card-body">
                    <form class="d-flex align-items-center" action="index.php" method="get">
                        <input type="hidden" name="action" value="recette-filtre">
                        <i class="fas fa-search d-none d-sm-block h4 text-body m-0"></i>
                        <input class="form-control form-control-lg flex-shrink-1 form-control-borderless" type="search" placeholder="recherchez" name="search">
                        <input type="hidden" id="filtre" name="filtre" value="">
                        <p class="visually-hidden" id="info_recherche">ecrivez les éléments séparés par des virgules</p>
                        <button class="btn btn-success btn-lg" type="submit">Search</button></form>
                </div>
            </div>
        </div>
    </div>
    <?=$contenu?>
    <footer class="text-center" style="background: var(--bs-primary);">
        <div class="container text-white py-4 py-lg-5" style="background: var(--bs-primary);">
@@ -91,6 +120,7 @@ $utilisateur = ConnexionController::estConnecte();
            <p>Copyright&nbsp;©Les cuistots du dimanche 2023</p>
        </div>
    </footer>
    <script src="/assets/js/menuRecherche.js"
    <script src="assets/bootstrap/js/bootstrap.min.js"></script>
    <script src="assets/js/Simple-Slider-swiper-bundle.min.js"></script>
    <script src="assets/js/Simple-Slider.js"></script>