From 9d16f38418d4444eb9a8002be7b78cc55dd44da4 Mon Sep 17 00:00:00 2001
From: Dan Lobelle <28816-muriqui@users.noreply.drupalcode.org>
Date: Mon, 7 Nov 2022 17:16:12 -0700
Subject: [PATCH] Issue #3318998 by muriqui, owenbush: Instances not created
 correctly when adding a series with multiple custom dates

---
 recurring_events.module      | 19 ++++++++-----------
 src/EventCreationService.php | 11 +++++++++--
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/recurring_events.module b/recurring_events.module
index 1514b61f..0d35b54d 100644
--- a/recurring_events.module
+++ b/recurring_events.module
@@ -158,20 +158,17 @@ function recurring_events_eventseries_insert(EntityInterface $entity) {
   if (\Drupal::isConfigSyncing()) {
     return;
   }
+  /** @var \Drupal\recurring_events\EventCreationService $creation_service */
   $creation_service = \Drupal::service('recurring_events.event_creation_service');
-  $creation_service->createInstances($entity);
+  $instances = $creation_service->createInstances($entity);
+  foreach ($instances as $instance) {
+    $instance->set('eventseries_id', $entity->id());
+    $instance->setNewRevision(FALSE);
 
-  $instances = $entity->event_instances->referencedEntities();
-  if (!empty($instances)) {
-    foreach ($instances as $instance) {
-      $instance->set('eventseries_id', $entity->id());
-      $instance->setNewRevision(FALSE);
+    $creation_service->configureDefaultInheritances($instance, $entity->id());
+    $creation_service->updateInstanceStatus($instance, $entity);
 
-      $creation_service->configureDefaultInheritances($instance, $entity->id());
-      $creation_service->updateInstanceStatus($instance, $entity);
-
-      $instance->save();
-    }
+    $instance->save();
   }
 }
 
diff --git a/src/EventCreationService.php b/src/EventCreationService.php
index bb5bed53..a6a85529 100644
--- a/src/EventCreationService.php
+++ b/src/EventCreationService.php
@@ -439,10 +439,15 @@ class EventCreationService {
   /**
    * Create the event instances from the form state.
    *
-   * @param Drupal\recurring_events\Entity\EventSeries $event
+   * @param \Drupal\recurring_events\Entity\EventSeries $event
    *   The stored event series entity.
+   *
+   * @return \Drupal\recurring_events\Entity\EventInstance[]
+   *   An array of event instances created for the series.
+   *
+   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
    */
-  public function createInstances(EventSeries $event) {
+  public function createInstances(EventSeries $event): array {
     $form_data = $this->convertEntityConfigToArray($event);
     $event_instances = [];
 
@@ -494,6 +499,8 @@ class EventCreationService {
     $this->messenger->addMessage($this->translation->translate('A total of %items event instances were created as part of this event series.', [
       '%items' => count($event_instances),
     ]));
+
+    return $event_instances;
   }
 
   /**
-- 
GitLab