From 4d98ebd6c7f57d8cc10599c74f2c8c061e907d09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de>
Date: Mon, 6 May 2024 11:40:39 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20#3989=20"Filter=20"Vorletztes=20und?=
 =?UTF-8?q?=20aktuelles=20Semester"=20f=C3=BCr=20meine=20Veranstaltungen"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #3989

Merge request studip/studip!2838
---
 app/controllers/my_courses.php |  6 +++++-
 lib/classes/MyRealmModel.php   | 22 ++++++++++++++++------
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/app/controllers/my_courses.php b/app/controllers/my_courses.php
index 9e8e0b634b6..8205c12c743 100644
--- a/app/controllers/my_courses.php
+++ b/app/controllers/my_courses.php
@@ -344,7 +344,10 @@ class MyCoursesController extends AuthenticatedController
         $semesters   = MyRealmModel::getSelectedSemesters($sem);
         $min_sem_key = min($semesters);
         $max_sem_key = max($semesters);
-        $courses     = MyRealmModel::getCourses($min_sem_key, $max_sem_key, compact('deputies_enabled'));
+        $courses     = MyRealmModel::getCourses($min_sem_key, $max_sem_key, [
+            'deputies_enabled' => $deputies_enabled,
+            'exactly'          => $semesters,
+        ]);
         foreach ($courses as $index => $course) {
             MyRealmModel::setObjectVisits($course, $GLOBALS['user']->id, $timestamp);
         }
@@ -1168,6 +1171,7 @@ class MyCoursesController extends AuthenticatedController
             'future'      => _('Aktuelles und nächstes Semester'),
             'last'        => _('Aktuelles und letztes Semester'),
             'lastandnext' => _('Letztes, aktuelles, nächstes Semester'),
+            'lastbutone'  => _('Aktuelles und vorletztes Semester'),
         ];
 
         if (Config::get()->MY_COURSES_ENABLE_ALL_SEMESTERS) {
diff --git a/lib/classes/MyRealmModel.php b/lib/classes/MyRealmModel.php
index 0279fe54ab8..94bb30d8109 100644
--- a/lib/classes/MyRealmModel.php
+++ b/lib/classes/MyRealmModel.php
@@ -163,16 +163,22 @@ class MyRealmModel
     public static function getCourses($min_sem_key, $max_sem_key, $params = [])
     {
         // init
-        $order_by          = $params['order_by'] ?? null;
-        $order             = $params['order'] ?? null;
-        $deputies_enabled  = $params['deputies_enabled'];
+        $order_by         = $params['order_by'] ?? null;
+        $order            = $params['order'] ?? null;
+        $deputies_enabled = $params['deputies_enabled'];
 
         $sem_data = Semester::getAllAsArray();
 
         $semester_ids = [];
         if (is_numeric($min_sem_key) && is_numeric($max_sem_key)) {
             foreach ($sem_data as $index => $data) {
-                if ($index >= $min_sem_key && $index <= $max_sem_key) {
+                if (
+                    $index >= $min_sem_key && $index <= $max_sem_key
+                    && (
+                        !isset($params['exactly'])
+                        || in_array($index, $params['exactly'])
+                    )
+                ) {
                     $semester_ids[] = $data['semester_id'] ?? '';
                 }
             }
@@ -244,7 +250,7 @@ class MyRealmModel
         }
 
         // Get the needed semester
-        if (!in_array($sem, ['', 'current', 'future', 'last', 'lastandnext'])) {
+        if (!in_array($sem, ['', 'current', 'future', 'last', 'lastandnext','lastbutone'])) {
             $semesters[] = Semester::getIndexById($sem);
         } else {
             switch ($sem) {
@@ -264,6 +270,10 @@ class MyRealmModel
                     $semesters[] = $current_sem;
                     $semesters[] = $max_sem;
                     break;
+                case 'lastbutone':
+                    $semesters[] = $current_sem - 2;
+                    $semesters[] = $current_sem;
+                    break;
                 default:
                     $semesters = array_keys($sem_data);
                     break;
@@ -287,7 +297,7 @@ class MyRealmModel
         $min_sem_key = min($semesters);
         $max_sem_key = max($semesters);
         $group_field = $params['group_field'];
-        $courses     = self::getCourses($min_sem_key, $max_sem_key, $params);
+        $courses     = self::getCourses($min_sem_key, $max_sem_key, $params + ['exactly' => $semesters]);
         $show_semester_name = UserConfig::get($GLOBALS['user']->id)->SHOWSEM_ENABLE;
         $sem_courses = [];
 
-- 
GitLab