<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\Event\TicketCreateEvent;
use App\Service\Jira\JiraService;
use App\Service\Mailing\MailingService;
use App\Service\Mailing\MailContentTicket;
class TicketCreateEventSubscriber implements EventSubscriberInterface
{
private $mailer;
private $em;
private $jiraService;
public function __construct(
MailingService $mailer,
JiraService $jiraService,
EntityManagerInterface $em
){
$this->mailer = $mailer;
$this->jiraService = $jiraService;
$this->em = $em;
}
public static function getSubscribedEvents()
{
return [
TicketCreateEvent::NAME => [
['syncJiraTicket', 20],
['sendNotification', 5]
]
];
}
public function syncJiraTicket(TicketCreateEvent $event)
{
$ticket = $event->getTicket();
$jiraTicket = $this->jiraService->createTicket(
'PT',
$ticket->getType(),
$ticket->getPriority(),
'['.$ticket->getCreatedBy()->getName().'] '.$ticket->getTitle(),
$ticket->getDescription(),
'Req'
);
if ( $jiraTicket ) {
$ticket->setJiraId($jiraTicket->id);
$ticket->setJiraTicket($jiraTicket->key);
}
$this->em->persist($ticket);
$this->em->flush();
}
public function sendNotification(TicketCreateEvent $event)
{
$this->mailer->send(
(new MailContentTicket())->newTicketAdded($event->getTicket()),
'[email protected]'
);
}
}