From 42315a9ee91b3e4f928d9e818377308694a9f6f2 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 7 Apr 2022 15:58:52 +0000
Subject: [PATCH] Biest #827

---
 app/controllers/course/elearning.php          |  2 +-
 app/controllers/course/lti.php                |  4 +--
 app/views/course/elearning/edit.php           |  2 +-
 app/views/course/elearning/show.php           |  2 +-
 .../ExternModuleTemplateLectures.class.php    | 10 +++++--
 ...xternModuleTemplatePersondetails.class.php | 28 ++++++++++++++-----
 .../modules/views/ExternSemBrowse.class.php   |  5 ++--
 .../modules/views/persondetails.inc.php       | 20 ++++++++++---
 8 files changed, 52 insertions(+), 21 deletions(-)

diff --git a/app/controllers/course/elearning.php b/app/controllers/course/elearning.php
index 3b1055a154f..2b0061885b4 100644
--- a/app/controllers/course/elearning.php
+++ b/app/controllers/course/elearning.php
@@ -147,7 +147,7 @@ class Course_ElearningController extends AuthenticatedController
             URLHelper::getURL('dispatch.php/elearning/my_accounts'),
             Icon::create('person')
         );
-        if (count($this->course_output['courses']))
+        if ($this->course_output['courses'])
             foreach ($this->course_output['courses'] as $course) {
                 $widget->addLink(
                     sprintf(_('Direkt zum Kurs in %s'), $course['cms_name']),
diff --git a/app/controllers/course/lti.php b/app/controllers/course/lti.php
index 921a760f6fb..ab71e46a792 100644
--- a/app/controllers/course/lti.php
+++ b/app/controllers/course/lti.php
@@ -383,7 +383,7 @@ class Course_LtiController extends StudipController
                             'code' => 'studip.de',
                             'vendor_name' => ['default_value' => 'Stud.IP e.V.'],
                             'website' => 'https://www.studip.de/',
-                            'timestamp' => date(c)
+                            'timestamp' => date('c')
                         ]
                     ]
                 ],
@@ -391,7 +391,7 @@ class Course_LtiController extends StudipController
                     'service_owner_name' => ['default_value' => Config::get()->UNI_NAME_CLEAN],
                     'description' => ['default_value' => $GLOBALS['UNI_INFO']],
                     'support' => ['email' => $GLOBALS['UNI_CONTACT']],
-                    'timestamp' => date(c)
+                    'timestamp' => date('c')
                 ]
             ],
             'capability_offered' => [
diff --git a/app/views/course/elearning/edit.php b/app/views/course/elearning/edit.php
index ede07fd4dee..89e38d4b8b2 100644
--- a/app/views/course/elearning/edit.php
+++ b/app/views/course/elearning/edit.php
@@ -88,7 +88,7 @@
             </div>
             </form>
         <? endif ?>
-        <? if (count($existing_courses)) : ?>
+        <? if ($existing_courses) : ?>
             <form method="POST" action="<?=URLHelper::getLink() . "#anker"?>>
             <?=CSRFProtection::tokenTag()?>
             <?=ELearningUtils::getHeader(_("Verknüpfung mit einem bestehenden Kurs"))?>
diff --git a/app/views/course/elearning/show.php b/app/views/course/elearning/show.php
index b5ec2949508..296ac8d9351 100644
--- a/app/views/course/elearning/show.php
+++ b/app/views/course/elearning/show.php
@@ -28,7 +28,7 @@
                 <br>
             <? endforeach ?>
             <br>
-            <? if (count($course_output['courses'])) : ?>
+            <? if ($course_output['courses']) : ?>
                 <?=$course_output['text']?><br>
                 <? foreach ($course_output['courses'] as $course) : ?>
                     <a href="<?= $course['url'] ?>" target="_blank" rel="noopener noreferrer">
diff --git a/lib/extern/modules/ExternModuleTemplateLectures.class.php b/lib/extern/modules/ExternModuleTemplateLectures.class.php
index 46cf124dcb5..74d2b9b3c17 100644
--- a/lib/extern/modules/ExternModuleTemplateLectures.class.php
+++ b/lib/extern/modules/ExternModuleTemplateLectures.class.php
@@ -216,8 +216,14 @@ class ExternSemBrowseTemplate extends SemBrowse {
             }
         }
 
-        $switch_time = mktime(0, 0, 0, date("m"),
-                date("d") + 7 * $this->module->config->getValue("Main", "semswitch"), date("Y"));
+        // Is a semester switch defined?
+        $week_offset = $this->module->config->getValue("Main", "semswitch");
+        if (ctype_digit($week_offset)) {
+            $switch_time = strtotime("+{$week_offset} weeks 0:00:00");
+        } else {
+            $switch_time = strtotime('0:00:00');
+        }
+
         // get current semester
         $current_sem = get_sem_num($switch_time) + 1;
 
diff --git a/lib/extern/modules/ExternModuleTemplatePersondetails.class.php b/lib/extern/modules/ExternModuleTemplatePersondetails.class.php
index 6a96e66a7e6..34e91afc358 100644
--- a/lib/extern/modules/ExternModuleTemplatePersondetails.class.php
+++ b/lib/extern/modules/ExternModuleTemplatePersondetails.class.php
@@ -451,9 +451,11 @@ class ExternModuleTemplatePersondetails extends ExternModule {
 
         $content['PERSONDETAILS']['IMAGE-HREF'] = Avatar::getAvatar($this->user_id)->getURL(Avatar::NORMAL);
 
-        $gruppen = GetRoleNames(GetAllStatusgruppen($this->config->range_id, $row['user_id']));
-        for ($i = 0; $i < sizeof($gruppen); $i++) {
-            $content['PERSONDETAILS']['GROUPS'][$i]['GROUP'] = ExternModule::ExtHtmlReady($gruppen[$i]);
+        $gruppen = GetRoleNames(GetAllStatusgruppen($this->config->range_id, $row['user_id'])) ?? [];
+        if ($gruppen) {
+            for ($i = 0; $i < count($gruppen); $i++) {
+                $content['PERSONDETAILS']['GROUPS'][$i]['GROUP'] = ExternModule::ExtHtmlReady($gruppen[$i]);
+            }
         }
 
         $content['PERSONDETAILS']['INST-NAME'] = ExternModule::ExtHtmlReady($row['Name']);
@@ -653,9 +655,15 @@ class ExternModuleTemplatePersondetails extends ExternModule {
         if (is_null($semclass)) {
             $semclass = [1];
         }
-            if (in_array($type["class"], $semclass)) {
-            }
-        $switch_time = mktime(0, 0, 0, date("m"), date("d") + 7 * $this->config->getValue("PersondetailsLectures", "semswitch"), date("Y"));
+
+        // Is a semester switch defined?
+        $week_offset = $module->config->getValue('PersondetailsLectures', 'semswitch');
+        if (ctype_digit($week_offset)) {
+            $switch_time = strtotime("+{$week_offset} weeks 0:00:00");
+        } else {
+            $switch_time = strtotime('0:00:00');
+        }
+
         // get current semester
         $current_sem = get_sem_num($switch_time) + 1;
 
@@ -678,7 +686,13 @@ class ExternModuleTemplatePersondetails extends ExternModule {
                 }
         }
 
-        $last_sem = $current_sem + $this->config->getValue("PersondetailsLectures", "semrange") - 1;
+        $last_sem = $current_sem - 1;
+
+        $sem_offset = $this->config->getValue("PersondetailsLectures", "semrange");
+        if ($sem_offset && ctype_digit($sem_offset)) {
+            $last_sem += $sem_offset;
+        }
+
         if ($last_sem < $current_sem) {
             $last_sem = $current_sem;
         }
diff --git a/lib/extern/modules/views/ExternSemBrowse.class.php b/lib/extern/modules/views/ExternSemBrowse.class.php
index 794b631c8c8..d0e14e0ae3d 100644
--- a/lib/extern/modules/views/ExternSemBrowse.class.php
+++ b/lib/extern/modules/views/ExternSemBrowse.class.php
@@ -132,8 +132,7 @@ class ExternSemBrowse extends SemBrowse {
                 $the_tree->buildIndex();
                 $selected_ranges = array_merge([$stid], $the_tree->getKidsKids($stid));
             }
-            if (!$this->config->getValue('SelectSubjectAreas', 'selectallsubjectareas')
-                    && count($selected_ranges)) {
+            if (!$this->config->getValue('SelectSubjectAreas', 'selectallsubjectareas') && $selected_ranges) {
                 if ($this->config->getValue('SelectSubjectAreas', 'reverseselection')) {
                     $sem_range_query =  "AND seminar_sem_tree.sem_tree_id NOT IN ('".implode("','", $selected_ranges)."')";
                 } else {
@@ -149,7 +148,7 @@ class ExternSemBrowse extends SemBrowse {
                 $selected_semtypes = [Request::get('semstatus')];
             }
             $sem_types_array = [];
-            if (count($selected_semtypes)) {
+            if ($selected_semtypes) {
                 foreach ($selected_semtypes as $i => $active) {
                     if ($active == '1') {
                         $sem_types_array[] = $i + 1;
diff --git a/lib/extern/modules/views/persondetails.inc.php b/lib/extern/modules/views/persondetails.inc.php
index 8dc27890b30..0889e1b0ab4 100644
--- a/lib/extern/modules/views/persondetails.inc.php
+++ b/lib/extern/modules/views/persondetails.inc.php
@@ -361,8 +361,14 @@ function lehre (&$module, $row, $alias_content, $text_div, $text_div_end)
         }
     }
 
-    $switch_time = mktime(0, 0, 0, date('m'),
-            date('d') + 7 * $module->config->getValue('PersondetailsLectures', 'semswitch'), date('Y'));
+    // Is a semester switch defined?
+    $week_offset = $module->config->getValue('PersondetailsLectures', 'semswitch');
+    if (ctype_digit($week_offset)) {
+        $switch_time = strtotime("+{$week_offset} weeks 0:00:00");
+    } else {
+        $switch_time = strtotime('0:00:00');
+    }
+
     // get current semester
     $current_sem = get_sem_num($switch_time) + 1;
 
@@ -385,7 +391,13 @@ function lehre (&$module, $row, $alias_content, $text_div, $text_div_end)
             }
     }
 
-    $last_sem = $current_sem + $module->config->getValue('PersondetailsLectures', 'semrange') - 1;
+    $last_sem = $current_sem - 1;
+
+    $sem_offset = $module->config->getValue('PersondetailsLectures', 'semrange');
+    if ($sem_offset && ctype_digit($sem_offset)) {
+        $last_sem += $sem_offset;
+    }
+
     if ($last_sem < $current_sem) {
         $last_sem = $current_sem;
     }
@@ -663,7 +675,7 @@ function kontakt ($module, $row, $separate = FALSE) {
                 break;
             case 'Home' :
                 if (($separate || !$module->config->getValue('Contact', 'separatelinks')) &&
-                       true || Visibility::verify('homepage', $row['user_id'])) {
+                       Visibility::verify('homepage', $row['user_id'])) {
                     $out .= "<tr$attr_tr>";
                     $out .= "<td$attr_td>";
                     $out .= "<font$attr_fonttitle>";
-- 
GitLab