*/ class AccountUpdated implements IEventListener { public function __construct( private CircleRequest $circleRequest, private CircleService $circleService, private FederatedEventService $federatedEventService, private FederatedUserService $federatedUserService, private LoggerInterface $logger, private MemberRequest $memberRequest, ) { } /** * @param Event $event */ public function handle(Event $event): void { if (!($event instanceof UserUpdatedEvent) && !($event instanceof UserChangedEvent)) { return; } try { $user = $event->getUser(); $federatedUser = $this->federatedUserService->getLocalFederatedUser($user->getUID()); $this->memberRequest->updateDisplayName($federatedUser->getSingleId(), $user->getDisplayName()); $this->circleRequest->updateDisplayName($federatedUser->getSingleId(), $user->getDisplayName()); $this->federatedUserService->setCurrentUser($federatedUser); $probe = new CircleProbe(); $probe->includeSystemCircles() ->mustBeMember() ->canBeRequestingMembership(); // cannot use probeCircles() as we also want to update name on almost-members (invited/requesting) $circles = $this->circleService->getCircles($probe); foreach ($circles as $circle) { // we are only interested in direct membership if ($circle->getInitiator()->getSingleId() !== $federatedUser->getSingleId()) { continue; } $event = new FederatedEvent(MemberDisplayName::class); $event->setCircle($circle); $event->getParams()->s('displayName', $user->getDisplayName()); try { $this->federatedEventService->newEvent($event); } catch (Exception $e) { $this->logger->warning('issue on sync circle on user update', ['exception' => $e, 'event' => $event]); } } } catch (Exception $e) { $this->logger->warning('issue on sync circles data on user update', ['exception' => $e]); } } }