From ec78173e0532cb23476b11f7ea0830515dc8b4f3 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Fri, 3 Apr 2026 15:27:51 +0200 Subject: [PATCH] V1 avec bugs --- public/assets/css/style.css | 81 ++++++++++++++++++- public/assets/js/manage-ingredients.js | 62 ++++++++++++++ public/assets/js/manage-tags.js | 62 ++++++++++++++ .../IngredientManagementController.php | 70 ++++++++++++++++ src/Domain/Tags/TagManagementController.php | 69 ++++++++++++++++ views/ingredients/index.php | 18 +++++ views/partials/footer.php | 4 +- views/partials/header.php | 3 + views/recettes/show.php | 10 ++- views/tags/index.php | 17 ++++ 10 files changed, 387 insertions(+), 9 deletions(-) create mode 100644 public/assets/js/manage-ingredients.js create mode 100644 public/assets/js/manage-tags.js create mode 100644 src/Domain/Ingredients/IngredientManagementController.php create mode 100644 src/Domain/Tags/TagManagementController.php create mode 100644 views/ingredients/index.php create mode 100644 views/tags/index.php diff --git a/public/assets/css/style.css b/public/assets/css/style.css index 8fcb5cc..174341a 100755 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -71,6 +71,7 @@ nav { .nav-element { line-height: 2.5; padding: 10px; + margin: 4px; text-decoration: none; color: black; } @@ -292,9 +293,8 @@ ul { /*image*/ .recette-image { background-color: red; - aspect-ratio: 1/1; - max-height: calc( 30vh + 30vw ); - max-width: calc( 30vh + 30vw ); + max-height: calc( 20vh + 20vw ); + max-width: calc( 20vh + 20vw ); border: 1px solid white; border-radius: 30px; } @@ -304,6 +304,35 @@ ul { justify-content: center; } + +.recette-liste-ingr-div { + margin-left: 120px; + padding-left: 100px; + width: 75%; + border: 1px solid black; + border-radius: 200px; + box-shadow: 7px 4px 7px black; +} + +.recette-liste-ingr-elem { + display: flex; + padding-left: 50px; +} + +.ingr-image-prev { + max-height: 50px; + max-width: 50px; + border: 1px solid black; + border-radius: 10px; + flex: 1; +} + +.recette-liste-ingr-elem-nom { + height: 100%; + width: 15%; + line-height: 50px; +} + .recette-div-info { display: flex; flex-direction: row; @@ -496,12 +525,53 @@ ul { box-shadow: 1px 1px 1px black; } +.liste-ingr-elem:hover { + border:3px solid #007054; + box-shadow: 2px 2px 10px black; +} + .liste-ingr-elem-text { width: 100%; height: 100%; flex:12; padding-left: 20px; line-height: 100px; + color: #000000; +} + +.liste-ingr-elem-modif { + line-height: 100px; + padding-right: 20px; +} + +.liste-tag-elem { + display: flex; + height: 40px; + padding:5px; + background-color: #c6fdefe0; + color: #000000; + border: 1px solid black; + border-radius: 10px; + box-shadow: 1px 1px 1px black; +} + +.liste-tag-elem:hover { + border:3px solid #007054; + box-shadow: 2px 2px 10px black; +} + +.liste-tag-elem-text { + width: 100%; + height: 100%; + flex:12; + padding-left: 20px; + line-height: 40px; + color: #000000; +} + +.liste-tag-elem-modif { + line-height: 40px; + padding-right: 20px; } .ingr-image { @@ -510,6 +580,11 @@ ul { border-radius: 10px; } +a { + text-decoration: none; + color: black; +} + /*Footer et son contenue*/ footer{ padding: 25px; diff --git a/public/assets/js/manage-ingredients.js b/public/assets/js/manage-ingredients.js new file mode 100644 index 0000000..66c2490 --- /dev/null +++ b/public/assets/js/manage-ingredients.js @@ -0,0 +1,62 @@ +document.addEventListener("DOMContentLoaded", function(){ + + + let modifier_button = document.getElementsByClassName("ingr-modifier"); + + console.log(modifier_button); + + for (const element of modifier_button) { + element.addEventListener('click', function ( e ) { + let modif = element.parentElement.previousSibling.previousSibling; + + let data = e.target.getAttribute("data-id"); + + let form = document.createElement("form"); + + form.setAttribute("method", "POST"); + form.setAttribute("action", "/ingredients/edit/" + data); + form.setAttribute("class","liste-ingr-elem-text") + + let input = document.createElement("input"); + + input.setAttribute("type", "text"); + input.setAttribute("class", "form-control"); + input.setAttribute("name","modif_ingr"); + input.setAttribute("placeholder", "modificiation"); + + let hidden = document.createElement("input"); + + hidden.setAttribute("type","hidden"); + hidden.setAttribute("name","id"); + hidden.setAttribute("value", data); + + let button = document.createElement("button"); + + button.setAttribute("type", "submit"); + button.setAttribute("class", "btn btn-primary"); + button.innerText = "Submit Modification"; + + form.append(input) + form.append(hidden) + form.append(button) + + modif.replaceWith(form); + + }); + }; + + let suppr = document.getElementsByClassName("ingr-suppr"); + + for (const element of suppr) { + element.addEventListener('click', function ( e ) { + let confirm = window.confirm("Voulez vous supprimez ?"); + + let data = e.target.getAttribute("data-id"); + + if (confirm) { + window.location.href = "/ingredients/delete/" + data; + } + }) + } + +}); \ No newline at end of file diff --git a/public/assets/js/manage-tags.js b/public/assets/js/manage-tags.js new file mode 100644 index 0000000..07686a6 --- /dev/null +++ b/public/assets/js/manage-tags.js @@ -0,0 +1,62 @@ +document.addEventListener("DOMContentLoaded", function(){ + + + let modifier_button = document.getElementsByClassName("tag-modifier"); + + console.log(modifier_button); + + for (const element of modifier_button) { + element.addEventListener('click', function ( e ) { + let modif = element.parentElement.previousSibling.previousSibling; + + let data = e.target.getAttribute("data-id"); + + let form = document.createElement("form"); + + form.setAttribute("method", "POST"); + form.setAttribute("action", "/tags/edit/" + data); + form.setAttribute("class","liste-tag-elem-text") + + let input = document.createElement("input"); + + input.setAttribute("type", "text"); + input.setAttribute("class", "form-control"); + input.setAttribute("name","modif_tag"); + input.setAttribute("placeholder", "modificiation"); + + let hidden = document.createElement("input"); + + hidden.setAttribute("type","hidden"); + hidden.setAttribute("name","id"); + hidden.setAttribute("value", data); + + let button = document.createElement("button"); + + button.setAttribute("type", "submit"); + button.setAttribute("class", "btn btn-primary"); + button.innerText = "Submit Modification"; + + form.append(input) + form.append(hidden) + form.append(button) + + modif.replaceWith(form); + + }); + }; + + let suppr = document.getElementsByClassName("tag-suppr"); + + for (const element of suppr) { + element.addEventListener('click', function ( e ) { + let confirm = window.confirm("Voulez vous supprimez ?"); + + let data = e.target.getAttribute("data-id"); + + if (confirm) { + window.location.href = "/tags/delete/" + data; + } + }) + } + +}); \ No newline at end of file diff --git a/src/Domain/Ingredients/IngredientManagementController.php b/src/Domain/Ingredients/IngredientManagementController.php new file mode 100644 index 0000000..c738735 --- /dev/null +++ b/src/Domain/Ingredients/IngredientManagementController.php @@ -0,0 +1,70 @@ +ingredients', routeAction: 'index' ), + self::Route( routeUrl: '/ingredients/edit/{int}', routeName: 'ingredients->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ), + self::Route( routeUrl: '/ingredients/delete/{int}', routeName: 'ingredients->delete', routeAction: 'delete' ), + ]; + + } + + public function index(){ + + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $tags = new IngredientRepository()->getAll(); + return new View( 'ingredients/index', [ + 'ingredients' => $tags, + ]); + + } + + public function edit( int $idIngredient ): never { + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $ing = new IngredientRepository()->getByID( $idIngredient ); + if( !$ing ) + die( "Ingredient not found" ); + + $name = Request::post( 'modif_ingr' ); + if( !$name || $name == "" ) + JSONResponse::sendError( [ 'error' => 'Name not defined' ] ); + + $ing->nom_ingredient = $name; + + if( !new IngredientRepository()->update( $ing ) ) + JSONResponse::sendError( [ 'error' => 'An error occured while updating ingredient' ] ); + + Request::redirectTo( 'manage->ingredients'); + } + + public function delete( int $idIngredient ): never { + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $ing = new IngredientRepository()->getByID( $idIngredient ); + if( !$ing ) + die( "Tag not found" ); + + if( !new IngredientRepository()->delete( $ing ) ) + JSONResponse::sendError( [ 'error' => 'An error occured while deleting ingredient' ] ); + + Request::redirectTo( 'manage->ingredients' ); + } +} \ No newline at end of file diff --git a/src/Domain/Tags/TagManagementController.php b/src/Domain/Tags/TagManagementController.php new file mode 100644 index 0000000..e390649 --- /dev/null +++ b/src/Domain/Tags/TagManagementController.php @@ -0,0 +1,69 @@ +tags', routeAction: 'index' ), + self::Route( routeUrl: '/tags/edit/{int}', routeName: 'tags->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ), + self::Route( routeUrl: '/tags/delete/{int}', routeName: 'tags->delete', routeAction: 'delete' ), + ]; + + } + + public function index(){ + + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $tags = new TagRepository()->getAll(); + return new View( 'tags/index', [ + 'tags' => $tags, + ]); + + } + public function edit( int $idTag ): never { + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $tag = new TagRepository()->getByID( $idTag ); + if( !$tag ) + die( "Tag not found" ); + + $name = Request::post( 'modif_tag' ); + if( !$name || $name == "" ) + JSONResponse::sendError( [ 'error' => 'Name not defined' ] ); + + $tag->nom_tag = $name; + + if( !new TagRepository()->update( $tag ) ) + JSONResponse::sendError( [ 'error' => 'An error occured while updating tag' ] ); + + Request::redirectTo( 'manage->tags'); + } + + public function delete( int $idTag ): never { + if( !Authentification::isLoggedIn() ) + die( "Not logged in" ); + + $tag = new \App\Domain\Tags\TagRepository()->getByID( $idTag ); + if( !$tag ) + die( "Tag not found" ); + + if( !new TagRepository()->delete( $tag ) ) + JSONResponse::sendError( [ 'error' => 'An error occured while deleting tag' ] ); + + Request::redirectTo( 'manage->tags' ); + } +} \ No newline at end of file diff --git a/views/ingredients/index.php b/views/ingredients/index.php new file mode 100644 index 0000000..1139dfb --- /dev/null +++ b/views/ingredients/index.php @@ -0,0 +1,18 @@ + + +
+ +
+ +
+ nom_ingredient; ?> +
+ +
+ +
+ diff --git a/views/partials/footer.php b/views/partials/footer.php index 8015192..d406d39 100644 --- a/views/partials/footer.php +++ b/views/partials/footer.php @@ -2,12 +2,12 @@ diff --git a/views/partials/header.php b/views/partials/header.php index 4e466cc..7378c89 100644 --- a/views/partials/header.php +++ b/views/partials/header.php @@ -21,6 +21,9 @@
  • Logout
  • Ajouter une Recette
  • +
  • Gérer les ingrédients
  • +
  • Gérer les tags
  • +
  • Login
  • diff --git a/views/recettes/show.php b/views/recettes/show.php index 59d8bb2..ce66c25 100644 --- a/views/recettes/show.php +++ b/views/recettes/show.php @@ -30,13 +30,15 @@ use App\Infrastructure\View as V; ?> -
    -

    Ingrédients :

    -