*/ class AddingMemberSendMail implements IEventListener { use TStringTools; use TNCLogger; /** @var ShareWrapperService */ private $shareWrapperService; /** @var ShareTokenService */ private $shareTokenService; /** @var ConfigService */ private $configService; /** @var ContactService */ private $contactService; public function __construct( ShareWrapperService $shareWrapperService, ShareTokenService $shareTokenService, ContactService $contactService, ConfigService $configService, ) { $this->shareWrapperService = $shareWrapperService; $this->shareTokenService = $shareTokenService; $this->contactService = $contactService; $this->configService = $configService; $this->setup('app', Application::APP_ID); } /** * @throws RequestBuilderException */ public function handle(Event $event): void { if (!$event instanceof AddingCircleMemberEvent) { return; } $member = $event->getMember(); if ($member->getUserType() === Member::TYPE_CIRCLE) { $members = $member->getBasedOn()->getInheritedMembers(); } else { $members = [$member]; } $circle = $event->getCircle(); $federatedEvent = $event->getFederatedEvent(); $shares = $this->shareWrapperService->getSharesToCircle($circle->getSingleId()); $hashedPasswords = $federatedEvent->getParams()->gArray('hashedPasswords'); $result = []; foreach ($members as $member) { if ($member->getUserType() !== Member::TYPE_MAIL && $member->getUserType() !== Member::TYPE_CONTACT ) { continue; } $files = []; foreach ($shares as $share) { try { $shareToken = $this->shareTokenService->generateShareToken( $share, $member, $this->get($member->getSingleId(), $hashedPasswords) ); } catch (Exception $e) { continue; } $share->setShareToken($shareToken); $files[] = clone $share; } $result[$member->getId()] = [ 'shares' => $files, 'mails' => $this->contactService->getMailAddressesFromMember($member) ]; } $federatedEvent->addResultEntry('files', $result); } }