From bf62a91ebba870fdc6e43ead8b876e91da6f13b0 Mon Sep 17 00:00:00 2001
From: Rami Jasim <minecraftmrgold@gmail.com>
Date: Mon, 28 Oct 2024 09:16:40 +0000
Subject: [PATCH] PHP8 TypeError for additional_fields set in SORM

Closes #4761

Merge request studip/studip!3550
---
 lib/classes/SimpleORMap.php         |  2 +-
 lib/models/Courseware/Block.php     |  3 +--
 lib/models/Courseware/Container.php |  3 +--
 lib/models/Courseware/Task.php      |  2 --
 lib/models/DataField.php            |  1 -
 lib/models/Fach.php                 | 29 +++++++++++++++--------------
 lib/models/Lvgruppe.php             | 24 ++++++++++++------------
 lib/models/Modul.php                | 17 +++++++++--------
 lib/models/Modulteil.php            |  1 -
 lib/models/Semester.php             |  2 --
 lib/models/StgteilAbschnitt.php     |  6 +++---
 lib/models/StgteilBezeichnung.php   | 12 ++++++------
 12 files changed, 48 insertions(+), 54 deletions(-)

diff --git a/lib/classes/SimpleORMap.php b/lib/classes/SimpleORMap.php
index 46ea70dd574..3823143a824 100644
--- a/lib/classes/SimpleORMap.php
+++ b/lib/classes/SimpleORMap.php
@@ -1543,7 +1543,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
                  } else {
                      $ret = ($this->content[$field] = $value);
                  }
-             } elseif (isset($this->additional_fields()[$field]['set'])) {
+             } elseif (!empty($this->additional_fields()[$field]['set'])) {
                  if ($this->additional_fields()[$field]['set'] instanceof Closure) {
                      return call_user_func_array($this->additional_fields()[$field]['set'], [$this, $field, $value]);
                  } else {
diff --git a/lib/models/Courseware/Block.php b/lib/models/Courseware/Block.php
index 8b3d6f43349..a3d7f09a30a 100644
--- a/lib/models/Courseware/Block.php
+++ b/lib/models/Courseware/Block.php
@@ -99,7 +99,6 @@ class Block extends \SimpleORMap implements \PrivacyObject
             'get' => function ($block) {
                 return BlockTypes\BlockType::factory($block);
             },
-            'set' => false,
         ];
 
         $config['additional_fields']['files'] = [
@@ -285,6 +284,6 @@ class Block extends \SimpleORMap implements \PrivacyObject
         if ($blocks) {
             $storage->addTabularData(_('Courseware Blöcke'), 'cw_blocks', $blocks);
         }
-        
+
     }
 }
diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php
index a4f773fa9cc..5e4a49a47c0 100644
--- a/lib/models/Courseware/Container.php
+++ b/lib/models/Courseware/Container.php
@@ -73,7 +73,6 @@ class Container extends \SimpleORMap implements \PrivacyObject
             'get' => function ($container) {
                 return ContainerTypes\ContainerType::factory($container);
             },
-            'set' => false,
         ];
 
         parent::configure($config);
@@ -184,7 +183,7 @@ class Container extends \SimpleORMap implements \PrivacyObject
         if ($containers) {
             $storage->addTabularData(_('Courseware Abschnitte'), 'cw_containers', $containers);
         }
-        
+
     }
 
     public static function createFromData(User $user, $data, StructuralElement $element): Container
diff --git a/lib/models/Courseware/Task.php b/lib/models/Courseware/Task.php
index 2a1a28d2b00..7842830050d 100644
--- a/lib/models/Courseware/Task.php
+++ b/lib/models/Courseware/Task.php
@@ -81,11 +81,9 @@ class Task extends \SimpleORMap
 
         $config['additional_fields']['solver'] = [
             'get' => 'getSolver',
-            'set' => false,
         ];
         $config['additional_fields']['submission_date'] = [
             'get' => 'getSubmissionDate',
-            'set' => false,
         ];
 
         parent::configure($config);
diff --git a/lib/models/DataField.php b/lib/models/DataField.php
index 8a0bdb68e40..1a83804d46f 100644
--- a/lib/models/DataField.php
+++ b/lib/models/DataField.php
@@ -62,7 +62,6 @@ class DataField extends SimpleORMap implements PrivacyObject
                 }
                 return $institution;
             },
-            'set' => false,
         );
 
         $config['i18n_fields']['name'] = true;
diff --git a/lib/models/Fach.php b/lib/models/Fach.php
index 24a1a6c5076..aff81beb0b5 100644
--- a/lib/models/Fach.php
+++ b/lib/models/Fach.php
@@ -71,20 +71,21 @@ class Fach extends ModuleManagementModelTreeItem implements PrivacyObject
             'on_delete' => 'delete'
         ];
 
-        $config['additional_fields']['count_abschluesse']['get'] =
-            function($fach) { return $fach->count_abschluesse; };
-        $config['additional_fields']['count_abschluesse']['set'] = false;
-        $config['additional_fields']['count_user']['get'] =
-            function($fach) { return $fach->count_user; };
-        $config['additional_fields']['count_user']['set'] = false;
-        $config['additional_fields']['count_sem']['get'] =
-            function($fach) { return $fach->count_sem; };
-        $config['additional_fields']['count_sem']['set'] = false;
-        $config['additional_fields']['count_stgteile']['get'] =
-            function($fach) { return $fach->count_stgteile; };
-        $config['additional_fields']['count_stgteile']['set'] = false;
-        $config['additional_fields']['count_module']['get'] =
-            function($fach) { return $fach->count_module; };
+        $config['additional_fields']['count_abschluesse']['get'] = function ($fach) {
+            return $fach->count_abschluesse;
+        };
+        $config['additional_fields']['count_user']['get'] = function ($fach) {
+            return $fach->count_user;
+        };
+        $config['additional_fields']['count_sem']['get'] = function ($fach) {
+            return $fach->count_sem;
+        };
+        $config['additional_fields']['count_stgteile']['get'] = function ($fach) {
+            return $fach->count_stgteile;
+        };
+        $config['additional_fields']['count_module']['get'] = function ($fach) {
+            return $fach->count_module;
+        };
 
         $config['i18n_fields']['name'] = true;
         $config['i18n_fields']['name_kurz'] = true;
diff --git a/lib/models/Lvgruppe.php b/lib/models/Lvgruppe.php
index bdd9f0b7a83..19fc373b0f4 100644
--- a/lib/models/Lvgruppe.php
+++ b/lib/models/Lvgruppe.php
@@ -55,18 +55,18 @@ class Lvgruppe extends ModuleManagementModelTreeItem
             'on_store' => 'store'
         ];
 
-        $config['additional_fields']['count_seminare']['get'] =
-            function($lvgruppe) { return $lvgruppe->count_seminare; };
-        $config['additional_fields']['count_seminare']['set'] = false;
-        $config['additional_fields']['count_archiv']['get'] =
-            function($lvgruppe) { return $lvgruppe->count_archiv; };
-        $config['additional_fields']['count_archiv']['set'] = false;
-        $config['additional_fields']['count_modulteile']['get'] =
-            function($lvgruppe) { return $lvgruppe->count_modulteile; };
-        $config['additional_fields']['count_modulteile']['set'] = false;
-        $config['additional_fields']['count_semester']['get'] =
-            function($lvgruppe) { return $lvgruppe->count_semester; };
-        $config['additional_fields']['count_semester']['set'] = false;
+        $config['additional_fields']['count_seminare']['get'] = function ($lvgruppe) {
+            return $lvgruppe->count_seminare;
+        };
+        $config['additional_fields']['count_archiv']['get'] = function ($lvgruppe) {
+            return $lvgruppe->count_archiv;
+        };
+        $config['additional_fields']['count_modulteile']['get'] = function ($lvgruppe) {
+            return $lvgruppe->count_modulteile;
+        };
+        $config['additional_fields']['count_semester']['get'] = function ($lvgruppe) {
+            return $lvgruppe->count_semester;
+        };
 
         $config['i18n_fields']['alttext'] = true;
 
diff --git a/lib/models/Modul.php b/lib/models/Modul.php
index 1d0ca3353d4..31f4bbec7f0 100644
--- a/lib/models/Modul.php
+++ b/lib/models/Modul.php
@@ -140,14 +140,15 @@ class Modul extends ModuleManagementModelTreeItem
             'on_store' => 'store'
         ];
 
-        $config['additional_fields']['count_modulteile']['get'] =
-                function ($modul) { return $modul->count_modulteile; };
-        $config['additional_fields']['count_modulteile']['set'] = false;
-        $config['additional_fields']['languagesofinstruction']['get'] =
-                function ($modul) { return $modul->languages; };
-        $config['additional_fields']['languagesofinstruction']['set'] = false;
-        $config['additional_fields']['display_name']['get'] =
-                function ($modul) { return $modul->getDisplayName(); };
+        $config['additional_fields']['count_modulteile']['get'] = function ($modul) {
+            return $modul->count_modulteile;
+        };
+        $config['additional_fields']['languagesofinstruction']['get'] = function ($modul) {
+            return $modul->languages;
+        };
+        $config['additional_fields']['display_name']['get'] = function ($modul) {
+            return $modul->getDisplayName();
+        };
 
         $config['alias_fields']['flexnow_id'] = 'flexnow_modul';
 
diff --git a/lib/models/Modulteil.php b/lib/models/Modulteil.php
index 089246bf487..397fc18de55 100644
--- a/lib/models/Modulteil.php
+++ b/lib/models/Modulteil.php
@@ -103,7 +103,6 @@ class Modulteil extends ModuleManagementModelTreeItem
         $config['additional_fields']['count_lvgruppen']['get'] = function ($mt) {
             return $mt->count_lvgruppen;
         };
-        $config['additional_fields']['count_lvgruppen']['set'] = false;
 
         parent::configure($config);
     }
diff --git a/lib/models/Semester.php b/lib/models/Semester.php
index ca75dd2d370..afd7b08051b 100644
--- a/lib/models/Semester.php
+++ b/lib/models/Semester.php
@@ -56,11 +56,9 @@ class Semester extends SimpleORMap
 
         $config['additional_fields']['absolute_seminars_count'] = [
             'get' => 'seminarCounter',
-            'set' => false,
         ];
         $config['additional_fields']['continuous_seminars_count'] = [
             'get' => 'seminarCounter',
-            'set' => false,
         ];
 
         $config['alias_fields']['token'] = 'semester_token';
diff --git a/lib/models/StgteilAbschnitt.php b/lib/models/StgteilAbschnitt.php
index 75a6cc8a583..77f8aef001d 100644
--- a/lib/models/StgteilAbschnitt.php
+++ b/lib/models/StgteilAbschnitt.php
@@ -65,9 +65,9 @@ class StgteilAbschnitt extends ModuleManagementModelTreeItem
             'on_store' => 'store'
         ];
 
-        $config['additional_fields']['count_module']['get'] =
-            function($fach) { return $fach->count_module; };
-        $config['additional_fields']['count_module']['set'] = false;
+        $config['additional_fields']['count_module']['get'] = function ($fach) {
+            return $fach->count_module;
+        };
 
         $config['i18n_fields']['name'] = true;
         $config['i18n_fields']['kommentar'] = true;
diff --git a/lib/models/StgteilBezeichnung.php b/lib/models/StgteilBezeichnung.php
index ba6ddd9053c..58eea27e66f 100644
--- a/lib/models/StgteilBezeichnung.php
+++ b/lib/models/StgteilBezeichnung.php
@@ -32,12 +32,12 @@ class StgteilBezeichnung extends ModuleManagementModel
     {
         $config['db_table'] = 'mvv_stgteil_bez';
 
-        $config['additional_fields']['count_stgteile']['get'] =
-            function($stg_bez) { return $stg_bez->count_stgteile; };
-        $config['additional_fields']['count_stgteile']['set'] = false;
-        $config['additional_fields']['count_studiengaenge']['get'] =
-            function($stg_bez) { return $stg_bez->count_studiengaenge; };
-        $config['additional_fields']['count_studiengaenge']['set'] = false;
+        $config['additional_fields']['count_stgteile']['get'] = function ($stg_bez) {
+            return $stg_bez->count_stgteile;
+        };
+        $config['additional_fields']['count_studiengaenge']['get'] = function ($stg_bez) {
+            return $stg_bez->count_studiengaenge;
+        };
 
         $config['i18n_fields']['name'] = true;
         $config['i18n_fields']['name_kurz'] = true;
-- 
GitLab