<?php
namespace App\EventSubscriber;
use ApiPlatform\Symfony\EventListener\EventPriorities;
use App\ActionPlan\ActionPlanTasksPrepare;
use App\Entity\ActionPlan;
use App\Entity\ActionPlanTasks;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
final class ActionPlanTasksSubscriber implements EventSubscriberInterface
{
public function __construct(private ActionPlanTasksPrepare $actionPlanTasksPrepare, private EntityManagerInterface $entityManager )
{
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => [
['preWriteActionPlanTasks', EventPriorities::PRE_WRITE]
],
];
}
public function preWriteActionPlanTasks(ViewEvent $event): void
{
$actionPlanTasks = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if(($actionPlanTasks instanceof ActionPlanTasks) && Request::METHOD_PUT === $method){
$idActionPlanTasks = $actionPlanTasks->getId();
$sql = "select * from action_plan_tasks where id = $idActionPlanTasks";
$conn = $this->entityManager->getConnection();
$stmt = $conn->prepare($sql);
$oldActionPlanTasks = $stmt->executeQuery();
$oldActionPlanTasks = $oldActionPlanTasks->fetchAssociative();
if(($actionPlanTasks->getUserInCharge()) && ($oldActionPlanTasks['user_in_charge_id'] != $actionPlanTasks->getUserInCharge()->getId())){
$this->actionPlanTasksPrepare->sendActionPlanTasksEmail($actionPlanTasks);
}
else{
return;
}
}
if (!($actionPlanTasks instanceof ActionPlanTasks) || (Request::METHOD_POST !== $method)) {
return;
}
$this->actionPlanTasksPrepare->sendActionPlanTasksEmail($actionPlanTasks);
}
}