From d3e68e8574b05ec8f0872a1b374dd09c80448296 Mon Sep 17 00:00:00 2001 From: David Siegfried <david.siegfried@uni-vechta.de> Date: Mon, 18 Mar 2024 14:45:11 +0000 Subject: [PATCH] fix room-request, re #3825 Merge request studip/studip!2693 --- app/controllers/course/room_requests.php | 7 +++--- app/views/course/timesrooms/editDate.php | 4 ++-- .../ResourcePropertyDefinition.class.php | 22 +++++++++++-------- lib/resources/RoomManager.class.php | 10 ++++++--- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php index ae325948161..ab802b73b69 100644 --- a/app/controllers/course/room_requests.php +++ b/app/controllers/course/room_requests.php @@ -233,7 +233,7 @@ class Course_RoomRequestsController extends AuthenticatedController $this->room_name = $_SESSION[$request_id]['room_name']; $this->request = new RoomRequest($this->request_id); - $this->request->setRangeFields($_SESSION[$this->request_id]['range'], $_SESSION[$this->request_id]['range_ids']); + $this->request->setRangeFields($_SESSION[$this->request_id]['range'], $_SESSION[$this->request_id]['range_ids'] ?? []); $search_properties = $_SESSION[$request_id]['selected_properties'] ?? []; @@ -340,7 +340,6 @@ class Course_RoomRequestsController extends AuthenticatedController if (Request::submitted('search_rooms')) { $this->selected_properties = Request::getArray('selected_properties'); $_SESSION[$request_id]['selected_properties'] = $this->selected_properties; - // no min number of seats if ( (!$_SESSION[$request_id]['selected_properties']['seats'] || $_SESSION[$request_id]['selected_properties']['seats'] < 1) @@ -408,7 +407,7 @@ class Course_RoomRequestsController extends AuthenticatedController $this->selected_room = Resource::find($_SESSION[$request_id]['room_id'] ?: $this->request->resource_id); $this->category = $this->room_category_id ? ResourceCategory::find($this->room_category_id) : ''; $this->available_properties = $this->room_category_id ? $this->category->getRequestableProperties() : ''; - $this->selected_properties = $_SESSION[$request_id]['selected_properties']; + $this->selected_properties = $_SESSION[$request_id]['selected_properties'] ?? []; $this->course = Course::find($this->course_id); $this->selected_properties['seats'] = $_SESSION[$request_id]['selected_properties']['seats'] @@ -530,8 +529,10 @@ class Course_RoomRequestsController extends AuthenticatedController $this->redirect('course/room_requests/request_show_summary/' . $this->request_id ); } else { + $room = Room::find($_SESSION[$request_id]['room_id']); $this->step = 2; $this->request = new RoomRequest($this->request_id); + $_SESSION[$request_id]['room_category_id'] = $room->category_id; $this->redirect( 'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step ); diff --git a/app/views/course/timesrooms/editDate.php b/app/views/course/timesrooms/editDate.php index 30d109064e0..c4bd405ea1f 100644 --- a/app/views/course/timesrooms/editDate.php +++ b/app/views/course/timesrooms/editDate.php @@ -226,9 +226,9 @@ <? if (Request::isXhr() && !$locked && Config::get()->RESOURCES_ENABLE && Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS): ?> <? ?> <?= Studip\LinkButton::create( - ($request_id ? _('Zur Raumanfrage wechseln') : _('Raumanfrage erstellen')), + (isset($request_id) ? _('Zur Raumanfrage wechseln') : _('Raumanfrage erstellen')), ( - $request_id + isset($request_id) ? $controller->url_for( 'course/room_requests/request_show_summary/' . $request_id ) diff --git a/lib/models/resources/ResourcePropertyDefinition.class.php b/lib/models/resources/ResourcePropertyDefinition.class.php index d2d7bf64ea4..82d29c91907 100644 --- a/lib/models/resources/ResourcePropertyDefinition.class.php +++ b/lib/models/resources/ResourcePropertyDefinition.class.php @@ -154,7 +154,7 @@ class ResourcePropertyDefinition extends SimpleORMap ? $special_name : 'properties[' . $this->id . ']'; - if ($type == 'bool') { + if ($type === 'bool') { $label_html_classes = 'col-3'; //Booleans can have one or two input elements, //whether a false state shall be selectable or not. @@ -188,7 +188,7 @@ class ResourcePropertyDefinition extends SimpleORMap } else { return $input_html; } - } elseif ($type == 'select') { + } elseif ($type === 'select') { $options_html = sprintf( '<option value="" %2$s>%1$s</option>', _('Bitte wählen'), @@ -220,7 +220,7 @@ class ResourcePropertyDefinition extends SimpleORMap $options_html ); } - } elseif ($type == 'position') { + } elseif ($type === 'position') { $factory = new Flexi_TemplateFactory($GLOBALS['STUDIP_BASE_PATH']); $template = $factory->open('templates/resources/position_attribute_form_part.php'); $template->set_attribute( @@ -241,7 +241,7 @@ class ResourcePropertyDefinition extends SimpleORMap ); return $template->render(); - } elseif ($type == 'user') { + } elseif ($type === 'user') { $search = new QuickSearch($input_name, new StandardSearch('user_id')); $search->defaultValue($value, ($value ? get_fullname($value, 'full_rev_username') : '')); return sprintf( @@ -265,12 +265,14 @@ class ResourcePropertyDefinition extends SimpleORMap ); } else { $input_type = 'text'; - if ($type == 'num') { + $min = ''; + if ($type === 'num') { $input_type = 'number'; + $min = 'min="0"'; } if ($with_label) { return sprintf( - '<label %1$s>%5$s<input type="%2$s" name="%3$s" value="%4$s" %5$s></label>', + '<label %1$s>%5$s<input type="%2$s" name="%3$s" value="%4$s" %6$s %7$s></label>', ( $label_html_classes ? 'class="' . htmlReady($label_html_classes) . '"' @@ -280,15 +282,17 @@ class ResourcePropertyDefinition extends SimpleORMap htmlReady($input_name), $value, htmlReady($this->__toString()), - $disabled ? 'disabled' : '' + $disabled ? 'disabled' : '', + $min ); } else { return sprintf( - '<input type="%1$s" name="%2$s" value="%3$s" %4$s>', + '<input type="%1$s" name="%2$s" value="%3$s" %4$s %5$s>', $input_type, htmlReady($input_name), $value, - $disabled ? 'disabled' : '' + $disabled ? 'disabled' : '', + $min ); } } diff --git a/lib/resources/RoomManager.class.php b/lib/resources/RoomManager.class.php index 515656d6b56..f4b4802efc2 100644 --- a/lib/resources/RoomManager.class.php +++ b/lib/resources/RoomManager.class.php @@ -599,6 +599,7 @@ class RoomManager $result = []; if (!empty($time_ranges)) { + //We must check if the room is available: foreach ($filtered_rooms as $room) { $room_is_available = $only_fully_available; @@ -648,6 +649,9 @@ class RoomManager if (is_array($properties) && count($properties)) { $old_result = $result; $result = []; + $properties = array_filter($properties, function ($property) { + return !empty($property); + }); $required_property_c = count($properties); foreach ($old_result as $room) { $room_property_match = 0; @@ -663,9 +667,9 @@ class RoomManager //Furthermore we must check if only minimum or maximum are //set or if both are set. Depending on that condition, //the conditions are different. - if ($state[0] and $state[1]) { + if ($state[0] && $state[1]) { //Minimum and maximum are specified: - if (($room_prop_state >= $state[0]) && $room_prop_state <= $state[1]) { + if ($room_prop_state >= $state[0] && $room_prop_state <= $state[1]) { $room_property_match++; } } elseif ($state[0]) { @@ -685,7 +689,7 @@ class RoomManager } } } - if ($room_property_match == $required_property_c) { + if ($room_property_match === $required_property_c) { $result[] = $room; } } -- GitLab