Fix Event iCalendar regression
authorJon Goldberg <jon@megaphonetech.com>
Mon, 18 Dec 2023 16:16:04 +0000 (11:16 -0500)
committerTim Otten <totten@civicrm.org>
Mon, 18 Dec 2023 23:48:40 +0000 (15:48 -0800)
CRM/Event/ICalendar.php
CRM/Utils/ICalendar.php

index 0d16cfe2ad263fa45a4af339c8f26c20cdf0a2e9..7947b7aaf89eee1668cd839c324f887a3b215673 100644 (file)
@@ -54,10 +54,7 @@ class CRM_Event_ICalendar {
     $config = CRM_Core_Config::singleton();
 
     $template->assign('events', $info);
-
-    $timezones = [@date_default_timezone_get()];
-
-    $template->assign('timezone', $timezones[0]);
+    $template->assign('timezone', date_default_timezone_get());
 
     // Send data to the correct template for formatting (iCal vs. gData)
     if ($rss) {
index fddefbfec849864ad79d16806cc5ca4f27ce63d1..01db70f0a526f221bb6708f93acba7dd2a8527e9 100644 (file)
@@ -160,50 +160,42 @@ class CRM_Utils_ICalendar {
   }
 
   /**
-   * @param array $timezones - Timezone strings
    * @param $date_min
    * @param $date_max
    *
    * @return array
    */
-  public static function generate_timezones(array $timezones, $date_min, $date_max) {
-    if (empty($timezones)) {
-      return [];
-    }
+  public static function generate_timezones($date_min, $date_max) {
+    $tzstr = date_default_timezone_get();
+    $timezone = new DateTimeZone($tzstr);
 
-    $tz_items = [];
+    $transitions = $timezone->getTransitions($date_min, $date_max);
 
-    foreach ($timezones as $tzstr) {
-      $timezone = new DateTimeZone($tzstr);
+    if (count($transitions) === 1) {
+      $transitions[] = array_values($transitions)[0];
+    }
 
-      $transitions = $timezone->getTransitions($date_min, $date_max);
+    $item = [
+      'id' => $timezone->getName(),
+      'transitions' => [],
+    ];
 
-      if (count($transitions) === 1) {
-        $transitions[] = array_values($transitions)[0];
-      }
+    $last_transition = array_shift($transitions);
 
-      $item = [
-        'id' => $timezone->getName(),
-        'transitions' => [],
+    foreach ($transitions as $transition) {
+      $item['transitions'][] = [
+        'type' => $transition['isdst'] ? 'DAYLIGHT' : 'STANDARD',
+        'offset_from' => self::format_tz_offset($last_transition['offset']),
+        'offset_to' => self::format_tz_offset($transition['offset']),
+        'abbr' => $transition['abbr'],
+        'dtstart' => date_create($transition['time'], $timezone)->format("Ymd\THis"),
       ];
 
-      $last_transition = array_shift($transitions);
-
-      foreach ($transitions as $transition) {
-        $item['transitions'][] = [
-          'type' => $transition['isdst'] ? 'DAYLIGHT' : 'STANDARD',
-          'offset_from' => self::format_tz_offset($last_transition['offset']),
-          'offset_to' => self::format_tz_offset($transition['offset']),
-          'abbr' => $transition['abbr'],
-          'dtstart' => date_create($transition['time'], $timezone)->format("Ymd\THis"),
-        ];
-
-        $last_transition = $transition;
-      }
-
-      $tz_items[] = $item;
+      $last_transition = $transition;
     }
 
+    $tz_items[] = $item;
+
     return $tz_items;
   }
 
@@ -245,7 +237,7 @@ class CRM_Utils_ICalendar {
           return strtotime($event['end_date'] ?? $event['start_date']);
         }, $info)
       );
-      $template->assign('timezones', CRM_Utils_ICalendar::generate_timezones($timezones, $date_min, $date_max));
+      $template->assign('timezones', CRM_Utils_ICalendar::generate_timezones($date_min, $date_max));
     }
     else {
       $template->assign('timezones', NULL);