Fix create form and add edit Recettes / delete Recettes

This commit is contained in:
2026-04-03 14:42:43 +02:00
parent ae31644831
commit f8c0d6d1b2
10 changed files with 542 additions and 34 deletions

View File

@@ -41,13 +41,17 @@ class RecettesAPIController extends Controller {
$recetteRepo = new RecetteRepository();
$resp = $recetteRepo->advancedRecetteSearch( $title, $tagsId, $ingredientsId );
$resp = array_map( function($recette) use ($recetteRepo){
$r = $recetteRepo->getByID( $recette['num_recette'] );
$r->url = Router::getRouteURL( 'recettes->show', $r->slug );
$r->nb_ingredients = $r->getNumberOfIngredients();
return $r;
}, $resp ?? [] );
JSONResponse::sendSuccess( [ 'data' => $resp ] );
$objResp = [];
foreach( $resp as $r ){
$r = $recetteRepo->getByID( $r['num_recette'] );
$r->url = Router::getRouteURL( 'recettes->show', $r->slug );
$r->nb_ingredients = $r->getNumberOfIngredients();
if( !in_array( $r, $objResp ) ){
$objResp[] = $r;
}
}
JSONResponse::sendSuccess( [ 'data' => $objResp ] );
}
@@ -58,8 +62,8 @@ class RecettesAPIController extends Controller {
$temps = Request::post( 'temps' ) ?? "";
$fileField = "image";
$tagsId = explode( ",", Request::post( 'tag' ) ) ?? [];
$ingredientsId = explode( ",", Request::post( 'ingr' ) ) ?? [];
$tagsId = explode( ",", Request::post( 'tags' ) ) ?? [];
$ingredientsId = explode( ",", Request::post( 'ingredients' ) ) ?? [];
if( $tagsId == [ "" ] )
$tagsId = [];
@@ -83,13 +87,16 @@ class RecettesAPIController extends Controller {
// Vérification d'une entrée qui existerait déjà.
$slug = strtolower( $name );
$slug = str_replace( ' ', '-', $slug );
$slug = str_replace( ' ', '', $slug );
$recetteRepo = new RecetteRepository();
if( $recetteRepo->getBySlug( $slug ) ){
JSONResponse::sendError( [ 'error' => "Recette already exists" ] );
}
if( in_array( $slug, [ 'create', 'edit', 'delete' ] ) ){
JSONResponse::sendError( [ 'error' => "Recette already exists" ] );
}
// Création de la recette.
$recette = new Recette();
@@ -98,7 +105,7 @@ class RecettesAPIController extends Controller {
$recette->titre_recette = $name;
$recette->slug = $slug;
$recette->temps_de_preparation = intval( $temps );
$recette->temps_de_preparation = intval( $temps <= 0 ? 1 : $temps );
$recette->photo = $urlOrError;
$recette->description_recette = $description;
$recette->publication_date = date("Y-m-d");
@@ -140,8 +147,8 @@ class RecettesAPIController extends Controller {
$temps = Request::post( 'temps' ) ?? "";
$fileField = "image";
$tagsId = explode( ",", Request::post( 'tag' ) ) ?? [];
$ingredientsId = explode( ",", Request::post( 'ingr' ) ) ?? [];
$tagsId = explode( ",", Request::post( 'tags' ) ) ?? [];
$ingredientsId = explode( ",", Request::post( 'ingredients' ) ) ?? [];
if( $tagsId == [ "" ] )
$tagsId = [];
@@ -173,12 +180,12 @@ class RecettesAPIController extends Controller {
// Vérification d'une entrée qui existerait déjà.
$slug = strtolower( $name );
$slug = str_replace( ' ', '-', $slug );
$slug = str_replace( ' ', '', $slug );
$recette->titre_recette = $name;
$recette->slug = $slug;
$recette->temps_de_preparation = intval( $temps );
$recette->temps_de_preparation = intval( $temps <= 0 ? 1 : $temps );
$recette->description_recette = $description;
// Importation de la recette.

View File

@@ -33,4 +33,15 @@ class RecettesController extends Controller {
] );
}
public function show( string $slug ): View {
$recette = new RecetteRepository()->getBySlug( $slug );
if( !$recette )
die( "Recette not found" );
return new View( 'recettes/show', [
'recette' => $recette,
]);
}
}

View File

@@ -3,6 +3,12 @@
namespace App\Domain\Recettes;
use App\Domain\Controller;
use App\Domain\Ingredients\IngredientRepository;
use App\Domain\Tags\TagRepository;
use App\Helpers\Authentification;
use App\Http\JSONResponse;
use App\Http\Request;
use App\Infrastructure\View;
class RecettesManagementController extends Controller {
@@ -11,7 +17,69 @@ class RecettesManagementController extends Controller {
return [
self::Route( routeUrl: '/recettes/create', routeName: 'recettes->create', routeAction: 'create' ),
self::Route( routeUrl: '/recettes/edit/{int}', routeName: 'recettes->edit', routeAction: 'edit' ),
self::Route( routeUrl: '/recettes/delete/{int}', routeName: 'recettes->delete', routeAction: 'delete' ),
];
}
public function create(): View {
if( !Authentification::isLoggedIn() )
die( "Not logged in" );
return new View( 'recettes/create', [
'tags' => new TagRepository()->getAll(),
'ingredients' => new IngredientRepository()->getAll(),
] );
}
public function edit( int $idRecette ): View {
if( !Authentification::isLoggedIn() )
die( "Not logged in" );
$recette = new RecetteRepository()->getByID( $idRecette );
if( !$recette )
die( "Recette not found" );
$tagsID = array_map( function($tag) {
return $tag->getId();
}
, $recette->getAllLinkedTags() ?? [] );
$ingredientsID = array_map( function($tag) {
return $tag->getId();
}
, $recette->getAllLinkedIngredients() ?? [] );
return new View( 'recettes/edit', [
'recette' => $recette,
'recetteTags' => $tagsID,
'recetteIngr' => $ingredientsID,
'tags' => new TagRepository()->getAll(),
'ingredients' => new IngredientRepository()->getAll(),
]);
}
public function delete( int $idRecette ): never {
if( !Authentification::isLoggedIn() )
die( "Not logged in" );
$recette = new RecetteRepository()->getByID( $idRecette );
if( !$recette )
die( "Recette not found" );
$recetteRepo = new RecetteRepository();
// Retirer tous les liens Ingrédients/Tags.
foreach( ( $recette->getAllLinkedIngredients() ?? [] ) as $ingr ){
$recetteRepo->removeAnIngredient( $ingr, $recette );
}
foreach( ( $recette->getAllLinkedTags() ?? [] ) as $tag ){
$recetteRepo->removeATag( $tag, $recette );
}
if( !$recetteRepo->delete( $recette ) )
JSONResponse::sendError( [ 'error' => 'An error occured while deleting recette' ] );
Request::redirectTo( 'recettes->index' );
}
}