From 991ae5c50978b250615c31a651ca90cb3079f1e8 Mon Sep 17 00:00:00 2001 From: David Geisel Date: Thu, 29 Sep 2022 19:36:26 +0200 Subject: [PATCH] fix error for ended events in CRM_Event_ICalendar --- CRM/Event/BAO/Event.php | 28 ++++++++++++++++------------ CRM/Event/ICalendar.php | 34 ++++++++++++++++++---------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/CRM/Event/BAO/Event.php b/CRM/Event/BAO/Event.php index 9f12eeff0d..0a9e170514 100644 --- a/CRM/Event/BAO/Event.php +++ b/CRM/Event/BAO/Event.php @@ -2423,20 +2423,23 @@ WHERE ce.loc_block_id = $locBlockId"; $query = [ 'reset' => 1, ]; + if ($eventId) { $query['id'] = $eventId; - } - $return[] = [ - 'url' => CRM_Utils_System::url('civicrm/event/ical', $query, TRUE, NULL, TRUE), - 'text' => $eventId ? ts('Download iCalendar entry for this event.') : ts('Download iCalendar entry for current and future public events.'), - 'icon' => 'fa-download', - ]; - if ($eventId) { - $return[] = [ - 'url' => CRM_Utils_System::url('civicrm/event/ical', ['gCalendar' => 1] + $query, TRUE, NULL, TRUE), - 'text' => ts('Add event to Google Calendar'), - 'icon' => 'fa-share', - ]; + $endDate = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $eventId, 'end_date'); + if (empty($endDate) || strtotime($endDate) >= time()) { + $return[] = [ + 'url' => CRM_Utils_System::url('civicrm/event/ical', $query, TRUE, NULL, TRUE), + 'text' => ts('Download iCalendar entry for this event.'), + 'icon' => 'fa-download', + ]; + + $return[] = [ + 'url' => CRM_Utils_System::url('civicrm/event/ical', ['gCalendar' => 1] + $query, TRUE, NULL, TRUE), + 'text' => ts('Add event to Google Calendar'), + 'icon' => 'fa-share', + ]; + } } else { $return[] = [ @@ -2445,6 +2448,7 @@ WHERE ce.loc_block_id = $locBlockId"; 'icon' => 'fa-link', ]; } + return $return; } diff --git a/CRM/Event/ICalendar.php b/CRM/Event/ICalendar.php index faf2889b17..cb1faa778d 100644 --- a/CRM/Event/ICalendar.php +++ b/CRM/Event/ICalendar.php @@ -46,7 +46,7 @@ class CRM_Event_ICalendar { $info = CRM_Event_BAO_Event::getCompleteInfo($start, $type, $id, $end); - if ($gCalendar) { + if ($gCalendar && count($info) === 1) { return self::gCalRedirect($info); } @@ -69,17 +69,23 @@ class CRM_Event_ICalendar { $calendar = $template->fetch('CRM/Core/Calendar/GData.tpl'); } else { - $date_min = min( - array_map(function ($event) { - return strtotime($event['start_date']); - }, $info) - ); - $date_max = max( - array_map(function ($event) { - return strtotime($event['end_date'] ?? $event['start_date']); - }, $info) - ); - $template->assign('timezones', CRM_Utils_ICalendar::generate_timezones($timezones, $date_min, $date_max)); + if (count($info) > 0) { + $date_min = min( + array_map(function ($event) { + return strtotime($event['start_date']); + }, $info) + ); + $date_max = max( + array_map(function ($event) { + return strtotime($event['end_date'] ?? $event['start_date']); + }, $info) + ); + $template->assign('timezones', CRM_Utils_ICalendar::generate_timezones($timezones, $date_min, $date_max)); + } + else { + $template->assign('timezones', NULL); + } + $calendar = $template->fetch('CRM/Core/Calendar/ICal.tpl'); $calendar = preg_replace('/(? ts('Event'), 2 => count($events)])); - } - $event = reset($events); // Fetch the required Date TimeStamps -- 2.25.1