From 9b34c3f4fd9edee324c6757e4478e45cb4a056d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Sztreha?= Date: Thu, 11 Mar 2021 15:12:57 +0100 Subject: [PATCH 1/3] Fix when using date recur field type --- src/Plugin/views/style/Ical.php | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Plugin/views/style/Ical.php b/src/Plugin/views/style/Ical.php index 479ab7d..1316385 100644 --- a/src/Plugin/views/style/Ical.php +++ b/src/Plugin/views/style/Ical.php @@ -5,6 +5,7 @@ use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\date_recur\Plugin\views\field\DateRecurDate; use Drupal\views\Plugin\views\style\StylePluginBase; use Drupal\Core\Url; use Drupal\views_ical\ViewsIcalHelperInterface; @@ -150,11 +151,7 @@ public function render() { trigger_error('Drupal\views_ical\Plugin\views\style\Ical: Missing row plugin', E_WARNING); return []; } - /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ - $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->view->field[$this->options['date_field']]->definition['entity_type']); - $date_field_definition = $field_storage_definitions[$this->view->field[$this->options['date_field']]->definition['field_name']]; - /** @var string $date_field_type */ - $date_field_type = $date_field_definition->getType(); + $date_field_type = $this->getDateFieldType(); $events = []; $user_timezone = \drupal_get_user_timezone(); @@ -190,4 +187,24 @@ public function render() { return $build; } + /** + * Get Date field type value. + * + * @return string + * Date field type. + */ + protected function getDateFieldType(): string { + $date_field_name = $this->options['date_field']; + $view_date_field = $this->view->field[$date_field_name]; + $entity_type = $view_date_field->definition['entity_type']; + if ($view_date_field instanceof DateRecurDate) { + return 'date_recur'; + } + /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ + $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type); + $date_field_definition = $field_storage_definitions[$date_field_name]; + /** @var string $date_field_type */ + return $date_field_definition->getType(); + } + } From 4a7c962de193b98ac0039cde6f77310945994fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Sztreha?= Date: Wed, 28 Apr 2021 11:08:01 +0200 Subject: [PATCH 2/3] Revert "Fix when using date recur field type" This reverts commit 9b34c3f4fd9edee324c6757e4478e45cb4a056d3. --- src/Plugin/views/style/Ical.php | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/src/Plugin/views/style/Ical.php b/src/Plugin/views/style/Ical.php index 1316385..479ab7d 100644 --- a/src/Plugin/views/style/Ical.php +++ b/src/Plugin/views/style/Ical.php @@ -5,7 +5,6 @@ use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\date_recur\Plugin\views\field\DateRecurDate; use Drupal\views\Plugin\views\style\StylePluginBase; use Drupal\Core\Url; use Drupal\views_ical\ViewsIcalHelperInterface; @@ -151,7 +150,11 @@ public function render() { trigger_error('Drupal\views_ical\Plugin\views\style\Ical: Missing row plugin', E_WARNING); return []; } - $date_field_type = $this->getDateFieldType(); + /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ + $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->view->field[$this->options['date_field']]->definition['entity_type']); + $date_field_definition = $field_storage_definitions[$this->view->field[$this->options['date_field']]->definition['field_name']]; + /** @var string $date_field_type */ + $date_field_type = $date_field_definition->getType(); $events = []; $user_timezone = \drupal_get_user_timezone(); @@ -187,24 +190,4 @@ public function render() { return $build; } - /** - * Get Date field type value. - * - * @return string - * Date field type. - */ - protected function getDateFieldType(): string { - $date_field_name = $this->options['date_field']; - $view_date_field = $this->view->field[$date_field_name]; - $entity_type = $view_date_field->definition['entity_type']; - if ($view_date_field instanceof DateRecurDate) { - return 'date_recur'; - } - /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ - $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type); - $date_field_definition = $field_storage_definitions[$date_field_name]; - /** @var string $date_field_type */ - return $date_field_definition->getType(); - } - } From 0605cdf08c5d97aff6ddcd92326e72cb9151d7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Sztreha?= Date: Wed, 28 Apr 2021 11:08:20 +0200 Subject: [PATCH 3/3] Date recur fix --- src/Plugin/views/style/Ical.php | 59 ++++++++++++++++++++++++--------- src/ViewsIcalHelper.php | 3 +- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/Plugin/views/style/Ical.php b/src/Plugin/views/style/Ical.php index 479ab7d..aa177e9 100644 --- a/src/Plugin/views/style/Ical.php +++ b/src/Plugin/views/style/Ical.php @@ -5,6 +5,7 @@ use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\date_recur\Plugin\views\field\DateRecurDate; use Drupal\views\Plugin\views\style\StylePluginBase; use Drupal\Core\Url; use Drupal\views_ical\ViewsIcalHelperInterface; @@ -150,24 +151,10 @@ public function render() { trigger_error('Drupal\views_ical\Plugin\views\style\Ical: Missing row plugin', E_WARNING); return []; } - /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ - $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->view->field[$this->options['date_field']]->definition['entity_type']); - $date_field_definition = $field_storage_definitions[$this->view->field[$this->options['date_field']]->definition['field_name']]; - /** @var string $date_field_type */ - $date_field_type = $date_field_definition->getType(); + $date_field_type = $this->getDateFieldType(); $events = []; - $user_timezone = \drupal_get_user_timezone(); - - // Make sure the events are made as per the configuration in view. - /** @var string $timezone_override */ - $timezone_override = $this->view->field[$this->options['date_field']]->options['settings']['timezone_override']; - if ($timezone_override) { - $timezone = new \DateTimeZone($timezone_override); - } - else { - $timezone = new \DateTimeZone($user_timezone); - } + $timezone = $this->getTimezone(); foreach ($this->view->result as $row_index => $row) { // Use date_recur's API to generate the events. @@ -190,4 +177,44 @@ public function render() { return $build; } + /** + * Get Date field type value. + * + * @return string + * Date field type. + */ + protected function getDateFieldType(): string { + $date_field_name = $this->options['date_field']; + $view_date_field = $this->view->field[$date_field_name]; + if ($view_date_field instanceof DateRecurDate) { + return 'date_recur'; + } + $entity_type = $view_date_field->definition['entity_type']; + /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $field_storage_definitions */ + $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type); + $date_field_definition = $field_storage_definitions[$date_field_name]; + /** @var string $date_field_type */ + return $date_field_definition->getType(); + } + + /** + * @return \DateTimeZone + */ + protected function getTimezone(): \DateTimeZone { + $user_timezone = \drupal_get_user_timezone(); + $view_field = $this->view->field[$this->options['date_field']]; + $timezone = new \DateTimeZone($user_timezone); + if (empty($view_field->options['settings']['timezone_override'])) { + return $timezone; + } + + // Make sure the events are made as per the configuration in view. + /** @var string $timezone_override */ + $timezone_override = $view_field->options['settings']['timezone_override']; + if ($timezone_override) { + $timezone = new \DateTimeZone($timezone_override); + } + return $timezone; + } + } diff --git a/src/ViewsIcalHelper.php b/src/ViewsIcalHelper.php index 06d9bbb..e3d7256 100644 --- a/src/ViewsIcalHelper.php +++ b/src/ViewsIcalHelper.php @@ -91,8 +91,9 @@ public function addEvent(array &$events, ContentEntityInterface $entity, \DateTi * {@inheritdoc} */ public function addDateRecurEvent(array &$events, ContentEntityInterface $entity, \DateTimeZone $timezone, array $field_mapping): void { + $field_name = preg_replace('/\_value$/', '', $field_mapping['date_field']); /** @var \Drupal\date_recur\Plugin\Field\FieldType\DateRecurItem[] $field_items */ - $field_items = $entity->{$field_mapping['date_field']}; + $field_items = $entity->{$field_name}; foreach ($field_items as $index => $item) { /** @var \Drupal\date_recur\DateRange[] $occurrences */