*/ class SendInvitations implements ServiceAction { private InjectableFactory $injectableFactory; private EntityManager $entityManager; private User $user; public function __construct( InjectableFactory $injectableFactory, EntityManager $entityManager, User $user ) { $this->injectableFactory = $injectableFactory; $this->entityManager = $entityManager; $this->user = $user; } private function getInvitationManager(): Invitations { return $this->injectableFactory->create(Invitations::class); } /** * @inheritDoc */ public function run(Entity $entity, mixed $data): mixed { if (!$entity instanceof CoreEntity) { throw new RuntimeException(); } $invitationManager = $this->getInvitationManager(); $emailHash = []; $users = $this->entityManager ->getRDBRepository($entity->getEntityType()) ->getRelation($entity, 'users') ->find(); foreach ($users as $user) { if ($user->getId() === $this->user->getId()) { if ( $entity->getLinkMultipleColumn('users', 'status', $user->getId()) === Meeting::ATTENDEE_STATUS_ACCEPTED ) { continue; } } if ($user->get('emailAddress') && !array_key_exists($user->get('emailAddress'), $emailHash)) { $invitationManager->sendInvitation($entity, $user, 'users'); $emailHash[$user->get('emailAddress')] = true; } } $contacts = $this->entityManager ->getRDBRepository($entity->getEntityType()) ->getRelation($entity, 'contacts') ->find(); foreach ($contacts as $contact) { if ($contact->get('emailAddress') && !array_key_exists($contact->get('emailAddress'), $emailHash)) { $invitationManager->sendInvitation($entity, $contact, 'contacts'); $emailHash[$contact->get('emailAddress')] = true; } } $leads = $this->entityManager ->getRDBRepository($entity->getEntityType()) ->getRelation($entity, 'leads') ->find(); foreach ($leads as $lead) { if ($lead->get('emailAddress') && !array_key_exists($lead->get('emailAddress'), $emailHash)) { $invitationManager->sendInvitation($entity, $lead, 'leads'); $emailHash[$lead->get('emailAddress')] = true; } } return null; } }