src/EventSubscriber/ProjectSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. namespace MedBrief\MSR\EventSubscriber;
  3. use DateTime;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use MedBrief\MSR\Entity\ProjectAccess;
  6. use MedBrief\MSR\Event\ProjectAccessedEvent;
  7. use Override;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ProjectSubscriber implements EventSubscriberInterface
  10. {
  11. public function __construct(private readonly EntityManagerInterface $entityManager)
  12. {
  13. }
  14. /**
  15. * @inheritDoc
  16. */
  17. #[Override]
  18. public static function getSubscribedEvents()
  19. {
  20. return [
  21. ProjectAccessedEvent::NAME => ['onProjectAccess', 0],
  22. ];
  23. }
  24. public function onProjectAccess(ProjectAccessedEvent $event): void
  25. {
  26. // Grab project and user from the event
  27. $project = $event->getProject();
  28. $user = $event->getUser();
  29. // Check for existing ProjectAccess with these two
  30. $projectAccess = $this->entityManager->getRepository(ProjectAccess::class)
  31. ->findOneByProjectAndUser($project, $user)
  32. ;
  33. // ProjectAccess exists, update existing
  34. if ($projectAccess) {
  35. $projectAccess->setUpdated(new DateTime());
  36. } else {
  37. // ProjectAccess doesn't exist, create a new one
  38. $projectAccess = (new ProjectAccess())
  39. ->setUpdated(new DateTime())
  40. ->setProject($project)
  41. ->setUser($user)
  42. ;
  43. }
  44. // Persist ProjectAccess
  45. $this->entityManager->persist($projectAccess);
  46. $this->entityManager->flush();
  47. }
  48. }