From ad01f9e53f6ce3993b181e59f0b428d6b9409095 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20Sch=C3=BCttl=C3=B6ffel?=
 <schuettloeffel@zqs.uni-hannover.de>
Date: Fri, 14 Jul 2023 06:31:26 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"Semester=20lassen=20sich=20=C3=BCber?=
 =?UTF-8?q?schneiden"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #1956

Merge request studip/studip!1899
---
 app/controllers/admin/semester.php | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/controllers/admin/semester.php b/app/controllers/admin/semester.php
index 815a21c1246..8ef9f21d097 100644
--- a/app/controllers/admin/semester.php
+++ b/app/controllers/admin/semester.php
@@ -197,11 +197,14 @@ class Admin_SemesterController extends AuthenticatedController
 
         // Validation, step 3: Check overlapping with other semesters
         if (empty($errors)) {
-            $all_semester = SimpleCollection::createFromArray(Semester::getAll())->findBy('id', $this->semester->id, '<>');
-            $collisions = $all_semester->findBy('beginn', [$this->semester->beginn, $this->semester->ende], '>=<=');
-            $collisions->merge($all_semester->findBy('ende', [$this->semester->beginn, $this->semester->ende], '>=<='));
-            if ($collisions->count()) {
-                $errors[] = sprintf(_('Der angegebene Zeitraum des Semester überschneidet sich mit einem anderen Semester (%s)'), join(', ', $collisions->pluck('name')));
+            $collisions_beginn = Semester::findByTimestamp($this->semester->beginn);
+            if ($collisions_beginn && $collisions_beginn->id !== $this->semester->id) {
+                $errors[] = sprintf(_('Der Beginn des Semester überschneidet sich mit einem anderen Semester (%s)'), $collisions_beginn->name);
+            }
+
+            $collisions_ende = Semester::findByTimestamp($this->semester->ende);
+            if ($collisions_ende && $collisions_ende->id !== $this->semester->id) {
+                $errors[] = sprintf(_('Das Ende des Semester überschneidet sich mit einem anderen Semester (%s)'), $collisions_ende->name);
             }
         }
 
-- 
GitLab