From aa9d1cd3f34173a3c3dc7207674c1a66d1fbd1fe Mon Sep 17 00:00:00 2001 From: Hendrik Grahl Date: Tue, 3 Dec 2019 21:52:03 +0000 Subject: [PATCH] Fix date_recur. --- src/Plugin/views/style/FullCalendar.php | 58 ++++++++----------------- 1 file changed, 19 insertions(+), 39 deletions(-) diff --git a/src/Plugin/views/style/FullCalendar.php b/src/Plugin/views/style/FullCalendar.php index 03f850c..b179cb5 100644 --- a/src/Plugin/views/style/FullCalendar.php +++ b/src/Plugin/views/style/FullCalendar.php @@ -60,7 +60,7 @@ class FullCalendar extends StylePluginBase { protected $pluginBag; /** - * @var \Drupal\Core\Datetime\DateFormatter $dateFormatter + * @var \Drupal\Core\Datetime\DateFormatter * The date formatter service. */ protected $dateFormatter; @@ -72,6 +72,13 @@ class FullCalendar extends StylePluginBase { */ protected $messenger; + /** + * Events + * + * @var array + */ + protected $events = []; + /** * {@inheritdoc} */ @@ -369,37 +376,25 @@ class FullCalendar extends StylePluginBase { ->getId(); } - $settings['fullcalendar']['_events'] = $this->prepareEvents(); + $this->prepareEvents(); + $settings['fullcalendar']['_events'] = $this->events; return $settings; } /** * Prepare events for calendar. - * - * @return array - * Array of events ready for fullcalendar. - * - * @throws \Exception */ - protected function prepareEvents() { - $events = []; + protected function prepareEvents(): void { foreach ($this->view->result as $delta => $row) { /** @var \Drupal\Core\Entity\EntityInterface $entity */ $entity = $row->_entity; - // Collect all fields for the customize options. - $fields = []; // Collect only date fields. $date_fields = []; - // Collect prepared events. - $event = []; - /* @var \Drupal\views\Plugin\views\field\Field $field */ foreach ($this->view->field as $field_name => $field) { - $fields[$field_name] = $this->getField($delta, $field_name); - if (fullcalendar_field_is_date($field)) { $field_storage_definitions = $this->fieldManager->getFieldStorageDefinitions($field->definition['entity_type']); $field_definition = $field_storage_definitions[$field->definition['field_name']]; @@ -421,7 +416,7 @@ class FullCalendar extends StylePluginBase { // If there are no date fields (gcal only), return. if (empty($date_fields)) { - return $events; + return; } foreach ($date_fields as $field) { @@ -436,7 +431,7 @@ class FullCalendar extends StylePluginBase { $date_range = $this->getExposedDates($field['field_name']); // "date_recur" field (with recurring date). - if ($field_definition->getType() == 'date_recur') { + if ($field_definition->getType() === 'date_recur') { /** @var \Drupal\date_recur\Plugin\Field\FieldType\DateRecurFieldItemList $field_items */ $field_items = $row->_entity->{$field['field_name']}; @@ -444,23 +439,14 @@ class FullCalendar extends StylePluginBase { /** @var \Drupal\date_recur\Plugin\Field\FieldType\DateRecurItem $item */ foreach ($field_items as $index => $item) { - // Get DateRecur Occurrence Handler. - $occurrenceHandler = $item->getOccurrenceHandler(); - - // If this field is a DateRecur field. - if ($occurrenceHandler->isRecurring()) { - // Get a list of occurrences for display. - $occurrences = $occurrenceHandler->getOccurrencesForDisplay($date_range['min'], $date_range['max']); + if ($item->isRecurring()) { + /** @var \Drupal\date_recur\DateRange[] $occurrences */ + // TODO: Fix hardcoded limit. + $occurrences = $item->getHelper()->getOccurrences(NULL, NULL, 100); foreach ($occurrences as $occurrence) { - /** @var \DateTime $start */ - $start = $occurrence['value']; - /** @var \DateTime $end */ - $end = $occurrence['end_value']; - - $event = $this->prepareEvent($entity, $field, $index, $start, $end); + $this->events[] = $this->prepareEvent($entity, $field, $index, $occurrence->getStart(), $occurrence->getEnd()); } - $isRecurring = TRUE; } } @@ -505,16 +491,10 @@ class FullCalendar extends StylePluginBase { $event_start->setTimestamp($event_start->getTimestamp() + $event_start->getOffset()); $event_end->setTimestamp($event_end->getTimestamp() + $event_end->getOffset()); - $event = $this->prepareEvent($entity, $field, $index, $event_start, $event_end); + $this->events[] = $this->prepareEvent($entity, $field, $index, $event_start, $event_end); } } - - if (!empty($event)) { - $events[$delta] = $event; - } } - - return $events; } /** -- 2.17.1