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