src/Contact/EventSubscriber/RevokeContactPermissionsSubscriber.php line 61

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Copyright (c) 2019 TECLA Consulting Group oü.
  5.  * All rights reserved.
  6.  *
  7.  * This unpublished material is proprietary to TECLA Consulting Group oü.
  8.  * All rights reserved. The methods and
  9.  * techniques described herein are considered trade secrets
  10.  * and/or confidential. Reproduction or distribution, in whole
  11.  * or in part, is forbidden except by express written permission
  12.  * of TECLA Consulting Group oü.
  13.  *
  14.  * @author    Matúš Sýkorjak <matus@tecla.no>
  15.  * @copyright 2019 TECLA Consulting Group oü
  16.  */
  17. namespace App\Contact\EventSubscriber;
  18. use App\Contact\Event\ContactDeletedEvent;
  19. use App\Contact\Model\ContactPermissionInterface;
  20. use App\Contact\Security\ContactContextInterface;
  21. use App\Contact\Service\ContactPermissionService;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use JetBrains\PhpStorm\ArrayShape;
  24. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  25. class RevokeContactPermissionsSubscriber implements EventSubscriberInterface
  26. {
  27.     /**
  28.      * @var ContactContextInterface
  29.      */
  30.     private $contactContext;
  31.     /**
  32.      * @var ContactPermissionService
  33.      */
  34.     private $contactPermissionService;
  35.     /**
  36.      * @var EntityManagerInterface
  37.      */
  38.     private $entityManager;
  39.     public function __construct(ContactContextInterface $contactContextContactPermissionService $contactPermissionServiceEntityManagerInterface $entityManager)
  40.     {
  41.         $this->contactContext $contactContext;
  42.         $this->contactPermissionService $contactPermissionService;
  43.         $this->entityManager $entityManager;
  44.     }
  45.     #[ArrayShape([ContactDeletedEvent::class => 'string'])]
  46.     public static function getSubscribedEvents(): array
  47.     {
  48.         return [
  49.             ContactDeletedEvent::class => 'onContactDeleted',
  50.         ];
  51.     }
  52.     public function onContactDeleted(ContactDeletedEvent $event): void
  53.     {
  54.         $contact $event->getContact();
  55.         $authorizedContact $this->contactContext->getCurrent();
  56.         if (null !== $authorizedContact) {
  57.             $repository $this->entityManager->getRepository(ContactPermissionInterface::class);
  58.             $contactPermissions $repository->findBy([
  59.                 'authorizedContact' => $authorizedContact,
  60.                 'contact' => $contact,
  61.             ]);
  62.             $this->contactPermissionService->deleteCollection($contactPermissions);
  63.         }
  64.     }
  65. }