diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index fecc78a..2b39ed5 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -2,55 +2,54 @@ namespace App\Http\Controllers; +use App\Http\Requests\StoreProject; +use App\Http\Requests\UpdateProject; use App\Models\Project; use App\Models\Ticket; -use Illuminate\Http\Request; -use Illuminate\Support\Str; class ProjectController extends Controller { - public function index() { + public function index() + { $projects = Project::all(); return view('project.index', compact('projects')); } - public function create() { + public function create() + { return view('project.create'); } - public function store(Request $request) { - $project = new Project(); - $project->name = $request->name; - $project->save(); + public function store(StoreProject $request) + { + $project = new Project($request->validated()); + $project->saveOrFail(); - return redirect()->route('projects'); + return redirect()->route('project.index'); } - public function edit($id) { - $project = Project::findOrFail($id); - return view('project.edit', compact('project')); + public function edit(Project $project) + { + return view('project.edit', [ + 'project' => $project + ]); } - public function update(Request $request, $id) { - $project = Project::findOrFail($id); - - $projectSlug = Str::slug($project->name); - - if (file_exists(public_path('fichiers/' . $projectSlug))) - rename(public_path('fichiers/' . $projectSlug), public_path('fichiers/' . Str::slug($request->name))); - - $project->name = $request->name; - $project->save(); + public function update(UpdateProject $request, Project $project) + { + $project->fill($request->validated()); + $project->saveOrFail(); return redirect()->back()->with('success', 'Modifications enregistrées !'); } - public function destroy($id) { - $project = Project::findOrFail($id); - $tickets = Ticket::where('project_id', $project->id)->count(); - if ($tickets > 0) - return redirect()->back()->withErrors("Ce projet ne peut être supprimer, des tickets lui sont encore liés."); + public function destroy(Project $project) + { + if (Ticket::where('project_id', $project->id)->count()) { + return redirect()->back() + ->withErrors("Ce projet ne peut être supprimer, des tickets lui sont encore liés."); + } $project->delete(); - return redirect()->route('projects'); + return redirect()->route('project.index'); } } diff --git a/app/Http/Requests/StoreProject.php b/app/Http/Requests/StoreProject.php new file mode 100644 index 0000000..b607417 --- /dev/null +++ b/app/Http/Requests/StoreProject.php @@ -0,0 +1,30 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required|string|min:4|max:30' + ]; + } +} diff --git a/app/Http/Requests/UpdateProject.php b/app/Http/Requests/UpdateProject.php new file mode 100644 index 0000000..307790d --- /dev/null +++ b/app/Http/Requests/UpdateProject.php @@ -0,0 +1,8 @@ +slug_name); + if (!File::exists($path)) { + File::makeDirectory($path); + } + }); + static::updating(function (Project $project) { + $oldName = Project::where('id', $project->id)->first()->name; + $oldPath = Project::ticketAssetsPath($oldName); + $newPath = Project::ticketAssetsPath($project->slug_name); + if (File::exists($oldPath)) { + File::move($oldPath, $newPath); + } else { + File::makeDirectory($newPath); + } + }); + static::deleted(function (Project $project) { + $path = Project::ticketAssetsPath($project->slug_name); + if (File::exists($path)) { + File::deleteDirectory($path); + } + }); + } + + public function tickets() + { return $this->hasMany('App\Models\Ticket', 'project_id'); } + + public function getSlugNameAttribute() + { + return Str::slug($this->name); + } + + protected static function ticketAssetsPath(string $str) + { + return public_path(sprintf('fichiers/%s', $str)); + } } diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php index 377f529..4fa3e24 100644 --- a/resources/views/layout/app.blade.php +++ b/resources/views/layout/app.blade.php @@ -22,7 +22,7 @@ Tickets diff --git a/resources/views/project/create.blade.php b/resources/views/project/create.blade.php index 34e2b61..f5ef091 100644 --- a/resources/views/project/create.blade.php +++ b/resources/views/project/create.blade.php @@ -1,6 +1,6 @@ @extends('layout.app') -@section('projects', 'active') +@section('project', 'active') @section('content')
@@ -9,8 +9,7 @@
Créer un projet
-
- @method('PUT') + @csrf @include('modules.error-messages') diff --git a/resources/views/project/edit.blade.php b/resources/views/project/edit.blade.php index 66c5064..5c2e75a 100644 --- a/resources/views/project/edit.blade.php +++ b/resources/views/project/edit.blade.php @@ -1,16 +1,17 @@ @extends('layout.app') -@section('projects', 'active') +@section('project', 'active') @section('content')
-
Modifier un projetRetour
+
Modifier un projetRetour
- + @csrf + @method('PUT') @include('modules.error-messages') @if (session('success'))
diff --git a/resources/views/project/index.blade.php b/resources/views/project/index.blade.php index 53065b6..22326a9 100644 --- a/resources/views/project/index.blade.php +++ b/resources/views/project/index.blade.php @@ -1,11 +1,11 @@ @extends('layout.app') -@section('projects', 'active') +@section('project', 'active') @section('content')
@include('modules.error-messages') -

Gestion des projetsCréer un projet

+

Gestion des projetsCréer un projet

@@ -16,13 +16,12 @@ @foreach ($projects as $project) - + diff --git a/routes/web.php b/routes/web.php index e0e9874..6ff1b51 100644 --- a/routes/web.php +++ b/routes/web.php @@ -30,14 +30,8 @@ Route::middleware(['auth'])->group(function () { Route::post('/ticket/change-status/{id}', [TicketController::class, 'changeStatus'])->name('change-status-ticket'); Route::put('/ticket/message/create', [TicketController::class, 'createMessage'])->name('create-message'); Route::post('/ticket/subscribe/{id}', [TicketController::class, 'subscribe'])->name('subscribe-ticket'); - // Projets (admin) + // Projets Route::middleware(['is-admin'])->group(function () { - Route::get('/projects', [ProjectController::class, 'index'])->name('projects'); - Route::get('/project/create', [ProjectController::class, 'create'])->name('create-project'); - Route::put('/project/create', [ProjectController::class, 'store'])->name('store-project'); - Route::get('/project/{id}/edit', [ProjectController::class, 'edit'])->name('edit-project'); - Route::post('/project/{id}/edit', [ProjectController::class, 'update'])->name('update-project'); - Route::delete('/project/{id}/destroy', [ProjectController::class, 'destroy'])->name('destroy-project'); + Route::resource('project', ProjectController::class)->except('show'); }); }); -
Projet
{{ $project->name }}ModifierModifier - + @method('DELETE') @csrf - +