diff options
| author | Moritz Strohm <strohm@data-quest.de> | 2026-01-14 10:29:35 +0000 |
|---|---|---|
| committer | Moritz Strohm <strohm@data-quest.de> | 2026-01-14 10:29:35 +0000 |
| commit | 78e46de33b3f205aae375d1ea6d4fe088e0e5124 (patch) | |
| tree | 4b305bf3f7b5d066ac28f011fe752e98901e714c /app/controllers/resources | |
| parent | f637e7ae2d086941a11297ccc29ac273ad6759b0 (diff) | |
allow booking separable rooms in courses, closes #639
Closes #639
Merge request studip/studip!4039
Diffstat (limited to 'app/controllers/resources')
| -rw-r--r-- | app/controllers/resources/admin.php | 39 | ||||
| -rw-r--r-- | app/controllers/resources/room_request.php | 17 |
2 files changed, 52 insertions, 4 deletions
diff --git a/app/controllers/resources/admin.php b/app/controllers/resources/admin.php index bea43ed..5d36b34 100644 --- a/app/controllers/resources/admin.php +++ b/app/controllers/resources/admin.php @@ -1034,6 +1034,45 @@ class Resources_AdminController extends AuthenticatedController } + public function edit_separable_room_action($separable_room_id) + { + PageLayout::setTitle(_('Teilbaren Raum bearbeiten')); + $this->separable_room = SeparableRoom::find($separable_room_id); + if (!$this->separable_room) { + PageLayout::postError(_('Der teilbare Raum wurde nicht gefunden.')); + } + } + + + public function save_separable_room_action($separable_room_id) + { + CSRFProtection::verifyUnsafeRequest(); + + $this->separable_room = SeparableRoom::find($separable_room_id); + if (!$this->separable_room) { + PageLayout::postError(_('Der teilbare Raum wurde nicht gefunden.')); + $this->relocate('resources/admin/separable_rooms'); + return; + } + + $this->separable_room->name = Request::get('name', ''); + $this->separable_room->description = Request::get('description', ''); + if (!$this->separable_room->name) { + PageLayout::postError(_('Der Name des teilbaren Raumes darf nicht leer sein!')); + $this->relocate('resources/admin/separable_rooms'); + return; + } + + $success = $this->separable_room->store() !== false; + if ($success) { + PageLayout::postSuccess(_('Die Änderungen wurden gespeichert.')); + } else { + PageLayout::postError(_('Die Änderungen konnten nicht gespeichert werden.')); + } + $this->relocate('resources/admin/separable_rooms'); + } + + public function configuration_action() { if (Navigation::hasItem('/resources/admin/configuration')) { diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php index ebe7baa..f7d9a66 100644 --- a/app/controllers/resources/room_request.php +++ b/app/controllers/resources/room_request.php @@ -1288,9 +1288,9 @@ class Resources_RoomRequestController extends AuthenticatedController foreach ($this->request_time_intervals as $metadate_id => $data) { if ($data['metadate'] instanceof SeminarCycleDate && !$this->expand_metadates) { $all_dates_same_room = true; - // check, if ALL dates are booked for the same room + //Check if all dates are booked for the same room: foreach ($data['intervals'] as $interval) { - if ($interval['booked_room'] != $selected_room->id) { + if (!in_array($selected_room->id, $interval['booked_rooms'])) { $all_dates_same_room = false; break; } @@ -1567,7 +1567,12 @@ class Resources_RoomRequestController extends AuthenticatedController return; } - if (!$course_date->room_booking || $course_date->room_booking->resource_id !== $room_id) { + $room_ids = []; + foreach ($course_date->room_bookings as $booking) { + $room_ids[] = $booking->resource_id; + } + + if (empty($room_ids) || !in_array($room_id, $room_ids)) { try { $booking = $room->createBooking( $this->current_user, @@ -1623,7 +1628,11 @@ class Resources_RoomRequestController extends AuthenticatedController if ($metadate->dates) { $overlap_messages = []; foreach ($metadate->dates as $date) { - if (!$date->room_booking || $date->room_booking->resource_id != $room_id) { + $room_ids = []; + foreach ($date->room_bookings as $booking) { + $room_ids[] = $booking->resource_id; + } + if (empty($room_ids) || !in_array($room_id, $room_ids)) { try { $booking = $room->createBooking( $this->current_user, |
