*/ class MembershipsRemoved implements IEventListener { use TStringTools; /** @var CirclesManager */ private $circlesManager; private ShareWrapperService $shareWrapperService; /** @var FederatedUserService */ private $federatedUserService; public function __construct( CirclesManager $circlesManager, ShareWrapperService $shareWrapperService, FederatedUserService $federatedUserService, ) { $this->circlesManager = $circlesManager; $this->shareWrapperService = $shareWrapperService; $this->federatedUserService = $federatedUserService; } /** * @throws CircleNotFoundException * @throws FederatedItemException * @throws FederatedUserException * @throws FederatedUserNotFoundException * @throws InvalidIdException * @throws MemberNotFoundException * @throws OwnerNotFoundException * @throws RemoteInstanceException * @throws RemoteNotFoundException * @throws RemoteResourceNotFoundException * @throws RequestBuilderException * @throws SingleCircleNotFoundException * @throws UnknownRemoteException * @throws UserTypeNotFoundException */ public function handle(Event $event): void { if (!$event instanceof MembershipsRemovedEvent) { return; } foreach ($event->getMemberships() as $membership) { /* * deprecated with ShareWrapperRequest::removeByInitiatorAndShareWith() * will be replaced by: * // $this->shareWrapperRequest->removeByMembership($membership); */ $federatedUser = $this->circlesManager->getFederatedUser($membership->getSingleId()); if ($federatedUser->getUserType() === Member::TYPE_USER && $federatedUser->isLocal()) { $this->shareWrapperService->deleteUserSharesToCircle( $membership->getCircleId(), $federatedUser->getUserId() ); } } } }