calendarConnector = $calendarConnector; $this->calendarRepository = $calendarRepository; $this->calendarRangeRepository = $calendarRangeRepository; $this->entityManager = $entityManager; $this->userRepository = $userRepository; $this->inviteRepository = $inviteRepository; } public function __invoke(CalendarMessage $calendarMessage) { $calendar = $this->calendarRepository->find($calendarMessage->getCalendarId()); if (null === $calendar) { return; } if (null !== $calendarMessage->getPreviousCalendarRangeId()) { $previousCalendarRange = $this->calendarRangeRepository ->find($calendarMessage->getPreviousCalendarRangeId()); } else { $previousCalendarRange = null; } if (null !== $calendarMessage->getPreviousMainUserId()) { $previousMainUser = $this->userRepository ->find($calendarMessage->getPreviousMainUserId()); } else { $previousMainUser = null; } $newInvites = array_filter( array_map( function ($id) { return $this->inviteRepository->find($id); }, $calendarMessage->getNewInvitesIds(), ), static function (?Invite $invite) { return null !== $invite; } ); $this->calendarConnector->syncCalendar( $calendar, $calendarMessage->getAction(), $previousCalendarRange, $previousMainUser, $calendarMessage->getOldInvites(), $newInvites ); $calendar->preventEnqueueChanges = true; if ($calendar->hasCalendarRange()) { $calendar->getCalendarRange()->preventEnqueueChanges = true; } if ($previousCalendarRange instanceof CalendarRange) { $previousCalendarRange->preventEnqueueChanges = true; } $this->entityManager->flush(); } }