From 1ea003521cd764c702b502b62d8e56ebc7c5bf13 Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Fri, 24 Nov 2023 17:56:48 +0100 Subject: [PATCH] Added JobVideo CRUD --- .../Bo/HistoricalMilestoneController.php | 3 - .../Controllers/Bo/JobVideoController.php | 167 ++++++++++++++++++ app/Http/Controllers/Bo/LogoController.php | 5 - app/Http/Controllers/Bo/SiteController.php | 2 - app/Http/Controllers/Bo/SlideController.php | 5 - .../Bo/JobVideos/StoreJobVideoRequest.php | 49 +++++ .../Bo/JobVideos/UpdateJobVideoRequest.php | 7 + app/Policies/JobVideoPolicy.php | 120 +++++++++++++ resources/lang/fr/models.php | 1 + resources/lang/fr/validation.php | 1 + resources/views/bo/layouts/nav-list.blade.php | 9 + .../bo/pages/job_videos/create.blade.php | 36 ++++ .../views/bo/pages/job_videos/edit.blade.php | 53 ++++++ .../views/bo/pages/job_videos/form.blade.php | 119 +++++++++++++ .../bo/pages/job_videos/index-list.blade.php | 70 ++++++++ .../views/bo/pages/job_videos/index.blade.php | 21 +++ .../views/bo/pages/slides/form.blade.php | 2 +- routes/breadcrumbs-bo.php | 22 +++ routes/web-bo.php | 9 + 19 files changed, 685 insertions(+), 16 deletions(-) create mode 100644 app/Http/Controllers/Bo/JobVideoController.php create mode 100644 app/Http/Requests/Bo/JobVideos/StoreJobVideoRequest.php create mode 100644 app/Http/Requests/Bo/JobVideos/UpdateJobVideoRequest.php create mode 100644 app/Policies/JobVideoPolicy.php create mode 100644 resources/views/bo/pages/job_videos/create.blade.php create mode 100644 resources/views/bo/pages/job_videos/edit.blade.php create mode 100644 resources/views/bo/pages/job_videos/form.blade.php create mode 100644 resources/views/bo/pages/job_videos/index-list.blade.php create mode 100644 resources/views/bo/pages/job_videos/index.blade.php diff --git a/app/Http/Controllers/Bo/HistoricalMilestoneController.php b/app/Http/Controllers/Bo/HistoricalMilestoneController.php index 2bbbe1c..c8890b8 100644 --- a/app/Http/Controllers/Bo/HistoricalMilestoneController.php +++ b/app/Http/Controllers/Bo/HistoricalMilestoneController.php @@ -6,15 +6,12 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Bo\HistoricalMilestones\StoreHistoricalMilestoneRequest; use App\Http\Requests\Bo\HistoricalMilestones\UpdateHistoricalMilestoneRequest; use App\Models\HistoricalMilestone; -use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class HistoricalMilestoneController extends Controller { - use UpdateModelPublished; - /** * Create the controller instance. */ diff --git a/app/Http/Controllers/Bo/JobVideoController.php b/app/Http/Controllers/Bo/JobVideoController.php new file mode 100644 index 0000000..d74c47e --- /dev/null +++ b/app/Http/Controllers/Bo/JobVideoController.php @@ -0,0 +1,167 @@ +authorizeResource(JobVideo::class); + } + + /** + * Display a listing of the resource. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View + */ + public function index(Request $request): \Illuminate\Contracts\View\View + { + /** @var \Illuminate\Database\Eloquent\Builder $jobVideoModels */ + $jobVideoModels = JobVideo::query(); + + /** @var string $search Search field */ + $search = $request->search; + if ($search) { + $this->searchQuery( + $jobVideoModels, + $search, + null, + 'title', + 'place', + ); + } + $searchFields = \implode(', ', [ + Str::ucfirst(trans('validation.attributes.title')), + trans('validation.custom.place'), + ]); + + /** Sort columns with a query */ + $this->sortQuery($jobVideoModels); + + /** Custom pagination */ + $jobVideoModels = $this->paginate($jobVideoModels); + + return view( + 'bo.pages.job_videos.index', + compact('jobVideoModels', 'search', 'searchFields') + ); + } + + + /** + * Show the form for creating a new resource. + * + * @param \App\Models\JobVideo $jobVideo + * @return \Illuminate\Contracts\View\View + */ + public function create(JobVideo $jobVideo): \Illuminate\Contracts\View\View + { + return view('bo.pages.job_videos.create', ['jobVideoModel' => $jobVideo]); + } + + /** + * Store a newly created resource in storage. + * + * @param \App\Http\Requests\Bo\JobVideos\StoreJobVideoRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(StoreJobVideoRequest $request): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request) { + $jobVideo = new JobVideo(); + $jobVideo->fill($request->validated()); + + if ($jobVideo->saveOrFail()) { + return redirect()->route('bo.jobvideos.edit', $jobVideo) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + } + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + }); + } + + /** + * Show the form for editing the specified resource. + * + * @param App\Models\JobVideo $jobVideo + * @return \Illuminate\Contracts\View\View + */ + public function edit(JobVideo $jobVideo): \Illuminate\Contracts\View\View + { + return view('bo.pages.job_videos.edit', ['jobVideoModel' => $jobVideo]); + } + + /** + * Update the specified resource in storage. + * + * @param \App\Http\Requests\Bo\JobVideos\UpdateJobVideoRequest $request + * @param \App\Models\JobVideo $jobVideo + * @return \Illuminate\Http\RedirectResponse + */ + public function update( + UpdateJobVideoRequest $request, + JobVideo $jobVideo + ): \Illuminate\Http\RedirectResponse { + return DB::transaction(function () use ($request, $jobVideo) { + $jobVideo->fill($request->validated()); + + if ($jobVideo->saveOrFail()) { + return redirect()->route('bo.jobvideos.edit', $jobVideo) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + } + return redirect()->route('bo.jobvideos.edit', $jobVideo) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + }); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\JobVideo $jobVideo + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(JobVideo $jobVideo): \Illuminate\Http\RedirectResponse + { + if ($jobVideo->deleteOrFail()) { + return redirect()->route('bo.jobvideos.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + } + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::ucfirst(trans_choice('models.classes.job_video', '1')) + ])); + } + + /** + * Duplicate the specified resource. + * + * @param \App\Models\JobVideo $jobVideo + * @return \Illuminate\Contracts\View\View + */ + public function duplicate(JobVideo $jobVideo): \Illuminate\Contracts\View\View + { + return $this->create($jobVideo->replicate()); + } +} diff --git a/app/Http/Controllers/Bo/LogoController.php b/app/Http/Controllers/Bo/LogoController.php index 59462ba..0d1b2a6 100644 --- a/app/Http/Controllers/Bo/LogoController.php +++ b/app/Http/Controllers/Bo/LogoController.php @@ -6,17 +6,12 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Bo\Logos\StoreLogoRequest; use App\Http\Requests\Bo\Logos\UpdateLogoRequest; use App\Models\Logo; -use App\Traits\Controllers\ChangesModelOrder; -use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class LogoController extends Controller { - use UpdateModelPublished; - use ChangesModelOrder; - /** * Create the controller instance. */ diff --git a/app/Http/Controllers/Bo/SiteController.php b/app/Http/Controllers/Bo/SiteController.php index 32d7a9b..371261a 100644 --- a/app/Http/Controllers/Bo/SiteController.php +++ b/app/Http/Controllers/Bo/SiteController.php @@ -8,14 +8,12 @@ use App\Http\Requests\Bo\Sites\UpdateSiteRequest; use App\Models\Logo; use App\Models\Site; use App\Traits\Controllers\ChangesModelOrder; -use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class SiteController extends Controller { - use UpdateModelPublished; use ChangesModelOrder; /** diff --git a/app/Http/Controllers/Bo/SlideController.php b/app/Http/Controllers/Bo/SlideController.php index e3be40c..cd5d90e 100644 --- a/app/Http/Controllers/Bo/SlideController.php +++ b/app/Http/Controllers/Bo/SlideController.php @@ -6,17 +6,12 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Bo\Slides\StoreSlideRequest; use App\Http\Requests\Bo\Slides\UpdateSlideRequest; use App\Models\Slide; -use App\Traits\Controllers\ChangesModelOrder; -use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class SlideController extends Controller { - use UpdateModelPublished; - use ChangesModelOrder; - /** * Create the controller instance. */ diff --git a/app/Http/Requests/Bo/JobVideos/StoreJobVideoRequest.php b/app/Http/Requests/Bo/JobVideos/StoreJobVideoRequest.php new file mode 100644 index 0000000..a4662a4 --- /dev/null +++ b/app/Http/Requests/Bo/JobVideos/StoreJobVideoRequest.php @@ -0,0 +1,49 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'title' => 'required|string|between:3,255', + 'place' => 'required|string|between:3,255', + 'video_id' => 'required|string|regex:%([^"&?\/\s]{11})%i', + ]; + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes(): array + { + return [ + 'title' => trans('validation.attributes.title'), + 'place' => trans('validation.custom.place'), + 'video_id' => trans('validation.custom.video_id'), + ]; + } +} diff --git a/app/Http/Requests/Bo/JobVideos/UpdateJobVideoRequest.php b/app/Http/Requests/Bo/JobVideos/UpdateJobVideoRequest.php new file mode 100644 index 0000000..cf5efff --- /dev/null +++ b/app/Http/Requests/Bo/JobVideos/UpdateJobVideoRequest.php @@ -0,0 +1,7 @@ + 'logo', 'historicalMilestone' => 'jalon historique|jalons historiques', 'slide' => 'slide', + 'job_video' => 'vidéo métier|vidéos métiers', ] ]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 6912c0b..204895b 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -270,5 +270,6 @@ return [ 'video_id' => 'ID de la vidéo', 'youtube_video' => 'vidéo YouTube', 'slider' => 'slider', + 'place' => 'lieu', ], ]; diff --git a/resources/views/bo/layouts/nav-list.blade.php b/resources/views/bo/layouts/nav-list.blade.php index 5f06e7d..a6fa9a7 100644 --- a/resources/views/bo/layouts/nav-list.blade.php +++ b/resources/views/bo/layouts/nav-list.blade.php @@ -85,6 +85,15 @@ @endcan + @can('viewAny', \App\Models\JobVideo::class) + + @endcan @can('viewAny', \App\Models\HistoricalMilestone::class)