From 376f5be1b6a2a4fbc69a5d6c7f0805c230c9e554 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Wed, 10 May 2023 12:44:59 +0000
Subject: [PATCH] use additional fields instead of overwriting getValue(),
 fixes #2624

Closes #2624

Merge request studip/studip!1776
---
 lib/models/CronjobSchedule.class.php |  2 +-
 lib/models/CronjobTask.class.php     | 65 +++++++++++++++-------------
 2 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/lib/models/CronjobSchedule.class.php b/lib/models/CronjobSchedule.class.php
index 88088202444..028eed7b12e 100644
--- a/lib/models/CronjobSchedule.class.php
+++ b/lib/models/CronjobSchedule.class.php
@@ -120,7 +120,7 @@ class CronjobSchedule extends SimpleORMap
      */
     public function getTitle()
     {
-        return ($this->content['title'] ?: $this->task->name) ?? '';
+        return $this->content['title'] ?: $this->task->name ?? '';
     }
 
     protected function cbJsonifyParameters($type)
diff --git a/lib/models/CronjobTask.class.php b/lib/models/CronjobTask.class.php
index 5b5350f8c03..0313e9b8f1d 100644
--- a/lib/models/CronjobTask.class.php
+++ b/lib/models/CronjobTask.class.php
@@ -56,6 +56,40 @@ class CronjobTask extends SimpleORMap
             'on_store'   => 'store'
         ];
 
+        $config['additional_fields'] = [
+            'description' => [
+                'get' => function (CronjobTask $task): string {
+                    if ($task->valid) {
+                        return $task->class::getDescription();
+                    }
+                    return _('Unbekannt');
+                },
+            ],
+            'name' => [
+                'get' => function (CronjobTask $task): string {
+                    if ($task->valid) {
+                        return $task->class::getName();
+                    }
+                    $result = $task->filename;
+                    if (strpos($result, 'public/plugins_packages') !== false) {
+                        $result = preg_replace('/.*public\/plugins_packages\/(.+)(_Cronjob)?(\.class)?\.php$/', '$1', $result);
+                    } else {
+                        $result = preg_replace('/(_Cronjob)?(\.class)?\.php$/', '', basename($result));
+                    }
+                    $result .= ' (' . _('fehlerhaft') . ')';
+                    return $result;
+                },
+            ],
+            'parameters' => [
+                'get' => function (CronjobTask $task): array {
+                    if ($task->valid) {
+                        return $task->class::getParameters();
+                    }
+                    return [];
+                },
+            ],
+        ];
+
         $config['registered_callbacks']['after_initialize'][] = 'loadClass';
 
         parent::configure($config);
@@ -122,37 +156,6 @@ class CronjobTask extends SimpleORMap
         return $result;
     }
 
-    /**
-     * Proxy the static methods "getDescription", "getName" and
-     * "getParameters" from the task class.
-     *
-     * @param  String $field Field which should be accessed.
-     * @return mixed Value of the method call
-     */
-    public function getValue($field)
-    {
-        if (in_array($field, words('description name parameters'))) {
-            if ($this->valid) {
-                $method = 'get' . ucfirst($field);
-                return call_user_func("{$this->class}::{$method}");
-            } elseif ($field === 'description') {
-                return _('Unbekannt');
-            } elseif ($field === 'name') {
-                $result = $this->filename;
-                if (strpos($result, 'public/plugins_packages') !== false) {
-                    $result = preg_replace('/.*public\/plugins_packages\/(.+)(_Cronjob)?(\.class)?\.php$/', '$1', $result);
-                } else {
-                    $result = preg_replace('/(_Cronjob)?(\.class)?\.php$/', '', basename($result));
-                }
-                $result .= ' (' . _('fehlerhaft') . ')';
-                return $result;
-            } elseif ($field === 'parameters') {
-                return [];
-            }
-        }
-        return parent::getValue($field);
-    }
-
 // Convenience methods to ease the usage
 
     /**
-- 
GitLab