You are here

class TaxonomyTermProcessor in Content Synchronizer 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/content_synchronizer/entity_processor/TaxonomyTermProcessor.php \Drupal\content_synchronizer\Plugin\content_synchronizer\entity_processor\TaxonomyTermProcessor
  2. 3.x src/Plugin/content_synchronizer/entity_processor/TaxonomyTermProcessor.php \Drupal\content_synchronizer\Plugin\content_synchronizer\entity_processor\TaxonomyTermProcessor

Plugin implementation of the 'accordion' formatter.

Plugin annotation


@EntityProcessor(
  id = "content_synchronizer_taxonomy_term_processor",
  entityType = "taxonomy_term"
)

Hierarchy

Expanded class hierarchy of TaxonomyTermProcessor

File

src/Plugin/content_synchronizer/entity_processor/TaxonomyTermProcessor.php, line 21

Namespace

Drupal\content_synchronizer\Plugin\content_synchronizer\entity_processor
View source
class TaxonomyTermProcessor extends EntityProcessorBase {

  /**
   * The dependencies buffer.
   *
   * @var array
   */
  protected static $dependenciesBuffer = [];

  /**
   * Tree buffer.
   *
   * @var array
   */
  protected static $treeBuffer = [];

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);

    // Listen import event.

    /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $dispatcher */
    $dispatcher = \Drupal::service('event_dispatcher');
    $dispatcher
      ->addListener(ImportEvent::ON_ENTITY_IMPORTER, [
      $this,
      'onImportedEntity',
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityToImport(array $data, Entity $existingEntity = NULL) {

    // Init tree process.
    $currentGid = $data[ExportEntityWriter::FIELD_GID];
    $defaultLanguageData = $this
      ->getDefaultLanguageData($data, FALSE);
    if (array_key_exists('parents', $defaultLanguageData)) {

      /** @var \Drupal\content_synchronizer\Processors\ImportProcessor $importProcessor */
      $importProcessor = ImportProcessor::getCurrentImportProcessor();

      /** @var \Drupal\content_synchronizer\Entity\ImportEntity $import */
      $import = $importProcessor
        ->getImport();
      foreach ($defaultLanguageData['parents'] as $parentGid) {

        // If the entity to reference is currently importing, then we cannot add it to the reference because it probably do not have an id yet.
        if ($import
          ->gidIsCurrentlyImporting($parentGid)) {
          $this
            ->addParentDependencie($data, $parentGid);
        }
        elseif ($import
          ->gidHasAlreadyBeenImported($parentGid)) {
          static::$treeBuffer[$currentGid][] = $this
            ->getGlobalReferenceManager()
            ->getEntityByGid($parentGid)
            ->id();
        }
        else {

          // Get the plugin of the entity :

          /** @var \Drupal\content_synchronizer\Processors\Entity\EntityProcessorBase $plugin */
          $plugin = $this
            ->getEntityProcessorManager()
            ->getInstanceByEntityType($this
            ->getGlobalReferenceManager()
            ->getEntityTypeFromGid($parentGid));
          if ($entityData = $import
            ->getEntityDataFromGid($parentGid)) {
            $parent = $plugin
              ->import($entityData);
            static::$treeBuffer[$currentGid][] = $parent
              ->id();
          }
        }
      }
    }
    return parent::getEntityToImport($data, $existingEntity);
  }

  /**
   * Add parent dependencie to avoid circular dependencies.
   *
   * @param array $data
   *   The child array data.
   * @param string $parentGid
   *   The parent gid.
   */
  protected function addParentDependencie(array $data, $parentGid) {
    static::$dependenciesBuffer[$parentGid][] = $data;
  }

  /**
   * Action on Entity import end.
   *
   * @param \Drupal\content_synchronizer\Events\ImportEvent $event
   *   The event.
   */
  public function onImportedEntity(ImportEvent $event) {
    $gid = $event
      ->getGid();
    $entity = $event
      ->getEntity();

    // Add parent dependencies.
    if (array_key_exists($gid, static::$dependenciesBuffer)) {
      foreach (static::$dependenciesBuffer[$gid] as $childData) {
        $child = $this
          ->getGlobalReferenceManager()
          ->getEntityByGid($childData[ExportEntityWriter::FIELD_GID]);
        $alreadyAddedParents = $this
          ->getParentsTerms($child);
        $alreadyAddedParents[] = $entity
          ->id();
        $child
          ->set('parent', $alreadyAddedParents);
        $child
          ->save();
      }
    }

    // Save data.
    if (array_key_exists($gid, static::$treeBuffer)) {
      $entity
        ->set('parent', static::$treeBuffer[$gid]);
      $entity
        ->save();
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getDataToExport(Entity $entityToExport) {

    // Init data to export:
    $data = parent::getDataToExport($entityToExport);

    // Get parents Terms.
    $data['parents'] = [];
    $parents = $this
      ->getParentsTerms($entityToExport);
    if (!empty($parents)) {
      $plugin = $this
        ->getEntityProcessorManager()
        ->getInstanceByEntityType($entityToExport
        ->getEntityTypeId());
      foreach ($parents as $parent) {
        if ($parentGid = $plugin
          ->export($parent)) {
          $data['parents'][] = $parentGid;
        }
      }
    }
    return $data;
  }

  /**
   * Return the list of parents terms.
   *
   * @param \Drupal\taxonomy\Entity\Term $child
   *   The child term.
   *
   * @return mixed
   *   The parents terms.
   */
  protected function getParentsTerms(Term $child) {
    return \Drupal::entityTypeManager()
      ->getStorage($child
      ->getEntityTypeId())
      ->loadParents($child
      ->id());
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
EntityProcessorBase::$entityProcessorManager protected property The entity processor manager service.
EntityProcessorBase::$entityPublisher protected property The entity publisher service.
EntityProcessorBase::$entityType protected property The current entity type.
EntityProcessorBase::$globalReferenceManager protected property The global reference manager service.
EntityProcessorBase::$propertyIdsNotToExport protected property
EntityProcessorBase::$typeProcessorManager protected property The type processor manager service.
EntityProcessorBase::checkBundle private function Check if entity's bundle exist, create-it
EntityProcessorBase::createBundle private function Create missing Bundle
EntityProcessorBase::createNewTranslation protected function Return a translation.
EntityProcessorBase::export final public function Export the entity and return the gid if exists, else false.
EntityProcessorBase::EXPORT_HOOK constant
EntityProcessorBase::getDefaultLanguageData public function Return the data of the default language of the passed data.
EntityProcessorBase::getEntityGlobalReference protected function Get the global reference entity.
EntityProcessorBase::getEntityProcessorManager protected function Get the EntityProcessor plugin manager.
EntityProcessorBase::getEntityPublisher public function Return the entity saver service.
EntityProcessorBase::getEntityTranslations protected function Return the entity translations.
EntityProcessorBase::getEntityType public function Return the current entity type.
EntityProcessorBase::getGlobalReferenceManager final protected function Get the contentSyncManager.
EntityProcessorBase::getPropertiesIdsNotToExportList public function Get the array of the property of the entity not to export. Overrides EntityProcessorInterface::getPropertiesIdsNotToExportList
EntityProcessorBase::getTypeProcessorManager protected function Get the TypeProcessor plugin manager.
EntityProcessorBase::import final public function Create or update entity with data :.
EntityProcessorBase::IMPORT_HOOK constant
EntityProcessorBase::KEY_TRANSLATIONS constant
EntityProcessorBase::onEntityImported protected function Callback when the entity has been imported.
EntityProcessorBase::setChangedTime protected function Update the changed time form the data array.
EntityProcessorBase::setEntityType public function Set the current entity type.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TaxonomyTermProcessor::$dependenciesBuffer protected static property The dependencies buffer.
TaxonomyTermProcessor::$treeBuffer protected static property Tree buffer.
TaxonomyTermProcessor::addParentDependencie protected function Add parent dependencie to avoid circular dependencies.
TaxonomyTermProcessor::getDataToExport public function Return the data to export. Overrides EntityProcessorBase::getDataToExport
TaxonomyTermProcessor::getEntityToImport public function Return the entity to import. Overrides EntityProcessorBase::getEntityToImport
TaxonomyTermProcessor::getParentsTerms protected function Return the list of parents terms.
TaxonomyTermProcessor::onImportedEntity public function Action on Entity import end.
TaxonomyTermProcessor::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct