From 5b10cf620f58eee2d365cffb44e18c83eb722db6 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Wed, 14 Feb 2024 09:41:45 +0000
Subject: [PATCH] fixes #3562

Closes #3562

Merge request studip/studip!2444
---
 app/controllers/course/contentmodules.php  |  2 +-
 app/views/course/contentmodules/rename.php |  4 ++--
 lib/classes/ForumVisit.php                 | 14 +++++++++-----
 lib/classes/I18NStringDatafield.php        | 11 +++++++----
 lib/classes/JsonApi/Schemas/User.php       |  2 +-
 lib/phplib/Seminar_Session.class.php       |  7 ++++---
 templates/tabs.php                         |  2 +-
 7 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/app/controllers/course/contentmodules.php b/app/controllers/course/contentmodules.php
index 7a54ee1c3b4..adb3055a72b 100644
--- a/app/controllers/course/contentmodules.php
+++ b/app/controllers/course/contentmodules.php
@@ -134,7 +134,7 @@ class Course_ContentmodulesController extends AuthenticatedController
         Navigation::getItem('/course/admin')->setActive(true);
         $this->render_json([
             'tabs' => $template->render(),
-            'position' => $active_tool->position
+            'position' => isset($active_tool) ? $active_tool->position : null,
         ]);
     }
 
diff --git a/app/views/course/contentmodules/rename.php b/app/views/course/contentmodules/rename.php
index c7f4ef7ccd8..f2ee2488a6b 100644
--- a/app/views/course/contentmodules/rename.php
+++ b/app/views/course/contentmodules/rename.php
@@ -8,11 +8,11 @@
             <input type="text"
                    name="displayname"
                    value="<?= $tool && $tool['metadata'] ? htmlReady($tool['metadata']['displayname']) : ''?>"
-                   placeholder="<?= htmlReady($metadata['displayname']) ?>">
+                   placeholder="<?= htmlReady($metadata['displayname'] ?? '') ?>">
         </label>
 
         <div>
-            <?= htmlReady(sprintf(_('Ursprünglicher Werkzeugname ist "%s".'), $metadata['displayname'])) ?>
+            <?= htmlReady(sprintf(_('Ursprünglicher Werkzeugname ist "%s".'), $metadata['displayname'] ?? '')) ?>
         </div>
     </fieldset>
     <div data-dialog-button>
diff --git a/lib/classes/ForumVisit.php b/lib/classes/ForumVisit.php
index 05b4b5a5ac3..06ad7c626d8 100644
--- a/lib/classes/ForumVisit.php
+++ b/lib/classes/ForumVisit.php
@@ -36,17 +36,21 @@ class ForumVisit {
 
         $constraints = ForumEntry::getConstraints($parent_id);
 
+        if (!$constraints) {
+            return 0;
+        }
+
         $stmt = DBManager::get()->prepare("SELECT COUNT(*) FROM forum_entries
             WHERE lft >= :lft AND rgt <= :rgt AND user_id != :user_id
                 AND seminar_id = :seminar_id
                 AND topic_id != seminar_id
                 AND chdate > :lastvisit");
 
-        $stmt->bindParam(':user_id', $GLOBALS['user']->id);
-        $stmt->bindParam(':lft', $constraints['lft']);
-        $stmt->bindParam(':rgt', $constraints['rgt']);
-        $stmt->bindParam(':seminar_id', $constraints['seminar_id']);
-        $stmt->bindParam(':lastvisit', $visitdate);
+        $stmt->bindValue(':user_id', $GLOBALS['user']->id);
+        $stmt->bindValue(':lft', $constraints['lft']);
+        $stmt->bindValue(':rgt', $constraints['rgt']);
+        $stmt->bindValue(':seminar_id', $constraints['seminar_id']);
+        $stmt->bindValue(':lastvisit', $visitdate);
 
         $stmt->execute();
 
diff --git a/lib/classes/I18NStringDatafield.php b/lib/classes/I18NStringDatafield.php
index 5eee65d4d2a..d61af27d3fe 100644
--- a/lib/classes/I18NStringDatafield.php
+++ b/lib/classes/I18NStringDatafield.php
@@ -86,17 +86,20 @@ class I18NStringDatafield extends I18NString
      */
     public static function load($object_id, $table = '', $field = '', $base = null)
     {
-        if (is_null($base)) {
+        if ($base === null) {
             $df = DatafieldEntryModel::findOneBySQL(
                 "`datafield_id` = ? AND `range_id` = ? AND `sec_range_id` = ? AND `lang` = ''",
                 $object_id
             );
-            $base = $df->content ?? '';
+            $base = $df ? $df->content : '';
         }
         $table = null;
         $field = null;
-        return new self($base, self::fetchDataForField($object_id, $table, $field),
-                compact('object_id', 'table', 'field'));
+        return new self(
+            $base,
+            self::fetchDataForField($object_id, $table, $field),
+            compact('object_id', 'table', 'field')
+        );
     }
 
     /**
diff --git a/lib/classes/JsonApi/Schemas/User.php b/lib/classes/JsonApi/Schemas/User.php
index 9a172ebd42f..afb8cf88048 100644
--- a/lib/classes/JsonApi/Schemas/User.php
+++ b/lib/classes/JsonApi/Schemas/User.php
@@ -72,7 +72,7 @@ class User extends SchemaProvider
 
         foreach ($fields as list($attr, $field, $vis)) {
             $value =
-                $user[$field] && is_element_visible_for_user($observer->id, $user->id, $visibilities[$vis])
+                $user[$field] && is_element_visible_for_user($observer->id, $user->id, $visibilities[$vis] ?? null)
                     ? strip_tags((string) $user[$field])
                     : null;
             yield $attr => $value;
diff --git a/lib/phplib/Seminar_Session.class.php b/lib/phplib/Seminar_Session.class.php
index 4f801073981..8324062dbe1 100644
--- a/lib/phplib/Seminar_Session.class.php
+++ b/lib/phplib/Seminar_Session.class.php
@@ -416,10 +416,11 @@ class Seminar_Session
      */
     function gc()
     {
-        if ($this->module == 'user') {
+        if ($this->module === 'user') {
             //bail out if cronjob activated and not called in cli context
-            if (Config::getInstance()->getValue('CRONJOBS_ENABLE')
-                && ($task = array_pop(CronjobTask::findByClass('SessionGcJob')))
+            if (
+                Config::getInstance()->getValue('CRONJOBS_ENABLE')
+                && ($task = CronjobTask::findOneByClass(SessionGcJob::class))
                 && count($task->schedules->findBy('active', 1))
                 && PHP_SAPI !== 'cli'
             ) {
diff --git a/templates/tabs.php b/templates/tabs.php
index 47f70697a08..987e0fd1b16 100644
--- a/templates/tabs.php
+++ b/templates/tabs.php
@@ -12,7 +12,7 @@ foreach (Navigation::getItem("/")->getSubNavigation() as $path => $nav) {
         <? if (!empty($navigation)): ?>
         <? foreach ($navigation as $path => $nav) : ?>
             <? if ($nav->isVisible()) : ?>
-                <li id="nav_<?= $path1 ?>_<?= $path ?>"<?= $nav->isActive() ? ' class="current"' : '' ?>>
+                <li id="nav_<?= $path1 ?? '' ?>_<?= $path ?>"<?= $nav->isActive() ? ' class="current"' : '' ?>>
                     <? if ($nav->isEnabled()): ?>
                         <?
                         $attr = array_merge(['class' => ''], $nav->getLinkAttributes());
-- 
GitLab