From 4a3351ec611f43ee9449a534b7a3e9260e09d9b9 Mon Sep 17 00:00:00 2001
From: Viktoria Wiebe <vwiebe@uni-osnabrueck.de>
Date: Thu, 14 Jul 2022 19:44:32 +0000
Subject: [PATCH] fix #378 - show room search to everybody and join building
 search and room search into one search

Closes #378

Merge request studip/studip!336
---
 app/controllers/room_management/overview.php | 53 +++++++++-----------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/app/controllers/room_management/overview.php b/app/controllers/room_management/overview.php
index e36f9e21766..d98ba9f09c2 100644
--- a/app/controllers/room_management/overview.php
+++ b/app/controllers/room_management/overview.php
@@ -357,43 +357,40 @@ class RoomManagement_OverviewController extends AuthenticatedController
 
         $search = new SearchWidget($this->roomsURL());
         $search->setTitle(_('Raumsuche'));
-        $search->addNeedle(_('Gebäude'), 'building_name', true);
-        if ($this->user_is_global_resource_user) {
-            $search->addNeedle(_('Raum'), 'room_name', true);
-        }
+        $search->addNeedle(_('Gebäude oder Raum'), 'building_room_name', true);
+        
         $sidebar->addWidget($search);
 
+        // search for all rooms
+        $rooms_sql = "INNER JOIN resource_categories rc
+                      ON resources.category_id = rc.id
+                      INNER JOIN resources pr
+                      ON resources.parent_id = pr.id
+                      WHERE rc.class_name IN ( :room_class_names )";
+        // narrow down rooms according to search parameter (room or building name)
+        $rooms_sql_with_request = $rooms_sql . 
+                     "AND (resources.name LIKE CONCAT('%', :room_name, '%')
+                      OR pr.name LIKE CONCAT('%', :building_name, '%'))";
+
+        $rooms_parameter['room_class_names'] = RoomManager::getAllRoomClassNames();
+        $rooms_parameter['room_name'] = Request::get('building_room_name');
+        $rooms_parameter['building_name'] = Request::get('building_room_name');
+
         if ($this->user_is_global_resource_user) {
-            if(Request::get('room_name') || Request::get('building_name')) {
-                $this->rooms = Room::findByNameOrBuilding(Request::get('room_name'), Request::get('building_name'));
+            if(Request::get('building_room_name')) {
+                $rooms_sql_with_request .= " ORDER BY sort_position DESC, name ASC, mkdate ASC";
+                $this->rooms = Room::findBySQL($rooms_sql_with_request, $rooms_parameter);
             } else {
                 $this->rooms = Room::findAll();
             }
         } else {
             //Get only the locations for which
             //the user has at least user permissions:
-            $rooms_parameter = [
-                'user_id' => $this->user->id,
-                'now' => time()
-            ];
-            $rooms_sql = "";
-            if (Request::get('building_name')) {
-                $rooms_sql .= " INNER JOIN resources pr ON resources.parent_id = pr.id";
-            }
-
-            $rooms_sql .= " INNER JOIN resource_categories rc
-                        ON resources.category_id = rc.id
-                        WHERE rc.class_name IN ( :room_class_names )";
-            $rooms_parameter['room_class_names'] = RoomManager::getAllRoomClassNames();
-
-            if (Request::get('room_name')) {
-                $rooms_sql .= " AND resources.name LIKE CONCAT('%', :room_name, '%')";
-                $rooms_parameter['room_name'] = Request::get('room_name');
-            }
-            if (Request::get('building_name')) {
-                $rooms_sql .= " AND pr.name LIKE CONCAT('%', :building_name, '%')";
-                $rooms_parameter['building_name'] = Request::get('building_name');
-            }
+            $rooms_parameter['user_id'] = $this->user->id;
+            $rooms_parameter['now']     = time();
+            
+            // did the user search for a specific room or building name?
+            $rooms_sql = Request::get('building_room_name') ? $rooms_sql_with_request : $rooms_sql;
 
             $rooms_sql .= " AND resources.id IN (
                             SELECT resource_id
-- 
GitLab