aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/resources
diff options
context:
space:
mode:
authorMoritz Strohm <strohm@data-quest.de>2026-01-14 10:29:35 +0000
committerMoritz Strohm <strohm@data-quest.de>2026-01-14 10:29:35 +0000
commit78e46de33b3f205aae375d1ea6d4fe088e0e5124 (patch)
tree4b305bf3f7b5d066ac28f011fe752e98901e714c /app/controllers/resources
parentf637e7ae2d086941a11297ccc29ac273ad6759b0 (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.php39
-rw-r--r--app/controllers/resources/room_request.php17
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,