id); $calendar_settings = $user_config->CALENDAR_SETTINGS; if ( $calendar_type === 'week' && !empty($calendar_settings['step_week']) ) { $step_week = (int) $calendar_settings['step_week']; $hours = floor($step_week / 3600); $minutes = round(($step_week - $hours * 3600) / 60); return sprintf('%1$02u:%2$02u:00', $hours, $minutes); } elseif ( $calendar_type === 'day' && !empty($calendar_settings['step_day']) ) { $step_day = (int) $calendar_settings['step_day']; $hours = floor($step_day / 3600); $minutes = round(($step_day - $hours * 3600) / 60); return sprintf('%1$02u:%2$02u:00', $hours, $minutes); } elseif ( $calendar_type === 'week_group' && !empty($calendar_settings['step_week_group']) ) { $step_week = (int) $calendar_settings['step_week_group']; $hours = floor($step_week / 3600); $minutes = round(($step_week - $hours * 3600) / 60); return sprintf('%1$02u:%2$02u:00', $hours, $minutes); } elseif ( $calendar_type === 'day_group' && !empty($calendar_settings['step_day_group']) ) { $step_day = (int) $calendar_settings['step_day_group']; $hours = floor($step_day / 3600); $minutes = round(($step_day - $hours * 3600) / 60); return sprintf('%1$02u:%2$02u:00', $hours, $minutes); } // An unknown slot type or no appropriate match before: // Return the default duration. return $default_slot_duration; } /** * Retrieves the default calendar date by various methods. * * @return \DateTime The default date for the calendar. * This defaults to the current date if no other date * can be retrieved. */ public static function getDefaultCalendarDate() : \DateTime { $default_date = new \DateTime(); if (\Request::submitted('date') || \Request::submitted('defaultDate')) { $parameter_name = 'date'; if (\Request::submitted('defaultDate')) { $parameter_name = 'defaultDate'; } $date = \Request::getDateTime($parameter_name, 'Y-m-d'); if ($date instanceof \DateTime) { $default_date = $date; //Update the session value: $_SESSION['calendar_date'] = $default_date->format('Y-m-d'); } } elseif (\Request::submitted('semester_id')) { //A semester-ID is set, but no specific date that would override it. //Use the first lecture week of the semester as default date. $semester_id = \Request::option('semester_id'); $semester = \Semester::find($semester_id); if ($semester) { $default_date->setTimestamp($semester->vorles_beginn); //Update the session value: $_SESSION['calendar_date'] = $default_date->format('Y-m-d'); } } elseif (!empty($_SESSION['calendar_date'])) { $date = \DateTime::createFromFormat( 'Y-m-d', $_SESSION['calendar_date'], $default_date->getTimezone() ); if ($date instanceof \DateTime) { $default_date = $date; } } $default_date->setTime(0,0,0); return $default_date; } /** * Constructs a Fullcalendar instance of the schedule for the current user. * * @param string $semester_id The ID of the semester to be used. Defaults to an empty string * which in turn means that the current semester shall be used. * * @param bool $show_hidden_courses Whether to include hidden courses in the schedule (true) * or not (false). Defaults to false. * * @return \Studip\Fullcalendar A fullcalendar instance for the schedule of the current user. */ public static function getScheduleFullcalendar( string $semester_id = '', bool $show_hidden_courses = false ) : \Studip\Fullcalendar { if (!$semester_id) { $semester_id = \Semester::findCurrent()?->id ?? ''; } $calendar_settings = \User::findCurrent()->getConfiguration()->CALENDAR_SETTINGS ?? []; return new \Studip\Fullcalendar( _('Stundenplan'), [ 'editable' => false, 'selectable' => false, 'dialog_size' => 'auto', 'minTime' => sprintf('%02u:00', $calendar_settings['start'] ?? 8), 'maxTime' => sprintf('%02u:00', $calendar_settings['end'] ?? 20), 'allDaySlot' => false, 'header' => [ 'left' => '', 'right' => '' ], 'views' => [ 'timeGridWeek' => [ 'columnHeaderFormat' => ['weekday' => 'long'], 'weekends' => $calendar_settings['type_week'] === 'LONG', 'slotDuration' => self::getCalendarSlotDuration('week'), ] ], 'defaultView' => 'timeGridWeek', 'defaultDate' => date('Y-m-d'), 'timeGridEventMinHeight' => 20, 'eventSources' => [ [ 'url' => \URLHelper::getURL( 'dispatch.php/calendar/schedule/data', ['show_hidden' => $show_hidden_courses] ), 'method' => 'GET', 'extraParams' => [ 'semester_id' => $semester_id, 'full_semester_time_range' => false ] ] ] ] ); } }