Loading assets/js/menuRecherche.js 0 → 100644 +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 index.php +6 −0 Original line number Diff line number Diff line Loading @@ -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'; Loading Loading @@ -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"); } Loading src/controllers/ListeRecettesFiltreesControleur.php 0 → 100644 +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 src/model/recetteManager.php +51 −0 Original line number Diff line number Diff line Loading @@ -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 templates/layout.php +34 −4 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ <?php require_once 'src/controllers/connexion.php'; $utilisateur = ConnexionController::estConnecte(); $connecte = ConnexionController::estConnecte(); ?> <!DOCTYPE html> Loading Loading @@ -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 </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 </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 </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 Loading Loading @@ -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);"> Loading @@ -91,6 +120,7 @@ $utilisateur = ConnexionController::estConnecte(); <p>Copyright ©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> Loading Loading
assets/js/menuRecherche.js 0 → 100644 +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
index.php +6 −0 Original line number Diff line number Diff line Loading @@ -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'; Loading Loading @@ -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"); } Loading
src/controllers/ListeRecettesFiltreesControleur.php 0 → 100644 +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
src/model/recetteManager.php +51 −0 Original line number Diff line number Diff line Loading @@ -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
templates/layout.php +34 −4 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ <?php require_once 'src/controllers/connexion.php'; $utilisateur = ConnexionController::estConnecte(); $connecte = ConnexionController::estConnecte(); ?> <!DOCTYPE html> Loading Loading @@ -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 </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 </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 </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 Loading Loading @@ -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);"> Loading @@ -91,6 +120,7 @@ $utilisateur = ConnexionController::estConnecte(); <p>Copyright ©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> Loading