From 801a4916a263bed0aeecb6c62e8a25138ee5612a Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Mon, 27 May 2024 11:52:23 +0000
Subject: [PATCH] use current date when creating calendar dates, fixes #3920

Closes #3920

Merge request studip/studip!3043
---
 app/controllers/calendar/calendar.php            | 4 ++--
 app/controllers/calendar/date.php                | 8 ++++++++
 resources/assets/javascripts/lib/fullcalendar.js | 4 ++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/app/controllers/calendar/calendar.php b/app/controllers/calendar/calendar.php
index 89421cb3e99..fa33e2e5fad 100644
--- a/app/controllers/calendar/calendar.php
+++ b/app/controllers/calendar/calendar.php
@@ -39,7 +39,7 @@ class Calendar_CalendarController extends AuthenticatedController
                 _('Termin anlegen'),
                 $this->url_for('calendar/date/add', $params),
                 Icon::create('add'),
-                ['data-dialog' => 'size=auto']
+                ['data-dialog' => 'size=auto', 'class' => 'calendar-action']
             );
         }
 
@@ -446,7 +446,7 @@ class Calendar_CalendarController extends AuthenticatedController
             _('Termin anlegen'),
             $this->url_for('calendar/date/add/course_' . $course->id),
             Icon::create('add'),
-            ['data-dialog' => 'size=default']
+            ['data-dialog' => 'size=default', 'class' => 'calendar-action']
         );
         $actions->addLink(
             _('Drucken'),
diff --git a/app/controllers/calendar/date.php b/app/controllers/calendar/date.php
index eda171b94a8..cb61a7e7ae7 100644
--- a/app/controllers/calendar/date.php
+++ b/app/controllers/calendar/date.php
@@ -232,6 +232,14 @@ class Calendar_DateController extends AuthenticatedController
             $this->date->repetition_end = $this->date->end;
         } else {
             $time = new DateTime();
+            if (Request::submitted('timestamp')) {
+                $time->setTimestamp(Request::int('timestamp'));
+            } elseif (Request::submitted('defaultDate')) {
+                $date_parts = explode('-', Request::get('defaultDate'));
+                if (count($date_parts) === 3) {
+                    $time->setDate($date_parts[0], $date_parts[1], $date_parts[2]);
+                }
+            }
             $time = $time->add(new DateInterval('PT1H'));
             $time->setTime(intval($time->format('H')), 0, 0);
             $this->date->begin = $time->getTimestamp();
diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js
index 49274f47f45..b001ab4c4cb 100644
--- a/resources/assets/javascripts/lib/fullcalendar.js
+++ b/resources/assets/javascripts/lib/fullcalendar.js
@@ -731,9 +731,9 @@ class Fullcalendar
             //Get the timestamp:
             let timestamp = changedMoment.getTime() / 1000;
 
-            jQuery('a.resource-bookings-actions').each(function () {
+            jQuery('a.resource-bookings-actions, a.calendar-action').each(function () {
                 const url = new URL(this.href);
-                url.searchParams.set('timestamp', timestamp)
+                url.searchParams.set('timestamp', timestamp.toString())
                 url.searchParams.set('defaultDate', changed_date)
                 this.href = url.toString();
             });
-- 
GitLab