From 10957713c0a42fcc40684451f0ab116c67fd36e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 12:27:22 +0200 Subject: [PATCH 1/6] Unique sur Sites.name and Projects.name --- app/Models/Project.php | 3 ++- app/Models/Site.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Models/Project.php b/app/Models/Project.php index 3156765..bd762a1 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -31,7 +31,8 @@ class Project extends Model 'type' => CrudType::string(), 'validate' => [ 'string', - 'max:255' + 'max:255', + 'unique:sites,name' ], 'required' => true, 'nullable' => false, diff --git a/app/Models/Site.php b/app/Models/Site.php index 006d846..97611bc 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -35,7 +35,8 @@ class Site extends Model 'type' => CrudType::string(), 'validate' => [ 'string', - 'max:255' + 'max:255', + 'unique:sites,name' ], 'required' => true, 'nullable' => false, From ed9d3ee6edeb1a9b1349258f442936a878765876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 12:46:52 +0200 Subject: [PATCH 2/6] remove modules-error to userflashMesssage rework layout --- resources/views/layout/app.blade.php | 7 +++- .../views/modules/error-messages.blade.php | 14 -------- resources/views/ticket/create.blade.php | 26 ++++++-------- resources/views/ticket/edit.blade.php | 34 ++++++++----------- resources/views/ticket/form-inputs.blade.php | 1 - 5 files changed, 32 insertions(+), 50 deletions(-) delete mode 100644 resources/views/modules/error-messages.blade.php diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php index 04f4bb5..2bba5b5 100644 --- a/resources/views/layout/app.blade.php +++ b/resources/views/layout/app.blade.php @@ -28,7 +28,12 @@ @include('layout.nav')
- @yield('content') +
+
+ @include('modules.flashMessage') + @yield('content') +
+
@include('layout.footer') diff --git a/resources/views/modules/error-messages.blade.php b/resources/views/modules/error-messages.blade.php deleted file mode 100644 index a8d92e1..0000000 --- a/resources/views/modules/error-messages.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -@if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {!! $error !!}
  • - @endforeach -
-
-@endif -@if(session('warning')) -
- {{ session('warning') }} -
-@endif diff --git a/resources/views/ticket/create.blade.php b/resources/views/ticket/create.blade.php index cc643e6..b32cd72 100644 --- a/resources/views/ticket/create.blade.php +++ b/resources/views/ticket/create.blade.php @@ -1,24 +1,20 @@ @extends('layout.app') +@section('bodyClass', 'col-md-8') + @section('content') -
-
-
-
-
Créer un ticketRetour
-
-
- @csrf +
+
Créer un ticketRetour
+
+ + @csrf - @include('ticket.form-inputs') + @include('ticket.form-inputs') -
- -
- -
+
+
-
+
@endsection diff --git a/resources/views/ticket/edit.blade.php b/resources/views/ticket/edit.blade.php index 19bed6f..7462cbe 100644 --- a/resources/views/ticket/edit.blade.php +++ b/resources/views/ticket/edit.blade.php @@ -1,28 +1,24 @@ @extends('layout.app') +@section('bodyClass', 'col-md-8') + @section('content') -
-
-
-
-
Modifier un ticketRetour
-
-
- @csrf - @method('PUT') - @if (session('success')) -
{!! session('success') !!}
- @endif +
+
Modifier un ticketRetour
+
+ + @csrf + @method('PUT') + @if (session('success')) +
{!! session('success') !!}
+ @endif - @include('ticket.form-inputs') + @include('ticket.form-inputs') -
- -
- -
+
+
-
+
@endsection diff --git a/resources/views/ticket/form-inputs.blade.php b/resources/views/ticket/form-inputs.blade.php index 009f581..256db94 100644 --- a/resources/views/ticket/form-inputs.blade.php +++ b/resources/views/ticket/form-inputs.blade.php @@ -1,4 +1,3 @@ -@include('modules.error-messages') @php $userPr = Auth::user()->sites ?? collect([]); @endphp From e8d3335cce51440fdfe69f4041c746f938eb4de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 12:47:02 +0200 Subject: [PATCH 3/6] cleanup ticket.show --- resources/views/ticket/show.blade.php | 263 +++++++++++++------------- 1 file changed, 130 insertions(+), 133 deletions(-) diff --git a/resources/views/ticket/show.blade.php b/resources/views/ticket/show.blade.php index dbeba5e..7d7a7eb 100644 --- a/resources/views/ticket/show.blade.php +++ b/resources/views/ticket/show.blade.php @@ -1,140 +1,137 @@ @extends('layout.app') @section('content') -
-
-

- ← - Ticket n°{{ $ticket->id }} : {{ $ticket->site->name }} - {{ $ticket->type->label }} - {{--@cannot('createMessage', $ticket)--}} - {{ $ticket->status->label }} - {{--@endcan--}} -

-
- @can('suscribeToTicket', $ticket) -
- @csrf -
- - -
-
- @endcan - @can('changeStatus', $ticket) -
- @csrf - -
- @endcan -
-
-
-
- @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
+
+

+ ← + {{ __('Ticket n° :ticketId : :ticketSiteName - :ticketTypeLabel', [ + 'ticketId' => $ticket->id, + 'ticketSiteName' => $ticket->site->name, + 'ticketTypeLabel' => $ticket->type->label + ]) }} + {{ $ticket->status->label }} +

+
+ @can('suscribeToTicket', $ticket) +
+ @csrf +
+ +
- @endif -

- Suivi - @can('createMessage', $ticket) - - - @endcan -

- @foreach ($messages as $message) - @if ($message->user_id === null) -
- {!! nl2br(clean($message->message)) !!} - Le {{ \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i')}} - (Message système) -
- @else -
- {!! Utils::plainToHtml($message->message) !!} - @if ($message->file !== null) -
Ouvrir la pièce jointe
- @endif

- Le {{ \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i')}} par {{ $message->user ? $message->user->name : __('Utilisateur supprimé') }} -
- @endif - @endforeach + + @endcan + @can('changeStatus', $ticket) +
+ @csrf + +
+ @endcan
-
-
-

Description

-

{!! Utils::plainToHtml($ticket->text) !!}

- Créé le {{ \Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i') }} par {{ $ticket->user ? $ticket->user->name : __('Utilisateur supprimé') }} -
- @if ($ticket->file !== null || $ticket->file2 !== null) -
-
-

Pièces jointes

- -
- @endif
+
+
+

+ {{ __('Suivi') }} + @can('createMessage', $ticket) + + + @endcan +

+ @foreach ($messages as $message) + @if ($message->user_id === null) +
+ {!! nl2br(clean($message->message)) !!} - Le {{ \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i')}} + ({{ __('Message système') }}) +
+ @else +
+ {!! Utils::plainToHtml($message->message) !!} + @if ($message->file !== null) +
Ouvrir la pièce jointe
+ @endif

+ {!! __('Créé le :date par :userName', [ + 'date' => \Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i'), + 'userName' => $ticket->user ? $ticket->user->name : __('Utilisateur supprimé') + ]) !!} +
+ @endif + @endforeach +
+
+
+

{{__('Description') }}

+

{!! Utils::plainToHtml($ticket->text) !!}

+ {!! __('Créé le :date par :userName', [ + 'date' => \Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i'), + 'userName' => $ticket->user ? $ticket->user->name : __('Utilisateur supprimé') + ]) !!} +
+@if ($ticket->file !== null || $ticket->file2 !== null) +
+
+

{{ __('Pièces jointes') }}

+ +
+@endif @endsection From 19393ce30719a72ee7c932a1c4b7dc5f48fd54df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 13:09:35 +0200 Subject: [PATCH 4/6] Add action reopen ticket --- app/Http/Controllers/TicketController.php | 14 ++++++++++++++ app/Policies/Rules/UserRoleRules.php | 5 +++++ app/Policies/TicketPolicy.php | 3 ++- resources/views/ticket/show.blade.php | 8 ++++++++ routes/web.php | 3 +++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 6e96c46..d2b72d8 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -4,6 +4,8 @@ namespace App\Http\Controllers; use App\Enums\TicketStatus; use App\Enums\TicketType; +use App\Events\NotifySubscriptions; +use App\Events\TicketStatusChanged; use App\Http\Requests\ChangeTicketStatus; use App\Http\Requests\CreateMessage; use App\Http\Requests\SortTickets; @@ -271,4 +273,16 @@ class TicketController extends Controller User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); return back(); } + + public function reopen(Ticket $ticket) + { + $message = "{$ticket->user->name} à réouvert le ticket n°{$ticket->id}"; + $oldStatus = $ticket->status; + $ticket->status = TicketStatus::inprogress(); + $ticket->saveQuietly(); + event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); + event(new NotifySubscriptions($ticket, $message, collect($ticket->user))); + User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); + return back()->with('warning', trans('Votre ticket à été réouvert.')); + } } diff --git a/app/Policies/Rules/UserRoleRules.php b/app/Policies/Rules/UserRoleRules.php index d172415..0d4b185 100644 --- a/app/Policies/Rules/UserRoleRules.php +++ b/app/Policies/Rules/UserRoleRules.php @@ -23,6 +23,11 @@ abstract class UserRoleRules extends StaticRules return $user->role->equals(Role::developper()); } + protected static function userIsClient(User $user) + { + return $user->role->equals(Role::client()); + } + protected static function allowEveryOne() { return true; diff --git a/app/Policies/TicketPolicy.php b/app/Policies/TicketPolicy.php index 93b4dbc..6d36d35 100644 --- a/app/Policies/TicketPolicy.php +++ b/app/Policies/TicketPolicy.php @@ -45,7 +45,8 @@ class TicketPolicy extends RootPolicy SSR::make('userSitesHasTicket', $user, $model) ]), 'suscribeToTicket' => TicketStaticRules::make('ticketIsNotArchived', $model), - 'createMessage' => TicketStaticRules::make('ticketIsNotArchived', $model) + 'createMessage' => TicketStaticRules::make('ticketIsNotArchived', $model), + 'reopen' => URR::make('userIsClient', $user) ] ]; } diff --git a/resources/views/ticket/show.blade.php b/resources/views/ticket/show.blade.php index 7d7a7eb..3bd05fa 100644 --- a/resources/views/ticket/show.blade.php +++ b/resources/views/ticket/show.blade.php @@ -31,6 +31,14 @@ @endcan + @if($ticket->status->equals(TicketStatus::archived())) + @can('reopen', $ticket) +
+ @csrf + +
+ @endcan + @endif

diff --git a/routes/web.php b/routes/web.php index 54307d3..205ae0b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -57,6 +57,9 @@ Route::middleware(['auth'])->group(function () { Route::resource('sites.files', FileController::class); Route::prefix('/ticket')->name('ticket.')->group(function () { + Route::post('/{ticket}/reopen', [TicketController::class, 'reopen']) + ->middleware('can:reopen,ticket') + ->name('reopen'); Route::post('/{ticket}/status', [TicketController::class, 'changeStatus']) ->middleware('can:changeStatus,ticket') ->name('changeStatus'); From ba40c791273455aba8b45e6b86f4a34804752a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 13:23:16 +0200 Subject: [PATCH 5/6] Add messages for tickets actions --- app/Http/Controllers/TicketController.php | 24 +++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index d2b72d8..148f320 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -179,7 +179,8 @@ class TicketController extends Controller throw new Exception('Missing MAIL_ADMIN in .env'); } - return redirect()->route('ticket.show', $ticket)->with('success', 'Ticket enregistré !'); + return redirect()->route('ticket.show', $ticket) + ->with('success', 'Ticket enregistré !'); } // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass @@ -215,7 +216,8 @@ class TicketController extends Controller $ticket->save(); - return redirect()->route('ticket.edit', $ticket->id)->with('success', 'Modifications enregistrées !'); + return redirect()->route('ticket.edit', $ticket->id) + ->with('success', 'Modifications enregistrées !'); } public function changeStatus(ChangeTicketStatus $request, Ticket $ticket) @@ -223,7 +225,8 @@ class TicketController extends Controller $ticket->fill($request->validated()); $ticket->save(); - return back(); + return back() + ->with('warning', trans('Le status à été modifié')); } public function createMessage(CreateMessage $request, Ticket $ticket) @@ -258,20 +261,29 @@ class TicketController extends Controller $message->saveOrFail(); - return back(); + return back() + ->with('success', trans('Votre message à été ajouté')); } public function setToArchive(Ticket $ticket) { $ticket->status = TicketStatus::archived(); $ticket->saveOrFail(); - return redirect()->route('ticket.index'); + return redirect()->route('ticket.index') + ->with('warning', trans('Le ticket est archivé')); } public function subscribe(Ticket $ticket) { + /** @var \App\Models\User */ + $user = auth()->user(); User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); - return back(); + $status = $user->subscriptions()->where('ticket_id', $ticket->id)->exists(); + if ($status) { + return back() + ->with('success', trans('Vous avez été inscrit')); + } + return back()->with('warning', trans('Vous avez été désinscrit')); } public function reopen(Ticket $ticket) From 2cae65f1c1ec8bd37f225ce2268a0f1592442e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 29 Sep 2021 13:24:12 +0200 Subject: [PATCH 6/6] Update changelog --- CHANGELOG.md | 5 +++++ composer.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 036deda..cf74a24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +### 29.09 -> 1.0.3 +- Correction des avertissements avant cloture des tickets +- Ajout d'un bouton pour les utilisateurs afin de réouvrir un ticket clos +- Ajout de messages de confirmation sur les actions de tickets + ### 29.09 -> 1.0.2 - Modification Un ticket qui est marqué comme traité ou en production depuis plus de 15 jours et sans activité sera automatiquement clos et archivé - Modification Il n'est désomrais plus possible de répondre à un ticket archivé dans touts les cas diff --git a/composer.json b/composer.json index 56cabbc..8a7d504 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "ldcweb/supportweb", - "version": "1.0.2", + "version": "1.0.3", "type": "project", "description": "The Laravel Framework.", "keywords": [