From ab835716d0be03463dba0b585b2c751160f7e7c0 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Fri, 9 Feb 2024 10:44:37 +0000
Subject: [PATCH] prevent php8 warnings, fixes #3732

Closes #3732

Merge request studip/studip!2594
---
 app/controllers/module/download.php           |  6 ++---
 app/controllers/module/module.php             |  2 --
 app/controllers/search/studiengaenge.php      |  2 +-
 app/controllers/shared/modul.php              | 21 ++++++++-------
 app/views/search/studiengaenge/info.php       |  2 +-
 app/views/search/studiengaenge/mehrfach.php   | 22 ++++++++--------
 app/views/search/studiengaenge/verlauf.php    | 26 ++++++++++++++-----
 app/views/shared/modul/_modul.php             |  6 ++---
 app/views/shared/modul/_modullv.php           |  4 +--
 app/views/shared/modul/_modullvs.php          |  2 +-
 app/views/shared/modul/_pruefungen.php        |  4 +--
 .../exportdocument/ExportPDF.class.php        |  4 +--
 12 files changed, 57 insertions(+), 44 deletions(-)

diff --git a/app/controllers/module/download.php b/app/controllers/module/download.php
index 8718ed179ec..be527d5747e 100644
--- a/app/controllers/module/download.php
+++ b/app/controllers/module/download.php
@@ -82,7 +82,7 @@ class Module_DownloadController extends MVVController
 
         foreach ($modul->modulteile as $modulTeil) {
             $deskriptor = $modulTeil->getDeskriptor($language);
-            $num_bezeichnung = $GLOBALS['MVV_MODULTEIL']['NUM_BEZEICHNUNG']['values'][$modulTeil->num_bezeichnung]['name'];
+            $num_bezeichnung = $GLOBALS['MVV_MODULTEIL']['NUM_BEZEICHNUNG']['values'][$modulTeil->num_bezeichnung]['name'] ?? '';
 
             $name_kurz = sprintf('%s %d', $num_bezeichnung, $modulTeil->nummer);
             $modulTeilData[$modulTeil->id] = [
@@ -97,7 +97,7 @@ class Module_DownloadController extends MVVController
                 'wl_bereitung'           => $modulTeil->wl_bereitung,
                 'wl_selbst'              => $modulTeil->wl_selbst,
                 'wl_pruef'               => $modulTeil->wl_pruef,
-                'turnus'                 => $GLOBALS['MVV_NAME_SEMESTER']['values'][$modulTeil->semester]['name'],
+                'turnus'                 => $GLOBALS['MVV_NAME_SEMESTER']['values'][$modulTeil->semester]['name'] ?? '',
                 'kommentar_wl_preasenz'  => $deskriptor->kommentar_wl_praesenz,
                 'kommentar_wl_bereitung' => $deskriptor->kommentar_wl_bereitung,
                 'kommentar_wl_selbst'    => $deskriptor->kommentar_wl_selbst,
@@ -133,7 +133,7 @@ class Module_DownloadController extends MVVController
             ));
         $this->semesterSelector = Semester::GetSemesterSelector(null, $currentSemester->getId(), 'semester_id', false);
         $this->modul = $modul;
-        $this->pruefungsEbene = $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name'];
+        $this->pruefungsEbene = $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name'] ?? null;
         $this->modulDeskriptor = $modul->getDeskriptor($language);
         $this->startSemester = Semester::find($modul->start);
         if ($modul->responsible_institute->institute) {
diff --git a/app/controllers/module/module.php b/app/controllers/module/module.php
index 852e9d97666..2f6ba4cc5f1 100644
--- a/app/controllers/module/module.php
+++ b/app/controllers/module/module.php
@@ -5,8 +5,6 @@
  * @since       3.5
  */
 
-require_once 'lib/classes/exportdocument/ExportPDF.class.php';
-
 class Module_ModuleController extends MVVController
 {
     public $filter = [];
diff --git a/app/controllers/search/studiengaenge.php b/app/controllers/search/studiengaenge.php
index ab4d4de3a77..a075ce9e1b5 100644
--- a/app/controllers/search/studiengaenge.php
+++ b/app/controllers/search/studiengaenge.php
@@ -402,7 +402,7 @@ class Search_StudiengaengeController extends MVVController
                             [
                                 'name' => $file->getDisplayName(),
                                 'url'  => $mvv_file_ref->file_ref->getDownloadURL(),
-                                'metadata_url' => $mvv_file_ref->file_ref->file->metadata['url'],
+                                'metadata_url' => $mvv_file_ref->file_ref->file->metadata['url'] ?? null,
                                 'extension' => $mvv_file_ref->file_ref->file->getExtension(),
                                 'is_link' => ($filetype instanceof URLFile)
                             ];
diff --git a/app/controllers/shared/modul.php b/app/controllers/shared/modul.php
index 0c3a39bdc79..d1a6ecfb216 100644
--- a/app/controllers/shared/modul.php
+++ b/app/controllers/shared/modul.php
@@ -63,7 +63,7 @@ class Shared_ModulController extends AuthenticatedController
 
                 $sws += (int) $modulTeil->sws;
 
-                $num_bezeichnung = $GLOBALS['MVV_MODULTEIL']['NUM_BEZEICHNUNG']['values'][$modulTeil->num_bezeichnung]['name'];
+                $num_bezeichnung = $GLOBALS['MVV_MODULTEIL']['NUM_BEZEICHNUNG']['values'][$modulTeil->num_bezeichnung]['name'] ?? '';
 
                 $name_kurz = sprintf('%s %d', $num_bezeichnung, $modulTeil->nummer);
 
@@ -94,7 +94,7 @@ class Shared_ModulController extends AuthenticatedController
             $this->semester = $currentSemester;
             $this->sws = $sws;
 
-            $this->pruef_ebene = $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name'];
+            $this->pruef_ebene = $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name'] ?? null;
             $this->modul = $modul;
             $this->type = $type;
             $this->self_url = $this->url_for('modul/show/' . $modul_id);
@@ -133,15 +133,18 @@ class Shared_ModulController extends AuthenticatedController
 
         $this->semesterSelector = Semester::getSemesterSelector(null, $currentSemester['semester_id'], 'semester_id', false);
         $this->modul = $modul;
-        $this->pruefungsEbene = $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name'];
+        $this->pruefungsEbene = isset($GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene])
+                              ? $GLOBALS['MVV_MODUL']['PRUEF_EBENE']['values'][$modul->pruef_ebene]['name']
+                              : null;
         $this->modulDeskriptor = $modul->getDeskriptor($display_language);
         $this->startSemester = Semester::findByTimestamp($modul->start);
-        if ($modul->responsible_institute) {
-            if ($modul->responsible_institute->institute) {
-                $this->instituteName = $modul->responsible_institute->institute->getValue('name');
-            } else {
-                $this->instituteName = _('Unbekannte Einrichtung');
-            }
+
+        if (!$modul->responsible_institute) {
+            $this->instituteName = null;
+        } elseif ($modul->responsible_institute->institute) {
+            $this->instituteName = $modul->responsible_institute->institute->name;
+        } else {
+            $this->instituteName = _('Unbekannte Einrichtung');
         }
         $this->type = $type;
         $this->semester = $currentSemester;
diff --git a/app/views/search/studiengaenge/info.php b/app/views/search/studiengaenge/info.php
index 0e78c1e00d6..8e6491370a7 100644
--- a/app/views/search/studiengaenge/info.php
+++ b/app/views/search/studiengaenge/info.php
@@ -172,7 +172,7 @@
         </header>
         <section>
             <? foreach ($all_documents as $category => $files) : ?>
-                <? if ($GLOBALS['MVV_DOCUMENTS']['CATEGORY']['values'][$category]['visible']) : ?>
+                <? if (!empty($GLOBALS['MVV_DOCUMENTS']['CATEGORY']['values'][$category]['visible'])) : ?>
                     <strong><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['CATEGORY']['values'][$category]['name']) ?></strong>
                     <ul>
                         <? foreach ($files as $file) : ?>
diff --git a/app/views/search/studiengaenge/mehrfach.php b/app/views/search/studiengaenge/mehrfach.php
index 780b4e4ae3b..5a081e23c36 100644
--- a/app/views/search/studiengaenge/mehrfach.php
+++ b/app/views/search/studiengaenge/mehrfach.php
@@ -3,8 +3,8 @@
     <caption>
         <?= _('Studiengang') ?>: <?= htmlReady($studiengang->getDisplayName()) ?>
         <? if (Config::get()->ENABLE_STUDYCOURSE_INFO_PAGE) : ?>
-            <a href="<?= $controller->url_for('search/studiengaenge/info', $studiengang->id)?>" data-dialog>
-                <?= Icon::create('infopage2', Icon::ROLE_CLICKABLE, ['title' => _('Informationen zum Studiengang')]) ?>
+            <a href="<?= $controller->link_for('search/studiengaenge/info', $studiengang->id)?>" data-dialog>
+                <?= Icon::create('infopage2')->asImg(['title' => _('Informationen zum Studiengang')]) ?>
             </a>
         <? endif; ?>
     </caption>
@@ -22,15 +22,15 @@
             <td>
                 <?= htmlReady($fachNamen[$fach_id]) ?>
             </td>
-            <? foreach ($studiengangTeilBezeichnungen as $teil_bezeichnung): ?>
-                <td style="text-align: center;">
-                    <? if (isset($fach[$teil_bezeichnung->id])) : ?>
-                    <a href="<?= $controller->url_for($verlauf_url, $fach[$teil_bezeichnung->id], $teil_bezeichnung->id, $studiengang_id) ?>">
-                        <?= Icon::create('info-circle-full', 'clickable', ['title' => _('Studienverlaufsplan anzeigen')]); ?>
-                    </a>
-                    <? endif; ?>
-                </td>
-            <? endforeach; ?>
+        <? foreach ($studiengangTeilBezeichnungen as $teil_bezeichnung): ?>
+            <td style="text-align: center;">
+            <? if (isset($fach[$teil_bezeichnung->id])) : ?>
+                <a href="<?= $controller->link_for($verlauf_url, $fach[$teil_bezeichnung->id], $teil_bezeichnung->id, $studiengang_id ?? null) ?>">
+                    <?= Icon::create('info-circle-full')->asImg(['title' => _('Studienverlaufsplan anzeigen')]) ?>
+                </a>
+            <? endif; ?>
+            </td>
+        <? endforeach; ?>
         </tr>
     <? endforeach; ?>
     </tbody>
diff --git a/app/views/search/studiengaenge/verlauf.php b/app/views/search/studiengaenge/verlauf.php
index 6eaf9159797..5451b43c872 100644
--- a/app/views/search/studiengaenge/verlauf.php
+++ b/app/views/search/studiengaenge/verlauf.php
@@ -84,14 +84,26 @@
                                 </td>
                             <? endif ?>
                             <td><?= htmlReady($modulTeil['name']) ?> </td>
-                            <? for ($i = 1; $i <= $max_fachsemester; $i++) : ?>
-                                <? $fachsemester_typ = $GLOBALS['MVV_MODULTEIL_STGABSCHNITT']['STATUS']['values'][$modulTeil['fachsemester'][$fachsemesterData[$i]]] ?>
-                                <? if ($fachsemester_typ['visible']) : ?>
-                            <td class="mvv-type-<?= $modulTeil['fachsemester'][$fachsemesterData[$i]] ?>"><span title="<? printf(_('%s Semester (%s)'), $i . ModuleManagementModel::getLocaleOrdinalNumberSuffix($i), $fachsemester_typ['name']) ?>"><?= $fachsemester_typ['icon'] ?></span></td>
-                                <? else : ?>
+                        <? for ($i = 1; $i <= $max_fachsemester; $i++) :
+                            $fachsemester_typ = null;
+                            if (isset(
+                                $fachsemesterData[$i],
+                                $modulTeil['fachsemester'][$fachsemesterData[$i]],
+                                $GLOBALS['MVV_MODULTEIL_STGABSCHNITT']['STATUS']['values'][$modulTeil['fachsemester'][$fachsemesterData[$i]]]
+                            )) {
+                                $fachsemester_typ = $GLOBALS['MVV_MODULTEIL_STGABSCHNITT']['STATUS']['values'][$modulTeil['fachsemester'][$fachsemesterData[$i]]];
+                            }
+                        ?>
+                            <? if (!empty($fachsemester_typ['visible'])) : ?>
+                                <td class="mvv-type-<?= $modulTeil['fachsemester'][$fachsemesterData[$i]] ?? '' ?>">
+                                    <span title="<? printf(_('%s Semester (%s)'), $i . ModuleManagementModel::getLocaleOrdinalNumberSuffix($i), $fachsemester_typ['name']) ?>">
+                                        <?= $fachsemester_typ['icon'] ?>
+                                    </span>
+                                </td>
+                            <? else : ?>
                                 <td class="mvv-type">&nbsp;</td>
-                                <? endif ?>
-                            <? endfor ?>
+                            <? endif ?>
+                        <? endfor ?>
                         </tr>
                     <? endforeach ?>
 
diff --git a/app/views/shared/modul/_modul.php b/app/views/shared/modul/_modul.php
index 0bf1e215b57..c813c443621 100644
--- a/app/views/shared/modul/_modul.php
+++ b/app/views/shared/modul/_modul.php
@@ -1,4 +1,4 @@
-<? $modulDeskriptor = $modul->getDeskriptor($display_language); ?>
+<? $modulDeskriptor = $modul->getDeskriptor($display_language ?? null); ?>
 <table class="mvv-modul-details default nohover" data-mvv-id="<?= $modul->getId(); ?>" data-mvv-type="modul">
     <colgroup>
         <col width="30%">
@@ -66,14 +66,14 @@
                     <? endif; ?>
                     <ul>
                     <? foreach ($pathes as $i => $path) : ?>
-                    <? $version = $trails[$i]['StgteilVersion']['version_id'];?>
+                    <? $version = $trails[$i]['StgteilVersion']['version_id'] ?? null;?>
                     <? $statement = DBManager::get()->prepare(
                              'SELECT `mvv_stgteilabschnitt_modul`.`abschnitt_id`  '
                            . 'FROM mvv_stgteilabschnitt_modul LEFT JOIN mvv_stgteilabschnitt USING(abschnitt_id) '
                            . 'WHERE modul_id = ? AND version_id = ?');
                        $statement->execute([$modul->getId(), $version]);
                        $res = $statement->fetchOne();
-                       $affect_id = $res['abschnitt_id'];
+                       $affect_id = $res['abschnitt_id'] ?? null;
                     ?>
                     <li data-mvv-field="mvv_stgteilabschnitt_modul" data-mvv-id="<?= $affect_id; ?>" data-mvv-cooid="<?= $modul->getId(); ?>">
                         <?= htmlReady($path)?>
diff --git a/app/views/shared/modul/_modullv.php b/app/views/shared/modul/_modullv.php
index f5df0a654c3..99c41807e4b 100644
--- a/app/views/shared/modul/_modullv.php
+++ b/app/views/shared/modul/_modullv.php
@@ -1,5 +1,5 @@
 <? $modulTeil = $modul->modulteile->first(); ?>
-<? $modulTeilDeskriptor = $modulTeil->getDeskriptor($display_language); ?>
+<? $modulTeilDeskriptor = $modulTeil->getDeskriptor($display_language ?? null); ?>
 <table class="mvv-modul-details default nohover" data-mvv-id="<?= $modulTeil->id; ?>" data-mvv-type="modulteil">
     <tbody>
         <? $modulTeilSumme = $modulTeil->wl_praesenz + $modulTeil->wl_bereitung + $modulTeil->wl_selbst + $modulTeil->wl_pruef ?>
@@ -73,7 +73,7 @@
     <tbody>
         <tr>
             <td style="width: 30%;"><strong><?= _('Angebotsrhythmus') ?></strong></td>
-            <td style="width: 70%;" data-mvv-field="mvv_modulteil.semester"><?= $GLOBALS['MVV_NAME_SEMESTER']['values'][$modulTeil->semester]['name'] ?></td>
+            <td style="width: 70%;" data-mvv-field="mvv_modulteil.semester"><?= $GLOBALS['MVV_NAME_SEMESTER']['values'][$modulTeil->semester]['name'] ?? '' ?></td>
         </tr>
         <tr>
             <td style="width: 30%;"><strong><?= _('Aufnahmekapazität') ?></strong></td>
diff --git a/app/views/shared/modul/_modullvs.php b/app/views/shared/modul/_modullvs.php
index c288d5a5485..07c6c178df9 100644
--- a/app/views/shared/modul/_modullvs.php
+++ b/app/views/shared/modul/_modullvs.php
@@ -36,7 +36,7 @@
             <? $wlPruef += $modulTeil->wl_pruef; ?>
             <? $modulTeilSumme = $modulTeil->wl_praesenz + $modulTeil->wl_bereitung + $modulTeil->wl_selbst + $modulTeil->wl_pruef; ?>
             <? $modulSumme += $modulTeilSumme; ?>
-            <? if ($show_synopse) : ?>
+            <? if (!empty($show_synopse)) : ?>
             <tr data-mvv-id="<?= $modulTeil->getId(); ?>" data-mvv-type="modulteil">
                 <td data-mvv-field="mvv_modulteil.nummer mvv_modulteil.num_bezeichnung"><strong><?= htmlReady($name_kurz) ?></strong></td>
                 <td data-mvv-field="mvv_modulteil.lernlehrform"><?= $GLOBALS['MVV_MODULTEIL']['LERNLEHRFORM']['values'][$modulTeil->lernlehrform]['name'] ?></td>
diff --git a/app/views/shared/modul/_pruefungen.php b/app/views/shared/modul/_pruefungen.php
index f28657e6c7f..b5b43cdff57 100644
--- a/app/views/shared/modul/_pruefungen.php
+++ b/app/views/shared/modul/_pruefungen.php
@@ -9,7 +9,7 @@
     <tbody>
         <? foreach ($modul->modulteile as $modulTeil): ?>
             <?
-            $modulTeilDeskriptor = $modulTeil->getDeskriptor($display_language);
+            $modulTeilDeskriptor = $modulTeil->getDeskriptor($display_language ?? null);
             // Für die Kenntlichmachung der Modulteile in Listen die Nummer des
             // Modulteils und den ausgewählten Namen verwenden.
             // Ist keine Nummer vorhanden, dann Durchnummerieren und Standard-
@@ -47,4 +47,4 @@
             </td>
         </tr>
     </tbody>
-</table>
\ No newline at end of file
+</table>
diff --git a/lib/classes/exportdocument/ExportPDF.class.php b/lib/classes/exportdocument/ExportPDF.class.php
index 357868c18bb..5fe1c99e22f 100644
--- a/lib/classes/exportdocument/ExportPDF.class.php
+++ b/lib/classes/exportdocument/ExportPDF.class.php
@@ -27,8 +27,8 @@ define('K_PATH_IMAGES', $GLOBALS['STUDIP_BASE_PATH'] . '/public/assets/images/')
  *  //cancels all other output.
  *
  */
-class ExportPDF extends TCPDF implements ExportDocument {
-
+class ExportPDF extends TCPDF implements ExportDocument
+{
     private $media_proxy = NULL;
     private $config;
     private $defaults = false;
-- 
GitLab