Mercurial > hg > isophonics-drupal-site
diff modules/contrib/migrate_plus/src/Plugin/migrate/process/EntityGenerate.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/contrib/migrate_plus/src/Plugin/migrate/process/EntityGenerate.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,106 @@ +<?php + +/** + * @file + * Contains Drupal\migrate_plus\Plugin\migrate\process\EntityGenerate. + */ + +namespace Drupal\migrate_plus\Plugin\migrate\process; + +use Drupal\migrate\MigrateExecutableInterface; +use Drupal\migrate\Row; + +/** + * This plugin generates entity stubs. + * + * @MigrateProcessPlugin( + * id = "entity_generate" + * ) + * + * @see EntityLookup + * + * All the configuration from the lookup plugin applies here. In it's most + * simple form, this plugin needs no configuration. If there are fields on the + * stub entity that are required or need some default value, that can be + * provided via a default_values configuration option. + * + * Example usage with default_values configuration: + * @code + * destination: + * plugin: 'entity:node' + * process: + * type: + * plugin: default_value + * default_value: page + * field_tags: + * plugin: entity_generate + * source: tags + * default_values: + * description: Stub description + * field_long_description: Stub long description + * @endcode + */ +class EntityGenerate extends EntityLookup { + + /** + * {@inheritdoc} + */ + public function transform($value, MigrateExecutableInterface $migrateExecutable, Row $row, $destinationProperty) { + // Creates a stub entity if one doesn't exist. + if (!($result = parent::transform($value, $migrateExecutable, $row, $destinationProperty))) { + $result = $this->generateEntity($value); + } + + return $result; + } + + /** + * Generates stub entity for a given value. + * + * @param string $value + * Value to use in creation of stub entity. + * + * @return int|string + * The entity id of the generated entity. + */ + protected function generateEntity($value) { + if(!empty($value)) { + $entity = $this->entityManager + ->getStorage($this->lookupEntityType) + ->create($this->stub($value)); + $entity->save(); + + return $entity->id(); + } + } + + /** + * Fabricate a stub entity. + * + * This is intended to be extended by implementing classes to provide for more + * dynamic default values, rather than just static ones. + * + * @param $value + * Value to use in creation of stub entity. + * + * @return array + * The stub entity. + */ + protected function stub($value) { + $stub = [$this->lookupValueKey => $value]; + + if ($this->lookupBundleKey) { + $stub[$this->lookupBundleKey] = $this->lookupBundle; + } + + // Gather any static default values for properties/fields. + if (isset($this->configuration['default_values']) && is_array($this->configuration['default_values'])) { + foreach ($this->configuration['default_values'] as $key => $value) { + $stub[$key] = $value; + } + } + + return $stub; + } + +}