From 14efe428dac4ec824060d19c5e493a45f5ba4ed8 Mon Sep 17 00:00:00 2001 From: Moritz Strohm <strohm@data-quest.de> Date: Fri, 22 Mar 2024 13:54:57 +0000 Subject: [PATCH] group calendar: prevent multiple display of dates that are assigned to multiple personal calendars, fixes #3850 Closes #3850 Merge request studip/studip!2723 --- app/controllers/calendar/calendar.php | 29 +++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/app/controllers/calendar/calendar.php b/app/controllers/calendar/calendar.php index 6ae77ebb085..678909477b3 100644 --- a/app/controllers/calendar/calendar.php +++ b/app/controllers/calendar/calendar.php @@ -613,19 +613,40 @@ class Calendar_CalendarController extends AuthenticatedController $result = []; + uasort($users, function(User $a, User $b) { + $fullname_a = $a->getFullName('no_title'); + $fullname_b = $b->getFullName('no_title'); + if ($fullname_a == $fullname_b) { + return 0; + } + return ($fullname_a > $fullname_b) ? 1 : -1; + }); + foreach ($users as $user) { $events = CalendarDateAssignment::getEvents($begin, $end, $user->id); if ($events) { foreach ($events as $event) { $data = $event->toEventData(User::findCurrent()->id); - if (!$timeline_view) { - $data->title = $user->getFullName(); + if ($timeline_view) { + $result[] = $data->toFullcalendarEvent(); + } else { + //Prevent duplicate entries: + $data->title = $user->getFullName('no_title'); + if (array_key_exists($event->calendar_date_id, $result)) { + $result[$event->calendar_date_id]['title'] .= ', ' . $data->title; + } else { + $result[$event->calendar_date_id] = $data->toFullcalendarEvent(); + } } - $result[] = $data->toFullcalendarEvent(); } } } - $this->render_json($result); + if ($timeline_view) { + $this->render_json($result); + } else { + //Clean up the array keys: + $this->render_json(array_values($result)); + } } public function add_courses_action() -- GitLab