diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php
index 746f15f..0cfeb69 100644
--- a/app/Http/Controllers/TicketController.php
+++ b/app/Http/Controllers/TicketController.php
@@ -454,6 +454,7 @@ class TicketController extends Controller
/** @var \App\Enums\TicketStatus */
$oldStatus = $ticket->status;
+ // * Notification systeme doit etre privée.
event(new TicketStatusChanged($ticket, $oldStatus, null, $message, true, false));
event(new NotifySubscriptions($ticket, $message, collect([$ticket->user])));
diff --git a/app/Http/Requests/CreateMessage.php b/app/Http/Requests/CreateMessage.php
index f754e0e..a0eb2e3 100644
--- a/app/Http/Requests/CreateMessage.php
+++ b/app/Http/Requests/CreateMessage.php
@@ -20,14 +20,15 @@ class CreateMessage extends FormRequest
return false;
}
if (
- !auth()->user()->can('createPrivateMessage', request()->route()->ticket)
+ !$user->can('createPrivateMessage', $this->route()->ticket)
&& $this->is_private == MessageType::private()
) {
return false;
}
- return auth()->check() and auth()->user()->sites and (
- $user->isAdmin() or
- auth()->user()->sites->contains(request()->route()->ticket->site_id)
+ return auth()->check() and $user->sites and (
+ $user->isAdmin() or $user->sites->contains(
+ $this->route()->ticket->site_id
+ )
);
}
diff --git a/app/Listeners/AddStatusMessages.php b/app/Listeners/AddStatusMessages.php
index 7b31768..f3d50d9 100644
--- a/app/Listeners/AddStatusMessages.php
+++ b/app/Listeners/AddStatusMessages.php
@@ -18,25 +18,25 @@ class AddStatusMessages
*/
public function handle(TicketStatusChanged $event)
{
+ // phpcs:enable
$message = new Message();
$message->ticket_id = $event->ticket->id;
- $message->type = MessageType::public();
- if ($event->is_private) {
- $message->type = MessageType::private();
- }
+ // * Le message system est privé si demandé (eg: Assignation à une personne).
+ $message->type = $event->is_private ?
+ MessageType::public() : MessageType::private();
if ($event->message) {
$message->message = $event->message;
} elseif ($event->user) {
$message->message = sprintf(
"%s %s %s",
$event->user->name,
- __("a modifié le statut en"),
+ trans('a modifié le statut en'),
$event->ticket->status->label
);
} else {
$message->message = sprintf(
"%s : %s",
- __("Le statut est passé à"),
+ trans('Le statut est passé à'),
$event->ticket->status->label
);
}
@@ -46,55 +46,55 @@ class AddStatusMessages
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Votre ticket a été créé, nous allons en prendre connaissance.")
+ trans('Votre ticket a été créé, nous allons en prendre connaissance.')
);
break;
case TicketStatus::estimateTodo():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Votre ticket nécessite une estimation, nous allons vous proposer un devis.")
+ trans('Votre ticket nécessite une estimation, nous allons vous proposer un devis.')
);
break;
case TicketStatus::takenInAccount():
$message->message .= sprintf("
" .
- __("Votre ticket est dans le processus de traitement.") . "
");
+ trans('Votre ticket est dans le processus de traitement.') . "
");
break;
case TicketStatus::waiting():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Nous attendons une réponse de votre part pour procéder à la suite du traitement.")
+ trans('Nous attendons une réponse de votre part pour procéder à la suite du traitement.')
);
break;
case TicketStatus::waitingValidation():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Nous attendons une validation de votre part pour procéder au traitement.")
+ trans('Nous attendons une validation de votre part pour procéder au traitement.')
);
break;
case TicketStatus::recette():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Le traitement à été réalisé et mis à disposition sur la plateforme de recette.
- Vous pouvez vérifier que la solution mise en œuvre correspond à la demande.")
+ trans('Le traitement à été réalisé et mis à disposition sur la plateforme de recette.
+ Vous pouvez vérifier que la solution mise en œuvre correspond à la demande.')
);
break;
case TicketStatus::production():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("La solution à été mise en ligne.
- Vous pouvez vérifier sur le site de production que tout fonctionne comme attendu.")
+ trans('La solution à été mise en ligne.
+ Vous pouvez vérifier sur le site de production que tout fonctionne comme attendu.')
);
break;
case TicketStatus::archived():
$message->message = sprintf(
"%s
%s
",
$message->message,
- __("Ce ticket est clos.")
+ trans('Ce ticket est clos.')
);
break;
} //end switch
diff --git a/app/Listeners/SendSubscriptionsNotificationsMail.php b/app/Listeners/SendSubscriptionsNotificationsMail.php
index 1db3858..1f46865 100644
--- a/app/Listeners/SendSubscriptionsNotificationsMail.php
+++ b/app/Listeners/SendSubscriptionsNotificationsMail.php
@@ -22,7 +22,9 @@ class SendSubscriptionsNotificationsMail
$ignoreUsers = $event->ignoreUsers ?? collect();
foreach ($event->ticket->subscriptions as $sub) {
if (
+ // * Ignore the message author (job in sync).
$sub->email !== $ignoreConnectedUserEmail and
+ // * Are there are users to notify
!$ignoreUsers->filter(function (User $user) use ($sub) {
return $user->email === $sub->email;
})->count()
diff --git a/app/Models/Message.php b/app/Models/Message.php
index 6755a42..3140882 100644
--- a/app/Models/Message.php
+++ b/app/Models/Message.php
@@ -9,6 +9,14 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Kwaadpepper\Enum\Traits\CastsEnums;
+/**
+ *
+ * @property string $message The message content.
+ * @property \App\Enums\MessageType $type The message is not visible for clients.
+ * @property string $file The message joined file path.
+ *
+ * @package App\Models
+ */
class Message extends Model
{
use HasFactory;
@@ -32,7 +40,6 @@ class Message extends Model
protected $enumCasts = [
'type' => MessageType::class
];
-
/**
* The attributes that are mass assignable.
*
@@ -52,10 +59,30 @@ class Message extends Model
}]);
/** @var \App\Models\User $messageUser */
$messageUser = $message->user()->withTrashed()->firstOrFail();
- // * Send mail to mentionned users
- $usersNotified = $ticket->sendBeenMentionnedToUser($message);
+ // * Send mail to mentionned users\
+ /** @var \Illuminate\Support\Collection<\App\Models\User> */
+ $dontNotifyUsers = $ticket->sendBeenMentionnedToUser($message);
+
+ // * Ignorer le cas où le message est privé et l'auteur du ticket n'est pas admin.
+ if (!$ticket->user->isAdmin() && $message->type->equals(MessageType::private())) {
+ $dontNotifyUsers->push($ticket->user);
+ }
+
+ // * Filter Users if the message is private.
+ if ($message->type->equals(MessageType::private())) {
+ $dontNotifyUsers = $dontNotifyUsers->concat(
+ // * Add to ignore list all non Admin users.
+ $ticket->subscriptions->filter(function (User $suscribedUser) {
+ return !$suscribedUser->isAdmin();
+ })
+ );
+ }
// * If email has not been sen to ticket author yet.
- if (!$usersNotified->contains($ticket->user) and $ticket->user->id !== $messageUser->id) {
+ if (
+ !$dontNotifyUsers->contains(function (User $dontNotifyUser) use ($ticket) {
+ return $dontNotifyUser->id === $ticket->user->id;
+ }) and $ticket->user->id !== $messageUser->id
+ ) {
// * Send mail to ticket author
event(new NotifyTicketCreator(
$ticket,
@@ -64,7 +91,7 @@ class Message extends Model
'message' => $message->message
])
));
- $usersNotified->push($ticket->user);
+ $dontNotifyUsers->push($ticket->user);
}
// ? Is message author is admin ?
if ($messageUser->isAdmin()) {
@@ -85,7 +112,7 @@ class Message extends Model
'name' => $message->user->name,
'message' => $message->message
]),
- $usersNotified
+ $dontNotifyUsers
));
}//end if
});
diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php
index db8b24b..1a5f9ea 100644
--- a/app/Models/Ticket.php
+++ b/app/Models/Ticket.php
@@ -181,6 +181,7 @@ class Ticket extends Model
{
$ticket = $this;
// Find @user + send mail si un seul user est trouvé.
+ /** @var \Illuminate\Support\Collection<\App\Models\User> */
$usersNotified = collect([]);
$matches = [];
$ticket->load('site');
@@ -215,8 +216,9 @@ class Ticket extends Model
}
} catch (ModelNotFoundException $e) {
continue;
- }//end try
- }//end foreach
+ } //end try
+ } //end foreach
+
return $usersNotified;
}
diff --git a/resources/views/ticket/show.blade.php b/resources/views/ticket/show.blade.php
index 4818ca1..d5095d8 100644
--- a/resources/views/ticket/show.blade.php
+++ b/resources/views/ticket/show.blade.php
@@ -130,7 +130,7 @@