diff --git a/app/controllers/admission/courseset.php b/app/controllers/admission/courseset.php
index a37ce7dee069a1205d93659761c0114bdb56589f..11b0672826c46a85c91f4c4edbdca73ed026c0d5 100644
--- a/app/controllers/admission/courseset.php
+++ b/app/controllers/admission/courseset.php
@@ -42,11 +42,13 @@ class Admission_CoursesetController extends AuthenticatedController
         $views = new ActionsWidget();
         $views->addLink(
             _('Anmeldeset anlegen'),
-            $this->url_for('admission/courseset/configure'),
-            Icon::create('add', 'clickable')
-        )->setActive($action == 'configure');
+            $this->configureURL(),
+            Icon::create('add')
+        )->setActive($action === 'configure');
         Sidebar::Get()->addWidget($views);
-
+        if (!isset($this->instant_course_set_view)) {
+            $this->instant_course_set_view = false;
+        }
     }
 
     /**
@@ -129,16 +131,18 @@ class Admission_CoursesetController extends AuthenticatedController
                         : null;
         }, $this->coursesets));
         if (count($not_distributed_coursesets)) {
-            PageLayout::postMessage(MessageBox::info(
-                _("Es existieren Anmeldesets, die zum Zeitpunkt der Platzverteilung nicht gelost wurden. Stellen Sie sicher, dass der Cronjob \"Losverfahren überprüfen\" ausgeführt wird."),
-                array_unique($not_distributed_coursesets)));
+            PageLayout::postInfo(
+                _('"Es existieren Anmeldesets, die zum Zeitpunkt der Platzverteilung nicht gelost wurden. Stellen Sie sicher, dass der Cronjob "Losverfahren überprüfen" ausgeführt wird."'),
+                array_unique($not_distributed_coursesets));
         }
     }
 
     /**
      * Configure a new or existing course set.
      */
-    public function configure_action($coursesetId='') {
+    public function configure_action($coursesetId = '')
+    {
+        $this->courseset = null;
         if ($GLOBALS['perm']->have_perm('root')) {
             if ($coursesetId) {
                 // Load course set data.
@@ -162,7 +166,7 @@ class Admission_CoursesetController extends AuthenticatedController
                 $this->selectedSemester = $_SESSION['_default_sem'] ?: Semester::findCurrent()->semester_id;
             }
             Config::get()->AJAX_AUTOCOMPLETE_DISABLED = false;
-            $this->instSearch = QuickSearch::get("institute_id", new StandardSearch("Institut_id"))
+            $this->instSearch = QuickSearch::get('institute_id', new StandardSearch('Institut_id'))
                 ->withoutButton()
                 ->render();
         } else {
@@ -264,7 +268,8 @@ class Admission_CoursesetController extends AuthenticatedController
      * @param String $coursesetId the course set to save or empty if it is a
      * new course set
      */
-    public function save_action($coursesetId='') {
+    public function save_action($coursesetId = '')
+    {
         if (!Request::submitted('submit') || !Request::get('name') || !$this->instant_course_set_view && !Request::getArray('institutes')) {
             $this->flash['name'] = Request::get('name');
             $this->flash['institutes'] = Request::getArray('institutes');
@@ -310,7 +315,7 @@ class Admission_CoursesetController extends AuthenticatedController
             if (Request::option('semester')) {
                 $_SESSION['_default_sem'] = Request::option('semester');
             }
-            PageLayout::postMessage(MessageBox::success(sprintf(_("Das Anmeldeset: %s wurde gespeichert"), htmlReady($courseset->getName()))));
+            PageLayout::postSuccess(sprintf(_('Das Anmeldeset: %s wurde gespeichert'), htmlReady($courseset->getName())));
             if ($this->instant_course_set_view) {
                 $this->redirect($this->url_for('course/admission'));
             } else {
@@ -343,11 +348,11 @@ class Admission_CoursesetController extends AuthenticatedController
      * from
      * @see CoursesetModel::getInstCourses
      */
-    public function instcourses_action($coursesetId='') {
+    public function instcourses_action($coursesetId = '')
+    {
         CSRFProtection::verifyUnsafeRequest();
         $this->selectedCourses = [];
         //autoload
-        $courseset = new CourseSet();
         if ($coursesetId && !Request::getArray('courses')) {
             $courseset = new CourseSet($coursesetId);
             $this->selectedCourses = $courseset->getCourses();
@@ -361,7 +366,8 @@ class Admission_CoursesetController extends AuthenticatedController
     /**
      * Fetches available institutes for the current user.
      */
-    public function institutes_action() {
+    public function institutes_action()
+    {
         CSRFProtection::verifyUnsafeRequest();
         $this->myInstitutes = Institute::getMyInstitutes();
         $this->selectedInstitutes = [];
@@ -369,7 +375,7 @@ class Admission_CoursesetController extends AuthenticatedController
             $this->selectedInstitutes[$institute] = new Institute($institute);
         }
         Config::get()->AJAX_AUTOCOMPLETE_DISABLED = false;
-        $this->instSearch = QuickSearch::get("institute_id", new StandardSearch("Institut_id"))
+        $this->instSearch = QuickSearch::get('institute_id', new StandardSearch('Institut_id'))
             ->withOutButton()
             ->render();
     }
@@ -398,6 +404,9 @@ class Admission_CoursesetController extends AuthenticatedController
             $all_members = array_merge($all_members, $course->admission_applicants->findBy('status', words('accepted awaiting'))->pluck('user_id'));
             $all_members = array_unique($all_members);
             foreach ($all_members as $one) {
+                if (!isset($multi_members[$one])) {
+                    $multi_members[$one] = 0;
+                }
                 $multi_members[$one]++;
             }
             $distinct_members = array_unique(array_merge($distinct_members, $all_members));
@@ -456,12 +465,12 @@ class Admission_CoursesetController extends AuthenticatedController
                 foreach (array_keys($participants) as $one) {
                     $multi_members[$one][] = $course->name . ($course->veranstaltungsnummer ? '|'. $course->veranstaltungsnummer : '');
                 }
-                foreach ($participants as $user_id => $part) {
+                foreach ($participants as $part) {
                     $liste[] = [$part['username'], $part['vorname'], $part['nachname'], $part['email'], $course->name . ($course->veranstaltungsnummer ? '|'. $course->veranstaltungsnummer : '') , $part['status']];
                 }
             }
             if ($csv == 'download_all_members') {
-                $captions = [_("Username"), _("Vorname"), _("Nachname"), _("E-Mail"), _("Veranstaltung"), _("Status")];
+                $captions = [_('Username'), _('Vorname'), _('Nachname'), _('E-Mail'), _('Veranstaltung'), _('Status')];
                 if (count($liste)) {
                     $tmpname = md5(uniqid('tmp'));
                     if (array_to_csv($liste, $GLOBALS['TMP_PATH'].'/'.$tmpname, $captions)) {
@@ -488,9 +497,9 @@ class Admission_CoursesetController extends AuthenticatedController
                     $max_count[] = count($courses);
                     $c++;
                 }
-                $captions = [_("Nutzername"), _("Vorname"), _("Nachname"), _("E-Mail")];
+                $captions = [_('Nutzername'), _('Vorname'), _('Nachname'), _('E-Mail')];
                 foreach (range(1,max($max_count)) as $num) {
-                    $captions[] = _("Veranstaltung") . ' ' . $num;
+                    $captions[] = _('Veranstaltung') . ' ' . $num;
                 }
             if (count($liste)) {
                     $tmpname = md5(uniqid('tmp'));
@@ -535,7 +544,7 @@ class Admission_CoursesetController extends AuthenticatedController
                 }
             }
             if ($ok) {
-                PageLayout::postMessage(MessageBox::success(_("Die zugeordneten Veranstaltungen wurden konfiguriert.")));
+                PageLayout::postSuccess(_('Die zugeordneten Veranstaltungen wurden konfiguriert.'));
             }
             $this->redirect($this->url_for('admission/courseset/configure/' . $courseset->getId()));
             return;
@@ -586,7 +595,6 @@ class Admission_CoursesetController extends AuthenticatedController
             );
         };
         foreach ($users as $user) {
-            $row = [];
             $app_courses = $applicants[$user->id];
             asort($app_courses);
 
@@ -638,7 +646,7 @@ class Admission_CoursesetController extends AuthenticatedController
         ));
     }
 
-    function copy_action($set_id)
+    public function copy_action($set_id)
     {
         $courseset = new CourseSet($set_id);
         $cloned_courseset = clone $courseset;
@@ -650,10 +658,16 @@ class Admission_CoursesetController extends AuthenticatedController
                     $rule->setDistributionTime(strtotime('+1 month 23:59'));
                     $rule->store();
                     $cloned_courseset->setAlgorithmRun(false);
-                    PageLayout::postMessage(MessageBox::info(sprintf(_("Bitte passen Sie das Datum der automatischen Platzverteilung an, es wurde automatisch auf %s festgelegt!"), strftime('%x %X', $rule->getDistributiontime()))));
+                    PageLayout::postInfo(sprintf(
+                        _('Bitte passen Sie das Datum der automatischen Platzverteilung an, es wurde automatisch auf %s festgelegt!'),
+                        strftime('%x %X', $rule->getDistributiontime())
+                    ));
                 }
             } else if ($rule->getEndTime() && $rule->getEndTime() < time()) {
-                PageLayout::postMessage(MessageBox::info(sprintf(_("Der Gültigkeitszeitraum der Regel %s endet in der Vergangenheit!"), htmlReady($rule->getName()))));
+                PageLayout::postInfo(sprintf(
+                    _('Der Gültigkeitszeitraum der Regel %s endet in der Vergangenheit!'),
+                    htmlReady($rule->getName())
+                ));
             }
         }
         $this->redirect(URLHelper::getURL('dispatch.php/admission/courseset/configure/' .
@@ -665,10 +679,8 @@ class Admission_CoursesetController extends AuthenticatedController
      *
      * @param String $seminare_condition SQL condition
      */
-    function get_courses($seminare_condition)
+    public function get_courses($seminare_condition)
     {
-        global $perm, $user;
-
         list($institut_id, $all) = explode('_', $this->current_institut_id);
         // Prepare count statements
         $query = "SELECT count(*)
@@ -691,7 +703,7 @@ class Admission_CoursesetController extends AuthenticatedController
                 INNER JOIN courseset_rule csr ON csr.set_id=seminar_courseset.set_id AND csr.type='ParticipantRestrictedAdmission'
                 INNER JOIN seminare ON seminar_courseset.seminar_id=seminare.seminar_id
                 ";
-        if ($institut_id == 'all'  && $perm->have_perm('root')) {
+        if ($institut_id === 'all'  && $GLOBALS['perm']->have_perm('root')) {
             $sql .= "WHERE 1 {$seminare_condition} ";
         } elseif ($all == 'all') {
             $sql .= "INNER JOIN Institute USING (Institut_id)
@@ -707,7 +719,7 @@ class Admission_CoursesetController extends AuthenticatedController
 
         $statement = DBManager::get()->prepare($sql);
         $statement->execute($parameters);
-
+        $ret = [];
         while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
             $seminar_id = $row['seminar_id'];
             $ret[$seminar_id] = $row;
diff --git a/app/controllers/admission/rule.php b/app/controllers/admission/rule.php
index 205e1a02d706b69fd65415a1f9ca6ebe9e341334..a8fd05edbb03f378311e4d0fa5793cf8cbd846f5 100644
--- a/app/controllers/admission/rule.php
+++ b/app/controllers/admission/rule.php
@@ -96,13 +96,13 @@ class Admission_RuleController extends AuthenticatedController
         $this->rule = new $ruleType($ruleId);
         $requestData = Request::getInstance();
         // Check for start and end date and parse the String values to timestamps.
-        if ($requestData['start_date'] ) {
+        if (!empty($requestData['start_date'])) {
             $parsed = date_parse($requestData['start_date']);
             $timestamp = mktime($parsed['hour'], $parsed['minute'], 0,
                 $parsed['month'], $parsed['day'], $parsed['year']);
             $requestData['start_time'] = $timestamp;
         }
-        if ($requestData['end_date'] ) {
+        if (!empty($requestData['end_date'])) {
             $parsed = date_parse($requestData['end_date']);
             $timestamp = mktime($parsed['hour'], $parsed['minute'], 0,
                 $parsed['month'], $parsed['day'], $parsed['year']);
diff --git a/app/controllers/course/forum/index.php b/app/controllers/course/forum/index.php
index 02e2e9a233d474d4412c0fdbab4d4605e529de5c..97484616de2cad20a3403ab858c9b15d2f94dbcb 100644
--- a/app/controllers/course/forum/index.php
+++ b/app/controllers/course/forum/index.php
@@ -121,6 +121,9 @@ class Course_Forum_IndexController extends ForumController
 
                 if (!empty($list['list'])) {
                     // append the remaining entries to the standard category
+                    if (!isset($new_list[$this->getId()])) {
+                        $new_list[$this->getId()] = [];
+                    }
                     $new_list[$this->getId()] = array_merge((array)$new_list[$this->getId()], $list['list']);
                 }
 
diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php
index 1cc379673b2f843e45669ff175821ec4782ae841..9a469489f39fd75194164462443828fee64bf277 100644
--- a/app/controllers/course/room_requests.php
+++ b/app/controllers/course/room_requests.php
@@ -151,10 +151,10 @@ class Course_RoomRequestsController extends AuthenticatedController
     {
         $result = null;
         if ($request_id) {
-            if (!$_SESSION['course_room_request']) {
+            if (!isset($_SESSION['course_room_request'])) {
                 $_SESSION['course_room_request'] = [];
             }
-            if (!$_SESSION['course_room_request'][$request_id]) {
+            if (!isset($_SESSION['course_room_request'][$request_id])) {
                 $_SESSION['course_room_request'][$request_id] = [];
             }
             $result =& $_SESSION['course_room_request'][$request_id];
@@ -235,14 +235,14 @@ class Course_RoomRequestsController extends AuthenticatedController
         }
         if ($step >= 3) {
             if ($this->category) {
-                $this->selected_properties = $session_data['selected_properties'];
+                $this->selected_properties = $session_data['selected_properties'] ?? [];
             }
         }
         if ($step >= 4) {
-            $this->seats = $session_data['selected_properties']['seats'];
-            $this->comment = $session_data['comment'];
-            $this->reply_lecturers = $session_data['reply_lecturers'];
-            $this->preparation_time = $session_data['preparation_time'];
+            $this->seats = $session_data['selected_properties']['seats'] ?? '0';
+            $this->comment = $session_data['comment']?? '';
+            $this->reply_lecturers = $session_data['reply_lecturers'] ?? '';
+            $this->preparation_time = $session_data['preparation_time'] ?? '';
         }
     }
 
@@ -814,7 +814,7 @@ class Course_RoomRequestsController extends AuthenticatedController
         $this->request = RoomRequest::find($this->request_id);
         $selected_room = null;
         $this->seats = null;
-        if (($this->request instanceof RoomRequest) && !$session_data['request_id']) {
+        if (($this->request instanceof RoomRequest) && !isset($session_data['request_id'])) {
             //It is an existing request that hasn't been modified yet.
             //Load its data directly.
             if ($this->request->resource_id) {
diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php
index 050cf174e925e64ca189a5df39d33f43da5cca86..300078e05fd285be4630aa1da028ff73240f29e1 100644
--- a/app/controllers/resources/room_request.php
+++ b/app/controllers/resources/room_request.php
@@ -382,7 +382,7 @@ class Resources_RoomRequestController extends AuthenticatedController
                             }
                         }
                     }
-                    array_unique($interval_weekdays);
+                    $interval_weekdays = array_unique($interval_weekdays);
                     //We have all relevant weekdays and can now check
                     //if the time interval lies in one of the relevant weekdays:
                     foreach ($interval_weekdays as $iwd) {
@@ -397,12 +397,12 @@ class Resources_RoomRequestController extends AuthenticatedController
                     }
                 }
             }
-            if ($this->filter['get_only_request_ids']) {
+            if (!empty($this->filter['get_only_request_ids'])) {
                 return array_keys($result);
             }
         } else {
             $result = $requests;
-            if ($this->filter['get_only_request_ids']) {
+            if (!empty($this->filter['get_only_request_ids'])) {
                 return SimpleCollection::createFromArray($requests)->pluck('id');
             }
         }
@@ -800,8 +800,8 @@ class Resources_RoomRequestController extends AuthenticatedController
         );
         $this->requests = $requests;
         $this->page = $page;
-        $this->sort_order = $this->filter['sort_order'];
-        $this->sort_var = $this->filter['sorting'];
+        $this->sort_order = $this->filter['sort_order'] ?? '';
+        $this->sort_var = $this->filter['sorting']?? '';
 
         $this->request_status = $this->filter['request_status'] ?? '';
     }
diff --git a/app/controllers/tour.php b/app/controllers/tour.php
index 54dfeff770cd1d73e80b186cb3e3450e32921604..a288ab27ba0475694e17f15a69c611454c8b4ed3 100644
--- a/app/controllers/tour.php
+++ b/app/controllers/tour.php
@@ -89,7 +89,7 @@ class TourController extends AuthenticatedController
         }
         $data['route_step_nr'] = $first_step;
         $next_first_step       = $first_step;
-        while ($this->route === $this->tour->steps[$next_first_step - 1]->route) {
+        while (isset($this->tour->steps[$next_first_step - 1]) && $this->route === $this->tour->steps[$next_first_step - 1]->route) {
             $data['data'][] = [
                 'step_nr'     => $this->tour->steps[$next_first_step - 1]->step,
                 'element'     => $this->tour->steps[$next_first_step - 1]->css_selector,
diff --git a/app/controllers/userfilter/field.php b/app/controllers/userfilter/field.php
index 85dd0be1df221d6c2a34d3f17b6eefe72cd92a1b..937f5200435df0d37ce8bf256a14e19505c66290 100644
--- a/app/controllers/userfilter/field.php
+++ b/app/controllers/userfilter/field.php
@@ -37,8 +37,10 @@ class Userfilter_FieldController extends AuthenticatedController
     {
         $this->conditionFields = UserFilterField::getAvailableFilterFields();
         if ($className = Request::option('fieldtype')) {
-            list($fieldType, $param) = explode('_', $className);
             $this->className = $className;
+            $parts = explode('_', $className);
+            $fieldType = $parts[0];
+            $param = $parts[1] ?? null;
             $this->field = new $fieldType($param);
         }
     }
diff --git a/app/controllers/userfilter/filter.php b/app/controllers/userfilter/filter.php
index 5987b6922b77743b5156f8e8ed23d39399fdf852..87a7d872996a53cf2c0fe5b2df369320ed5853be 100644
--- a/app/controllers/userfilter/filter.php
+++ b/app/controllers/userfilter/filter.php
@@ -54,11 +54,12 @@ class Userfilter_FilterController extends AuthenticatedController
         $fields = Request::getArray('field');
         $compareOps = Request::getArray('compare_operator');
         $values = Request::getArray('value');
-        $data = [];
         for ($i=0 ; $i<sizeof($fields) ; $i++) {
             $current = $fields[$i];
             if ($this->conditionFields[$current]) {
-                list($fieldType, $param) = explode('_', $current);
+                $parts = explode('_', $current);
+                $fieldType = $parts[0];
+                $param = $parts[1] ?? null;
                 $field = new $fieldType($param);
                 $field->setCompareOperator($compareOps[$i]);
                 $field->setValue($values[$i]);
diff --git a/app/views/admission/courseset/configure.php b/app/views/admission/courseset/configure.php
index 0a632f978ad2a47c1117f239693353a6d66c9b41..99919ef5c406d060544bb2565ebb0900c7d36491 100644
--- a/app/views/admission/courseset/configure.php
+++ b/app/views/admission/courseset/configure.php
@@ -109,8 +109,12 @@ if ($flash['error']) {
             </label>
             <label>
                 <?= _('Filter auf Name/Nummer/Lehrperson') ?><br>
-                <input style="display:inline-block" type="text" onKeypress="if (event.which==13) return STUDIP.Admission.getCourses('<?= $controller->url_for('admission/courseset/instcourses', $courseset ? $courseset->getId() : '') ?>')" value="<?= htmlReady($current_course_filter) ?>" name="course_filter" >
-                <?=Icon::create('search', 'clickable', ['title' => _("Veranstaltungen anzeigen"),'onClick' => "return STUDIP.Admission.getCourses('" . $controller->url_for('admission/courseset/instcourses', $courseset ? $courseset->getId() : '') ."')"])->asImg()?>
+                <input style="display:inline-block" type="text" onKeypress="if (event.which==13) return STUDIP.Admission.getCourses('<?= $controller->url_for('admission/courseset/instcourses', $courseset ? $courseset->getId() : '') ?>')"
+                       value="<?= htmlReady($current_course_filter ?? '') ?>" name="course_filter" >
+                <?= Icon::create('search')->asImg([
+                    'title' => _("Veranstaltungen anzeigen"),
+                    'onClick' => "return STUDIP.Admission.getCourses('" . $controller->url_for('admission/courseset/instcourses', $courseset ? $courseset->getId() : '') ."')"
+                ]) ?>
             </label>
             <div id="instcourses">
             <?= $coursesTpl; ?>
diff --git a/app/views/admission/courseset/configure_courses.php b/app/views/admission/courseset/configure_courses.php
index 60487246fb50ae37260252b9d4b08a0f31d90d73..e80e621d3d99158439422d5c4f2159b8b6edce6e 100644
--- a/app/views/admission/courseset/configure_courses.php
+++ b/app/views/admission/courseset/configure_courses.php
@@ -2,20 +2,20 @@
     <table class="default">
         <thead>
             <tr>
-                <th><?= _("Name")?></th>
-                <th><?= _("Lehrende")?></th>
-                <th><?= _("versteckt")?></th>
-                <th><?= _("vorläufige Anmeldung")?></th>
-                <th><?= _("verbindliche Anmeldung")?></th>
+                <th><?= _('Name')?></th>
+                <th><?= _('Lehrende')?></th>
+                <th><?= _('versteckt')?></th>
+                <th><?= _('vorläufige Anmeldung')?></th>
+                <th><?= _('verbindliche Anmeldung')?></th>
                 <? if ($participant_restriction) : ?>
-                <th><?= _("max. Teilnehmende")?></th>
+                <th><?= _('max. Teilnehmende')?></th>
                 <? endif ?>
-                <th><?= _("Teilnehmende aktuell")?></th>
-                <th><?= _("Anmeldungen")?></th>
+                <th><?= _('Teilnehmende aktuell')?></th>
+                <th><?= _('Anmeldungen')?></th>
                 <? if ($participant_restriction) : ?>
-                <th><?= _("Warteliste")?></th>
-                <th><?= _("Plätze")?></th>
-                <th><?= _("Nachrücken")?></th>
+                <th><?= _('Warteliste')?></th>
+                <th><?= _('Plätze')?></th>
+                <th><?= _('Nachrücken')?></th>
                 <? endif ?>
             </tr>
         </thead>
@@ -34,7 +34,7 @@
             <td><input <?=$editable?> type="text" size="2" name="configure_courses_turnout[<?= $course->id?>]" value="<?= (int)$course->admission_turnout ?>"></td>
             <? endif ?>
             <td><?= $course->getNumParticipants() ?></td>
-            <td><?= sprintf("%d / %d", $applications[$course->id]['c'],$applications[$course->id]['h']) ?></td>
+            <td><?= sprintf("%d / %d", $applications[$course->id]['c'] ?? 0 , $applications[$course->id]['h'] ?? 0) ?></td>
             <? if ($participant_restriction) : ?>
             <td style="white-space:nowrap">
                 <input <?=$editable?> type="checkbox" name="configure_courses_disable_waitlist[<?= $course->id?>]" value="1" <?= $course->admission_disable_waitlist ? '' : 'checked' ?>
@@ -64,7 +64,7 @@
     <?=_("Anzahl aller Teilnehmenden:")?> <?=$count_distinct_members?>
     <?  if ($count_distinct_members) : ?>
         <a href="<?= $controller->link_for('admission/courseset/configure_courses/' . $set_id .'/download_all_members')?>" title="<?= _("Download")?>">
-            <?= Icon::create('file-office', 'clickable')->asImg()?>
+            <?= Icon::create('file-office') ?>
         </a>
     <? endif ?>
 </div>
@@ -72,13 +72,13 @@
     <?=_("Mehrfachteilnahmen:")?> <?=$count_multi_members?>
     <?  if ($count_multi_members) : ?>
         <a href="<?= $controller->link_for('admission/courseset/configure_courses/' . $set_id .'/download_multi_members')?>" title="<?= _("Download")?>">
-            <?= Icon::create('file-office', 'clickable')->asImg()?>
+            <?= Icon::create('file-office') ?>
         </a>
     <? endif ?>
 </div>
 <div data-dialog-button>
-    <?= Studip\Button::create(_("Speichern"), 'configure_courses_save') ?>
-    <?= Studip\LinkButton::create(_("Download"), $controller->url_for('admission/courseset/configure_courses/' . $set_id .'/csv')) ?>
+    <?= Studip\Button::create(_('Speichern'), 'configure_courses_save') ?>
+    <?= Studip\LinkButton::create(_('Download'), $controller->url_for('admission/courseset/configure_courses/' . $set_id .'/csv')) ?>
 </div>
 <?= CSRFProtection::tokenTag()?>
 </form>
diff --git a/app/views/admission/courseset/institutes.php b/app/views/admission/courseset/institutes.php
index 865e61e69084c1302f7de29fe72b85aa1f4cb85f..c22f21f69df393b2b9024fb291e0ea026f2fa030 100644
--- a/app/views/admission/courseset/institutes.php
+++ b/app/views/admission/courseset/institutes.php
@@ -1,6 +1,9 @@
-<?= Icon::create('arr_2down', 'sort', ['title' => _('Einrichtung hinzufügen')])->asImg(16, ["alt" => _('Einrichtung hinzufügen'), "onclick" => "STUDIP.Admission.updateInstitutes($('input[name=\"institute_id\"]').val(), '".$controller->url_for('admission/courseset/institutes',$courseset?$courseset->getId():'')."', '".$controller->url_for('admission/courseset/instcourses',$courseset?$courseset->getId():'')."', 'add')"]) ?>
+<?= Icon::create('arr_2down', Icon::ROLE_SORT)->asImg([
+    'title'   => _('Einrichtung hinzufügen'),
+    'onclick' => "STUDIP.Admission.updateInstitutes($('input[name=\"institute_id\"]').val(), '" . $controller->url_for('admission/courseset/institutes', !empty($courseset) ? $courseset->getId() : '') . "', '" . $controller->url_for('admission/courseset/instcourses', !empty($courseset) ? $courseset->getId() : '') . "', 'add')",
+]) ?>
 <?= $instSearch ?>
-<?= Icon::create('search', 'clickable', ['title' => _("Suche starten")])->asImg()?>
+<?= Icon::create('search', Icon::ROLE_CLICKABLE, ['title' => _("Suche starten")]) ?>
 
 <ul>
     <?php foreach (SimpleCollection::createFromArray($selectedInstitutes)->orderBy('Name') as $institute => $data) { ?>
@@ -9,9 +12,12 @@
         <span class="hover_box">
             <?= htmlReady($data['Name']) ?>
             <span class="action_icons">
-                <?= Icon::create('trash', 'clickable', ['title' => _('Einrichtung entfernen')])->asImg(16, ["onclick" => "STUDIP.Admission.updateInstitutes('".$institute."', '".$controller->url_for('admission/courseset/institutes',$institute)."', '".$controller->url_for('admission/courseset/instcourses',$institute)."', 'delete')"]); ?>
+                <?= Icon::create('trash')->asImg([
+                    'title'   => _('Einrichtung entfernen'),
+                    'onclick' => "STUDIP.Admission.updateInstitutes('{$institute}', '" . $controller->url_for('admission/courseset/institutes',$institute) . "', '" . $controller->url_for('admission/courseset/instcourses',$institute)."', 'delete')"
+                ]); ?>
             </span>
         </span>
     </li>
     <?php } ?>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/app/views/course/details/index.php b/app/views/course/details/index.php
index 0e8249405b72a6ca82b88ff34df35b7b375cbafc..2e3a1a9701d0099a607a0db9ab244d6427079ed9 100644
--- a/app/views/course/details/index.php
+++ b/app/views/course/details/index.php
@@ -315,7 +315,7 @@
     <section>
         <?= $sem->getDatesTemplate(
             'dates/seminar_html_location',
-            ['ort' => $course->ort, 'disable_list_shrinking' => true]
+            ['ort' => $course->ort, 'disable_list_shrinking' => true, 'show_room' => false]
         ) ?>
     </section>
 </article>
diff --git a/app/views/course/forum/index/_threads.php b/app/views/course/forum/index/_threads.php
index d2fad260fddd1100ff351808a5d7ff78e8f634a3..f09cee277ce7e9acc7e70c0575084a6ade4ecb9a 100644
--- a/app/views/course/forum/index/_threads.php
+++ b/app/views/course/forum/index/_threads.php
@@ -100,7 +100,7 @@
                         <?= ActionMenu::get()
                             ->condition(isset($entry['last_posting']))
                             ->addLink(
-                                isset($entry['last_posting']) ? $controller->url_for("course/forum/index/index/{$entry['last_posting']['topic_id']}#{$entry['last_posting']['topic_id']}") : '#no_posting',
+                                isset($entry['last_posting']['topic_id']) ? $controller->url_for("course/forum/index/index/{$entry['last_posting']['topic_id']}#{$entry['last_posting']['topic_id']}") : '#no_posting',
                                 _('Zur letzten Antwort'),
                                 Icon::create('forum'),
                                 ['class' => 'hidden-small-up']
diff --git a/app/views/course/forum/index/index.php b/app/views/course/forum/index/index.php
index 6c321a5c90a97c5c4106889c7cb04a5466f8efce..a39d3a35e1928c6ab1244e749983635ca2693e51 100644
--- a/app/views/course/forum/index/index.php
+++ b/app/views/course/forum/index/index.php
@@ -41,7 +41,7 @@ if ($section == 'index') {
             $abo_url = $controller->url_for('course/forum/index/abo/' . $constraint['topic_id']);
         endif;
 
-        $actions->addLink($abo_text, $abo_url, Icon::create('link-intern', 'clickable'));
+        $actions->addLink($abo_text, $abo_url, Icon::create('link-intern'));
     }
 
     if (ForumPerm::has('close_thread', $seminar_id) && $constraint['depth'] > 1) {
@@ -51,7 +51,7 @@ if ($section == 'index') {
             $close = new LinkElement(
                 _('Thema schließen'),
                 $close_url,
-                Icon::create('lock-locked', 'clickable'),
+                Icon::create('lock-locked'),
                 [
                     'onclick' => 'STUDIP.Forum.closeThreadFromThread(\'' . $constraint['topic_id'] . '\', '
                             . ForumHelpers::getPage() . '); return false;',
@@ -65,7 +65,7 @@ if ($section == 'index') {
             $open = new LinkElement(
                 _('Thema öffnen'),
                 $open_url,
-                Icon::create('lock-unlocked', 'clickable'),
+                Icon::create('lock-unlocked'),
                 [
                     'onclick' => 'STUDIP.Forum.openThreadFromThread(\'' . $constraint['topic_id'] . '\', '
                                 . ForumHelpers::getPage() . '); return false;',
@@ -83,7 +83,7 @@ if ($section == 'index') {
             $emphasize = new LinkElement(
                 _('Thema hervorheben'),
                 $emphasize_url,
-                Icon::create('staple', 'clickable'),
+                Icon::create('staple'),
                 [
                     'onclick' => 'STUDIP.Forum.makeThreadStickyFromThread(\'' . $constraint['topic_id'] . '\', '
                             . ForumHelpers::getPage() . '); return false;',
@@ -97,7 +97,7 @@ if ($section == 'index') {
             $emphasize = new LinkElement(
                 _('Hervorhebung aufheben'),
                 $unemphasize_url,
-                Icon::create('staple', 'clickable'),
+                Icon::create('staple'),
                 [
                     'onclick' => 'STUDIP.Forum.makeThreadUnstickyFromThread(\'' . $constraint['topic_id'] . '\', '
                             . ForumHelpers::getPage() . '); return false;',
@@ -109,7 +109,7 @@ if ($section == 'index') {
     }
 
     if ($constraint['depth'] == 0 && ForumPerm::has('add_category', $seminar_id)) {
-        $actions->addLink(_('Neue Kategorie erstellen'), "#create", Icon::create('link-intern', 'clickable'));
+        $actions->addLink(_('Neue Kategorie erstellen'), "#create", Icon::create('link-intern'));
     }
 }
 
@@ -119,7 +119,7 @@ if ($section === 'index' && ForumPerm::has('pdfexport', $seminar_id)) {
     $export = new ExportWidget();
     $export->addLink(_('Beiträge als PDF exportieren'),
                      $controller->url_for('course/forum/index/pdfexport/' . $constraint['topic_id']),
-                     Icon::create('file-pdf', 'clickable'));
+                     Icon::create('file-pdf'));
     $sidebar->addWidget($export);
 }
 
@@ -243,7 +243,7 @@ $pagechooser = null;
 <? endif ?>
 
 <? if ( (ForumPerm::has('add_area', $this->seminar_id))
-    || ($constraint['depth'] >= 1 && ForumPerm::has('add_entry', $seminar_id)) ): ?>
+    || (isset($constraint['depth']) && $constraint['depth'] >= 1 && ForumPerm::has('add_entry', $seminar_id)) ): ?>
         <?= $this->render_partial('course/forum/index/_new_entry') ?>
     <? endif ?>
 </div>
diff --git a/app/views/course/room_requests/request_summary.php b/app/views/course/room_requests/request_summary.php
index 8f8c703b876c5282ad8f26fc094604e391f83615..4108deb16cc542a82f5df0421b2f1a652ac76be3 100644
--- a/app/views/course/room_requests/request_summary.php
+++ b/app/views/course/room_requests/request_summary.php
@@ -10,7 +10,7 @@
         <div>
             <fieldset>
                 <legend><?= _('Ausgewählter Raum') ?></legend>
-                <? if ($selected_room): ?>
+                <? if (!empty($selected_room)): ?>
                     <input type="hidden" name="selected_room_id"
                            value="<?= htmlReady($selected_room->id) ?>">
                     <input type="hidden" name="confirmed_selected_room_id"
diff --git a/app/views/resources/building/_add_edit_form.php b/app/views/resources/building/_add_edit_form.php
index 37e86669b4d06d5291e3c53c5285cce7b7e1efca..bc07db2f47e166dc783abc79f3372db7a908da4e 100644
--- a/app/views/resources/building/_add_edit_form.php
+++ b/app/views/resources/building/_add_edit_form.php
@@ -42,13 +42,14 @@
                     <input type="text" name="sort_position" value="<?= htmlReady($sort_position) ?>">
                 </label>
             <? endif ?>
+
             <?= $this->render_partial(
                 '../../templates/resources/position_attribute_form_part.php',
                 [
                     'property_name' => 'geo_coordinates',
-                    'latitude'      => $latitude,
-                    'longitude'     => $longitude,
-                    'altitude'      => $altitude
+                    'latitude'      => $latitude ?? null,
+                    'longitude'     => $longitude ?? null,
+                    'altitude'      => $altitude ?? null
                 ]
             ) ?>
         </fieldset>
diff --git a/app/views/userfilter/field/configure.php b/app/views/userfilter/field/configure.php
index e41c7821c329b9cfc5af6598c34e536a01475c29..d50d39a912b7e57322a004c4a4da5a103ef13570 100644
--- a/app/views/userfilter/field/configure.php
+++ b/app/views/userfilter/field/configure.php
@@ -1,4 +1,4 @@
-<?php if ($className) { ?>
+<?php if (!empty($className)) { ?>
     <? if (count($field->getValidCompareOperators()) > 1) : ?>
         <select name="compare_operator[]" size="1" class="conditionfield_compare_op">
             <?php foreach ($field->getValidCompareOperators() as $op => $text) { ?>
@@ -20,7 +20,7 @@
         <input type="text" name="value[]" class="conditionfield_value" value="">
     <? endif ?>
 <?php } else { ?>
-    <?= (!$is_first ? '<strong>' . _("und") . '</strong>' : '')?>
+    <?= (empty($is_first) ? '<strong>' . _("und") . '</strong>' : '')?>
     <div class="conditionfield">
     <select name="field[]" class="conditionfield_class" size="1" onchange="STUDIP.UserFilter.getConditionFieldConfiguration(this, '<?= $controller->url_for('userfilter/field/configure') ?>')">
         <option value="">-- <?= _('bitte auswählen') ?> --</option>
@@ -32,4 +32,4 @@
         class="conditionfield_delete">
         <?= Icon::create('trash', 'clickable')->asImg(); ?></a>
 </div>
-<?php } ?>
\ No newline at end of file
+<?php } ?>
diff --git a/lib/admissionrules/conditionaladmission/ConditionalAdmission.class.php b/lib/admissionrules/conditionaladmission/ConditionalAdmission.class.php
index 900ee5b957dcd7fc600c0a4cfece906c165f01dd..63275f06c729be8692481e197408a3794adfbdca 100644
--- a/lib/admissionrules/conditionaladmission/ConditionalAdmission.class.php
+++ b/lib/admissionrules/conditionaladmission/ConditionalAdmission.class.php
@@ -55,14 +55,14 @@ class ConditionalAdmission extends AdmissionRule
     /**
      * Standard constructor.
      *
-     * @param  String ruleId If this rule has been saved previously, it
+     * @param  String $ruleId If this rule has been saved previously, it
      *      will be loaded from database.
-     * @return AdmissionRule the current object (this).
+     * @return ConditionalAdmission the current object (this).
      */
     public function __construct($ruleId='', $courseSetId = '')
     {
         parent::__construct($ruleId, $courseSetId);
-        $this->default_message = _("Sie erfüllen nicht die Bedingung: %s");
+        $this->default_message = _('Sie erfüllen nicht die Bedingung: %s');
         if ($ruleId) {
             $this->load();
         } else {
@@ -74,9 +74,9 @@ class ConditionalAdmission extends AdmissionRule
     /**
      * Adds a new UserFilter to this rule.
      *
-     * @param  UserFilter condition
-     * @param  String group
-     * @param  Int quota
+     * @param  UserFilter $condition
+     * @param  String $group
+     * @param  Int $quota
      * @return ConditionalAdmission
      */
     public function addCondition($condition, $group = '', $quota = 0)
@@ -282,7 +282,7 @@ class ConditionalAdmission extends AdmissionRule
     /**
      * Removes the condition with the given ID from the rule.
      *
-     * @param  String conditionId
+     * @param  String $conditionId
      * @return ConditionalAdmission
      */
     public function removeCondition($conditionId)
@@ -336,8 +336,6 @@ class ConditionalAdmission extends AdmissionRule
                     }
                 }
             }
-        } else {
-            $failed = [];
         }
         return $failed;
     }
@@ -360,7 +358,7 @@ class ConditionalAdmission extends AdmissionRule
         $this->quota = [];
         foreach ($data['conditions'] as $ser_con) {
             $condition = ObjectBuilder::build($ser_con, 'UserFilter');
-            $this->addCondition($condition, $data['conditiongroup_'.$condition->getId()], $data['quota_'.$data['conditiongroup_'.$condition->getId()]]);
+            $this->addCondition($condition, $data['conditiongroup_'.$condition->getId()], $data['quota_'.$data['conditiongroup_'.$condition->getId()]] ?? 0);
         }
         foreach ($this->getConditiongroups() as $conditiongroup_id => $conditions) {
             if (mb_strlen($conditiongroup_id) < 32) {
@@ -483,7 +481,7 @@ class ConditionalAdmission extends AdmissionRule
      * Validates if the given request data is sufficient to configure this rule
      * (e.g. if required values are present).
      *
-     * @param  Array Request data
+     * @param  Array $data Request data
      * @return Array Error messages.
      */
     public function validate($data)
@@ -505,12 +503,12 @@ class ConditionalAdmission extends AdmissionRule
             } else {
                 $ungrouped++;
             }
-            $quota[$data['conditiongroup_' . $condition->getId()]] = $data['quota_' . $data['conditiongroup_' . $condition->getId()]];
+            $quota[$data['conditiongroup_' . $condition->getId()]] = $data['quota_' . $data['conditiongroup_' . $condition->getId()]] ?? 0;
             if (!$quota[$data['conditiongroup_' . $condition->getId()]]) {
                 $no_quota++;
             }
         }
-        foreach ($quota as $id => $part) {
+        foreach ($quota as $part) {
             $quota_total += $part;
         }
         if ($grouped && $ungrouped) {
@@ -562,6 +560,4 @@ class ConditionalAdmission extends AdmissionRule
         parent::setSiblings($siblings);
         $this->conditiongroups_allowed = null;
     }
-
-} /* end of class ConditionalAdmission */
-
+}
diff --git a/lib/admissionrules/coursememberadmission/CourseMemberAdmission.class.php b/lib/admissionrules/coursememberadmission/CourseMemberAdmission.class.php
index 74892fd66d9c594fa51035c614fa19adad626766..dc13a6205f240c80ed63e8fe9025cbdde9a78973 100644
--- a/lib/admissionrules/coursememberadmission/CourseMemberAdmission.class.php
+++ b/lib/admissionrules/coursememberadmission/CourseMemberAdmission.class.php
@@ -32,7 +32,8 @@ class CourseMemberAdmission extends AdmissionRule
     /**
      * Standard constructor
      *
-     * @param  String ruleId
+     * @param  String $ruleId
+     * @param  String e
      */
     public function __construct($ruleId = '', $courseSetId = '')
     {
@@ -115,8 +116,8 @@ class CourseMemberAdmission extends AdmissionRule
     /**
      * Is admission allowed according to the defined time frame?
      *
-     * @param  String userId
-     * @param  String courseId
+     * @param  String $userId
+     * @param  String $courseId
      * @return Array
      */
     public function ruleApplies($userId, $courseId)
@@ -193,7 +194,7 @@ class CourseMemberAdmission extends AdmissionRule
      * Validates if the given request data is sufficient to configure this rule
      * (e.g. if required values are present).
      *
-     * @param  Array Request data
+     * @param  Array $data Request data
      * @return Array Error messages.
      */
     public function validate($data)
diff --git a/lib/admissionrules/participantrestrictedadmission/ParticipantRestrictedAdmission.class.php b/lib/admissionrules/participantrestrictedadmission/ParticipantRestrictedAdmission.class.php
index 1556db391170cf3406e44e215e955bba2466a6b5..a64b88a368981d91e49b10b7a695cb35a15c3710 100644
--- a/lib/admissionrules/participantrestrictedadmission/ParticipantRestrictedAdmission.class.php
+++ b/lib/admissionrules/participantrestrictedadmission/ParticipantRestrictedAdmission.class.php
@@ -36,9 +36,10 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Standard constructor
      *
-     * @param  String ruleId
+     * @param  String $ruleId
+     * @param  String $courseSetId
      */
-    public function __construct($ruleId='', $courseSetId = '')
+    public function __construct($ruleId = '', $courseSetId = '')
     {
         parent::__construct($ruleId, $courseSetId);
         $this->first_come_first_served_allowed = (bool)Config::get()->ENABLE_COURSESET_FCFS;
@@ -58,7 +59,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Deletes the admission rule and all associated data.
      */
-    public function delete() {
+    public function delete()
+    {
         if ($this->prio_exists) {
             $set_id = DBManager::get()->fetchColumn("SELECT set_id FROM courseset_rule WHERE rule_id = ? LIMIT 1", [$this->id]);
             //Delete priorities
@@ -75,7 +77,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
      * Gets some text that describes what this AdmissionRule (or respective
      * subclass) does.
      */
-    public static function getDescription() {
+    public static function getDescription()
+    {
         return _("Anmelderegeln dieses Typs legen fest, ob die zugeordneten Veranstaltungen eine maximale Teilnehmendenanzahl haben. Die Platzverteilung erfolgt automatisiert.");
     }
 
@@ -92,7 +95,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Return this rule's name.
      */
-    public static function getName() {
+    public static function getName()
+    {
         return _("Beschränkte Teilnehmendenanzahl");
     }
 
@@ -101,7 +105,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
      *
      * @return String
      */
-    public function getTemplate() {
+    public function getTemplate()
+    {
         $factory = new Flexi_TemplateFactory(dirname(__FILE__).'/templates/');
         // Open specific template for this rule and insert base template.
         $tpl = $factory->open('configure');
@@ -112,7 +117,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Helper function for loading rule definition from database.
      */
-    public function load() {
+    public function load()
+    {
         // Load data.
         $stmt = DBManager::get()->prepare("SELECT *
             FROM `participantrestrictedadmissions` WHERE `rule_id`=? LIMIT 1");
@@ -134,19 +140,20 @@ class ParticipantRestrictedAdmission extends AdmissionRule
      * @param Array $data
      * @return AdmissionRule This object.
      */
-    public function setAllData($data) {
+    public function setAllData($data)
+    {
         parent::setAllData($data);
-        if ($data['distributiondate']) {
+        if (!empty($data['distributiondate'])) {
             if (!$data['distributiontime']) {
                 $data['distributiontime'] = '23:59';
             }
             $ddate = strtotime($data['distributiondate'] . ' ' . $data['distributiontime']);
             $this->setDistributionTime($ddate);
         }
-        if ($data['enable_FCFS']) {
+        if (!empty($data['enable_FCFS'])) {
             $this->setDistributionTime(0);
         }
-        if ($data['startdate']) {
+        if (!empty($data['startdate'])) {
              $starttime = strtotime($data['startdate'] . ' ' . $data['starttime']);
              if ($starttime > time()) {
                  $this->minimum_timespan_to_distribution_time = $this->minimum_timespan_to_distribution_time + (($starttime - time()) / 60);
@@ -159,8 +166,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Sets a new timestamp for seat distribution algorithm execution.
      *
-     * @param  int newDistributionTime
-     * @return TimedAdmission
+     * @param  int $newDistributionTime
+     * @return ParticipantRestrictedAdmission
      */
     public function setDistributionTime($newDistributionTime)
     {
@@ -172,7 +179,8 @@ class ParticipantRestrictedAdmission extends AdmissionRule
     /**
      * Store rule definition to database.
      */
-    public function store() {
+    public function store()
+    {
         // Store data.
         $stmt = DBManager::get()->prepare("INSERT INTO `participantrestrictedadmissions`
             (`rule_id`, `message`, `distribution_time`,
@@ -201,7 +209,7 @@ class ParticipantRestrictedAdmission extends AdmissionRule
      * Validates if the given request data is sufficient to configure this rule
      * (e.g. if required values are present).
      *
-     * @param  Array Request data
+     * @param  Array $data Request data
      * @return Array Error messages.
      */
     public function validate($data)
@@ -211,15 +219,12 @@ class ParticipantRestrictedAdmission extends AdmissionRule
             $data['distributiontime'] = '23:59';
         }
         $ddate = strtotime($data['distributiondate'] . ' ' . $data['distributiontime']);
-        if (!$data['enable_FCFS'] && (!$data['distributiondate'] || $ddate < (time() + $this->minimum_timespan_to_distribution_time*60))) {
+        if (empty($data['enable_FCFS']) && (empty($data['distributiondate']) || $ddate < (time() + $this->minimum_timespan_to_distribution_time * 60))) {
             $errors[] = sprintf(_('Bitte geben Sie für die Platzverteilung ein Datum an, das weiter in der Zukunft liegt. Das frühestmögliche Datum ist %s.'), strftime('%x %R', time() + $this->minimum_timespan_to_distribution_time*60));
         }
-        if ($data['enable_FCFS'] && $data['distributiondate']) {
+        if (!empty($data['enable_FCFS']) && $data['distributiondate']) {
             $errors[] = _('Sie können kein Datum für die automatische Platzverteilung einstellen und gleichzeitig die automatische Platzverteilung ausschalten.');
         }
         return $errors;
     }
-
 }
-
-?>
diff --git a/lib/classes/RangeTreeObject.class.php b/lib/classes/RangeTreeObject.class.php
index c4c5320d3fb13092ff7a3406c3455dd6ff4335e7..579db4359891bd0cc9da7b637f04ded20004be57 100644
--- a/lib/classes/RangeTreeObject.class.php
+++ b/lib/classes/RangeTreeObject.class.php
@@ -95,7 +95,7 @@ class RangeTreeObject {
     function __construct($item_id) {
         $this->tree = TreeAbstract::GetInstance("StudipRangeTree", false);
         $this->tree_item_id = $item_id;
-        $this->item_data = $this->tree->tree_data[$item_id];
+        $this->item_data = $this->tree->tree_data[$item_id] ?? null;
     }
 
     /**
diff --git a/lib/classes/Request.class.php b/lib/classes/Request.class.php
index 22cf29d142dc7fac0c00c966f82637b82f24dd19..34029720390dd879f8818b3794934cf210da2d8e 100644
--- a/lib/classes/Request.class.php
+++ b/lib/classes/Request.class.php
@@ -778,7 +778,7 @@ class Request implements ArrayAccess, IteratorAggregate
     {
         try {
             $request = self::getInstance();
-            return ObjectBuilder::buildMany($request[$param] ?: null, $expected_class);
+            return ObjectBuilder::buildMany($request[$param] ?? null, $expected_class);
         } catch (Exception $e) {
             if ($allow_null) {
                 return [];
diff --git a/lib/classes/StudipSemSearchHelper.class.php b/lib/classes/StudipSemSearchHelper.class.php
index ea7aa9c52e797c31c2de802bc3735e5d2d0dbe56..bb45d24acef9ba475fc7043ae49be3786dc9c319 100644
--- a/lib/classes/StudipSemSearchHelper.class.php
+++ b/lib/classes/StudipSemSearchHelper.class.php
@@ -52,7 +52,8 @@ class StudipSemSearchHelper {
         $this->setParams($params, $visible_only);
     }
 
-    public function setParams($params, $visible_only = null){
+    public function setParams($params, $visible_only = null)
+    {
         if(isset($params['quick_search']) && isset($params['qs_choose'])){
             if($params['qs_choose'] == 'all'){
                 foreach (self::GetQuickSearchFields() as $key => $value){
@@ -181,11 +182,11 @@ class StudipSemSearchHelper {
                 $view->params[0] = '';
             }
             $view->params[0] .= ($this->params['title']) ? $search_for . " " : " ";
-            $view->params[0] .= ($this->params['title'] && $this->params['sub_title']) ? $combination : " ";
-            $view->params[0] .= ($this->params['sub_title']) ? " Untertitel LIKE '%" . $this->trim($this->params['sub_title']) . "%' " : " ";
-            $view->params[0] .= (($this->params['title'] || $this->params['sub_title']) && $this->params['comment']) ? $combination : " ";
-            $view->params[0] .= ($this->params['comment']) ? " Beschreibung LIKE '%" . $this->trim($this->params['comment']) . "%' " : " ";
-            $view->params[0] .= (($this->params['title'] || $this->params['sub_title'] || $this->params['comment']) && $this->params['number']) ? $combination : " ";
+            $view->params[0] .= ($this->params['title'] && !empty($this->params['sub_title'])) ? $combination : " ";
+            $view->params[0] .= (!empty($this->params['sub_title'])) ? " Untertitel LIKE '%" . $this->trim($this->params['sub_title']) . "%' " : " ";
+            $view->params[0] .= (($this->params['title'] || !empty($this->params['sub_title'])) && !empty($this->params['comment'])) ? $combination : " ";
+            $view->params[0] .= (!empty($this->params['comment'])) ? " Beschreibung LIKE '%" . $this->trim($this->params['comment']) . "%' " : " ";
+            $view->params[0] .= (($this->params['title'] || !empty($this->params['sub_title']) || empty($this->params['comment'])) && $this->params['number']) ? $combination : " ";
             $view->params[0] .= ($this->params['number']) ? " VeranstaltungsNummer LIKE '%" . $this->trim($this->params['number']) . "%' " : " ";
             $view->params[0] = ($this->visible_only ? " c.visible=1 AND " : "") . "(" . $view->params[0] .")";
             $view->params[1] =  $and_clause . $clause;
diff --git a/lib/classes/TreeAbstract.class.php b/lib/classes/TreeAbstract.class.php
index 7cdb9404a6c3c6ca627e094005ed59d90bf3a701..9f546545d2acc25ed22766d2b78703c257fecf93 100644
--- a/lib/classes/TreeAbstract.class.php
+++ b/lib/classes/TreeAbstract.class.php
@@ -95,7 +95,7 @@ class TreeAbstract {
     public static function GetInstance($class_name, $args = null, $invalidate_cache = false)
     {
         static $tree_instance;
-
+        $class_hash = '';
         if ($args){
             $class_hash = $class_name . "_" . md5(serialize($args));
         } elseif ($args === false && is_array($tree_instance)){
diff --git a/lib/classes/admission/AdmissionRule.class.php b/lib/classes/admission/AdmissionRule.class.php
index a1741574936177ad7f692900f64ae166757472d0..fe5e5bbf39a1312fbe18d0637c89fd1ed9ee00fa 100644
--- a/lib/classes/admission/AdmissionRule.class.php
+++ b/lib/classes/admission/AdmissionRule.class.php
@@ -84,7 +84,7 @@ abstract class AdmissionRule
     /**
      * Checks if we are in the rule validity time frame.
      *
-     * @return True if the rule is valid because the time frame applies,
+     * @return bool True if the rule is valid because the time frame applies,
      *         otherwise false.
      */
     public function checkTimeFrame()
@@ -115,7 +115,7 @@ abstract class AdmissionRule
     /**
      * Generate a new unique ID.
      *
-     * @param  String tableName
+     * @param  String $tableName
      */
     public function generateId($tableName)
     {
@@ -273,7 +273,7 @@ abstract class AdmissionRule
      * Hook that can be called when the seat distribution on the courseset
      * starts.
      *
-     * @param CourseSet The courseset this rule belongs to.
+     * @param CourseSet $courseset The courseset this rule belongs to.
      */
     public function beforeSeatDistribution($courseset)
     {
@@ -284,8 +284,8 @@ abstract class AdmissionRule
      * Does the current rule allow the given user to register as participant
      * in the given course?
      *
-     * @param  String userId
-     * @param  String courseId
+     * @param  String $userId
+     * @param  String $courseId
      * @return Array
      */
     public function ruleApplies($userId, $courseId)
@@ -303,23 +303,23 @@ abstract class AdmissionRule
      */
     public function setAllData($data)
     {
-        if ($data['start_date'] && !$data['start_time']) {
+        if (!empty($data['start_date']) && empty($data['start_time'])) {
             $data['start_time'] = strtotime($data['start_date']);
         }
-        if ($data['end_date'] && !$data['end_time']) {
+        if (!empty($data['end_date']) && empty($data['end_time'])) {
             $data['end_time'] = strtotime($data['end_date'] . ' 23:59:59');
         }
-        $this->message = $data['message'];
-        $this->startTime = $data['start_time'];
-        $this->endTime = $data['end_time'];
+        $this->message = $data['message'] ?? '';
+        $this->startTime = $data['start_time'] ?? null;
+        $this->endTime = $data['end_time'] ?? null;
         return $this;
     }
 
     /**
      * Sets a new end time for condition validity.
      *
-     * @param  Integer newEndTime
-     * @return UserFilter
+     * @param  Integer $newEndTime
+     * @return AdmissionRule
      */
     public function setEndTime($newEndTime)
     {
@@ -330,7 +330,7 @@ abstract class AdmissionRule
     /**
      * Sets a new message to show to users.
      *
-     * @param  String newMessage A new message text.
+     * @param  String $newMessage A new message text.
      * @return AdmissionRule This object
      */
     public function setMessage($newMessage)
@@ -342,8 +342,8 @@ abstract class AdmissionRule
     /**
      * Sets a new start time for condition validity.
      *
-     * @param  Integer newStartTime
-     * @return UserFilter
+     * @param  Integer $newStartTime
+     * @return AdmissionRule
      */
     public function setStartTime($newStartTime)
     {
@@ -372,13 +372,13 @@ abstract class AdmissionRule
      * Validates if the given request data is sufficient to configure this rule
      * (e.g. if required values are present).
      *
-     * @param  Array Request data
+     * @param  Array $data Request data
      * @return Array Error messages.
      */
     public function validate($data)
     {
         $errors = [];
-        if ($data['start_date'] && $data['end_date'] && strtotime($data['end_date']) < strtotime($data['start_date'])) {
+        if (!empty($data['start_date']) && !empty($data['end_date']) && strtotime($data['end_date']) < strtotime($data['start_date'])) {
             $errors[] = _('Das Enddatum darf nicht vor dem Startdatum liegen.');
         }
         return $errors;
@@ -389,7 +389,8 @@ abstract class AdmissionRule
      *
      * @return String
      */
-    public function __toString() {
+    public function __toString()
+    {
         return $this->toString();
     }
 
@@ -452,4 +453,4 @@ abstract class AdmissionRule
         $this->id = md5(uniqid(get_class($this)));
         $this->courseSetId = null;
     }
-} /* end of abstract class AdmissionRule */
+}
diff --git a/lib/classes/sidebar/SearchWidget.php b/lib/classes/sidebar/SearchWidget.php
index 40a2eb9e990b39a5acec9312ba151c1400fc0272..82aa26b8c9952b182e83b4a0365c0ce1feded0bb 100644
--- a/lib/classes/sidebar/SearchWidget.php
+++ b/lib/classes/sidebar/SearchWidget.php
@@ -147,11 +147,11 @@ class SearchWidget extends SidebarWidget
                 unset($reset_params[$needle['name']]);
 
                 // Search view in Wiki must be cleared.
-                if ($reset_params['view'] == 'search') {
+                if (isset($reset_params['view']) && $reset_params['view'] === 'search') {
                     $reset_params['view'] = 'show';
                 }
                 // Search view in Forum must be cleared.
-                if ($reset_params['backend'] == 'search') {
+                if (isset($reset_params['backend']) && $reset_params['backend'] === 'search') {
                     unset($reset_params['backend']);
                     $this->url = str_replace('index/search', 'index', $this->url);
                 }
diff --git a/lib/export/export_studipdata_func.inc.php b/lib/export/export_studipdata_func.inc.php
index 1139f214ea86df513489905d932f601836abfb7d..bc2b9906e7db395fb2c7a3db29f69a71c6d9d7f4 100644
--- a/lib/export/export_studipdata_func.inc.php
+++ b/lib/export/export_studipdata_func.inc.php
@@ -300,10 +300,11 @@ function export_inst($inst_id, $ex_sem_id = "all")
  */
 function export_sem($inst_id, $ex_sem_id = 'all')
 {
-    global $range_id, $xml_file, $o_mode, $xml_names_lecture, $xml_groupnames_lecture, $object_counter, $SEM_TYPE, $SEM_CLASS, $filter, $ex_sem, $ex_sem_class, $ex_person_details, $persons;
+    global $o_mode, $xml_names_lecture, $xml_groupnames_lecture, $object_counter, $SEM_TYPE, $SEM_CLASS, $filter, $ex_sem, $ex_sem_class, $ex_person_details, $persons;
 
     $ex_only_homeinst = Request::int('ex_only_homeinst', 0);
-
+    $addquery = '';
+    $addjoin = '';
     // Prepare user count statement
     $query           = "SELECT COUNT(user_id)
               FROM seminar_user
@@ -320,7 +321,9 @@ function export_sem($inst_id, $ex_sem_id = 'all')
               WHERE seminar_user.status = 'dozent' AND seminar_user.Seminar_id = ?
               ORDER BY seminar_user.position";
     $inner_statement = DBManager::get()->prepare($query);
-
+    $do_group = false;
+    $group = null;
+    $group_tab_zelle = null;
     // Prepare (build) and execute outmost query
     switch ($filter) {
         case "seminar":
@@ -476,7 +479,7 @@ function export_sem($inst_id, $ex_sem_id = 'all')
                 }
                 $data_object .= xml_close_tag($xml_groupnames_lecture['childgroup3a']);
             } elseif ($key === 'admission_turnout') {
-                $data_object .= xml_open_tag($val, $row['admission_type'] ? _('max.') : _('erw.'));
+                $data_object .= xml_open_tag($val, !empty($row['admission_type']) ? _('max.') : _('erw.'));
                 $data_object .= $row[$key];
                 $data_object .= xml_close_tag($val);
             } elseif ($key === 'teilnehmer_anzahl_aktuell') {
@@ -488,7 +491,7 @@ function export_sem($inst_id, $ex_sem_id = 'all')
             } elseif ($key === 'metadata_dates') {
                 $data_object .= xml_open_tag($xml_groupnames_lecture['childgroup1']);
                 $vorb        = vorbesprechung($row['seminar_id'], 'export');
-                if ($vorb != false) {
+                if ($vorb) {
                     $data_object .= xml_tag($val[0], $vorb);
                 }
                 if (($first_date = SeminarDB::getFirstDate($row['seminar_id']))
@@ -500,7 +503,7 @@ function export_sem($inst_id, $ex_sem_id = 'all')
                 $data_object .= xml_close_tag($xml_groupnames_lecture["childgroup1"]);
             } elseif ($key === 'Institut_id') {
                 $data_object .= xml_tag($val, $row['heimateinrichtung'], ['key' => $row[$key]]);
-            } elseif ($row[$key] !== '')
+            } elseif (isset($row[$key]) && $row[$key] !== '')
                 $data_object .= xml_tag($val, $row[$key]);
         }
 
diff --git a/lib/models/resources/ResourceRequest.class.php b/lib/models/resources/ResourceRequest.class.php
index 8b68fd09c11d5351c4e60808df33cfb232d205ba..c48784185febd482372a25bccf9a08e78cfd0163 100644
--- a/lib/models/resources/ResourceRequest.class.php
+++ b/lib/models/resources/ResourceRequest.class.php
@@ -1175,8 +1175,8 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             if ($with_range) {
                 $interval['range']       = 'CourseDate';
                 $interval['range_id']    = $this->termin_id;
-                $interval['booked_room'] = $this->date->room_booking->resource_id;
-                $interval['booking_id']  = $this->date->room_booking->id;
+                $interval['booked_room'] = $this->date->room_booking ? $this->date->room_booking->resource_id: null;
+                $interval['booking_id']  = $this->date->room_booking ? $this->date->room_booking->id : null;
             }
             return [$interval];
         } elseif ($this->metadate_id) {
@@ -1271,8 +1271,11 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
 
             if ($interval['range'] == 'CourseDate') {
                 $date = call_user_func([$interval['range'], 'find'], $interval['range_id']);
-                if ($room_obj = Room::find($date->room_booking->resource_id)) {
-                    $room = $room_obj->name;
+                if ($date->room_booking) {
+                    $room_obj = Room::find($date->room_booking->resource_id);
+                    if ($room_obj) {
+                        $room = $room_obj->name;
+                    }
                 }
             }
 
diff --git a/lib/plugins/engine/PluginManager.class.php b/lib/plugins/engine/PluginManager.class.php
index 7ced174ed380f614d476022b202f6a89b6ba8ac0..5873eb2d8127e9ab2496cee548fb89d1af8ce708 100644
--- a/lib/plugins/engine/PluginManager.class.php
+++ b/lib/plugins/engine/PluginManager.class.php
@@ -619,7 +619,7 @@ class PluginManager
      */
     public function getPlugins ($type, $context = null)
     {
-        $user = $GLOBALS['user']->id ?: 'nobody';
+        $user = $GLOBALS['user'] ? $GLOBALS['user']->id : 'nobody';
         $plugin_info = $this->getPluginInfos($type);
         $plugins = [];