diff --git a/lib/resources/RoomManager.class.php b/lib/resources/RoomManager.class.php index 3c956a004c06cde1d21c288992e74000a8b31f00..b33ffbef1994ea9a6c1886d4a4505b97b12fc5df 100644 --- a/lib/resources/RoomManager.class.php +++ b/lib/resources/RoomManager.class.php @@ -32,7 +32,8 @@ class RoomManager $request->getTimeIntervals(true), 'name ASC, mkdate ASC', true, - $excluded_room_ids + $excluded_room_ids, + false ); } @@ -480,6 +481,13 @@ class RoomManager * @param bool $only_requestable_rooms Whether the search shall be limited * to requestable rooms only (true) or not (false). * @param array $excluded_room_ids + * + * @param bool $only_fully_available Whether only rooms shall be added to + * the result set that are fully available in the requested time + * ranges (true) or whether rooms shall be added that are only + * partially available in those time ranges (false). + * Defaults to true. + * * @return array */ public static function findRooms( @@ -490,7 +498,8 @@ class RoomManager $time_ranges = [], $order_by = null, $only_requestable_rooms = true, - $excluded_room_ids = [] + $excluded_room_ids = [], + $only_fully_available = true ) { $sql = "INNER JOIN resource_categories rc @@ -582,29 +591,34 @@ class RoomManager if (!empty($time_ranges)) { //We must check if the room is available: foreach ($filtered_rooms as $room) { - $room_is_available = true; + $room_is_available = $only_fully_available; foreach ($time_ranges as $time_range) { if (!$time_range['begin'] || !$time_range['end']) { //Invalid format. continue; } - $begin = null; if ($time_range['begin'] instanceof DateTime) { $begin = $time_range['begin']; } else { $begin = new DateTime(); $begin->setTimestamp($time_range['begin']); } - $end = null; if ($time_range['end'] instanceof DateTime) { $end = $time_range['end']; } else { $end = new DateTime(); $end->setTimestamp($time_range['end']); } - if (!$room->isAvailable($begin, $end)) { - $room_is_available = false; - continue 2; + if ($room->isAvailable($begin, $end)) { + if (!$only_fully_available) { + $room_is_available = true; + break; + } + } else { + if ($only_fully_available) { + $room_is_available = false; + break; + } } } if ($room_is_available) {