src/Drive/Sharepoint/EventSubscriber/ContactPortalUserSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Drive\Sharepoint\EventSubscriber;
  3. use App\Drive\Sharepoint\Event\ClosingContactPortalUserEvent;
  4. use App\Drive\Sharepoint\Event\ContactPortalUserEvent;
  5. use AppBundle\Entity\Matter;
  6. use AppBundle\Service\DriveActionsPublisher;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. /**
  9.  * Class ContactPortalUserSubscriber
  10.  */
  11. class ContactPortalUserSubscriber implements EventSubscriberInterface
  12. {
  13.     public const SHARING_CONTACT_PORTAL_USER 'sharing_contact_portal_user';
  14.     public const CLOSING_CONTACT_PORTAL_USER 'closing_contact_portal_user';
  15.     /**
  16.      * @var DriveActionsPublisher
  17.      */
  18.     private $driveActionsPublisher;
  19.     /**
  20.      * ContactPortalUserSubscriber constructor.
  21.      *
  22.      * @param DriveActionsPublisher $driveActionsPublisher
  23.      */
  24.     public function __construct(DriveActionsPublisher $driveActionsPublisher)
  25.     {
  26.         $this->driveActionsPublisher $driveActionsPublisher;
  27.     }
  28.     /**
  29.      * @return string[]
  30.      */
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [
  34.             ContactPortalUserEvent::SHARE_PORTAL_FOLDER => 'onSharingContact',
  35.             ClosingContactPortalUserEvent::CLOSE_CONTACT => 'onClosingContact',
  36.         ];
  37.     }
  38.     /**
  39.      * @param ContactPortalUserEvent $contactPortalUserEvent
  40.      */
  41.     public function onSharingContact(ContactPortalUserEvent $contactPortalUserEvent): void
  42.     {
  43.         $this->driveActionsPublisher->publish(
  44.             self::SHARING_CONTACT_PORTAL_USER,
  45.             [
  46.                 'contact_portal_user_id' => $contactPortalUserEvent->getContactPortalUser()->getId(),
  47.                 'law_firm_id' => $contactPortalUserEvent->getLawFirm()->getId(),
  48.                 'shared_matters' => $this->getMatterIds($contactPortalUserEvent->getSharedMatters()),
  49.                 'unshared_matters' => $this->getMatterIds($contactPortalUserEvent->getUnsharedMatters()),
  50.             ]
  51.         );
  52.     }
  53.     /**
  54.      * @param ClosingContactPortalUserEvent $closingContactPortalUserEvent
  55.      */
  56.     public function onClosingContact(ClosingContactPortalUserEvent $closingContactPortalUserEvent): void
  57.     {
  58.         $this->driveActionsPublisher->publish(
  59.             self::CLOSING_CONTACT_PORTAL_USER,
  60.             [
  61.                 'contact_portal_user_id' => $closingContactPortalUserEvent->getContactPortalUser()->getId(),
  62.                 'law_firm_id' => $closingContactPortalUserEvent->getLawFirm()->getId(),
  63.             ]
  64.         );
  65.     }
  66.     /**
  67.      * @param Matter[] $matters
  68.      *
  69.      * @return array
  70.      */
  71.     private function getMatterIds(array $matters): array
  72.     {
  73.         return array_map(static function (Matter $matter) {
  74.             return $matter->getId();
  75.         }, $matters);
  76.     }
  77. }