From af373dfdc1de993968b61d6aa366c962021754bc Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Mon, 25 Mar 2024 16:22:57 +0100 Subject: [PATCH] add show view for CRUDs --- .../Controllers/Bo/StaticPageController.php | 11 +++ app/Http/Controllers/Bo/UserController.php | 11 +++ app/Policies/StaticPagePolicy.php | 11 +++ resources/lang/en/crud.php | 5 +- resources/lang/en/validation.php | 13 ++- resources/lang/fr/crud.php | 15 +-- resources/lang/fr/validation.php | 23 ++--- resources/ts/bo/utilities/fontawesome.ts | 2 + .../bo/pages/static_pages/edit.blade.php | 10 +- .../pages/static_pages/index-list.blade.php | 13 ++- .../bo/pages/static_pages/show.blade.php | 66 +++++++++++++ resources/views/bo/pages/users/edit.blade.php | 9 +- .../views/bo/pages/users/index-list.blade.php | 9 +- resources/views/bo/pages/users/show.blade.php | 92 +++++++++++++++++++ routes/breadcrumbs-bo.php | 9 ++ routes/web-bo.php | 9 +- 16 files changed, 271 insertions(+), 37 deletions(-) create mode 100644 resources/views/bo/pages/static_pages/show.blade.php create mode 100644 resources/views/bo/pages/users/show.blade.php diff --git a/app/Http/Controllers/Bo/StaticPageController.php b/app/Http/Controllers/Bo/StaticPageController.php index 9b92073..2460955 100644 --- a/app/Http/Controllers/Bo/StaticPageController.php +++ b/app/Http/Controllers/Bo/StaticPageController.php @@ -53,6 +53,17 @@ class StaticPageController extends Controller return view('bo.pages.static_pages.index', compact('staticPageModelList', 'search', 'searchFields')); } + /** + * Show a specific resource. + * + * @param \App\Models\StaticPage $static_page + * @return \Illuminate\Contracts\View\View + */ + public function show(StaticPage $static_page): \Illuminate\Contracts\View\View + { + return view('bo.pages.static_pages.show', ['staticPageModel' => $static_page]); + } + /** * Show the form for editing the specified resource. * diff --git a/app/Http/Controllers/Bo/UserController.php b/app/Http/Controllers/Bo/UserController.php index a7c869e..cb7e94d 100644 --- a/app/Http/Controllers/Bo/UserController.php +++ b/app/Http/Controllers/Bo/UserController.php @@ -63,6 +63,17 @@ class UserController extends Controller return view('bo.pages.users.index', compact('userModels', 'search', 'searchFields')); } + /** + * Show a specific resource. + * + * @param \App\Models\User $user + * @return \Illuminate\Contracts\View\View + */ + public function show(User $user): \Illuminate\Contracts\View\View + { + return view('bo.pages.users.show', ['userModel' => $user]); + } + /** * Show the form for creating a new resource. * diff --git a/app/Policies/StaticPagePolicy.php b/app/Policies/StaticPagePolicy.php index 3ab2af8..b15e0ba 100644 --- a/app/Policies/StaticPagePolicy.php +++ b/app/Policies/StaticPagePolicy.php @@ -20,6 +20,17 @@ class StaticPagePolicy return UserStaticRules::atLeastRole($authUser, RoleEnum::admin); } + /** + * Determine whether the user can view the model. + * + * @param \App\Models\User $authUser + * @return boolean + */ + public function view(User $authUser): bool + { + return UserStaticRules::atLeastRole($authUser, RoleEnum::admin); + } + /** * Determine whether the user can update the model. * diff --git a/resources/lang/en/crud.php b/resources/lang/en/crud.php index 04f9293..d077cc4 100644 --- a/resources/lang/en/crud.php +++ b/resources/lang/en/crud.php @@ -3,13 +3,14 @@ return [ 'actions' => [ 'list' => 'list', - 'view' => 'view', + 'show' => 'view', 'create' => 'create', - 'duplicate' => 'duplicate', 'update' => 'update', + 'duplicate' => 'duplicate', 'delete' => 'delete', 'save' => 'save', 'edit' => 'edit', + 'view' => 'overview', ], 'helpers' => [ diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index a2bcbb2..1622d35 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -214,27 +214,26 @@ return [ 'username' => 'username', 'year' => 'year', ], - 'youtube_id' => ':attribute must be a valid Youtube video ID', 'vimeo_id' => ':attribute must be a valid Vimeo video ID', - 'custom' => [ 'of_the' => [ 'male' => 'of the ', 'female' => 'of the ', 'vowel' => 'of the ' ], + 'activated' => 'activated', 'event' => 'event', 'model' => 'target element', 'order' => 'order', 'publication' => 'publication', - 'activated' => 'activated', - 'target' => 'target', - 'static_page_type' => 'static page type', - 'seo_title' => 'SEO title', + 'published_at' => 'published at', 'seo_description' => 'SEO description', + 'seo_title' => 'SEO title', + 'static_page_type' => 'static page type', + 'target' => 'target', 'video_id' => 'ID of the video', - 'youtube_video_id' => 'ID od the youtube video', 'vimeo_video_id' => 'ID of the vimeo video', + 'youtube_video_id' => 'ID od the youtube video', ], ]; diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php index 8aa5dc7..b017071 100644 --- a/resources/lang/fr/crud.php +++ b/resources/lang/fr/crud.php @@ -2,14 +2,15 @@ return [ 'actions' => [ - 'list' => 'liste', - 'view' => 'voir', - 'create' => 'créer', + 'list' => 'liste', + 'show' => 'voir', + 'create' => 'créer', + 'update' => 'éditer', 'duplicate' => 'dupliquer', - 'update' => 'éditer', - 'delete' => 'supprimer', - 'save' => 'sauvegarder', - 'edit' => 'mettre à jour', + 'delete' => 'supprimer', + 'save' => 'sauvegarder', + 'edit' => 'mettre à jour', + 'view' => 'aperçu', ], 'helpers' => [ diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 1e008de..d050d22 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -12,7 +12,8 @@ return [ 'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.', 'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.', 'array' => 'Le champ :attribute doit être un tableau.', - 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles codés sur un octet.', + 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles + codés sur un octet.', 'before' => 'Le champ :attribute doit être une date antérieure au :date.', 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.', 'between' => [ @@ -108,7 +109,8 @@ return [ 'mixed' => 'Le champ :attribute doit contenir au moins une majuscule et une minuscule.', 'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.', 'symbols' => 'Le champ :attribute doit contenir au moins un symbole.', - 'uncompromised' => 'La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir une valeur différente.', + 'uncompromised' => 'La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir + une valeur différente.', ], 'present' => 'Le champ :attribute doit être présent.', 'prohibited' => 'Le champ :attribute est interdit.', @@ -152,7 +154,7 @@ return [ 'city' => 'ville', 'content' => 'contenu', 'country' => 'pays', - 'created_at' => 'créé à', + 'created_at' => 'créé le', 'creator' => 'créateur', 'current_password' => 'mot de passe actuel', 'date' => 'Date', @@ -210,31 +212,30 @@ return [ 'text' => 'texte', 'time' => 'heure', 'title' => 'titre', - 'updated_at' => 'mis à jour à', + 'updated_at' => 'mis à jour le', 'username' => 'nom d\'utilisateur', 'year' => 'année', ], - 'youtube_id' => ':attribute doit être un ID de vidéo Youtube valide', 'vimeo_id' => ':attribute doit être un ID de vidéo Vimeo valide', - 'custom' => [ 'of_the' => [ 'male' => 'du ', 'female' => 'de la ', 'vowel' => 'de l\'' ], + 'activated' => 'activé', 'event' => 'évènement', 'model' => 'élément ciblé', 'order' => 'ordre', 'publication' => 'publication', - 'activated' => 'activé', - 'target' => 'cible', - 'static_page_type' => 'type de page', - 'seo_title' => 'titre SEO', + 'published_at' => 'publié le', 'seo_description' => 'description SEO', + 'seo_title' => 'titre SEO', + 'static_page_type' => 'type de page', + 'target' => 'cible', 'video_id' => 'ID de la vidéo', - 'youtube_video_id' => 'ID de la vidéo youtube', 'vimeo_video_id' => 'ID de la vidéo viméo', + 'youtube_video_id' => 'ID de la vidéo youtube', ], ]; diff --git a/resources/ts/bo/utilities/fontawesome.ts b/resources/ts/bo/utilities/fontawesome.ts index 3866b43..5e8d3ca 100644 --- a/resources/ts/bo/utilities/fontawesome.ts +++ b/resources/ts/bo/utilities/fontawesome.ts @@ -5,6 +5,7 @@ import { faArrowRight, faArrowRightFromBracket, faArrowUp, + faArrowUpRightFromSquare, faArrowsAltH, faArrowsAltV, faBackspace, @@ -69,5 +70,6 @@ library.add(faPaintRoller); library.add(faXmark); library.add(faChevronLeft); library.add(faChevronRight); +library.add(faArrowUpRightFromSquare); dom.watch(); diff --git a/resources/views/bo/pages/static_pages/edit.blade.php b/resources/views/bo/pages/static_pages/edit.blade.php index d44df70..d873460 100644 --- a/resources/views/bo/pages/static_pages/edit.blade.php +++ b/resources/views/bo/pages/static_pages/edit.blade.php @@ -2,8 +2,7 @@ @section('title', __('Édition d\'un :model', ['model' => __('models.classes.static_page')])) @section('description', __('Édition d\'un :model déjà existant', ['model' => __('models.classes.static_page')])) -@section('breadcrumb', - request()->route()->getName()) +@section('breadcrumb', request()->route()->getName()) @section('content')
@@ -16,6 +15,13 @@
+ @can('view', $staticPageModel) + + + + @endcan + @endcan + + @endcan +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{ str(sprintf('%s/%s', __('validation.attributes.first_name'), __('validation.attributes.last_name')))->ucFirst() }} + + {{ sprintf('%s %s', $userModel->first_name, $userModel->last_name) }} +
{{ str(__('validation.attributes.email'))->ucFirst() }} + {{ $userModel->email }} +
{{ str(__('validation.attributes.role'))->ucFirst() }} + {{ str($userModel->role->label())->ucFirst() }} +
+ {{ str(__('validation.custom.published_at'))->ucFirst() }} + + {{ $userModel->published ? $userModel->published_at->isoFormat('LLLL') : __('Utilisateur non publié') }} +
{{ str(__('validation.attributes.created_at'))->ucFirst() }} + {{ $userModel->created_at->isoFormat('LLLL') }} +
{{ str(__('validation.attributes.updated_at'))->ucFirst() }} + {{ $userModel->updated_at->isoFormat('LLLL') }} +
+
+
+
+@endsection diff --git a/routes/breadcrumbs-bo.php b/routes/breadcrumbs-bo.php index 8f745d3..7bf136f 100644 --- a/routes/breadcrumbs-bo.php +++ b/routes/breadcrumbs-bo.php @@ -14,6 +14,10 @@ Breadcrumbs::for('bo.users.index', function (Generator $trail) { route('bo.users.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) ); }); +Breadcrumbs::for('bo.users.show', function (Generator $trail, User $user) { + $trail->parent('bo.users.index'); + $trail->push(Str::ucfirst(trans('crud.actions.view')), route('bo.users.show', $user)); +}); Breadcrumbs::for('bo.users.create', function (Generator $trail) { $trail->parent('bo.users.index'); $trail->push(Str::ucfirst(trans('crud.actions.create')), route('bo.users.create')); @@ -46,6 +50,11 @@ Breadcrumbs::for('bo.static_pages.index', function (Generator $trail) { route('bo.static_pages.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) ); }); +Breadcrumbs::for('bo.static_pages.show', function (Generator $trail, StaticPage $static_page) { + $trail->parent('bo.static_pages.index'); + $trail->push(Str::ucfirst(trans('crud.actions.show')), route('bo.static_pages.show', $static_page)); +}); + Breadcrumbs::for('bo.static_pages.edit', function (Generator $trail, StaticPage $static_page) { $trail->parent('bo.static_pages.index'); $trail->push(Str::ucfirst(trans('crud.actions.edit')), route('bo.static_pages.edit', $static_page)); diff --git a/routes/web-bo.php b/routes/web-bo.php index b226bf7..9e3e715 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -29,7 +29,7 @@ Route::prefix('bo') Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); // * USERS. - Route::resource('users', UserController::class)->except('show'); + Route::resource('users', UserController::class); Route::patch('/users/{user}/change-published', [ UserController::class, 'changePublished' ])->name('users.change-published'); @@ -40,11 +40,12 @@ Route::prefix('bo') // * StaticPages Route::resource('pages', StaticPageController::class) ->names([ - 'index' => 'static_pages.index', - 'edit' => 'static_pages.edit', + 'index' => 'static_pages.index', + 'show' => 'static_pages.show', + 'edit' => 'static_pages.edit', 'update' => 'static_pages.update', ])->parameters(['pages' => 'static_page']) - ->only(['index', 'edit', 'update']) + ->only(['index', 'show', 'edit', 'update']) ->withoutMiddleware('htmlsanitize') ->middleware(['htmlsanitize:content']);