From 7def6ca0b2446a3656b728768027c368c682b054 Mon Sep 17 00:00:00 2001
From: David Siegfried <david.siegfried@uni-vechta.de>
Date: Thu, 7 Nov 2024 12:36:05 +0000
Subject: [PATCH] prevent php-warnings in resources-structure, fixes #4841

Closes #4841

Merge request studip/studip!3627
---
 .../resources/building/_add_edit_form.php     | 40 ++++++++++++++-----
 .../resources/building/select_category.php    |  8 +++-
 .../resources/location/_add_edit_form.php     | 40 ++++++++++++++-----
 .../resources/location/select_category.php    |  8 +++-
 app/views/resources/room/select_category.php  |  9 ++++-
 lib/models/resources/ResourceCategory.php     |  4 +-
 6 files changed, 83 insertions(+), 26 deletions(-)

diff --git a/app/views/resources/building/_add_edit_form.php b/app/views/resources/building/_add_edit_form.php
index bc07db2f47e..5871227755c 100644
--- a/app/views/resources/building/_add_edit_form.php
+++ b/app/views/resources/building/_add_edit_form.php
@@ -1,7 +1,25 @@
+<?php
+/**
+ * @var Resources_BuildingController $controller
+ * @var bool $show_form
+ * @var string $mode
+ * @var string $name
+ * @var string $category_id
+ * @var string $description
+ * @var string $parent_id
+ * @var string $number
+ * @var string $address
+ * @var int $sort_position
+ * @var Building $building
+ * @var Building[] $possible_parents
+ * @var array $grouped_defined_properties
+ * @var array $property_data
+ */
+?>
 <? if ($show_form): ?>
-    <? $url = ($mode == 'add')
-        ? $controller->link_for('resources/building/add', ['category_id' => $category_id])
-        : $controller->link_for('resources/building/edit/' . $building->id) ?>
+    <? $url = $mode === 'add'
+        ? $controller->add(['category_id' => $category_id])
+        : $controller->edit($building->id) ?>
     <form class="default" method="post" action="<?= $url ?>"
           data-dialog="reload-on-close">
 
@@ -10,11 +28,11 @@
             <legend><?= _('Grunddaten') ?></legend>
             <label>
                 <?= _('Name des Gebäudes') ?>
-                <input type="text" name="name" value="<?= htmlReady($name) ?>">
+                <input type="text" name="name" value="<?= htmlReady($name ?? '') ?>">
             </label>
             <label>
                 <?= _('Beschreibungstext') ?>
-                <input type="text" name="description" value="<?= htmlReady($description) ?>">
+                <input type="text" name="description" value="<?= htmlReady($description ?? '') ?>">
             </label>
             <label>
                 <?= _('Standort / Hierarchie') ?>
@@ -22,7 +40,7 @@
                     <option value=""><?= _('Bitte wählen') ?></option>
                     <? foreach ($possible_parents as $resource): ?>
                         <option value="<?= htmlReady($resource->id) ?>"
-                            <?= $parent_id == $resource->id ? 'selected="selected"' : '' ?>>
+                            <?= $parent_id === $resource->id ? 'selected' : '' ?>>
                             <?= htmlReady('/' . implode('/', ResourceManager::getHierarchyNames($resource))) ?>
                         </option>
                     <? endforeach ?>
@@ -30,16 +48,16 @@
             </label>
             <label>
                 <?= _('Gebäudenummer') ?>
-                <input type="text" name="number" value="<?= htmlReady($number) ?>">
+                <input type="text" name="number" value="<?= htmlReady($number ?? '') ?>">
             </label>
             <label>
                 <?= _('Adresse') ?>
-                <input type="text" name="address" value="<?= htmlReady($address) ?>">
+                <input type="text" name="address" value="<?= htmlReady($address ?? '') ?>">
             </label>
             <? if ($GLOBALS['perm']->have_perm('root')): ?>
                 <label>
                     <?= _('Sortierposition') ?>
-                    <input type="text" name="sort_position" value="<?= htmlReady($sort_position) ?>">
+                    <input type="text" name="sort_position" value="<?= htmlReady($sort_position ?? '') ?>">
                 </label>
             <? endif ?>
 
@@ -53,12 +71,12 @@
                 ]
             ) ?>
         </fieldset>
-        <? if ($grouped_defined_properties): ?>
+        <? if (!empty($grouped_defined_properties)): ?>
             <?= $this->render_partial(
                 'resources/resource/_standard_properties_form_part.php',
                 [
                     'grouped_defined_properties' => $grouped_defined_properties,
-                    'property_data'              => $property_data
+                    'property_data'              => $property_data ?? []
                 ]
             ) ?>
         <? endif ?>
diff --git a/app/views/resources/building/select_category.php b/app/views/resources/building/select_category.php
index 429cfa89405..4d7e73353d0 100644
--- a/app/views/resources/building/select_category.php
+++ b/app/views/resources/building/select_category.php
@@ -1,5 +1,11 @@
+<?php
+/**
+ * @var ResourceCategory[] $categories
+ * @var Resources_BuildingController $controller
+ */
+?>
 <? if ($categories) : ?>
-<form method="get" action="<?= $controller->link_for('resources/building/add' . $room_id) ?>" class="default"
+<form method="get" action="<?= $controller->add() ?>" class="default"
       data-dialog="size=auto">
     <label>
         <?= _('Gebäudekategorie') ?>
diff --git a/app/views/resources/location/_add_edit_form.php b/app/views/resources/location/_add_edit_form.php
index 3ba317da6f4..dc91bd669c0 100644
--- a/app/views/resources/location/_add_edit_form.php
+++ b/app/views/resources/location/_add_edit_form.php
@@ -1,7 +1,27 @@
+<?php
+/**
+ * @var Resources_LocationController $controller
+ * @var bool $show_form
+ * @var string $mode
+ * @var string $name
+ * @var string $category_id
+ * @var string $longitude
+ * @var string $latitude
+ * @var string $altitude
+ * @var string $description
+ * @var string $parent_id
+ * @var string $number
+ * @var string $address
+ * @var int $sort_position
+ * @var Building $location
+ * @var array $grouped_defined_properties
+ * @var array $property_data
+ */
+?>
 <? if ($show_form): ?>
-    <form class="default" method="post" action="<?= ($mode == 'add')
-        ? $controller->link_for('resources/location/add', ['category_id' => $category_id])
-        : $controller->link_for('resources/location/edit/' . $location->id) ?>"
+    <form class="default" method="post" action="<?= $mode === 'add'
+        ? $controller->add(['category_id' => $category_id])
+        : $controller->edit($location->id) ?>"
           data-dialog="reload-on-close">
 
         <?= CSRFProtection::tokenTag() ?>
@@ -9,26 +29,26 @@
             <legend><?= _('Grunddaten') ?></legend>
             <label>
                 <?= _('Name des Standortes') ?>
-                <input type="text" name="name" value="<?= htmlReady($name) ?>">
+                <input type="text" name="name" value="<?= htmlReady($name ?? '') ?>">
             </label>
             <label>
                 <?= _('Beschreibungstext') ?>
-                <input type="text" name="description" value="<?= htmlReady($description) ?>">
+                <input type="text" name="description" value="<?= htmlReady($description ?? '') ?>">
             </label>
             <? if ($GLOBALS['perm']->have_perm('root')): ?>
                 <label>
                     <?= _('Sortierposition') ?>
                     <input type="text" name="sort_position"
-                           value="<?= htmlReady($sort_position) ?>">
+                           value="<?= htmlReady($sort_position ?? '') ?>">
                 </label>
             <? endif ?>
             <?= $this->render_partial(
                 '../../templates/resources/position_attribute_form_part.php',
                 [
                     'property_name' => 'geo_coordinates',
-                    'latitude'      => $latitude,
-                    'longitude'     => $longitude,
-                    'altitude'      => $altitude
+                    'latitude'      => $latitude ?? '',
+                    'longitude'     => $longitude ?? '',
+                    'altitude'      => $altitude ?? ''
                 ]
             ) ?>
         </fieldset>
@@ -37,7 +57,7 @@
                 'resources/resource/_standard_properties_form_part.php',
                 [
                     'defined_properties' => $defined_properties,
-                    'property_data'      => $property_data
+                    'property_data'      => $property_data ?? []
                 ]
             ) ?>
         <? endif ?>
diff --git a/app/views/resources/location/select_category.php b/app/views/resources/location/select_category.php
index 02a2f779425..44ac9269987 100644
--- a/app/views/resources/location/select_category.php
+++ b/app/views/resources/location/select_category.php
@@ -1,5 +1,11 @@
+<?php
+/**
+ * @var ResourceCategory[] $categories
+ * @var Resources_LocationController $controller
+ */
+?>
 <? if ($categories) : ?>
-<form method="get" action="<?= $controller->link_for('resources/location/add' . $room_id) ?>" class="default"
+<form method="get" action="<?= $controller->add() ?>" class="default"
       data-dialog="size=auto">
     <label>
         <?= _('Standortkategorie') ?>
diff --git a/app/views/resources/room/select_category.php b/app/views/resources/room/select_category.php
index 80acb518835..8dedaca7db1 100644
--- a/app/views/resources/room/select_category.php
+++ b/app/views/resources/room/select_category.php
@@ -1,5 +1,12 @@
+<?php
+/**
+ * @var ResourceCategory[] $categories
+ * @var Resources_RoomController $controller
+ */
+
+?>
 <? if ($categories) : ?>
-    <form method="get" action="<?= $controller->url_for('resources/room/add/') ?>" class="default"
+    <form method="get" action="<?= $controller->add() ?>" class="default"
           data-dialog="size=auto">
         <label>
             <?= _('Raumkategorie') ?>
diff --git a/lib/models/resources/ResourceCategory.php b/lib/models/resources/ResourceCategory.php
index 44867bd99d1..476dcd9d8f1 100644
--- a/lib/models/resources/ResourceCategory.php
+++ b/lib/models/resources/ResourceCategory.php
@@ -210,7 +210,7 @@ class ResourceCategory extends SimpleORMap
             foreach ($definitions as $definition) {
                 if ($definition->group && $definition->group->name) {
                     $group_name = $definition->group->name;
-                    if (!is_array($property_groups[$group_name])) {
+                    if (!isset($property_groups[$group_name])) {
                         $property_groups[$group_name] = [];
                     }
                     $property_groups[$group_name][] = $definition;
@@ -252,7 +252,7 @@ class ResourceCategory extends SimpleORMap
 
             if (!empty($definition->group->name)) {
                 $group_name = $definition->group->name;
-                if (!is_array($property_groups[$group_name])) {
+                if (!isset($property_groups[$group_name])) {
                     $property_groups[$group_name] = [];
                 }
                 $property_groups[$group_name][] = $definition;
-- 
GitLab