From 6b3ca21b124871ca44af1584214a6eb5e907a06f Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Wed, 11 May 2022 08:38:14 +0000
Subject: [PATCH] TIC #842

Merge request studip/studip!491
---
 lib/classes/ProfileModel.php  | 14 +++++++++++++-
 lib/models/Semester.class.php | 21 +++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/lib/classes/ProfileModel.php b/lib/classes/ProfileModel.php
index 152bb195005..663d8ab3ff2 100644
--- a/lib/classes/ProfileModel.php
+++ b/lib/classes/ProfileModel.php
@@ -96,7 +96,19 @@ class ProfileModel
     public function getDozentSeminars()
     {
         $courses = [];
-        $semester = array_reverse(Semester::getAll());
+        $semester = [];
+        $next_semester = Semester::findNext();
+        $current_semester = Semester::findCurrent();
+        $previous_semester = Semester::findPrevious();
+        if ($next_semester) {
+            $semester[$next_semester->id] = $next_semester;
+        }
+        if ($current_semester) {
+            $semester[$current_semester->id] = $current_semester;
+        }
+        if ($previous_semester) {
+            $semester[$previous_semester->id] = $previous_semester;
+        }
         $field = 'name';
         if (Config::get()->IMPORTANT_SEMNUMBER) {
             $field = "veranstaltungsnummer,{$field}";
diff --git a/lib/models/Semester.class.php b/lib/models/Semester.class.php
index 2652de83784..a5d81c7ca85 100644
--- a/lib/models/Semester.class.php
+++ b/lib/models/Semester.class.php
@@ -116,6 +116,27 @@ class Semester extends SimpleORMap
         return null;
     }
 
+    /**
+     * Returns the previous semester for a semester specified by a timestamp.
+     * If no timestamp is specified, the previous semester of the current semester is returned.
+     *
+     * @param integer|null $timestamp The timestamp of the semester whose predecessor
+     *     shall be found. Defaults to null.
+     *
+     * @return null|Semester A previous semester to the specified one or null, if no such semester
+     *     could be found.
+     */
+    public static function findPrevious($timestamp = null)
+    {
+        $timestamp = $timestamp ?: time();
+        $semester = self::findByTimestamp($timestamp);
+        if ($semester) {
+            return self::findByTimestamp((int)$semester->beginn - 1);
+        }
+
+        return null;
+    }
+
     /**
      * returns current Semester
      */
-- 
GitLab