From 5d64137f1763831e917eda7b1386bc997d5a4065 Mon Sep 17 00:00:00 2001 From: Akhilesh Goud Date: Wed, 5 Aug 2026 16:40:32 +0530 Subject: [PATCH] Event Ordering Issue fix --- .../calendars/views/default-calendar-list.php | 102 ++++++++++-------- 1 file changed, 55 insertions(+), 47 deletions(-) diff --git a/includes/calendars/views/default-calendar-list.php b/includes/calendars/views/default-calendar-list.php index 01afc133..bb08c6b6 100644 --- a/includes/calendars/views/default-calendar-list.php +++ b/includes/calendars/views/default-calendar-list.php @@ -646,61 +646,69 @@ private function draw_list($timestamp, $id = 0) $count = 0; - foreach ($events as $day_events): - usort($day_events, [$this, 'cmp']); + // Flatten timestamp groups, then sort the whole day by start time. + // Calendar::set_events() orders buckets by end time for nav bounds; without this, + // an earlier-starting event that ends later (e.g. 1–6pm) can render after a + // later-starting event that ends sooner (e.g. 2–3pm) when multi-day expand is off. + $day_events = []; + foreach ($events as $event_group) { + foreach ($event_group as $event) { + $day_events[] = $event; + } + } + usort($day_events, [$this, 'cmp']); - foreach ($day_events as $event): - if ($event instanceof Event): - $event_classes = $event_visibility = ''; + foreach ($day_events as $event): + if ($event instanceof Event): + $event_classes = $event_visibility = ''; - $calendar_class = 'simcal-events-calendar-' . strval($event->calendar); - $calendar_classes[] = $calendar_class; + $calendar_class = 'simcal-events-calendar-' . strval($event->calendar); + $calendar_classes[] = $calendar_class; - $recurring = $event->recurrence ? 'simcal-event-recurring ' : ''; - $has_location = $event->venue ? 'simcal-event-has-location ' : ''; + $recurring = $event->recurrence ? 'simcal-event-recurring ' : ''; + $has_location = $event->venue ? 'simcal-event-has-location ' : ''; - $event_classes .= 'simcal-event ' . $recurring . $has_location . $calendar_class; + $event_classes .= 'simcal-event ' . $recurring . $has_location . $calendar_class; - // Toggle some events visibility if more than optional limit. - if ($calendar->events_limit > -1 && $count >= $calendar->events_limit): - $event_classes .= ' simcal-event-toggled'; - $event_visibility = ' display: none;'; - endif; + // Toggle some events visibility if more than optional limit. + if ($calendar->events_limit > -1 && $count >= $calendar->events_limit): + $event_classes .= ' simcal-event-toggled'; + $event_visibility = ' display: none;'; + endif; - $event_color = $event->get_color(); - if (!empty($event_color)) { - $side = is_rtl() ? 'right' : 'left'; - $event_color = ' border-' . $side . ': 4px solid ' . $event_color . '; padding-' . $side . ': 8px;'; - } + $event_color = $event->get_color(); + if (!empty($event_color)) { + $side = is_rtl() ? 'right' : 'left'; + $event_color = ' border-' . $side . ': 4px solid ' . $event_color . '; padding-' . $side . ': 8px;'; + } + + $list_events .= + "\t" . + '
  • ' . + "\n"; + $list_events .= + "\t\t" . '
    ' . $calendar->get_event_html($event) . '
    ' . "\n"; + $list_events .= "\t" . '
  • ' . "\n"; + + $count++; + + // Event falls within today. + if ($this->end <= $now && $this->start >= $now): + $day_classes .= ' simcal-today-has-events'; + endif; + $day_classes .= ' simcal-day-has-events simcal-day-has-' . strval($count) . '-events'; - $list_events .= - "\t" . - '
  • ' . - "\n"; - $list_events .= - "\t\t" . '
    ' . $calendar->get_event_html($event) . '
    ' . "\n"; - $list_events .= "\t" . '
  • ' . "\n"; - - $count++; - - // Event falls within today. - if ($this->end <= $now && $this->start >= $now): - $day_classes .= ' simcal-today-has-events'; - endif; - $day_classes .= ' simcal-day-has-events simcal-day-has-' . strval($count) . '-events'; - - if ($calendar_classes): - $day_classes .= ' ' . trim(implode(' ', array_unique($calendar_classes))); - endif; + if ($calendar_classes): + $day_classes .= ' ' . trim(implode(' ', array_unique($calendar_classes))); endif; - endforeach; + endif; endforeach; $list_events .= '' . "\n";