mapSessionToDto($object); } return $this->mapCCalendarToDto($object); } public function supportsTransformation($data, string $to, array $context = []): bool { return ($data instanceof CCalendarEvent || $data instanceof Session) && CalendarEvent::class === $to; } private function mapCCalendarToDto(object $object): CalendarEvent { \assert($object instanceof CCalendarEvent); $object->setResourceLinkListFromEntity(); $subscriptionItemTitle = null; if (CCalendarEvent::SUBSCRIPTION_VISIBILITY_CLASS == $object->getSubscriptionVisibility()) { $subscriptionItemTitle = $this->usergroupRepository->find($object->getSubscriptionItemId())?->getTitle(); } $eventType = $this->calendarEventRepository->determineEventType($object); $color = $this->determineEventColor($eventType); $calendarEvent = new CalendarEvent( 'calendar_event_'.$object->getIid(), $object->getTitle(), $object->getContent(), $object->getStartDate(), $object->getEndDate(), $object->isAllDay(), null, $object->getInvitationType(), $object->isCollective(), $object->getSubscriptionVisibility(), $object->getSubscriptionItemId(), $subscriptionItemTitle, $object->getMaxAttendees(), $object->getResourceNode(), $object->getResourceLinkListFromEntity(), $color ); $calendarEvent->setType($eventType); return $calendarEvent; } private function mapSessionToDto(object $object): CalendarEvent { \assert($object instanceof Session); /** @var ?SessionRelCourse $sessionRelCourse */ $sessionRelCourse = $object->getCourses()->first(); $course = $sessionRelCourse?->getCourse(); $sessionUrl = null; if ($course) { $baseUrl = $this->router->generate('index', [], UrlGeneratorInterface::ABSOLUTE_URL); $sessionUrl = "{$baseUrl}course/{$course->getId()}/home?".http_build_query(['sid' => $object->getId()]); } return new CalendarEvent( 'session_'.$object->getId(), $object->getTitle(), $object->getShowDescription() ? $object->getDescription() : null, $object->getDisplayStartDate(), $object->getDisplayEndDate(), false, $sessionUrl, ); } private function determineEventColor(string $eventType): string { $agendaColors = [ 'platform' => 'red', 'course' => '#458B00', 'session' => '#00496D', 'personal' => 'steel blue', ]; $settingAgendaColors = $this->settingsManager->getSetting('agenda.agenda_colors'); if (is_array($settingAgendaColors)) { $agendaColors = array_merge($agendaColors, $settingAgendaColors); } $colorKeyMap = [ 'global' => 'platform', ]; $colorKey = $colorKeyMap[$eventType] ?? $eventType; return $agendaColors[$colorKey] ?? $agendaColors['personal']; } }