src/EventSubscriber/WorklogEventSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use App\Event\WorklogEvent;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8. class WorklogEventSubscriber implements EventSubscriberInterface
  9. {
  10.     /** @var EntityManagerInterface */
  11.     protected $entityManager;
  12.     /** @var TokenStorageInterface */
  13.     protected $tokenStorage;
  14.     public function __construct(
  15.         EntityManagerInterface $entityManager,
  16.         TokenStorageInterface $tokenStorage
  17.     ) {
  18.         $this->entityManager $entityManager;
  19.         $this->tokenStorage $tokenStorage;
  20.     }
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return array(
  24.             'iris.worklog' => 'handleWorklog',
  25.         );
  26.     }
  27.     public function handleWorklog(WorklogEvent $event)
  28.     {
  29.         $worklog $event->getWorklog();
  30.         $user $event->getUser();
  31.         if ($this->tokenStorage->getToken() && $this->tokenStorage->getToken()->getUser()) {
  32.             $worklog->setUserActivity($this->tokenStorage->getToken()->getUser());
  33.         } else if ($user) {
  34.             $worklog->setUserActivity($this->entityManager->getReference(User::class, $user->getId()));
  35.         }
  36.         $this->entityManager->persist($worklog);
  37.         $this->entityManager->flush();
  38.         $this->entityManager->detach($worklog);
  39.     }
  40. }