diff options
| author | Moritz Strohm <strohm@data-quest.de> | 2025-12-19 08:53:51 +0000 |
|---|---|---|
| committer | Moritz Strohm <strohm@data-quest.de> | 2025-12-19 08:53:51 +0000 |
| commit | 47fd6fe31f93c06f816d4bb27e8fdb6c013af606 (patch) | |
| tree | e2414eb6b41ef3219b12f19e58c8d87eaa8bbcae /app | |
| parent | 1c78a3b0a73e72d34714fa749aff293dbda6b4d2 (diff) | |
StEP 2092, closes #2092
Closes #2092
Merge request studip/studip!4535
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/resources/room_request.php | 78 | ||||
| -rw-r--r-- | app/views/resources/room_request/planning.php | 23 |
2 files changed, 91 insertions, 10 deletions
diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php index e74995a..7a6af4c 100644 --- a/app/controllers/resources/room_request.php +++ b/app/controllers/resources/room_request.php @@ -233,8 +233,33 @@ class Resources_RoomRequestController extends AuthenticatedController $semester_id = $this->filter['semester']; if ($semester_id) { + // Split the ID that might be suffixed at this point: + $id_parts = explode('_', $semester_id); + $semester_id = $id_parts[0]; $semester = Semester::find($semester_id); if ($semester instanceof Semester) { + $start_ts = $semester->beginn; + $end_ts = $semester->ende; + + if (count($id_parts) > 1) { + if ($id_parts[1] === 'lecture') { + $start_ts = $semester->vorles_beginn; + $end_ts = $semester->vorles_ende; + } elseif ($id_parts[1] === 'vacation') { + // The time range is from the end of the lecture period of the selected semester + // until the start of the lecture period of the next semester (if any). + $next_semester = Semester::findByTimestamp($semester->ende + 1); + if ($next_semester) { + $start_ts = $semester->vorles_ende; + $end_ts = $next_semester->vorles_beginn; + } else { + // The time range is from the end of the selected semester until "eternity" + // (or a reasonable facsimile thereof). + $start_ts = $semester->vorles_ende; + $end_ts = PHP_INT_MAX; + } + } + } if ($sql) { $sql .= ' AND '; } @@ -257,8 +282,8 @@ class Resources_RoomRequestController extends AuthenticatedController )'; } $sql .= ') '; - $sql_params['begin'] = max($semester->beginn, time()); - $sql_params['semester_end'] = $semester->ende; + $sql_params['begin'] = max($start_ts, time()); + $sql_params['semester_end'] = $end_ts; } } if (!empty($this->filter['course_type'])) { @@ -2388,10 +2413,55 @@ class Resources_RoomRequestController extends AuthenticatedController $this->resource = $this->resource->getDerivedClassInstance(); $this->privileged = $this->resource->userHasPermission($this->current_user, 'autor'); + $this->semester_name = ''; + $this->semester_range_start = 0; + $this->semester_range_end = 0; if ($this->filter['semester']) { - $this->semester = Semester::find($this->filter['semester']); + $id_parts = explode('_', $this->filter['semester']); + $semester_id = $id_parts[0]; + $this->semester = Semester::find($semester_id); + if ($this->semester) { + if (count($id_parts) > 1) { + if ($id_parts[1] === 'lecture') { + $this->semester_name = studip_interpolate( + _('Semester %{semester_name} (Vorlesungszeit)'), + ['semester_name' => $this->semester->name] + ); + $this->semester_range_start = $this->semester->vorles_beginn; + $this->semester_range_end = $this->semester->vorles_ende; + } elseif ($id_parts[1] === 'vacation') { + $this->semester_name = studip_interpolate( + _('Vorlesungsfrei nach %{semester_name}'), + ['semester_name' => $this->semester->name] + ); + $this->semester_range_start = $this->semester->vorles_ende; + $next_semester = Semester::findByTimestamp($this->semester->ende + 1); + if ($next_semester) { + $this->semester_range_end = $next_semester->vorles_beginn; + } else { + //The selected semester is the last available semester. + $this->semester_range_end = PHP_INT_MAX; + } + } + } else { + $this->semester_name = studip_interpolate( + _('Semester %{semester_name}'), + ['semester_name' => $this->semester->name] + ); + $this->semester_range_start = $this->semester->beginn; + $this->semester_range_end = $this->semester->ende; + } + } } else { $this->semester = Semester::findCurrent(); + if ($this->semester) { + $this->semester_name = studip_interpolate( + _('Semester %{semester_name}'), + ['semester_name' => $this->semester->name] + ); + $this->semester_range_start = $this->semester->beginn; + $this->semester_range_end = $this->semester->ende; + } } $booking_colour = ColourValue::find('Resources.BookingPlan.Booking.Bg'); @@ -2519,6 +2589,8 @@ class Resources_RoomRequestController extends AuthenticatedController 'semester', 'get' ); + $semester_selector->makeLecturePeriodSelectable(); + $semester_selector->makeVacationPeriodSelectable(); $semester_selector->setSelection($this->filter['semester']); if ($action === 'overview') { $semester_selector->setRange(time(), PHP_INT_MAX); diff --git a/app/views/resources/room_request/planning.php b/app/views/resources/room_request/planning.php index 1ad51fd..20d7ac7 100644 --- a/app/views/resources/room_request/planning.php +++ b/app/views/resources/room_request/planning.php @@ -1,8 +1,19 @@ +<?php +/** + * @var ?Resource $resource + * @var string $semester_name + * @var mixed $semester_range_start + * @var mixed $semester_range_end + * @var ?Semester $semester + * @var array $table_keys + * @var Resources_RoomRequestController $controller + */ +?> <? if (!empty($resource)): ?> <? $min_time = Config::get()->INSTITUTE_COURSE_PLAN_START_HOUR . ':00'; $max_time = Config::get()->INSTITUTE_COURSE_PLAN_END_HOUR . ':00'; - $default_date = (Request::get("semester_timerange") == 'fullsem') ? $semester->beginn : $semester->vorles_beginn; + $default_date = $semester_range_start; ?> <? if ($resource instanceof Room) : ?> <section class="studip-fullcalendar-header <?= Request::isDialog() ? 'fullcalendar-dialog' : ''; ?>" @@ -16,14 +27,13 @@ <? endif ?> <span id="booking-plan-header-semrow">, <strong> - <?= _('Semester') ?> - <span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span> + <span id="booking-plan-header-semname"><?= htmlReady($semester_name) ?></span> </strong> <span id="booking-plan-header-semspan"> - <? if (Request::get("semester_timerange") == 'fullsem') : ?> - <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->beginn), date('d.m.Y', $semester->ende)); ?> + <? if ($semester_range_end === PHP_INT_MAX) : ?> + (<?= sprintf('ab %1$s', date('d.m.Y', $semester_range_start)) ?>) <? else : ?> - <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?> + (<?= sprintf('%1$s - %2$s', date('d.m.Y', $semester_range_start), date('d.m.Y', $semester_range_end)) ?>) <? endif ?> </span> </span> @@ -79,7 +89,6 @@ ], 'semester_id' => $semester->id, - 'semester_timerange' => Request::get("semester_timerange", 'vorles'), 'display_requests' => 0, 'display_all_requests' => !empty($display_all_requests) ? 1 : 0 ] |
