contentserialize-8.x-1.x-dev/src/EventSubscriber/MissingReferenceSubscriber.php
src/EventSubscriber/MissingReferenceSubscriber.php
<?php namespace Drupal\contentserialize\EventSubscriber; use Drupal\contentserialize\Event\ImportEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Add a missing reference fixer to imports. * * @package Drupal\contentserialize\EventSubscriber */ class MissingReferenceSubscriber implements EventSubscriberInterface { /** * The key to store the reference fixer under in the context. * * @var string */ const CONTEXT_KEY = 'contentserialize.missing_reference_fixer'; /** * The missing reference fixer factory. * * @var \Drupal\contentserialize\MissingReferenceFixerFactory */ protected $missingReferenceFixerFactory; /** * Create a missing reference subscriber. * * @param \Drupal\contentserialize\MissingReferenceFixerFactory $missing_reference_fixer_factory * The missing reference fixer factory. */ public function __construct($missing_reference_fixer_factory) { $this->missingReferenceFixerFactory = $missing_reference_fixer_factory; } /** * Add a missing reference fixer to the serialization context. * * @param \Drupal\contentserialize\Event\ContextEvent $event * The import event. */ public function addMissingReferenceFixer($event) { $event->context[static::CONTEXT_KEY] = $this->missingReferenceFixerFactory->create(); } /** * Register a missing reference with the fixer. * * @param \Drupal\contentserialize\Event\MissingReferenceEvent $event * The missing reference event. */ public function registerMissingReference($event) { /** @var \Drupal\contentserialize\MissingReferenceFixer $missing_reference_fixer */ $missing_reference_fixer = $event->context[static::CONTEXT_KEY]; $missing_reference_fixer->register( $event->getEntityType(), $event->getUuid(), $event->getTargetEntityType(), $event->getTargetUuid(), $event->getCallback() ); } /** * Fix any missing references. * * @param \Drupal\contentserialize\Event\ContextEvent $event * The import event. */ public function fixMissingReferences($event) { /** @var \Drupal\contentserialize\MissingReferenceFixer $fixer */ $fixer = $event->context[static::CONTEXT_KEY]; $fixer->fix(); } /** * {@inheritdoc} */ public static function getSubscribedEvents() { $events[ImportEvents::START][] = ['addMissingReferenceFixer']; $events[ImportEvents::MISSING_REFERENCE][] = ['registerMissingReference']; $events[ImportEvents::STOP][] = ['fixMissingReferences']; return $events; } }