mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-12 17:55:00 +00:00
- Added `hasAssigneeChanged` method for detecting assignee change - Updated `onTaskAssigned` logic to trigger only on assignee change
67 lines
2.0 KiB
PHP
67 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* Chill is a software for social workers
|
|
*
|
|
* For the full copyright and license information, please view
|
|
* the LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Chill\TaskBundle\Event;
|
|
|
|
use Chill\MainBundle\Entity\Notification;
|
|
use Chill\TaskBundle\Entity\SingleTask;
|
|
use Chill\TaskBundle\Notification\AssignTaskNotificationFlagProvider;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
|
|
|
readonly class TaskAssignEventSubscriber implements EventSubscriberInterface
|
|
{
|
|
public function __construct(
|
|
private EntityManagerInterface $entityManager,
|
|
private \Twig\Environment $engine,
|
|
) {}
|
|
|
|
public static function getSubscribedEvents(): array
|
|
{
|
|
return [
|
|
AssignTaskEvent::PERSIST => ['onTaskAssigned', 0],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Send a notification when a user is assigned to a task.
|
|
* Only triggers when the assignee actually changes.
|
|
*/
|
|
public function onTaskAssigned(AssignTaskEvent $event): void
|
|
{
|
|
if (!$event->hasAssigneeChanged()) {
|
|
return;
|
|
}
|
|
|
|
$task = $event->getTask();
|
|
$assignedUser = $task->getAssignee();
|
|
|
|
$title = $task->getTitle();
|
|
|
|
$context = [
|
|
'task' => $task,
|
|
'assignedUser' => $assignedUser,
|
|
'title' => $title,
|
|
];
|
|
|
|
$notification = new Notification();
|
|
$notification
|
|
->setRelatedEntityId($task->getId())
|
|
->setRelatedEntityClass(SingleTask::class)
|
|
->setTitle($this->engine->render('@ChillTask/Notification/task_assignment_notification_title.txt.twig', $context))
|
|
->setMessage($this->engine->render('@ChillTask/Notification/task_assignment_notification_content.txt.twig', $context))
|
|
->addAddressee($assignedUser)
|
|
->setType(AssignTaskNotificationFlagProvider::FLAG);
|
|
|
|
$this->entityManager->persist($notification);
|
|
}
|
|
}
|