From 9b30b87617cfe7fc8de837ca4095295e2e79ec3c Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Wed, 13 Nov 2024 11:34:36 +0000
Subject: [PATCH] calendar/date/delete: fixed check for figuring out if a date
 shall be deleted, fixes #4291 #4726

Closes #4291 and #4726

Merge request studip/studip!3638
---
 app/controllers/calendar/date.php | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/controllers/calendar/date.php b/app/controllers/calendar/date.php
index c812cb1ae82..a3a80f14673 100644
--- a/app/controllers/calendar/date.php
+++ b/app/controllers/calendar/date.php
@@ -792,7 +792,11 @@ class Calendar_DateController extends AuthenticatedController
             );
             $this->render_nothing();
         }
-        $this->date_has_repetitions = !empty($this->date->repetition_type);
+        if (!$this->date->isWritable($GLOBALS['user']->id)) {
+            throw new AccessDeniedException(_('Sie sind nicht berechtigt, diesen Termin zu löschen.'));
+        }
+
+        $this->date_has_repetitions = $this->date->repetition_type !== CalendarDate::REPETITION_SINGLE;
         $this->selected_date = null;
         if ($this->date_has_repetitions) {
             $this->selected_date = Request::getDateTime('selected_date');
@@ -835,7 +839,8 @@ class Calendar_DateController extends AuthenticatedController
                     $delete_whole_date = true;
                 }
             } else {
-                $delete_whole_date = $this->multiple_calendar_handling === 'delete_all';
+                $delete_whole_date = !$this->date_is_in_multiple_calendars
+                    || $this->multiple_calendar_handling === 'delete_all';
             }
             if ($delete_whole_date) {
                 if ($this->date->delete()) {
-- 
GitLab