aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMoritz Strohm <strohm@data-quest.de>2025-12-19 08:53:51 +0000
committerMoritz Strohm <strohm@data-quest.de>2025-12-19 08:53:51 +0000
commit47fd6fe31f93c06f816d4bb27e8fdb6c013af606 (patch)
treee2414eb6b41ef3219b12f19e58c8d87eaa8bbcae /app
parent1c78a3b0a73e72d34714fa749aff293dbda6b4d2 (diff)
StEP 2092, closes #2092
Closes #2092 Merge request studip/studip!4535
Diffstat (limited to 'app')
-rw-r--r--app/controllers/resources/room_request.php78
-rw-r--r--app/views/resources/room_request/planning.php23
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
]