From 0da036073b530a8ca2316c0525d5a402ccd088b8 Mon Sep 17 00:00:00 2001
From: David Siegfried <david.siegfried@uni-vechta.de>
Date: Sat, 11 Mar 2023 13:52:26 +0000
Subject: [PATCH] prevent php-warnings, closes #2351

Closes #2351

Merge request studip/studip!1538
---
 app/views/news/admin_news.php   |  8 ++++++--
 lib/classes/Button.class.php    |  5 ++++-
 lib/models/StudipNews.class.php | 27 +++++++++++++++------------
 3 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/app/views/news/admin_news.php b/app/views/news/admin_news.php
index 30b99a3e917..0376083f46f 100644
--- a/app/views/news/admin_news.php
+++ b/app/views/news/admin_news.php
@@ -102,7 +102,7 @@
                                            data-proxyfor=".news_<?= $news['range_id'] ?>"
                                            aria-labelledby="<?= _('Alle auswählen') ?>">
                                 </th>
-                                <th colspan="5"><?= mila(htmlReady($news['title'])) . ' ' . htmlReady($news['semester']) ?></th>
+                                <th colspan="5"><?= mila(htmlReady($news['title'] ?? '')) . ' ' . htmlReady($news['semester'] ?? '') ?></th>
                             </tr>
                         <? endif ?>
                         <? $last_title = $title ?>
@@ -114,7 +114,11 @@
                                    aria-label="<?= _('Diese Ankündigung zum Entfernen vormerken') ?>" <?= tooltip(_("Diese Ankündigung zum Entfernen vormerken"), false) ?>>
                         </td>
                         <td><?= htmlReady($news['object']->topic) ?></td>
-                        <? list ($body, $admin_msg) = explode('<admin_msg>', $news['object']->body); ?>
+                        <?
+                            $parts = explode('<admin_msg>', $news['object']->body);
+                            $body = $parts[0];
+                            $admin_msg = $parts[1] ?? ';'
+                        ?>
                         <td><?= htmlReady($news['object']->author) ?></td>
                         <td><?= strftime("%d.%m.%y", $news['object']->date) ?></td>
                         <td><?= strftime("%d.%m.%y", $news['object']->date + $news['object']->expire) ?></td>
diff --git a/lib/classes/Button.class.php b/lib/classes/Button.class.php
index 5c52e41d0a4..1c2c43753ed 100644
--- a/lib/classes/Button.class.php
+++ b/lib/classes/Button.class.php
@@ -38,7 +38,10 @@ class Button extends Interactable
     public function __toString()
     {
         // add "button" to attribute @class
-        @$this->attributes['class'] .= ' button';
+        if (!isset($this->attributes['class'])) {
+            $this->attributes['class'] = '';
+        }
+        $this->attributes['class'] .= ' button';
 
         $attributes = [];
         ksort($this->attributes);
diff --git a/lib/models/StudipNews.class.php b/lib/models/StudipNews.class.php
index 593c0df2e24..648ae1ee156 100644
--- a/lib/models/StudipNews.class.php
+++ b/lib/models/StudipNews.class.php
@@ -143,7 +143,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
                 unset($ret[$news_id]);
             }
         }
-        return (int) count($ret);
+        return count($ret);
     }
 
     public static function GetNewsByAuthor($user_id, $as_objects = false)
@@ -206,13 +206,13 @@ class StudipNews extends SimpleORMap implements PrivacyObject
         if ($limit <= 0) {
             return $news_result;
         }
-
+        $where_querypart = [];
         if (isset($startdate)) {
-            $where_querypart[]  = "(date+expire) > ?";
+            $where_querypart[]  = '(date+expire) > ?';
             $query_vars[]       = $startdate;
         }
         if (isset($enddate)) {
-            $where_querypart[]  = "date < ?";
+            $where_querypart[]  = 'date < ?';
             $query_vars[]       = $enddate;
         }
 
@@ -291,20 +291,23 @@ class StudipNews extends SimpleORMap implements PrivacyObject
         foreach($news_result as $id => $result) {
             $objects[$area][$id] = [
                 'range_id' => $result['range_id'],
-                'title'    => $result['title'],
+                'title'    => $result['title'] ?? '',
             ];
-            if ($area == 'sem') {
+            if ($area === 'sem') {
+                if (!isset($objects[$area][$id]['semester'])) {
+                    $objects[$area][$id]['semester'] = '';
+                }
                 $objects[$area][$id]['semester'] .= sprintf('(%s%s)',
                     $result['startsem'],
                     $result['startsem'] != $result['endsem'] ? ' - ' . $result['endsem'] : '');
-            } elseif ($area == 'user') {
-                if ($GLOBALS['user']->id == $result['userid']) {
+            } elseif ($area === 'user') {
+                if ($GLOBALS['user']->id === $result['userid']) {
                     $objects[$area][$id]['title'] = _('Ankündigungen auf Ihrer Profilseite');
                 }
                 else {
                     $objects[$area][$id]['title'] = sprintf(_('Ankündigungen auf der Profilseite von %s'), get_fullname($result['userid']));
                 }
-            } elseif ($area == 'global') {
+            } elseif ($area === 'global') {
                 $objects[$area][$id]['title'] = _('Ankündigungen auf der Stud.IP Startseite');
             }
             if ($as_objects) {
@@ -422,7 +425,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
         $stm = $db->prepare($query);
         $stm->execute($parameters);
         $result = $stm->fetchAll(PDO::FETCH_COLUMN);
-
+        $killed = 0;
         if (count($result) > 0) {
             $query = "DELETE FROM news WHERE news_id IN (?)";
             $statement = $db->prepare($query);
@@ -454,6 +457,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
 
     public static function DeleteNewsByAuthor($user_id)
     {
+        $deleted = 0;
         foreach (static::GetNewsByAuthor($user_id, true) as $news) {
             $deleted += $news->delete();
         }
@@ -516,8 +520,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
 
     public function getRanges()
     {
-        $ranges = $this->news_ranges->pluck('range_id');
-        return $ranges;
+        return $this->news_ranges->pluck('range_id');
     }
 
     public function issetRange($range_id)
-- 
GitLab