<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Event\WorklogEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class WorklogEventSubscriber implements EventSubscriberInterface
{
/** @var EntityManagerInterface */
protected $entityManager;
/** @var TokenStorageInterface */
protected $tokenStorage;
public function __construct(
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage
) {
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return array(
'iris.worklog' => 'handleWorklog',
);
}
public function handleWorklog(WorklogEvent $event)
{
$worklog = $event->getWorklog();
$user = $event->getUser();
if ($this->tokenStorage->getToken() && $this->tokenStorage->getToken()->getUser()) {
$worklog->setUserActivity($this->tokenStorage->getToken()->getUser());
} else if ($user) {
$worklog->setUserActivity($this->entityManager->getReference(User::class, $user->getId()));
}
$this->entityManager->persist($worklog);
$this->entityManager->flush();
$this->entityManager->detach($worklog);
}
}