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/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 6e96c46..148f320 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; @@ -177,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 @@ -213,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) @@ -221,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) @@ -256,19 +261,40 @@ 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) + { + $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/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, 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/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": [ 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')
{!! 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é') }} -{!! 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é') + ]) !!} +