diff --git a/app/views/news/admin_news.php b/app/views/news/admin_news.php
index 30b99a3e917b5229f55a38020e7ba5005195bdb1..0376083f46fc1b1ca3862e0d277a1dfa097986c3 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 5c52e41d0a4b3adbd76a77b0afa6e1a856d667d5..1c2c43753ed684fd3b7ad71514e9b28a3df50184 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 593c0df2e2436a19af753e4cda5742be225a7fd6..648ae1ee156ef2e07271d642ddf7b45117b8edfc 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)