Merge pull request 'BenBack' (#10) from BenBack into master

Reviewed-on: #10
This commit is contained in:
2026-04-09 16:15:08 +00:00
13 changed files with 84 additions and 19 deletions

View File

@@ -3,7 +3,7 @@
// Config // Config
return [ return [
'website_url' => 'http://127.0.0.1:8080/', 'website_url' => 'http://127.0.0.1:8080/',
'website_name' => 'Les recettes des Papis', 'website_name' => 'Les recettes de Papis',
'website_path' => APP_ROOT, 'website_path' => APP_ROOT,
]; ];

View File

@@ -31,7 +31,7 @@ html, body{
#logo { #logo {
background-color: aqua; background-color: aqua;
background-image: url("Logo.jpg"); background-image: url("../images/Logo.jpg");
/*background:no-repeat;*/ /*background:no-repeat;*/
height: 103px; height: 103px;
width: 141px; width: 141px;
@@ -131,6 +131,34 @@ body {
/*display:none;*/ /*display:none;*/
} }
.title-site {
text-align: center;
}
.title {
width: 100%;
height: 50%;
font-size: 100px;
}
.random-proposition {
gap: 5%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.recommandation img {
max-width: calc( 7vh + 7vw );
max-height: calc( 7vh + 7vw );
}
.line-acceuil {
color: #03be90;
box-shadow: 20px 6px 8px #007054;
}
.tag-selected-div { .tag-selected-div {
flex: 4; flex: 4;
} }
@@ -623,5 +651,9 @@ footer{
border-top: 1px solid black; border-top: 1px solid black;
} }
.meta-recettes {
text-align: left;
}

View File

@@ -40,7 +40,7 @@ document.addEventListener("DOMContentLoaded", function(){
if (data.success) { if (data.success) {
let new_elem = document.createElement("option"); let new_elem = document.createElement("option");
new_elem.setAttribute("value",document.getElementById('recette-form-ingr-nom').value); new_elem.setAttribute("value",data.id);
new_elem.innerText = document.getElementById('recette-form-ingr-nom').value; new_elem.innerText = document.getElementById('recette-form-ingr-nom').value;
cible.appendChild(new_elem); cible.appendChild(new_elem);
@@ -86,7 +86,7 @@ document.addEventListener("DOMContentLoaded", function(){
if (data.success) { if (data.success) {
let new_elem = document.createElement("option"); let new_elem = document.createElement("option");
new_elem.setAttribute("value",nomTag.value); new_elem.setAttribute("value",data.id);
new_elem.innerText = nomTag.value; new_elem.innerText = nomTag.value;
cible.appendChild(new_elem); cible.appendChild(new_elem);
@@ -146,7 +146,11 @@ document.addEventListener("DOMContentLoaded", function(){
else { else {
reponse.json().then( data => { reponse.json().then( data => {
if (data.success) { if (data.success) {
alert( "Envoyé" ); if( IS_EDIT )
alert( "Votre recette a été ajouté, vous allez être redirigé." );
else
alert( "Votre recette a été ajouté, vous allez être redirigé." );
window.location.href = data.route !== null ? data.route : window.location.origin;
} else { } else {
alert( data.error || "" ); alert( data.error || "" );
} }

View File

@@ -15,7 +15,7 @@ class IngredientManagementController extends Controller {
public static function defineRoutes(): array public static function defineRoutes(): array
{ {
return [ return [
self::Route( routeUrl: '/manage/ingredients', routeName: 'manage->ingredients', routeAction: 'index' ), self::Route( routeUrl: '/manage/ingredients', routeName: 'manage->ingredients', routeAction: 'index', pageHeadTitle: 'Gestion des ingredients' ),
self::Route( routeUrl: '/ingredients/edit/{int}', routeName: 'ingredients->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ), self::Route( routeUrl: '/ingredients/edit/{int}', routeName: 'ingredients->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ),
self::Route( routeUrl: '/ingredients/delete/{int}', routeName: 'ingredients->delete', routeAction: 'delete' ), self::Route( routeUrl: '/ingredients/delete/{int}', routeName: 'ingredients->delete', routeAction: 'delete' ),
]; ];

View File

@@ -6,6 +6,7 @@ use App\Domain\Controller;
use App\Helpers\UploadFiles; use App\Helpers\UploadFiles;
use App\Http\JSONResponse; use App\Http\JSONResponse;
use App\Http\Request; use App\Http\Request;
use App\Kernel;
class IngredientsAPIController extends Controller { class IngredientsAPIController extends Controller {
@@ -39,7 +40,7 @@ class IngredientsAPIController extends Controller {
if( !new IngredientRepository()->add( $ingredient ) ) if( !new IngredientRepository()->add( $ingredient ) )
JSONResponse::sendError( [ 'error' => 'An error occured while adding ingredient' ] ); JSONResponse::sendError( [ 'error' => 'An error occured while adding ingredient' ] );
JSONResponse::sendSuccess( [ 'image_url' => $urlOrError ] ); JSONResponse::sendSuccess( [ 'image_url' => $urlOrError, 'id' => Kernel::$DB->pdo->lastInsertId() ] );
} }

View File

@@ -3,6 +3,7 @@
namespace App\Domain\Pages; namespace App\Domain\Pages;
use App\Domain\Controller; use App\Domain\Controller;
use App\Domain\Recettes\RecetteRepository;
use App\Infrastructure\View; use App\Infrastructure\View;
/** /**
@@ -28,7 +29,7 @@ class PagesController extends Controller {
* @return void * @return void
*/ */
public function index(): View { public function index(): View {
return new View( 'home', [ 'ok' => 'bla' ] ); return new View( 'home', [ 'recettes' => new RecetteRepository()->getAllRecettesBrowse(1, 3 ) ] );
} }
} }

View File

@@ -9,6 +9,7 @@ use App\Helpers\UploadFiles;
use App\Http\JSONResponse; use App\Http\JSONResponse;
use App\Http\Request; use App\Http\Request;
use App\Http\Router; use App\Http\Router;
use App\Kernel;
class RecettesAPIController extends Controller { class RecettesAPIController extends Controller {
@@ -87,6 +88,7 @@ class RecettesAPIController extends Controller {
// Vérification d'une entrée qui existerait déjà. // Vérification d'une entrée qui existerait déjà.
$slug = strtolower( $name ); $slug = strtolower( $name );
$slug = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $slug);
$slug = str_replace( ' ', '', $slug ); $slug = str_replace( ' ', '', $slug );
$recetteRepo = new RecetteRepository(); $recetteRepo = new RecetteRepository();
@@ -116,7 +118,7 @@ class RecettesAPIController extends Controller {
} }
// Pour actualiser l'ID. // Pour actualiser l'ID.
$recette = $recetteRepo->getBySlug( $slug ); $recette = $recetteRepo->getById( Kernel::$DB->pdo->lastInsertId() );
// Ajout du lien ingrédients recettes. // Ajout du lien ingrédients recettes.
foreach( $ingredientsId as $ingredientId ){ foreach( $ingredientsId as $ingredientId ){
@@ -136,7 +138,7 @@ class RecettesAPIController extends Controller {
} }
} }
JSONResponse::sendSuccess( [ 'recette' => $recette ] ); JSONResponse::sendSuccess( [ 'recette' => $recette, 'route' => Router::getRouteURL('recettes->show', $recette->slug ) ] );
} }
public function edit(){ public function edit(){
@@ -180,10 +182,11 @@ class RecettesAPIController extends Controller {
// Vérification d'une entrée qui existerait déjà. // Vérification d'une entrée qui existerait déjà.
$slug = strtolower( $name ); $slug = strtolower( $name );
$slug = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $slug);
$slug = str_replace( ' ', '', $slug ); $slug = str_replace( ' ', '', $slug );
$recette->titre_recette = $name; $recette->titre_recette = $name;
$recette->slug = $slug; // $recette->slug = $slug;
$recette->temps_de_preparation = intval( $temps <= 0 ? 1 : $temps ); $recette->temps_de_preparation = intval( $temps <= 0 ? 1 : $temps );
$recette->description_recette = $description; $recette->description_recette = $description;
@@ -273,7 +276,7 @@ class RecettesAPIController extends Controller {
} }
} }
JSONResponse::sendSuccess( [ 'recette' => $recette ] ); JSONResponse::sendSuccess( [ 'recette' => $recette, 'route' => Router::getRouteURL('recettes->show', $recette->slug ) ] );
} }
public function delete(){ public function delete(){

View File

@@ -15,8 +15,8 @@ class RecettesManagementController extends Controller {
public static function defineRoutes(): array public static function defineRoutes(): array
{ {
return [ return [
self::Route( routeUrl: '/recettes/create', routeName: 'recettes->create', routeAction: 'create' ), self::Route( routeUrl: '/recettes/create', routeName: 'recettes->create', routeAction: 'create', pageHeadTitle: 'Créer une recette' ),
self::Route( routeUrl: '/recettes/edit/{int}', routeName: 'recettes->edit', routeAction: 'edit' ), self::Route( routeUrl: '/recettes/edit/{int}', routeName: 'recettes->edit', routeAction: 'edit', pageHeadTitle: 'Modifier une recette' ),
self::Route( routeUrl: '/recettes/delete/{int}', routeName: 'recettes->delete', routeAction: 'delete' ), self::Route( routeUrl: '/recettes/delete/{int}', routeName: 'recettes->delete', routeAction: 'delete' ),
]; ];

View File

@@ -15,7 +15,7 @@ class TagManagementController extends Controller {
public static function defineRoutes(): array public static function defineRoutes(): array
{ {
return [ return [
self::Route( routeUrl: '/manage/tags', routeName: 'manage->tags', routeAction: 'index' ), self::Route( routeUrl: '/manage/tags', routeName: 'manage->tags', routeAction: 'index', pageHeadTitle: 'Gestion des tags' ),
self::Route( routeUrl: '/tags/edit/{int}', routeName: 'tags->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ), self::Route( routeUrl: '/tags/edit/{int}', routeName: 'tags->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ),
self::Route( routeUrl: '/tags/delete/{int}', routeName: 'tags->delete', routeAction: 'delete' ), self::Route( routeUrl: '/tags/delete/{int}', routeName: 'tags->delete', routeAction: 'delete' ),
]; ];

View File

@@ -6,6 +6,7 @@ use App\Domain\Controller;
use App\Helpers\UploadFiles; use App\Helpers\UploadFiles;
use App\Http\JSONResponse; use App\Http\JSONResponse;
use App\Http\Request; use App\Http\Request;
use App\Kernel;
class TagsAPIController extends Controller { class TagsAPIController extends Controller {
@@ -32,7 +33,7 @@ class TagsAPIController extends Controller {
if( !new TagRepository()->add( $tag ) ) if( !new TagRepository()->add( $tag ) )
JSONResponse::sendError( [ 'error' => 'An error occured while adding tag' ] ); JSONResponse::sendError( [ 'error' => 'An error occured while adding tag' ] );
JSONResponse::sendSuccess(); JSONResponse::sendSuccess( [ 'id' => Kernel::$DB->pdo->lastInsertId() ] );
} }

View File

@@ -1 +1,23 @@
<h1>Coucou</h1> <?php use App\Infrastructure\View as V; ?>
<div class="content">
<div class="title-site">
<h1 class="title">Les Recettes De Papis</h1>
<hr class="line-acceuil">
<h3>Proposition de recette :</h3>
</div>
<div class="random-proposition">
<?php foreach( V::arg( 'recettes' ) as $recette ): ?>
<a class="recette-icone" href="<?php V::routeUrl( 'recettes->show', $recette->slug ); ?>">
<img class="recette-preview-image" src="<?php echo $recette->photo; ?>">
<div class="recette-icone-content">
<h3><?php echo $recette->titre_recette; ?></h3>
<ul class="meta-recettes">
<li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?> minutes</li>
<li>Nombre d'ingrédients : <?php echo $recette->getNumberOfIngredients(); ?></li>
</ul>
</div>
</a>
<?php endforeach; ?>
</div>
</div>

View File

@@ -6,6 +6,7 @@
<title><?php echo V::getHeadTitle(); ?></title> <title><?php echo V::getHeadTitle(); ?></title>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="stylesheet" href="<?php V::assetUrl( 'css/style.css' ); ?>" /> <link rel="stylesheet" href="<?php V::assetUrl( 'css/style.css' ); ?>" />
<link rel="icon" type="image/x-icon" href="<?php V::assetUrl( 'images/Logo.ico' ); ?>" />
</head> </head>
<body> <body>
<header id="header"> <header id="header">

View File

@@ -8,8 +8,8 @@
<img class="recette-preview-image" src="<?php echo $recette->photo; ?>"> <img class="recette-preview-image" src="<?php echo $recette->photo; ?>">
<div class="recette-icone-content"> <div class="recette-icone-content">
<h3><?php echo $recette->titre_recette; ?></h3> <h3><?php echo $recette->titre_recette; ?></h3>
<ul> <ul class="meta-recettes">
<li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?></li> <li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?> minutes</li>
<li>Nombre d'ingrédients : <?php echo $recette->getNumberOfIngredients(); ?></li> <li>Nombre d'ingrédients : <?php echo $recette->getNumberOfIngredients(); ?></li>
</ul> </ul>
</div> </div>