From dd008ac05181141f852481e0f985b2adc55ff207 Mon Sep 17 00:00:00 2001
From: David Siegfried <david.siegfried@uni-vechta.de>
Date: Tue, 24 Sep 2024 18:03:10 +0000
Subject: [PATCH] prevent php-warnings in resources, fixes #4623

Closes #4623

Merge request studip/studip!3435
---
 app/controllers/resources/room_request.php              | 8 ++++----
 app/views/course/room_requests/request_show_summary.php | 2 +-
 app/views/resources/booking/index.php                   | 3 +--
 lib/models/resources/ResourceRequest.php                | 6 +++---
 lib/resources/RoomManager.php                           | 6 +++---
 locale/de/LC_MAILS/close_resource_request.php           | 3 ++-
 6 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php
index 9178b64eac6..82651995fef 100644
--- a/app/controllers/resources/room_request.php
+++ b/app/controllers/resources/room_request.php
@@ -1296,7 +1296,6 @@ class Resources_RoomRequestController extends AuthenticatedController
         } else {
             //If no room is selected, it cannot be declared fully available.
             $this->requested_room_fully_available = false;
-            $this->room_availability_share[$selected_room->id] = 0.0;
         }
 
         //Load the room groups of the current user:
@@ -1452,7 +1451,8 @@ class Resources_RoomRequestController extends AuthenticatedController
         $deduplicated = [];
 
         foreach ($this->alternative_rooms as $room) {
-            if ($room->id != $this->request_resource->id
+            if (
+                (!$this->request_resource || $room->id !== $this->request_resource->id)
                 && !isset($deduplicated[$room->id])
             ) {
                 $deduplicated[$room->id] = $room;
@@ -1556,7 +1556,7 @@ class Resources_RoomRequestController extends AuthenticatedController
                         return;
                     }
 
-                    if ($course_date->room_booking->resource_id != $room_id) {
+                    if ($course_date->room_booking && $course_date->room_booking->resource_id !== $room_id) {
                         try {
                             $booking = $room->createBooking(
                                 $this->current_user,
@@ -1574,7 +1574,7 @@ class Resources_RoomRequestController extends AuthenticatedController
                             );
                             if ($booking instanceof ResourceBooking) {
                                 $bookings[] = $booking;
-                                if ($this->booked_room_infos[$room->id]) {
+                                if (!empty($this->booked_room_infos[$room->id])) {
                                     if ($this->booked_room_infos[$room->id]['first_booking_date'] > $booking->begin) {
                                         $this->booked_room_infos[$room->id]['first_booking_date'] = $booking->begin;
                                     }
diff --git a/app/views/course/room_requests/request_show_summary.php b/app/views/course/room_requests/request_show_summary.php
index 732e2a4cb93..116caf8f87e 100644
--- a/app/views/course/room_requests/request_show_summary.php
+++ b/app/views/course/room_requests/request_show_summary.php
@@ -15,7 +15,7 @@
             <label>
                 <?= _('Ausgewählte Raumkategorie') ?>
                 <input type="hidden" name="selected_room_id"
-                       value="<?= htmlReady($selected_room->id) ?>">
+                       value="<?= htmlReady($selected_room ? $selected_room->id : '') ?>">
                 <br>
 
                 <strong><?= htmlReady($selected_room_category->name) ?></strong>
diff --git a/app/views/resources/booking/index.php b/app/views/resources/booking/index.php
index fc184371cf6..27820401d39 100644
--- a/app/views/resources/booking/index.php
+++ b/app/views/resources/booking/index.php
@@ -121,8 +121,7 @@
         <? endif ?>
     <? elseif ($booking->getAssignedUserType() === 'user') : ?>
         <? if (($booking->assigned_user->visible === 'yes') ||
-               ($booking->assigned_user->id === $GLOBALS['user']->id) ||
-               $user_has_user_perms) : ?>
+               ($booking->assigned_user->id === $GLOBALS['user']->id) || !empty($user_has_user_perms)) : ?>
             <h3><?= _('Gebucht für:') ?></h3>
             <a href="<?= URLHelper::getScriptLink(
                      'dispatch.php/profile',
diff --git a/lib/models/resources/ResourceRequest.php b/lib/models/resources/ResourceRequest.php
index fff7132adca..b5da46a6b7b 100644
--- a/lib/models/resources/ResourceRequest.php
+++ b/lib/models/resources/ResourceRequest.php
@@ -964,8 +964,8 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
                 $date = CourseDate::find($appointment->appointment_id);
                 $interval['range']                 = 'CourseDate';
                 $interval['range_id']              = $appointment->appointment_id;
-                $interval['booked_room']           = $date->room_booking->resource_id;
-                $interval['booking_id']            = $date->room_booking->id;
+                $interval['booked_room']           = $date->room_booking->resource_id ?? '';
+                $interval['booking_id']            = $date->room_booking->id ?? '';
                 $time_intervals['']['intervals'][] = $interval;
             }
 
@@ -2433,7 +2433,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
     {
         $props = '';
         foreach ($this->getPropertyData() as $name => $state) {
-            $props .= $name . '=' . $state . ' ';
+            $props .= $name . '=' . json_encode($state) . ' ';
         }
         $info['Anfrage'] = $this->getType();
         $info['Status'] = $this->getStatus();
diff --git a/lib/resources/RoomManager.php b/lib/resources/RoomManager.php
index 0122a48edf4..caaf8ca0536 100644
--- a/lib/resources/RoomManager.php
+++ b/lib/resources/RoomManager.php
@@ -667,17 +667,17 @@ 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] && $state[1]) {
+                        if (!empty($state[0]) && !empty($state[1])) {
                             //Minimum and maximum are specified:
                             if ($room_prop_state >= $state[0] && $room_prop_state <= $state[1]) {
                                 $room_property_match++;
                             }
-                        } elseif ($state[0]) {
+                        } elseif (!empty($state[0])) {
                             //Only a minimum is given:
                             if ($room_prop_state >= $state[0]) {
                                 $room_property_match++;
                             }
-                        } elseif ($state[1]) {
+                        } elseif (!empty($state[1])) {
                             //Only a maximum is given:
                             if ($room_prop_state <= $state[1]) {
                                 $room_property_match++;
diff --git a/locale/de/LC_MAILS/close_resource_request.php b/locale/de/LC_MAILS/close_resource_request.php
index dada45f2fa7..4d31936290e 100644
--- a/locale/de/LC_MAILS/close_resource_request.php
+++ b/locale/de/LC_MAILS/close_resource_request.php
@@ -8,8 +8,9 @@ Lehrende Person(en): <?= $lecturer_names ?>
 
 <? endif ?>
 
+<? if ($request->resource) : ?>
 Angefragter Raum: <?= $request->resource->name ?>
-
+<? endif ?>
 
 Gebuchte Räume: <?= $booked_rooms ?>
 
-- 
GitLab