From 9846f22698bd1e59033eb8f647cc7cdd983f328b Mon Sep 17 00:00:00 2001
From: GoZ <goz@226961.no-reply.drupal.org>
Date: Thu, 6 Dec 2018 17:43:53 +0100
Subject: [PATCH] Issue #2954545: Import multiple references of files

---
 ...ssImageAndFileReferenceFieldSubscriber.php | 74 +++++++++++++------
 1 file changed, 52 insertions(+), 22 deletions(-)

diff --git a/src/EventSubscriber/EntityStagingProcessImageAndFileReferenceFieldSubscriber.php b/src/EventSubscriber/EntityStagingProcessImageAndFileReferenceFieldSubscriber.php
index 4a9799a..c5017b3 100644
--- a/src/EventSubscriber/EntityStagingProcessImageAndFileReferenceFieldSubscriber.php
+++ b/src/EventSubscriber/EntityStagingProcessImageAndFileReferenceFieldSubscriber.php
@@ -29,31 +29,61 @@ class EntityStagingProcessImageAndFileReferenceFieldSubscriber implements EventS
    */
   public function getProcessFieldDefinition(EntityStagingProcessFieldDefinitionEvent $event) {
     if (in_array($event->getFieldDefinition()->getType(), ['image', 'file'])) {
-      $process_field = [
-        'plugin' => 'migration_lookup',
-        'migration' => 'staging_content_file_file_default_language',
-        'source' => $event->getFieldDefinition()->getName(),
-      ];
-      if ($event->getFieldDefinition()->isTranslatable()) {
-        $process_field['language'] = '@langcode';
+      if ($event->getFieldDefinition()->getFieldStorageDefinition()->isMultiple()) {
+        $process_field[] = [
+          'plugin' => 'migration_lookup',
+          'migration' => 'staging_content_file_file_default_language',
+          'source' => $event->getFieldDefinition()->getName(),
+        ];
+        if ($event->getFieldDefinition()->isTranslatable()) {
+          $process_field[0]['language'] = '@langcode';
+        }
+
+        $process_field[] = [
+          'plugin' => 'entity_staging_iterator',
+          'process' => [
+            'target_id' => '0',
+            'target_revision_id' => '1',
+          ],
+        ];
+
+        $event->setProcessFieldDefinition([
+          $event->getFieldDefinition()->getName() => $process_field
+        ]);
+        $event->setMigrationDependencies(['staging_content_file_file_default_language']);
+        $event->stopPropagation();
       }
+      else {
+        $process_field = [
+          'plugin' => 'migration_lookup',
+          'migration' => 'staging_content_file_file_default_language',
+          'source' => $event->getFieldDefinition()->getName(),
+        ];
+        if ($event->getFieldDefinition()->isTranslatable()) {
+          $process_field['language'] = '@langcode';
+        }
 
-      $process_field = [
-        'plugin' => 'migration_lookup',
-        'migration' => 'staging_content_file_file_default_language',
-        'source' => $event->getFieldDefinition()->getName(),
-      ];
-      if ($event->getFieldDefinition()->isTranslatable()) {
-        $process_field['language'] = '@langcode';
+        $process_field = [
+          'plugin' => 'migration_lookup',
+          'migration' => 'staging_content_file_file_default_language',
+          'source' => $event->getFieldDefinition()->getName(),
+        ];
+        if ($event->getFieldDefinition()->isTranslatable()) {
+          $process_field['language'] = '@langcode';
+        }
+        $event->setProcessFieldDefinition([
+          $event->getFieldDefinition()->getName() . '/target_id' => [
+            $process_field,
+          ],
+          $event->getFieldDefinition()
+            ->getName() . '/alt' => $event->getFieldDefinition()
+              ->getName() . '_alt',
+          $event->getFieldDefinition()
+            ->getName() . '/title' => $event->getFieldDefinition()
+              ->getName() . '_title',
+        ]);
+        $event->stopPropagation();
       }
-      $event->setProcessFieldDefinition([
-        $event->getFieldDefinition()->getName() . '/target_id' => [
-          $process_field,
-        ],
-        $event->getFieldDefinition()->getName() . '/alt' => $event->getFieldDefinition()->getName() . '_alt',
-        $event->getFieldDefinition()->getName() . '/title' => $event->getFieldDefinition()->getName() . '_title',
-      ]);
-      $event->stopPropagation();
     }
   }
 
-- 
2.18.0

