$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[] = [
'icon' => 'fa-link',
];
}
+
return $return;
}
$info = CRM_Event_BAO_Event::getCompleteInfo($start, $type, $id, $end);
- if ($gCalendar) {
+ if ($gCalendar && count($info) === 1) {
return self::gCalRedirect($info);
}
$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('/(?<!\r)\n/', "\r\n", $calendar);
}
}
protected static function gCalRedirect(array $events) {
- if (count($events) != 1) {
- throw new CRM_Core_Exception(ts('Expected one %1, found %2', [1 => ts('Event'), 2 => count($events)]));
- }
-
$event = reset($events);
// Fetch the required Date TimeStamps