Current content

' * ids: * nid: * type: integer * process: * nid: nid * vid: vid * revision_timestamp: revision_timestamp * revision_log: revision_log * title: title * 'body/0/value': content * 'body/0/format': * plugin: default_value * default_value: basic_html * destination: * plugin: entity:node * default_bundle: article * @endcode * * Example of the corresponding node revision migration, which must be executed * after the above migration. * @code * id: custom_article_revision_migration * label: 'Custom article revision migration' * source: * plugin: embedded_data * data_rows: * - * nid: 1 * vid: 1 * revision_timestamp: 1514660000 * revision_log: 'First revision' * title: 'Previous title' * content: '

Previous content

' * ids: * nid: * type: integer * process: * nid: * plugin: migration_lookup * migration: custom_article_migration * source: nid * vid: vid * revision_timestamp: revision_timestamp * revision_log: revision_log * title: title * 'body/0/value': content * 'body/0/format': * plugin: default_value * default_value: basic_html * destination: * plugin: entity_revision:node * default_bundle: article * migration_dependencies: * required: * - custom_article_migration * @endcode * * @MigrateDestination( * id = "entity_revision", * deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntityRevision" * ) */ class EntityRevision extends EntityContentBase { /** * {@inheritdoc} */ public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager) { $plugin_definition += [ 'label' => new TranslatableMarkup('@entity_type revisions', ['@entity_type' => $storage->getEntityType()->getSingularLabel()]), ]; parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager, $field_type_manager); } /** * {@inheritdoc} */ protected static function getEntityTypeId($plugin_id) { // Remove entity_revision: return substr($plugin_id, 16); } /** * Gets the entity. * * @param \Drupal\migrate\Row $row * The row object. * @param array $old_destination_id_values * The old destination IDs. * * @return \Drupal\Core\Entity\EntityInterface|false * The entity or false if it can not be created. */ protected function getEntity(Row $row, array $old_destination_id_values) { $revision_id = $old_destination_id_values ? reset($old_destination_id_values) : $row->getDestinationProperty($this->getKey('revision')); if (!empty($revision_id) && ($entity = $this->storage->loadRevision($revision_id))) { $entity->setNewRevision(FALSE); } else { $entity_id = $row->getDestinationProperty($this->getKey('id')); $entity = $this->storage->load($entity_id); // If we fail to load the original entity something is wrong and we need // to return immediately. if (!$entity) { return FALSE; } $entity->enforceIsNew(FALSE); $entity->setNewRevision(TRUE); } $this->updateEntity($entity, $row); $entity->isDefaultRevision(FALSE); return $entity; } /** * {@inheritdoc} */ protected function save(ContentEntityInterface $entity, array $old_destination_id_values = []) { $entity->save(); return [$entity->getRevisionId()]; } /** * {@inheritdoc} */ public function getIds() { if ($key = $this->getKey('revision')) { return [$key => $this->getDefinitionFromEntity($key)]; } throw new MigrateException('This entity type does not support revisions.'); } /** * {@inheritdoc} */ public function getHighestId() { $values = $this->storage->getQuery() ->accessCheck(FALSE) ->allRevisions() ->sort($this->getKey('revision'), 'DESC') ->range(0, 1) ->execute(); // The array keys are the revision IDs. // The array contains only one entry, so we can use key(). return (int) key($values); } }