<?php
namespace App\Drive\Sharepoint\EventSubscriber;
use App\Drive\Sharepoint\Event\ClosingContactPortalUserEvent;
use App\Drive\Sharepoint\Event\ContactPortalUserEvent;
use AppBundle\Entity\Matter;
use AppBundle\Service\DriveActionsPublisher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class ContactPortalUserSubscriber
*/
class ContactPortalUserSubscriber implements EventSubscriberInterface
{
public const SHARING_CONTACT_PORTAL_USER = 'sharing_contact_portal_user';
public const CLOSING_CONTACT_PORTAL_USER = 'closing_contact_portal_user';
/**
* @var DriveActionsPublisher
*/
private $driveActionsPublisher;
/**
* ContactPortalUserSubscriber constructor.
*
* @param DriveActionsPublisher $driveActionsPublisher
*/
public function __construct(DriveActionsPublisher $driveActionsPublisher)
{
$this->driveActionsPublisher = $driveActionsPublisher;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
ContactPortalUserEvent::SHARE_PORTAL_FOLDER => 'onSharingContact',
ClosingContactPortalUserEvent::CLOSE_CONTACT => 'onClosingContact',
];
}
/**
* @param ContactPortalUserEvent $contactPortalUserEvent
*/
public function onSharingContact(ContactPortalUserEvent $contactPortalUserEvent): void
{
$this->driveActionsPublisher->publish(
self::SHARING_CONTACT_PORTAL_USER,
[
'contact_portal_user_id' => $contactPortalUserEvent->getContactPortalUser()->getId(),
'law_firm_id' => $contactPortalUserEvent->getLawFirm()->getId(),
'shared_matters' => $this->getMatterIds($contactPortalUserEvent->getSharedMatters()),
'unshared_matters' => $this->getMatterIds($contactPortalUserEvent->getUnsharedMatters()),
]
);
}
/**
* @param ClosingContactPortalUserEvent $closingContactPortalUserEvent
*/
public function onClosingContact(ClosingContactPortalUserEvent $closingContactPortalUserEvent): void
{
$this->driveActionsPublisher->publish(
self::CLOSING_CONTACT_PORTAL_USER,
[
'contact_portal_user_id' => $closingContactPortalUserEvent->getContactPortalUser()->getId(),
'law_firm_id' => $closingContactPortalUserEvent->getLawFirm()->getId(),
]
);
}
/**
* @param Matter[] $matters
*
* @return array
*/
private function getMatterIds(array $matters): array
{
return array_map(static function (Matter $matter) {
return $matter->getId();
}, $matters);
}
}