diff --git a/app/controllers/admission/courseset.php b/app/controllers/admission/courseset.php
index aa688e8845b1f628e966a212eeb32012c7e8970e..a37ce7dee069a1205d93659761c0114bdb56589f 100644
--- a/app/controllers/admission/courseset.php
+++ b/app/controllers/admission/courseset.php
@@ -86,15 +86,15 @@ class Admission_CoursesetController extends AuthenticatedController
         $filter['rule_types'] = array_keys($this->current_rule_types);
         $this->myInstitutes = CoursesetModel::getInstitutes($filter);
         if (!$this->current_institut_id) {
-            if ($this->myInstitutes['all']['num_sets'] < 100) {
+            if ($this->myInstitutes['all']['count'] < 100) {
                 $this->current_institut_id = 'all';
             } else {
-                next($this->myInstitutes);
-                $this->current_institut_id = key($this->myInstitutes);
-                reset($this->myInstitutes);
+                list($this->current_institut_id) = reset($this->myInstitutes);
             }
         }
-        list($institut_id, $all) = explode('_', $this->current_institut_id);
+        $chunks = explode('_', $this->current_institut_id);
+        $institut_id = $chunks[0];
+        $all = $chunks[1] ?? null;
         if ($institut_id == 'all') {
             $institutes = array_keys($this->myInstitutes);
         } else if ($all == 'all') {
@@ -105,7 +105,7 @@ class Admission_CoursesetController extends AuthenticatedController
         }
 
         foreach ($institutes as $one) {
-            if ($this->myInstitutes[$one]['num_sets']) {
+            if ($this->myInstitutes[$one]['count']) {
                 $sets = CourseSet::getCoursesetsByInstituteId($one, $filter);
                 foreach ($sets as $set) {
                     $courseset = new CourseSet($set['set_id']);
diff --git a/app/controllers/admission/restricted_courses.php b/app/controllers/admission/restricted_courses.php
index f611f0941033a16b0b0588650b9195abb8c62633..b790088bcf17215cadbe4faf7d4134c85bde431e 100644
--- a/app/controllers/admission/restricted_courses.php
+++ b/app/controllers/admission/restricted_courses.php
@@ -92,8 +92,8 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
                 $row[] = (int)$course['count_prelim'];
                 $row[] = (int)$course['count_waiting'];
                 $row[] = $course['distribution_time'] ? strftime('%x %R', $course['distribution_time']) : '';
-                $row[] = $course['start_time'] ? strftime('%x %R', $course['start_time']) : '';
-                $row[] = $course['end_time'] ? strftime('%x %R', $course['end_time']) : '';
+                $row[] = isset($course['start_time']) ? strftime('%x %R', $course['start_time']) : '';
+                $row[] = isset($course['end_time']) ? strftime('%x %R', $course['end_time']) : '';
                 $data[] = $row;
             }
 
@@ -119,7 +119,9 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
     {
         global $perm, $user;
 
-        list($institut_id, $all) = explode('_', $this->current_institut_id);
+        $chunks = explode('_', $this->current_institut_id);
+        $institut_id = $chunks[0];
+        $all = $chunks[1] ?? null;
         // Prepare count statements
         $query = "SELECT count(*)
                   FROM seminar_user
@@ -172,9 +174,9 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
             $count1_statement->execute([$seminar_id]);
             $counts = $count1_statement->fetch(PDO::FETCH_ASSOC);
 
-            $ret[$seminar_id]['count_prelim'] = (int)$counts['count2'];
-            $ret[$seminar_id]['count_waiting']  = (int)$counts['count3'];
-            if (!$csets[$row['set_id']]) {
+            $ret[$seminar_id]['count_prelim'] = (int) ($counts['count2'] ?? 0);
+            $ret[$seminar_id]['count_waiting']  = (int) ($counts['count3'] ?? 0);
+            if (!isset($csets[$row['set_id']])) {
                 $csets[$row['set_id']] = new CourseSet($row['set_id']);
             }
             $cs = $csets[$row['set_id']];
@@ -199,7 +201,7 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
         global $perm, $user;
 
         // Prepare institute statement
-        $query = "SELECT a.Institut_id, a.Name, COUNT(courseset_rule.type) AS num_sem
+        $query = "SELECT a.Institut_id, a.Name, COUNT(courseset_rule.type) AS count
         FROM Institute AS a
         LEFT JOIN seminare ON (seminare.Institut_id = a.Institut_id)
         LEFT JOIN semester_courses ON (seminare.Seminar_id = semester_courses.course_id)
@@ -209,7 +211,7 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
             AND a.Institut_id != fakultaets_id
             {$seminare_condition}
         GROUP BY a.Institut_id
-        ORDER BY a.Name, num_sem DESC";
+        ORDER BY a.Name, count DESC";
         $institute_statement = DBManager::get()->prepare($query);
 
         $parameters = [];
@@ -226,9 +228,9 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
             $_my_inst['all'] = [
                 'name'    => _('alle'),
                 'is_fak'  => true,
-                'num_sem' => $num_sem,
+                'count' => $num_sem,
             ];
-            $query = "SELECT a.Institut_id, a.Name, 1 AS is_fak, COUNT(courseset_rule.type) AS num_sem
+            $query = "SELECT a.Institut_id, a.Name, 1 AS is_fak, COUNT(courseset_rule.type) AS count
             FROM Institute AS a
             LEFT JOIN seminare ON (seminare.Institut_id = a.Institut_id)
             LEFT JOIN semester_courses ON (seminare.Seminar_id = semester_courses.course_id)
@@ -237,9 +239,9 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
             WHERE a.Institut_id = fakultaets_id
                 {$seminare_condition}
             GROUP BY a.Institut_id
-            ORDER BY is_fak, Name, num_sem DESC";
+            ORDER BY is_fak, Name, count DESC";
         } else {
-            $query = "SELECT s.inst_perms,b.Institut_id, b.Name, b.Institut_id = b.fakultaets_id AS is_fak, COUNT( courseset_rule.type ) AS num_sem
+            $query = "SELECT s.inst_perms,b.Institut_id, b.Name, b.Institut_id = b.fakultaets_id AS is_fak, COUNT( courseset_rule.type ) AS count
             FROM user_inst AS s
             LEFT JOIN Institute AS b USING ( Institut_id )
             LEFT JOIN seminare ON ( seminare.Institut_id = b.Institut_id)
@@ -250,7 +252,7 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
                 AND s.inst_perms IN ('admin', 'dozent')
                 {$seminare_condition}
             GROUP BY b.Institut_id
-            ORDER BY is_fak, Name, num_sem DESC";
+            ORDER BY is_fak, Name, count DESC";
             $parameters[] = $user->id;
         }
         $statement = DBManager::get()->prepare($query);
@@ -259,38 +261,37 @@ class Admission_RestrictedCoursesController extends AuthenticatedController
 
         foreach ($temp as $row) {
             $_my_inst[$row['Institut_id']] = [
-                    'name'    => $row['Name'],
-                    'is_fak'  => $row['is_fak'],
-                    'num_sem' => $row['num_sem']
+                'name'   => $row['Name'],
+                'is_fak' => $row['is_fak'],
+                'count'  => $row['count'],
             ];
-            if ($row["is_fak"] && $row["inst_perms"] != 'dozent') {
+            if ($row["is_fak"] && (!isset($row['inst_perms']) || $row['inst_perms'] !== 'dozent')) {
                 $institute_statement->execute([$row['Institut_id']]);
                 $alle = $institute_statement->fetchAll();
                 if (count($alle)) {
                     $_my_inst[$row['Institut_id'] . '_all'] = [
-                            'name'    => sprintf(_('[Alle unter %s]'), $row['Name']),
-                            'is_fak'  => 'all',
-                            'num_sem' => $row['num_sem']
+                        'name'   => sprintf(_('[Alle unter %s]'), $row['Name']),
+                        'is_fak' => 'all',
+                        'count'  => $row['count']
                     ];
 
                     $num_inst = 0;
-                    $num_sem_alle = $row['num_sem'];
-
+                    $num_sem_alle = $row['count'];
 
                     foreach ($alle as $institute) {
-                        if(!$_my_inst[$institute['Institut_id']]) {
+                        if(empty($_my_inst[$institute['Institut_id']])) {
                             $num_inst += 1;
-                            $num_sem_alle += $institute['num_sem'];
+                            $num_sem_alle += $institute['count'];
                         }
                         $_my_inst[$institute['Institut_id']] = [
-                                'name'    => $institute['Name'],
-                                'is_fak'  => 0,
-                                'num_sem' => $institute["num_sem"]
+                            'name'   => $institute['Name'],
+                            'is_fak' => 0,
+                            'count'  => $institute['count']
                         ];
                     }
                     $_my_inst[$row['Institut_id']]['num_inst']          = $num_inst;
                     $_my_inst[$row['Institut_id'] . '_all']['num_inst'] = $num_inst;
-                    $_my_inst[$row['Institut_id'] . '_all']['num_sem']  = $num_sem_alle;
+                    $_my_inst[$row['Institut_id'] . '_all']['count']    = $num_sem_alle;
                 }
             }
         }
diff --git a/app/controllers/studip_controller.php b/app/controllers/studip_controller.php
index 1190416a1303f42010ead09271356670c399eb29..0347b37ea193c84b70230a0543d1540e6abc5d40 100644
--- a/app/controllers/studip_controller.php
+++ b/app/controllers/studip_controller.php
@@ -172,18 +172,18 @@ abstract class StudipController extends Trails_Controller
             $reflection = new ReflectionMethod($this, $this->current_action . '_action');
             $parameters = $reflection->getParameters();
             foreach ($parameters as $i => $parameter) {
-                $class_type = $parameter->getClass();
+                $class_type = $parameter->getType();
 
                 if (!$class_type
-                    || !class_exists($class_type->name)
-                    || !is_a($class_type->name, SimpleORMap::class, true))
+                    || !class_exists($class_type->getName())
+                    || !is_a($class_type->getName(), SimpleORMap::class, true))
                 {
                     continue;
                 }
 
                 $types[$i] = 'sorm';
                 $class_infos[$i] = [
-                    'model'    => $class_type->name,
+                    'model'    => $class_type->getName(),
                     'var'      => $parameter->getName(),
                     'optional' => $parameter->isOptional(),
                 ];
diff --git a/app/views/admin/user/index.php b/app/views/admin/user/index.php
index 0eb454079816f7da2fad156cd89cec72cd6da62d..cab7b7b2f3317d26dfbc81541cd008a345f21e43 100644
--- a/app/views/admin/user/index.php
+++ b/app/views/admin/user/index.php
@@ -67,7 +67,7 @@ use Studip\Button, Studip\LinkButton;
         </label>
     </fieldset>
 
-    <fieldset class="collapsable <?= (!$advanced) ?  'collapsed' : '' ?>">
+    <fieldset class="collapsable <? if (empty($advanced)) echo 'collapsed'; ?>">
         <legend><?= _('Erweiterte Suche') ?></legend>
 
         <label for="institute" class="col-3">
diff --git a/app/views/admission/courseset/_institute_choose.php b/app/views/admission/courseset/_institute_choose.php
index e684de6a44f7fc232fa691def8b3d03dfcaf37ea..7fcc8da9f5ec5074df07debfcbd8a37c91aedbdf 100644
--- a/app/views/admission/courseset/_institute_choose.php
+++ b/app/views/admission/courseset/_institute_choose.php
@@ -4,24 +4,10 @@
     <fieldset>
         <legend><?= _('Anmeldesets auflisten') ?></legend>
 
-        <label>
-            <?=_("Einrichtung:")?>
-            <select name="choose_institut_id" class="nested-select">
-                <? while (list($institut_id,$institute) = each($myInstitutes)) : ?>
-                <option value="<?= $institut_id ?>" <?=($current_institut_id == $institut_id ? 'selected' : '')?> class="<?= $institute['is_fak'] ? 'nested-item-header' : 'nested-item' ?>">
-                    <?= htmlReady(my_substr($institute["name"] . ' (' . $institute["num_sets"] . ')',0,100));?>
-                </option>
-                <? if ($institute['is_fak'] === 'all') : ?>
-                    <? $num_inst = $institute['num_inst']; for ($i = 0; $i < $num_inst; ++$i) : ?>
-                        <? list($institut_id,$institute) = each($myInstitutes);?>
-                        <option value="<?= $institut_id?>" <?=($current_institut_id == $institut_id ? 'selected' : '')?> class="nested-item">
-                            <?= htmlReady(my_substr($institute["name"] . ' (' . $institute["num_sets"] . ')',0,100));?>
-                        </option>
-                    <? endfor ?>
-                <? endif ?>
-            <? endwhile ?>
-            </select>
-        </label>
+        <?= $this->render_partial('admission/institute-select.php', [
+            'institutes' => $myInstitutes,
+            'current_institut_id' => $current_institut_id,
+        ]) ?>
 
         <label>
             <?=_("Präfix des Namens:")?>
diff --git a/app/views/admission/institute-select.php b/app/views/admission/institute-select.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9b9ed64ec50d07c22a89c1afbd2221876026f48
--- /dev/null
+++ b/app/views/admission/institute-select.php
@@ -0,0 +1,23 @@
+<? reset($institutes); ?>
+<label>
+    <?=_("Einrichtung:")?>
+    <select name="choose_institut_id" class="nested-select">
+        <? while (($institut_id = key($institutes)) && ($institute = current($institutes))): ?>
+            <option value="<?= $institut_id ?>" <? if ($current_institut_id === $institut_id) echo 'selected'; ?> class="<?= $institute['is_fak'] ? 'nested-item-header' : 'nested-item' ?>">
+                <?= htmlReady(my_substr($institute["name"] . ' (' . $institute["count"] . ')',0,100));?>
+            </option>
+            <? if ($institute['is_fak'] === 'all') : ?>
+                <? $num_inst = $institute['num_inst']; for ($i = 0; $i < $num_inst; ++$i) : ?>
+                    <?
+                    $institute = next($institutes);
+                    $institut_id = key($institutes);
+                    ?>
+                    <option value="<?= $institut_id?>" <?=($current_institut_id == $institut_id ? 'selected' : '')?> class="nested-item">
+                        <?= htmlReady(my_substr($institute['name'] . ' (' . $institute['count'] . ')',0,100));?>
+                    </option>
+                <? endfor ?>
+            <? endif ?>
+            <? next($institutes); ?>
+        <? endwhile; ?>
+    </select>
+</label>
diff --git a/app/views/admission/restricted_courses/_institute_choose.php b/app/views/admission/restricted_courses/_institute_choose.php
index 9c53d5f5ce99f9c8d7f14971baa6394c487f047f..d6bb8ba088e0cb0f1db531b7bc903906dd3af76c 100644
--- a/app/views/admission/restricted_courses/_institute_choose.php
+++ b/app/views/admission/restricted_courses/_institute_choose.php
@@ -3,24 +3,10 @@
     <fieldset>
         <legend><?= _('Anmeldesets auflisten') ?></legend>
 
-        <label>
-            <?=_("Einrichtung:")?>
-            <select name="choose_institut_id" class="nested-select">
-            <? while (list($institut_id,$institute) = each($my_inst)) : ?>
-                <option value="<?= $institut_id?>" <?=($current_institut_id == $institut_id ? 'selected' : '')?> class="<?= $institute['is_fak'] ? 'nested-item-header' : 'nested-item' ?>">
-                    <?= htmlReady(my_substr($institute["name"] . ' (' . $institute["num_sem"] . ')',0,100));?>
-                </option>
-                <? if ($institute["is_fak"] == 'all') : ?>
-                    <? $num_inst = $institute["num_inst"]; for ($i = 0; $i < $num_inst; ++$i) : ?>
-                        <? list($institut_id,$institute) = each($my_inst);?>
-                        <option value="<?= $institut_id?>" <?=($current_institut_id == $institut_id ? 'selected' : '')?> class="nested-item">
-                            <?= htmlReady(my_substr($institute["name"] . ' (' . $institute["num_sem"] . ')',0,100));?>
-                        </option>
-                    <? endfor ?>
-                <? endif ?>
-            <? endwhile ?>
-            </select>
-        </label>
+        <?= $this->render_partial('admission/institute-select.php', [
+            'institutes' => $my_inst,
+            'current_institut_id' => $current_institut_id,
+        ]) ?>
 
         <label>
             <?=_("Präfix des Veranstaltungsnamens / Nummer:")?>
diff --git a/app/views/admission/restricted_courses/index.php b/app/views/admission/restricted_courses/index.php
index 096e825033da7993841b6f78b044fbd7c44a97b5..615a50155237084bb6660cc2fb03003f390ab6f2 100644
--- a/app/views/admission/restricted_courses/index.php
+++ b/app/views/admission/restricted_courses/index.php
@@ -36,11 +36,11 @@
                 <td style="white-space:nowrap" data-sort-value="<?= (int) $course['distribution_time']?>">
                     <?= htmlReady($course['distribution_time'] ? strftime('%x %R', $course['distribution_time']) : '-') ?>
                 </td>
-                <td style="white-space:nowrap" data-sort-value="<?= (int) $course['start_time']?>">
-                    <?= htmlReady($course['start_time'] ? strftime('%x %R', $course['start_time']) : '-') ?>
+                <td style="white-space:nowrap" data-sort-value="<?= (int) ($course['start_time'] ?? null) ?>">
+                    <?= htmlReady(isset($course['start_time']) ? strftime('%x %R', $course['start_time']) : '-') ?>
                 </td>
-                <td style="white-space:nowrap" data-sort-value="<?= (int) $course['end_time']?>">
-                    <?= htmlReady($course['end_time'] ? strftime('%x %R', $course['end_time']) : '-') ?>
+                <td style="white-space:nowrap" data-sort-value="<?= (int) ($course['end_time'] ?? null) ?>">
+                    <?= htmlReady(isset($course['end_time']) ? strftime('%x %R', $course['end_time']) : '-') ?>
                 </td>
             </tr>
         <? endforeach ?>
diff --git a/app/views/admission/user_list/configure.php b/app/views/admission/user_list/configure.php
index 391e758cc148e5e2b56526d9313988ed657d4499..9338f452161d003ef77c25ed49267dc00fbf5b1f 100644
--- a/app/views/admission/user_list/configure.php
+++ b/app/views/admission/user_list/configure.php
@@ -12,7 +12,7 @@ Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen b
                                         "bevorzugt.");
 ?>
 <?= $this->render_partial('dialog/confirm_dialog') ?>
-<?= $error ? $error : '' ?>
+<?= $error ?? '' ?>
 <form class="default" action="<?= $controller->url_for('admission/userlist/save', $userlist_id) ?>" method="post">
     <?= CSRFProtection::tokenTag() ?>
 
diff --git a/app/views/course/feedback/_add_edit_entry_form.php b/app/views/course/feedback/_add_edit_entry_form.php
index 80bec1ffcd33538bb0f17d05f9c23169b11aa2ae..57bf7d8426744d2419da2a3850fba3edeb7534c5 100644
--- a/app/views/course/feedback/_add_edit_entry_form.php
+++ b/app/views/course/feedback/_add_edit_entry_form.php
@@ -1,22 +1,29 @@
+<?php
+/**
+ * @var FeedbackElement $feedback
+ * @var FeedbackEntry|null $entry
+ */
+?>
 <? if ($feedback->mode != 0) : ?>
 <?php
-        $n = 5;
-        if ($feedback->mode == 2) {
-            $n = 10;
-        }
-    ?>
+    $n = 5;
+    if ($feedback->mode == 2) {
+        $n = 10;
+    }
+?>
 <div class="rating">
     <p><?= _('Bewertung') ?></p>
     <? for ($i = 1; $i < $n+1; $i++) : ?>
-    <label class="star-rating undecorated <?= $i <= $entry->rating || $i === 1 ? ' checked' : '' ?>">
+    <label class="star-rating undecorated <?= (isset($entry) && $i <= $entry->rating) || $i === 1 ? ' checked' : '' ?>">
         <input class="star-rating-input" name="rating" value="<?= $i ?>" type="radio"
-            <?= $i == $entry->rating ? ' selected' : '' ?> required/>
-        <?= Icon::create('star', 'clickable') ?>
+               required
+               <? if (isset($entry) && $i == $entry->rating) echo 'selected'; ?>>
+        <?= Icon::create('star') ?>
     </label>
     <? endfor; ?>
 </div>
 <? endif; ?>
-<? if ($feedback->commentable == 1) : ?>
+<? if ($feedback->commentable) : ?>
 <label>
     <?= _('Kommentar') ?>
     <textarea name="comment"><?= htmlReady($entry->comment) ?></textarea>
diff --git a/app/views/course/forum/index/_post.php b/app/views/course/forum/index/_post.php
index 864c796d6a05b895b8ce815136a8af32e8276c40..538b98d42d39d61a40423dd2876f1c45fba5e723 100644
--- a/app/views/course/forum/index/_post.php
+++ b/app/views/course/forum/index/_post.php
@@ -70,7 +70,7 @@
 
             <span data-show-topic="<?= $post['topic_id'] ?>">
                 <a href="<?= $controller->link_for('course/forum/index/index/' . $post['topic_id'] .'?'. http_build_query(['highlight' => $highlight]) ) ?>#<?= $post['topic_id'] ?>">
-                <? if ($show_full_path) : ?>
+                <? if (!empty($show_full_path)) : ?>
                     <?= ForumHelpers::highlight(htmlReady(implode(' >> ', ForumEntry::getFlatPathToPosting($post['topic_id']))), $highlight) ?>
                 <? elseif ($post['depth'] < 3) : ?>
                 <span data-topic-name="<?= $post['topic_id'] ?>">
diff --git a/app/views/course/forum/index/index.php b/app/views/course/forum/index/index.php
index 029b93d92437d7ceee41dcffbe1c603600741a85..2f8873593682469e72a23c26aac02ca9dca43789 100644
--- a/app/views/course/forum/index/index.php
+++ b/app/views/course/forum/index/index.php
@@ -141,7 +141,7 @@ $pagechooser = null;
             .'/%s/?searchfor=' . $searchfor . (!empty($options) ? '&'. http_build_query($options) : '' ))))
     ]); ?>
     <? endif ?>
-    <?= $link  ?>
+    <?= $link ?? ''  ?>
 </div>
 <? endif ?>
 
diff --git a/app/views/questionnaire/evaluate.php b/app/views/questionnaire/evaluate.php
index f33162fcc31cb39dd0f9dc5bd4e015d98ec4acb9..7a8def7b6c9957d200df4b273e0f0e6e68661cea 100644
--- a/app/views/questionnaire/evaluate.php
+++ b/app/views/questionnaire/evaluate.php
@@ -34,25 +34,25 @@
     </script>
     <div data-dialog-button style="max-height: none; opacity: 1; text-align: center;">
         <? if ($questionnaire->isAnswerable() && $questionnaire['editanswers']) : ?>
-            <?= \Studip\LinkButton::create($questionnaire->isAnswered() ? _("Antwort ändern") : _("Beantworten"), URLHelper::getURL("dispatch.php/questionnaire/answer/".$questionnaire->getId(), ['range_type' => $range_type, 'range_id' => $range_id]), ['data-dialog' => '']) ?>
+            <?= \Studip\LinkButton::create($questionnaire->isAnswered() ? _("Antwort ändern") : _("Beantworten"), URLHelper::getURL("dispatch.php/questionnaire/answer/".$questionnaire->getId()), ['data-dialog' => '']) ?>
         <? endif ?>
         <? if ($questionnaire->isEditable()) : ?>
             <?= \Studip\LinkButton::create(_("Ergebnisse herunterladen"), URLHelper::getURL("dispatch.php/questionnaire/export/".$questionnaire->getId())) ?>
         <? endif ?>
         <? if ($questionnaire->isEditable() && (!$questionnaire->isRunning() || !$questionnaire->countAnswers())) : ?>
-            <?= \Studip\LinkButton::create(_("Bearbeiten"), URLHelper::getURL("dispatch.php/questionnaire/edit/".$questionnaire->getId(), ['range_type' => $range_type, 'range_id' => $range_id]), ['data-dialog' => '']) ?>
+            <?= \Studip\LinkButton::create(_("Bearbeiten"), URLHelper::getURL("dispatch.php/questionnaire/edit/".$questionnaire->getId()), ['data-dialog' => '']) ?>
         <? endif ?>
         <? if ($questionnaire->isEditable()) : ?>
-            <?= \Studip\LinkButton::create(_("Kontext auswählen"), URLHelper::getURL("dispatch.php/questionnaire/context/".$questionnaire->getId(), ['range_type' => $range_type, 'range_id' => $range_id]), ['data-dialog' => '']) ?>
+            <?= \Studip\LinkButton::create(_("Kontext auswählen"), URLHelper::getURL("dispatch.php/questionnaire/context/".$questionnaire->getId()), ['data-dialog' => '']) ?>
         <? endif ?>
         <? if ($questionnaire->isCopyable()) : ?>
             <?= \Studip\LinkButton::create(_("Kopieren"), URLHelper::getURL("dispatch.php/questionnaire/copy/".$questionnaire->getId()), ['data-dialog' => '']) ?>
         <? endif ?>
         <? if ($questionnaire->isEditable() && !$questionnaire->isRunning()) : ?>
-            <?= \Studip\LinkButton::create(_("Starten"), URLHelper::getURL("dispatch.php/questionnaire/start/".$questionnaire->getId(),  in_array($range_type, ['course', 'insitute']) ? ['redirect' => $range_type . "/overview"] : [])) ?>
+            <?= \Studip\LinkButton::create(_("Starten"), URLHelper::getURL("dispatch.php/questionnaire/start/".$questionnaire->getId())) ?>
         <? endif ?>
         <? if ($questionnaire->isEditable() && $questionnaire->isRunning()) : ?>
-            <?= \Studip\LinkButton::create(_("Beenden"), URLHelper::getURL("dispatch.php/questionnaire/stop/".$questionnaire->getId(), in_array($range_type, ['course', 'insitute']) ? ['redirect' => $range_type . "/overview"] : [])) ?>
+            <?= \Studip\LinkButton::create(_("Beenden"), URLHelper::getURL("dispatch.php/questionnaire/stop/".$questionnaire->getId())) ?>
         <? endif ?>
 
     </div>
diff --git a/app/views/siteinfo/markup/adminList.php b/app/views/siteinfo/markup/adminList.php
index 1b0cf2c6377a2dab7ab58f8a0e91803b5ef69954..68b514d5e6b87176dc663b9386c8e32857bccb93 100644
--- a/app/views/siteinfo/markup/adminList.php
+++ b/app/views/siteinfo/markup/adminList.php
@@ -1,7 +1,7 @@
 <?
 # Lifter010: TODO
 ?>
-<? if ($error) : ?>
+<? if (!empty($error)) : ?>
     <em><?= _("keine. Na sowas. Das kann ja eigentlich gar nicht sein...") ?></em>
 <? else : ?>
     <? $current_head = "" ?>
diff --git a/app/views/siteinfo/markup/indicator.php b/app/views/siteinfo/markup/indicator.php
index 16e3943e403eb541e961f6090776aed30300168d..4748f53150f2780c1b5fb4ed287bba749d990377 100644
--- a/app/views/siteinfo/markup/indicator.php
+++ b/app/views/siteinfo/markup/indicator.php
@@ -1,7 +1,4 @@
-<?
-# Lifter010: TODO
-?>
-<? if($detail != '') : ?>
+<? if (!empty($detail)) : ?>
     <span title="<?= $detail ?>">
 <? else : ?>
     <span>
diff --git a/app/views/siteinfo/markup/rootlist.php b/app/views/siteinfo/markup/rootlist.php
index 4f8344a7f2d26dba8178766900ed41510ddbd0ca..2ab31e09f6c40b8ea7ab4001be6243900085930e 100644
--- a/app/views/siteinfo/markup/rootlist.php
+++ b/app/views/siteinfo/markup/rootlist.php
@@ -1,7 +1,7 @@
 <?
 # Lifter010: TODO
 ?>
-<? if ($error) : ?>
+<? if (!empty($error)) : ?>
     <em><?= _("keine. Na sowas. Das kann ja eigentlich gar nicht sein...") ?></em>
 <? else : ?>
     <ul>
diff --git a/app/views/siteinfo/markup/toplist.php b/app/views/siteinfo/markup/toplist.php
index 499a0b703266274d1c98fe1222dfdd3bf15154dd..d7f88fe0ddb23cf36076174d1db5027a74537d45 100644
--- a/app/views/siteinfo/markup/toplist.php
+++ b/app/views/siteinfo/markup/toplist.php
@@ -9,7 +9,7 @@
             case "seminar":
                 $link = URLHelper::getLink('dispatch.php/course/details/', ['sem_id' => $line["seminar_id"],
                                                                 'send_from_search' => 'true',
-                                                                'send_from_search_page' => $view]);
+                                                                'send_from_search_page' => $view ?? null]);
                 break;
             case "user":
                 $link = URLHelper::getLink('dispatch.php/profile', ['username' => $line["username"]]);
diff --git a/lib/classes/CoursesetModel.php b/lib/classes/CoursesetModel.php
index 9694a41c0df65fb6e0c6b0e7ca70c13e2e81e419..e12d3b9682bf76d43c1c23a6a562cc5170e3ecb8 100644
--- a/lib/classes/CoursesetModel.php
+++ b/lib/classes/CoursesetModel.php
@@ -163,6 +163,8 @@ class CoursesetModel
      * admission rules
      *
      * @return Array Found institutes.
+     *
+     * @todo this is a really messed up construct and should be refactored
      */
     public static function getInstitutes($filter = [])
     {
@@ -197,9 +199,9 @@ class CoursesetModel
             $num_sets = $cs_count_all_statement->fetchColumn();
 
             $my_inst['all'] = [
-                'name'     => _('alle'),
-                'is_fak'   => true,
-                'num_sets' => $num_sets
+                'name'   => _('alle'),
+                'is_fak' => true,
+                'count'  => $num_sets
             ];
             $top_insts = Institute::findBySQL('Institut_id = fakultaets_id ORDER BY Name');
         } else {
@@ -209,7 +211,7 @@ class CoursesetModel
             $my_inst[$inst->id] = $inst->toArray('name is_fak');
             $parameters[0] = $inst->id;
             $cs_count_statement->execute($parameters);
-            $my_inst[$inst->id]['num_sets'] = $cs_count_statement->fetchColumn();
+            $my_inst[$inst->id]['count'] = $cs_count_statement->fetchColumn();
             if ($inst->is_fak && ($perm->have_perm('root') || $inst->members->findBy('user_id', $user->id)->val('inst_perms') == 'admin')) {
                 $alle = $inst->sub_institutes;
                 if (count($alle)) {
@@ -219,18 +221,18 @@ class CoursesetModel
                     ];
 
                     $num_inst = 0;
-                    $num_sets_alle = $my_inst[$inst->id]['num_sets'];
+                    $num_sets_alle = $my_inst[$inst->id]['count'];
 
                     foreach ($alle as $institute) {
                        $num_inst += 1;
                        $my_inst[$institute->id] = $institute->toArray('name is_fak');
                        $parameters[0] = $institute->id;
                        $cs_count_statement->execute($parameters);
-                       $my_inst[$institute->id]['num_sets'] = $cs_count_statement->fetchColumn();
-                       $num_sets_alle += $my_inst[$institute->id]['num_sets'];
+                       $my_inst[$institute->id]['count'] = $cs_count_statement->fetchColumn();
+                       $num_sets_alle += $my_inst[$institute->id]['count'];
                     }
                     $my_inst[$inst->id . '_all']['num_inst'] = $num_inst;
-                    $my_inst[$inst->id . '_all']['num_sets']  = $num_sets_alle;
+                    $my_inst[$inst->id . '_all']['count']  = $num_sets_alle;
                 }
             }
         }
diff --git a/lib/classes/MediaProxy.php b/lib/classes/MediaProxy.php
index 138ff5c5f0efde78b7b6cd053627512a042a7b68..d42becb893efeab674309e5778c3122df6a24016 100644
--- a/lib/classes/MediaProxy.php
+++ b/lib/classes/MediaProxy.php
@@ -183,9 +183,9 @@ class MediaProxy
         }
 
         $type = $response['content-type'];
-        $length = $response['content-length'];
-        $chdate = $response['last-modified'];
-        $expires = $response['expires'];
+        $length = $response['content-length'] ?? null;
+        $chdate = $response['last-modified'] ?? null;
+        $expires = $response['expires'] ?? null;
 
         $chdate = isset($chdate) ? strtotime($chdate) : time();
         $expires = isset($expires) ? strtotime($expires) : time() + $this->cache_lifetime;
diff --git a/lib/classes/MyRealmModel.php b/lib/classes/MyRealmModel.php
index 878b4a267cdf80ba83150d223a7ac82d811c9e85..063972c47466a52f5c84fe2bc66d5bdb0053287c 100644
--- a/lib/classes/MyRealmModel.php
+++ b/lib/classes/MyRealmModel.php
@@ -87,7 +87,7 @@ class MyRealmModel
             $neue  = $result['new'];
 
             if (!is_null($result['last_modified']) && (int)$result['last_modified'] != 0) {
-                if ($my_obj['last_modified'] < $result['last_modified']) {
+                if (!isset($my_obj['last_modified']) || $my_obj['last_modified'] < $result['last_modified']) {
                     $my_obj['last_modified'] = $result['last_modified'];
                 }
             }
diff --git a/lib/classes/Siteinfo.php b/lib/classes/Siteinfo.php
index 6e8dbc3e1a2acf5241b7af91419a93bceb8bbdd6..32cbdeae1a2bbe67aa03b181aeff921ce7adad75 100644
--- a/lib/classes/Siteinfo.php
+++ b/lib/classes/Siteinfo.php
@@ -535,7 +535,7 @@ class SiteinfoMarkupEngine {
             // iterate over the other indicators
             if (in_array($key,array_keys($indicator))) {
                 if (!isset($indicator[$key]['constraint']) || $indicator[$key]['constraint']) {
-                    if ($indicator[$key]['query']) {
+                    if (isset($indicator[$key]['query'])) {
                         $result = $this->db->query($indicator[$key]['query']);
                         $rows = $result->fetch(PDO::FETCH_NUM);
                         $template->count = $rows[0];
diff --git a/lib/classes/StudipCoreFormat.php b/lib/classes/StudipCoreFormat.php
index 15794bfb33f587085023cedabd55534274fb70ea..871f5fa28512b7509a3e1d78eb7de3570b393a18 100644
--- a/lib/classes/StudipCoreFormat.php
+++ b/lib/classes/StudipCoreFormat.php
@@ -531,8 +531,13 @@ class StudipCoreFormat extends TextFormat
         $tag = $matches[1];
         $params = explode(":",$matches[2]);
         $url = $matches[3];
-        $whitespace = $matches[4];
+        $whitespace = $matches[4] ?? null;
 
+        $title = null;
+        $link = null;
+        $position = null;
+        $width = null;
+        $virtual_url = null;
         foreach ($params as $key => $param) {
             if ($param) {
                 if (is_numeric($param)) {
@@ -558,9 +563,16 @@ class StudipCoreFormat extends TextFormat
 
         $url = TransformInternalLinks($url);
         $pu = @parse_url($url);
-        if (($pu['scheme'] == 'http' || $pu['scheme'] == 'https')
-                && ($pu['host'] == $_SERVER['HTTP_HOST'] || $pu['host'].':'.$pu['port'] == $_SERVER['HTTP_HOST'])
-                && mb_strpos($pu['path'], $GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP']) === 0) {
+
+        $intern = false;
+        if (
+            in_array($pu['scheme'], ['http', 'https'])
+            && (
+                $pu['host'] === $_SERVER['HTTP_HOST']
+                || (isset($pu['port']) && $pu['host'] . ':' . $pu['port'] === $_SERVER['HTTP_HOST'])
+            )
+            && mb_strpos($pu['path'], $GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP']) === 0
+        ) {
             $intern = true;
             $checkpath = urldecode(mb_substr($pu['path'], mb_strlen($GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP'])));
             if (mb_strpos($checkpath, '../') === false) {
diff --git a/lib/classes/admission/UserFilter.class.php b/lib/classes/admission/UserFilter.class.php
index 32eed4830835304846bd1ab3c14af00f2fd343b9..d380ef0c0b52bb4ade5a1c83340f25c39b211dda 100644
--- a/lib/classes/admission/UserFilter.class.php
+++ b/lib/classes/admission/UserFilter.class.php
@@ -200,7 +200,9 @@ class UserFilter
                  * been removed since saving data to DB.
                  */
                 //try {
-                    list($type, $param) = explode('_', $data['type']);
+                    $chunks = explode('_', $data['type']);
+                    $type = $chunks[0];
+                    $param = $chunks[1] ?? null;
                     if ($param) {
                         $field = new $type($param, $data['field_id']);
                     } else {
diff --git a/lib/models/DatafieldEntryModel.class.php b/lib/models/DatafieldEntryModel.class.php
index 0ae03c4a17fc2862eb50ead2d205ce42dd9914e5..cea65ef773f511941c9bff513babe04f18194f59 100644
--- a/lib/models/DatafieldEntryModel.class.php
+++ b/lib/models/DatafieldEntryModel.class.php
@@ -50,6 +50,7 @@ class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
     {
         $mask = ["user" => 1, "autor" => 2, "tutor" => 4, "dozent" => 8, "admin" => 16, "root" => 32];
 
+        $sec_range_id = null;
         if (is_a($model, "Course")) {
             $params[':institution_ids'] = $model->institutes->pluck('institut_id');
             $object_class = SeminarCategories::GetByTypeId($model->status)->id;
@@ -85,13 +86,11 @@ class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
             $object_class = $model->getVariant();
             $object_type = 'moduldeskriptor';
             $range_id = $model->deskriptor_id;
-            $sec_range_id = null;
         } elseif (is_a($model, 'ModulteilDeskriptor')) {
             $params[':institution_ids'] = [$model->modulteil->modul->responsible_institute->institut_id];
             $object_class = $model->getVariant();
             $object_type = 'modulteildeskriptor';
             $range_id = $model->deskriptor_id;
-            $sec_range_id = null;
         } elseif ($model instanceof StatusgruppeUser) {
             if (isset($model->group->institute)) {
                 $params[':institution_ids'] = [$model->group->institute->id];
@@ -107,7 +106,6 @@ class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
             $object_class = $model->getVariant();
             $object_type = 'studycourse';
             $range_id = $model->studiengang_id;
-            $sec_range_id = null;
         }
 
         if (!$object_type) {
@@ -144,7 +142,7 @@ class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
             $query .= "AND ((object_class & :object_class) OR object_class IS NULL) $one_datafield ORDER BY priority";
             $params = array_merge($params, [
                 ':range_id' => (string) $range_id,
-                ':sec_range_id' => (string) ($sec_range_id ?? ''),
+                ':sec_range_id' => (string) $sec_range_id,
                 ':object_type' => $object_type,
                 ':object_class' => (int) $object_class]);
         }
@@ -161,12 +159,11 @@ class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
                 $ret[$c] = clone $df_entry;
             } else {
                 $ret[$c] = clone $df_entry_i18n;
-                $row['content'] = I18NStringDatafield::load(
-                        [
-                            $row['datafield_id'],
-                            $range_id,
-                            (string) $sec_range_id
-                        ]);
+                $row['content'] = I18NStringDatafield::load([
+                    $row['datafield_id'],
+                    $range_id,
+                    (string) $sec_range_id
+                ]);
             }
             $ret[$c]->setData($row, true);
             if (!$row['isset_content']) {
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index 825df46e6d00798782b7365a521799a271f18fdf..6011e6b791a92a843226d503d4e4750248a68a25 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -338,22 +338,22 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
                   LEFT JOIN `user_online` uo ON (au.`user_id` = uo.`user_id`)
                   LEFT JOIN `user_info` ui ON (au.`user_id` = ui.`user_id`)";
 
-        if ($attributes['username']) {
+        if (!empty($attributes['username'])) {
             $where[] =  "au.`username` like :username";
             $params[':username'] = self::searchParam($attributes['username']);
         }
 
-        if ($attributes['vorname']) {
+        if (!empty($attributes['vorname'])) {
             $where[] = "au.`Vorname` LIKE :vorname";
             $params[':vorname'] = self::searchParam($attributes['vorname']);
         }
 
-        if ($attributes['nachname']) {
+        if (!empty($attributes['nachname'])) {
             $where[] = "au.`Nachname` LIKE :nachname";
             $params[':nachname'] = self::searchParam($attributes['nachname']);
         }
 
-        if ($attributes['email']) {
+        if (!empty($attributes['email'])) {
             $where[] = "au.`Email` LIKE :email";
             $params[':email'] = self::searchParam($attributes['email']);
         }
@@ -370,11 +370,11 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
         }
 
         // show only users who are not lecturers
-        if ($attributes['show_only_not_lectures']) {
+        if (!empty($attributes['show_only_not_lectures'])) {
             $where[] = "au.`user_id` NOT IN (SELECT `user_id` FROM `seminar_user` WHERE `status` = 'dozent') ";
         }
 
-        if ($attributes['auth_plugins']) {
+        if (!empty($attributes['auth_plugins'])) {
             $where[] = "IFNULL(`auth_plugin`, 'preliminary') = :auth_plugins ";
             $params[':auth_plugins'] = $attributes['auth_plugins'];
         }
@@ -407,7 +407,7 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
         }
 
         // userdomains
-        if ($attributes['userdomains']) {
+        if (!empty($attributes['userdomains'])) {
             $joins[] = "LEFT JOIN `user_userdomains` uud ON (au.`user_id` = uud.`user_id`)";
             $joins[] = "LEFT JOIN `userdomains` uds USING (`userdomain_id`)";
             if ($attributes['userdomains'] === 'null-domain') {
diff --git a/lib/user_visible.inc.php b/lib/user_visible.inc.php
index c47640efd72215784c9947bc4423a76893899672..0706b3257736b2606d6399241c3972476b240266 100644
--- a/lib/user_visible.inc.php
+++ b/lib/user_visible.inc.php
@@ -119,6 +119,8 @@ function get_vis_query($table_alias = 'auth_user_md5', $context = '') {
         $context_default = (int) Config::get()->getValue(mb_strtoupper($context) . '_VISIBILITY_DEFAULT');
         $contextQuery = " AND (IFNULL(user_visibility.{$context}, {$context_default}) = 1
                                OR {$table_alias}.visible = 'always')";
+    } else {
+        $contextQuery = '';
     }
 
     $my_domains = UserDomain::getUserDomainsForUser($GLOBALS['user']->id);
diff --git a/lib/visual.inc.php b/lib/visual.inc.php
index 99d80b002c347adc966c6e4c9e3979a64e16ce5b..4d63df482a8408e60125c978a7614c94a6a07baf 100644
--- a/lib/visual.inc.php
+++ b/lib/visual.inc.php
@@ -311,10 +311,10 @@ function isLinkIntern($url) {
         return true;
     }
 
-    return in_array($pum['scheme'], ['https', 'http', NULL], true)
-        && in_array($pum['host'], [$_SERVER['SERVER_NAME'], NULL], true)
-        && in_array($pum['port'], [$_SERVER['SERVER_PORT'], NULL], true)
-        && mb_strpos($pum['path'], $GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP']) === 0;
+    return in_array($pum['scheme'] ?? null, ['https', 'http', NULL], true)
+        && in_array($pum['host'] ?? null, [$_SERVER['SERVER_NAME'], NULL], true)
+        && in_array($pum['port'] ?? null, [$_SERVER['SERVER_PORT'], NULL], true)
+        && mb_strpos($pum['path'] ?? '', $GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP']) === 0;
 }
 
 /**
diff --git a/public/sendfile.php b/public/sendfile.php
index 80084083c2c6a5621128367a52c2bd99bf032bc1..77cc7353a3b38ba8f69545da0c2bcb6e4ccf1dd2 100644
--- a/public/sendfile.php
+++ b/public/sendfile.php
@@ -175,7 +175,7 @@ while (ob_get_level()) {
     ob_end_clean();
 }
 
-if (isset($file_ref) && $file_ref->file->metadata['access_type'] == 'redirect') {
+if (isset($file_ref, $file_ref->file) && $file_ref->file->metadata['access_type'] === 'redirect') {
     $file_ref->incrementDownloadCounter();
     header('Location: ' . $file_ref->file->metadata['url']);
     die();
diff --git a/templates/shared/pagechooser.php b/templates/shared/pagechooser.php
index bf8726db28cca636648addb601d1b81fc73e8cf1..d4416bb5c6445478f31bc6b0688d802f3e439934 100644
--- a/templates/shared/pagechooser.php
+++ b/templates/shared/pagechooser.php
@@ -13,7 +13,7 @@
     $last_page = reset($items) - 1;
     $random_id = mb_substr(md5(uniqid('pagination', true)), -8);
 
-    $pageparams = $pageparams ?: [];
+    $pageparams = $pageparams ?? [];
 ?>
 <p id="pagination-label-<?= $random_id ?>" class="audible">
     <?= _('Blättern') ?>