diff --git a/calendar/inc/class.calendar_boupdate.inc.php b/calendar/inc/class.calendar_boupdate.inc.php
index 1e14ac4a48..36b92d8fa8 100644
--- a/calendar/inc/class.calendar_boupdate.inc.php
+++ b/calendar/inc/class.calendar_boupdate.inc.php
@@ -287,7 +287,10 @@ class calendar_boupdate extends calendar_bo
* Check given event for conflicts and return them
*
* For recurring events we check a configurable fixed number of recurrences
- * or we try for a fixed maximum time.
+ * and for a fixed maximum time (default 3s).
+ *
+ * Conflict check skips past events/recurrences and is always limited by recurrence horizont,
+ * as it would only report non-recurring events after.
*
* @param array $event
* @param Api\DateTime& $checked_excluding =null time until which (excluding) recurrences have been checked
@@ -341,11 +344,14 @@ class calendar_boupdate extends calendar_bo
{
$startts = $date->format('ts');
+ // skip past events or recurrences
+ if ($startts+$duration < $this->now_su) continue;
+
// abort check if configured limits are exceeded
if ($event['recur_type'] &&
- ($checked++ > $max_checked && $max_checked > 0 || // maximum number of checked recurrences exceeded
+ (++$checked > $max_checked && $max_checked > 0 || // maximum number of checked recurrences exceeded
microtime(true) > $start+$max_check_time || // max check time exceeded
- $startts > $this->config['horizont'])) // we are behind horizont for which recurring events are rendered
+ $startts > $this->config['horizont'])) // we are behind horizon for which recurrences are rendered
{
if ($this->debug > 2 || $this->debug == 'conflicts')
{
diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang
index a8a64fabf0..2add2cf769 100644
--- a/calendar/lang/egw_de.lang
+++ b/calendar/lang/egw_de.lang
@@ -397,6 +397,7 @@ people holiday calendar de Feiertag
permission denied calendar de Zugriff verweigert
planner by category calendar de Planer nach Kategorien
planner by user calendar de Planer nach Benutzern
+please note: conflict check is never done in the past and always limited by above recurrence horizont. calendar de Bitte beachten: Konfliktprüfung findet nie in der Vergangenheit statt und ist immer durch den obigen Wiederholungs-Bereich beschränkt.
please note: you can configure the field assignments after you uploaded the file. calendar de Bitte beachten: Die Feldzuordnung kann NACH dem Hochladen der Datei konfiguriert werden.
preselected group for entering the planner calendar de Vorausgewählte Gruppe beim Planer-Aufruf
prevent deleting of entries admin de Das Löschen von Einträgen verhindern
@@ -413,6 +414,8 @@ receive summary of appointments calendar de Zusammenfassung der Termine erhalten
recover calendar de Wiederherstellen
recovered calendar de wieder hergestellt
recurrence calendar de Wiederholung
+recurrence enddate calendar de Enddatum der Wiederholung
+recurrences and conflict check calendar de Wiederholungen und Konfliktprüfung
recurring event calendar de Wiederholender Termin
reject calendar de Absagen
rejected calendar de Abgesagt
diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang
index f8a453145b..8cba9f41c7 100644
--- a/calendar/lang/egw_en.lang
+++ b/calendar/lang/egw_en.lang
@@ -397,6 +397,7 @@ people holiday calendar en People holiday
permission denied calendar en Permission denied.
planner by category calendar en Planner by category
planner by user calendar en Planner by user
+please note: conflict check is never done in the past and always limited by above recurrence horizont. calendar en Please note: conflict check is never done in the past and always limited by above recurrence horizont.
please note: you can configure the field assignments after you uploaded the file. calendar en Note: You can configure the field assignments AFTER you uploaded the file.
preselected group for entering the planner calendar en Pre-selected group for entering the planner
prevent deleting of entries admin en Prevent deleting of entries
@@ -414,6 +415,7 @@ recover calendar en Recover
recovered calendar en Recovered.
recurrence calendar en Recurrence
recurrence enddate calendar en Recurrence end date
+recurrences and conflict check calendar en Recurrences and conflict check
recurring event calendar en Recurring event
reject calendar en Reject
rejected calendar en Rejected
diff --git a/calendar/templates/default/app.css b/calendar/templates/default/app.css
index 13ee4451fb..93eacec2e6 100644
--- a/calendar/templates/default/app.css
+++ b/calendar/templates/default/app.css
@@ -128,6 +128,12 @@
background-color: white;
}
+/* Conflict display */
+div.calendar_conflicts {
+ max-height: 540px;
+ overflow-y: auto;
+}
+
/* Loader - hide sizing behind overlay*/
#egw-loadin-prompt_calendar::before {
opacity: 1;
diff --git a/calendar/templates/default/config.xet b/calendar/templates/default/config.xet
index ea1328a306..e9a6492020 100644
--- a/calendar/templates/default/config.xet
+++ b/calendar/templates/default/config.xet
@@ -84,7 +84,7 @@
-
+
@@ -94,10 +94,6 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/calendar/templates/default/conflicts.xet b/calendar/templates/default/conflicts.xet
index db5ba8c245..f43a9c4b1b 100644
--- a/calendar/templates/default/conflicts.xet
+++ b/calendar/templates/default/conflicts.xet
@@ -4,25 +4,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/calendar/templates/pixelegg/app.css b/calendar/templates/pixelegg/app.css
index e2cf695311..9e6a514444 100755
--- a/calendar/templates/pixelegg/app.css
+++ b/calendar/templates/pixelegg/app.css
@@ -138,6 +138,11 @@
padding: 2px;
background-color: white;
}
+/* Conflict display */
+div.calendar_conflicts {
+ max-height: 540px;
+ overflow-y: auto;
+}
/* Loader - hide sizing behind overlay*/
#egw-loadin-prompt_calendar::before {
opacity: 1;