diff --git a/app/Http/Controllers/BrandController.php b/app/Http/Controllers/BrandController.php new file mode 100644 index 0000000..78780fe --- /dev/null +++ b/app/Http/Controllers/BrandController.php @@ -0,0 +1,58 @@ +user(); + $user->authorizeRoles(config('roles.const.ADMIN')); + + $brands = Marque::all(); + return view('brands.index')->with([ + 'brands' => $brands + ]); + } + + public function editUsers(Marque $brand) + { + /** @var \App\Models\User */ + $user = auth()->user(); + $user->authorizeRoles(config('roles.const.ADMIN')); + + $userModels = User::all(); + return view('brands.edit-relations')->with([ + 'brand' => $brand, + 'brands' => Marque::all(), + 'userModels' => $userModels, + ]); + } + + public function updateUsers(UpdateBrandUserRequest $request, Marque $brand) + { + /** @var \App\Models\User */ + $user = auth()->user(); + $user->authorizeRoles(config('roles.const.ADMIN')); + + DB::transaction(function () use ($request, $brand) { + if ($request->validated('users')) { + $brand->users()->sync($request->validated('users')); + } + return redirect()->route('brands.editUsers', ['brand' => $brand]) + ->with('success', __('Les utilisateurs ont bien été mis à jour')); + }); + return back()->with('error', __('Une erreur est survenue. Veuillez réessayer ultérieurement.')); + } +} diff --git a/app/Http/Requests/Bo/UpdateBrandUserRequest.php b/app/Http/Requests/Bo/UpdateBrandUserRequest.php new file mode 100644 index 0000000..ddd9380 --- /dev/null +++ b/app/Http/Requests/Bo/UpdateBrandUserRequest.php @@ -0,0 +1,43 @@ +check(); + } + + /** + * Prepare the data for validation. + * + * @return void + */ + protected function prepareForValidation() + { + $this->merge([ + 'users' => !$this->users ? null : \explode(',', \strval($this->users)) + ]); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'users' => 'nullable|array', + 'users.*' => 'required|exists:users,id', + ]; + } +} diff --git a/app/Models/Marque.php b/app/Models/Marque.php index 8a740a8..d5d1a1a 100644 --- a/app/Models/Marque.php +++ b/app/Models/Marque.php @@ -31,7 +31,8 @@ class Marque extends Model */ public function users() { - return $this->belongsToMany(User::class); + // We have to define foreignPivotKey because primaryKey has been overwritten ... + return $this->belongsToMany(User::class, foreignPivotKey:'marque_id'); } /** diff --git a/resources/js/admin.js b/resources/js/admin.js index 2aab0c9..91c3fa3 100644 --- a/resources/js/admin.js +++ b/resources/js/admin.js @@ -25,6 +25,13 @@ $(document).ready(function() { tableGlobalSearch('.datatable tr.data_row', search, [1,2,3]); }); + // ---- Gestion des utilisateurs : recherche de marque + $(".filter_brand_btn").on('click', function(event) { + event.preventDefault(); + const search = $(".filter_brand_input").val(); + tableGlobalSearch('.datatable tr.data_row', search, [1,2,3]); + }); + // ---- Gestion des dossiers : recherche un dossier $(".filter_dossier_btn").on('click', function(event) { event.preventDefault(); @@ -195,6 +202,7 @@ $(document).ready(function() { initSelector(".selector_marques"); initSelector(".selector_sujets"); + initSelector(".selector_users"); }); diff --git a/resources/views/brands/edit-relations.blade.php b/resources/views/brands/edit-relations.blade.php new file mode 100644 index 0000000..8ab35f0 --- /dev/null +++ b/resources/views/brands/edit-relations.blade.php @@ -0,0 +1,41 @@ +@extends('layouts.app') +@include('layouts.header') +@section('content') +
+ @include('modules.param-sideMenu') +
+ @include('modules.flashMessage') +
+

{{ __('Edition des utilisateurs de la marque') }} : {{ $brand->libMarq }}

+
+ {!! Form::model($brand, ['route' => ['brands.updateUsers', $brand], 'enctype' => 'multipart/form-data', 'class' => 'dataform']) !!} + @method('PUT') +
+ {!! Form::label('users', 'Utilisateurs associés') !!} +
+
+ {!! Form::label("", "") !!} +
+ {!! Form::text('search', null, ['class' => "selector_filter", 'placeholder' => "Rechercher...", "autocomplete" => "off"]) !!} +
+
    + @foreach ($userModels as $userModel) +
  • {{$userModel->firstname}} {{$userModel->lastname}}
  • + @endforeach +
+
    + @foreach ($brand->users as $user) +
  • {{$user->firstname}} {{$user->lastname}}
  • + @endforeach +
+ +
+
+
+
+ {!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} Retour +
+ {!! Form::close() !!} +
+
+@endsection diff --git a/resources/views/brands/index.blade.php b/resources/views/brands/index.blade.php new file mode 100644 index 0000000..725a051 --- /dev/null +++ b/resources/views/brands/index.blade.php @@ -0,0 +1,48 @@ +@extends('layouts.app') +@include('layouts.header') +@section('content') +
+ @include('modules.param-sideMenu') +
+ @include('modules.flashMessage') +
+

{{ __('Gestion des marques') }}

+
+ + + + + + + + + + + + @foreach ($brands as $brand) + + + + + + @endforeach + + + + + +
CODELIBELLEACTIONS
{{ $brand->codMarq }}{{ $brand->libMarq }} + + {{ __('Gérer les utilisateurs') }} + + +
+
+
+
+@endsection diff --git a/resources/views/modules/param-sideMenu.blade.php b/resources/views/modules/param-sideMenu.blade.php index 46c8df2..ef55132 100644 --- a/resources/views/modules/param-sideMenu.blade.php +++ b/resources/views/modules/param-sideMenu.blade.php @@ -3,6 +3,10 @@ {{ __('Gestion des utilisateur') }}s + routeIs('brands.*')) class="active" @endif href="{{ route('brands.index') }}"> + {{ __('Gestion des marques') }} + + routeIs('dossier.*')) class="active" @endif href="{{ route('dossier.index') }}"> {{ __('Gestion des dossiers') }} diff --git a/routes/web.php b/routes/web.php index f75c71a..58dec7f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\ArcadiaLinkController; use App\Http\Controllers\ArticleController; +use App\Http\Controllers\BrandController; use App\Http\Controllers\CommonController; use App\Http\Controllers\DossierController; use App\Http\Controllers\MediaController; @@ -57,6 +58,9 @@ Route::group(['middleware' => ['auth']], function () { // * Back office . Route::resource('user', UserController::class); + Route::get('/brands', [BrandController::class, 'index'])->name('brands.index'); + Route::get('/brands/{brand}/edit-users', [BrandController::class, 'editUsers'])->name('brands.editUsers'); + Route::put('/brands/{brand}/edit-users', [BrandController::class, 'updateUsers'])->name('brands.updateUsers'); Route::resource('arcadialinks', ArcadiaLinkController::class)->only(['index', 'destroy']); Route::resource('dossier', DossierController::class)->except('show'); Route::get('/recovery', [RecoveryController::class, 'index'])->name('recovery.index');