Revert "Issue #2625696 by chx, alexpott, benjy, mikeryan, andypost, phenaproxima: Make migrations themselves plugins instead of config entities"
This reverts commit 694994fe9b.
8.1.x
parent
803834c7b5
commit
73f91709fb
|
|
@ -16,3 +16,15 @@ block_content.type.*:
|
|||
description:
|
||||
type: text
|
||||
label: 'Description'
|
||||
|
||||
migrate.source.d6_box:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 box'
|
||||
mapping:
|
||||
constants:
|
||||
type: mapping
|
||||
label: 'Constants'
|
||||
mapping:
|
||||
type:
|
||||
type: string
|
||||
label: 'Type'
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class MigrateBookTest extends MigrateDrupal6TestBase {
|
|||
$this->installSchema('book', ['book']);
|
||||
$this->installSchema('node', ['node_access']);
|
||||
$this->migrateContent();
|
||||
$this->executeMigrations(['d6_node', 'd6_book']);
|
||||
$this->executeMigration('d6_book');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
migrate.source.d6_comment:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 comment'
|
||||
mapping:
|
||||
constants:
|
||||
type: mapping
|
||||
label: 'Constants'
|
||||
mapping:
|
||||
entity_type:
|
||||
type: string
|
||||
label: 'Entity type'
|
||||
|
||||
migrate.source.d6_comment_variable_per_comment_type:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 comment variable'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_comment_entity_form_display_subject:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 comment subject entity form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_comment_variable:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 comment variable'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
|
@ -40,7 +40,6 @@ class MigrateCommentTest extends MigrateDrupal6TestBase {
|
|||
|
||||
$this->migrateContent();
|
||||
$this->executeMigrations([
|
||||
'd6_node',
|
||||
'd6_comment_type',
|
||||
'd6_comment_field',
|
||||
'd6_comment_field_instance',
|
||||
|
|
|
|||
|
|
@ -40,12 +40,12 @@ class MigrateCommentTest extends MigrateDrupal7TestBase {
|
|||
// We only need the test_content_type node migration to run for real, so
|
||||
// mock all the others.
|
||||
$this->prepareMigrations(array(
|
||||
'd7_node' => array(
|
||||
'd7_node:*' => array(
|
||||
array(array(0), array(0)),
|
||||
),
|
||||
));
|
||||
$this->executeMigrations([
|
||||
'd7_node:test_content_type',
|
||||
'd7_node__test_content_type',
|
||||
'd7_comment_type',
|
||||
'd7_comment',
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ namespace Drupal\comment\Tests\Migrate\d7;
|
|||
|
||||
use Drupal\comment\CommentTypeInterface;
|
||||
use Drupal\comment\Entity\CommentType;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d7\MigrateDrupal7TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -59,8 +60,9 @@ class MigrateCommentTypeTest extends MigrateDrupal7TestBase {
|
|||
$this->assertEntity('comment_node_forum', 'Forum topic comment');
|
||||
$this->assertEntity('comment_node_test_content_type', 'Test content type comment');
|
||||
|
||||
$migration = $this->getMigration('d7_comment_type');
|
||||
// Validate that the source count and processed count match up.
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = Migration::load('d7_comment_type');
|
||||
$this->assertIdentical($migration->getSourcePlugin()->count(), $migration->getIdMap()->processedCount());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
# Schema for the migration source plugins.
|
||||
|
||||
migrate.source.contact_settings:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal contact settings'
|
||||
mapping:
|
||||
variables:
|
||||
type: sequence
|
||||
label: 'Variables'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Variable'
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
migrate.source.d6_field_instance_per_form_display:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field instance form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_field:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_field_formatter_settings:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field formatter settings'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_field_instance:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field instance'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_field_instance_per_view_mode:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field formatter'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d7_field:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 field'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d7_field_instance:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 field instance'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d7_field_instance_per_form_display:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 field instance per form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d7_field_instance_per_view_mode:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 field instance per view mode'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
|
@ -2,8 +2,9 @@ id: d6_field
|
|||
label: Field configuration
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
|
||||
cck_plugin_method: processField
|
||||
builder:
|
||||
plugin: d6_cck_migration
|
||||
cck_plugin_method: processField
|
||||
source:
|
||||
plugin: d6_field
|
||||
constants:
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ id: d6_field_formatter_settings
|
|||
label: Field formatter configuration
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
|
||||
cck_plugin_method: processFieldFormatter
|
||||
builder:
|
||||
plugin: d6_cck_migration
|
||||
cck_plugin_method: processFieldFormatter
|
||||
source:
|
||||
plugin: d6_field_instance_per_view_mode
|
||||
constants:
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ id: d6_field_instance
|
|||
label: Field instance configuration
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
|
||||
cck_plugin_method: processFieldInstance
|
||||
builder:
|
||||
plugin: d6_cck_migration
|
||||
cck_plugin_method: processFieldInstance
|
||||
source:
|
||||
plugin: d6_field_instance
|
||||
constants:
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ id: d6_field_instance_widget_settings
|
|||
label: Field instance widget configuration
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
|
||||
cck_plugin_method: processFieldWidget
|
||||
builder:
|
||||
plugin: d6_cck_migration
|
||||
cck_plugin_method: processFieldWidget
|
||||
source:
|
||||
plugin: d6_field_instance_per_form_display
|
||||
constants:
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\field\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\Core\Entity\Entity\EntityViewDisplay;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -180,7 +181,7 @@ class MigrateFieldFormatterSettingsTest extends MigrateDrupal6TestBase {
|
|||
$component = $display->getComponent('field_test_datetime');
|
||||
$this->assertIdentical($expected, $component);
|
||||
// Test that our Id map has the correct data.
|
||||
$this->assertIdentical(array('node', 'story', 'teaser', 'field_test'), $this->getMigration('d6_field_formatter_settings')->getIdMap()->lookupDestinationID(array('story', 'teaser', 'node', 'field_test')));
|
||||
$this->assertIdentical(array('node', 'story', 'teaser', 'field_test'), Migration::load('d6_field_formatter_settings')->getIdMap()->lookupDestinationID(array('story', 'teaser', 'node', 'field_test')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\field\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -97,7 +98,7 @@ class MigrateFieldTest extends MigrateDrupal6TestBase {
|
|||
|
||||
// Validate that the source count and processed count match up.
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = $this->getMigration('d6_field');
|
||||
$migration = Migration::load('d6_field');
|
||||
$this->assertIdentical($migration->getSourcePlugin()->count(), $migration->getIdMap()->processedCount());
|
||||
|
||||
// Check that we've reported on a conflict in widget_types.
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ namespace Drupal\field\Tests\Migrate\d7;
|
|||
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
use Drupal\field\FieldStorageConfigInterface;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d7\MigrateDrupal7TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -115,9 +116,8 @@ class MigrateFieldTest extends MigrateDrupal7TestBase {
|
|||
|
||||
// Validate that the source count and processed count match up.
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = $this->getMigration('d7_field');
|
||||
$migration = Migration::load('d7_field');
|
||||
$this->assertIdentical($migration->getSourcePlugin()->count(), $migration->getIdMap()->processedCount());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
migrate.destination.entity:file:
|
||||
type: migrate_destination
|
||||
label: 'File'
|
||||
mapping:
|
||||
source_path_property:
|
||||
type: string
|
||||
label: 'Source path'
|
||||
urlencode:
|
||||
type: boolean
|
||||
label: 'Whether to urlencode incoming file paths'
|
||||
|
|
@ -121,3 +121,11 @@ field.formatter.settings.file_extension:
|
|||
extension_detect_tar:
|
||||
type: boolean
|
||||
label: 'Detect tar'
|
||||
|
||||
migrate.source.d6_upload_instance:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 upload form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file\Tests\Migrate\d6\FileMigrationTestTrait.
|
||||
*/
|
||||
|
||||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
/**
|
||||
* Helper for setting up a file migration test.
|
||||
*/
|
||||
trait FileMigrationTestTrait {
|
||||
|
||||
/**
|
||||
* Setup and execute d6_file migration.
|
||||
*/
|
||||
protected function setUpMigratedFiles() {
|
||||
$this->installEntitySchema('file');
|
||||
$this->installConfig(['file']);
|
||||
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration_plugin_manager = $this->container->get('plugin.manager.migration');
|
||||
|
||||
/** @var \Drupal\migrate\Plugin\migration $migration */
|
||||
$migration = $migration_plugin_manager->createInstance('d6_file');
|
||||
$source = $migration->get('source');
|
||||
$source['site_path'] = 'core/modules/simpletest';
|
||||
$migration->set('source', $source);
|
||||
$this->executeMigration($migration);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ namespace Drupal\file\Tests\Migrate\d6;
|
|||
use Drupal\Component\Utility\Random;
|
||||
use Drupal\file\Entity\File;
|
||||
use Drupal\file\FileInterface;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Tests\MigrateDumpAlterInterface;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
|
@ -22,8 +23,6 @@ use Drupal\simpletest\TestBase;
|
|||
*/
|
||||
class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlterInterface {
|
||||
|
||||
use FileMigrationTestTrait;
|
||||
|
||||
/**
|
||||
* The filename of a file used to test temporary file migration.
|
||||
*
|
||||
|
|
@ -37,7 +36,15 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
|
|||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->setUpMigratedFiles();
|
||||
$this->installEntitySchema('file');
|
||||
$this->installConfig(['file']);
|
||||
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = Migration::load('d6_file');
|
||||
$source = $migration->get('source');
|
||||
$source['site_path'] = 'core/modules/simpletest';
|
||||
$migration->set('source', $source);
|
||||
$this->executeMigration($migration);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -77,9 +84,8 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
|
|||
$this->assertEntity(5, 'html-1.txt', '24', 'public://html-1.txt', 'text/plain', '1');
|
||||
|
||||
// Test that we can re-import and also test with file_directory_path set.
|
||||
$migration_plugin_manager = $this->container->get('plugin.manager.migration');
|
||||
\Drupal::database()
|
||||
->truncate($migration_plugin_manager->createInstance('d6_file')->getIdMap()->mapTableName())
|
||||
->truncate(Migration::load('d6_file')->getIdMap()->mapTableName())
|
||||
->execute();
|
||||
|
||||
// Update the file_directory_path.
|
||||
|
|
@ -94,7 +100,7 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
|
|||
->condition('name', 'file_directory_temp')
|
||||
->execute();
|
||||
|
||||
$migration = $migration_plugin_manager->createInstance('d6_file');
|
||||
$migration = \Drupal::entityManager()->getStorage('migration')->loadUnchanged('d6_file');
|
||||
$this->executeMigration($migration);
|
||||
|
||||
$file = File::load(2);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\Core\Entity\Entity\EntityViewDisplay;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -43,7 +44,7 @@ class MigrateUploadEntityDisplayTest extends MigrateDrupal6TestBase {
|
|||
$component = $display->getComponent('upload');
|
||||
$this->assertTrue(is_null($component));
|
||||
|
||||
$this->assertIdentical(array('node', 'page', 'default', 'upload'), $this->getMigration('d6_upload_entity_display')->getIdMap()->lookupDestinationID(array('page')));
|
||||
$this->assertIdentical(array('node', 'page', 'default', 'upload'), Migration::load('d6_upload_entity_display')->getIdMap()->lookupDestinationID(array('page')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\Core\Entity\Entity\EntityFormDisplay;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -43,7 +44,7 @@ class MigrateUploadEntityFormDisplayTest extends MigrateDrupal6TestBase {
|
|||
$component = $display->getComponent('upload');
|
||||
$this->assertTrue(is_null($component));
|
||||
|
||||
$this->assertIdentical(array('node', 'page', 'default', 'upload'), $this->getMigration('d6_upload_entity_form_display')->getIdMap()->lookupDestinationID(array('page')));
|
||||
$this->assertIdentical(array('node', 'page', 'default', 'upload'), Migration::load('d6_upload_entity_form_display')->getIdMap()->lookupDestinationID(array('page')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -31,7 +32,7 @@ class MigrateUploadFieldTest extends MigrateDrupal6TestBase {
|
|||
public function testUpload() {
|
||||
$field_storage = FieldStorageConfig::load('node.upload');
|
||||
$this->assertIdentical('node.upload', $field_storage->id());
|
||||
$this->assertIdentical(array('node', 'upload'), $this->getMigration('d6_upload_field')->getIdMap()->lookupDestinationID(array('')));
|
||||
$this->assertIdentical(array('node', 'upload'), Migration::load('d6_upload_field')->getIdMap()->lookupDestinationID(array('')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -43,7 +44,7 @@ class MigrateUploadInstanceTest extends MigrateDrupal6TestBase {
|
|||
$field = FieldConfig::load('node.article.upload');
|
||||
$this->assertTrue(is_null($field));
|
||||
|
||||
$this->assertIdentical(array('node', 'page', 'upload'), $this->getMigration('d6_upload_field_instance')->getIdMap()->lookupDestinationID(array('page')));
|
||||
$this->assertIdentical(array('node', 'page', 'upload'), Migration::load('d6_upload_field_instance')->getIdMap()->lookupDestinationID(array('page')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\file\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\file\Entity\File;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
use Drupal\node\Entity\Node;
|
||||
|
||||
|
|
@ -54,7 +55,7 @@ class MigrateUploadTest extends MigrateDrupal6TestBase {
|
|||
$this->migrateContent();
|
||||
// Since we are only testing a subset of the file migration, do not check
|
||||
// that the full file migration has been run.
|
||||
$migration = $this->getMigration('d6_upload');
|
||||
$migration = Migration::load('d6_upload');
|
||||
$migration->set('requirements', []);
|
||||
$this->executeMigration($migration);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ class MigrateFileTest extends MigrateDrupal7TestBase {
|
|||
$fs->mkdir('public://sites/default/files', NULL, TRUE);
|
||||
file_put_contents('public://sites/default/files/cube.jpeg', str_repeat('*', 3620));
|
||||
|
||||
/** @var \Drupal\migrate\Plugin\Migration $migration */
|
||||
$migration = $this->getMigration('d7_file');
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = entity_load('migration', 'd7_file');
|
||||
// Set the destination plugin's source_base_path configuration value, which
|
||||
// would normally be set by the user running the migration.
|
||||
$migration->set('destination', [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
migrate.source.d6_imagecache_presets:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 ImageCache Presets'
|
||||
|
|
@ -9,6 +9,7 @@ namespace Drupal\image\Tests\Migrate\d6;
|
|||
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\image\Entity\ImageStyle;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
|
@ -41,7 +42,7 @@ class MigrateImageCacheTest extends MigrateDrupal6TestBase {
|
|||
->execute();
|
||||
|
||||
try {
|
||||
$this->getMigration('d6_imagecache_presets')
|
||||
Migration::load('d6_imagecache_presets')
|
||||
->getSourcePlugin()
|
||||
->checkRequirements();
|
||||
$this->fail('Did not catch expected RequirementsException.');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
migrate.source.menu_link:
|
||||
type: migrate_source_sql
|
||||
label: 'Menu link'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
# Basic data types for Migrate.
|
||||
|
||||
migrate_plugin:
|
||||
type: mapping
|
||||
mapping:
|
||||
plugin:
|
||||
type: string
|
||||
label: 'Plugin'
|
||||
|
||||
migrate_destination:
|
||||
type: migrate_plugin
|
||||
label: 'Destination'
|
||||
mapping:
|
||||
overwrite_properties:
|
||||
type: sequence
|
||||
label: 'Properties to overwrite'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Property'
|
||||
|
||||
migrate_source:
|
||||
type: migrate_plugin
|
||||
label: 'Source'
|
||||
mapping:
|
||||
constants:
|
||||
type: ignore
|
||||
label: 'Constants'
|
||||
|
||||
migrate_process:
|
||||
type: migrate_plugin
|
||||
label: 'Process'
|
||||
|
||||
# Base schema for migrate source plugins that extend
|
||||
# \Drupal\migrate\Plugin\migrate\source\SqlBase.
|
||||
migrate_source_sql:
|
||||
type: migrate_source
|
||||
mapping:
|
||||
target:
|
||||
type: string
|
||||
label: 'The migration database target'
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# Schema for the migrate destination plugins.
|
||||
|
||||
migrate.destination.*:
|
||||
type: migrate_destination
|
||||
label: 'Default destination'
|
||||
mapping:
|
||||
no_stub:
|
||||
type: boolean
|
||||
label: 'Whether stubbing is allowed.'
|
||||
default: false
|
||||
|
||||
migrate.destination.config:
|
||||
type: migrate_destination
|
||||
label: 'Config'
|
||||
mapping:
|
||||
config_name:
|
||||
type: string
|
||||
label: 'Configuration name'
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
# Schema for the migrate process plugins.
|
||||
|
||||
migrate.process.*:
|
||||
type: migrate_process
|
||||
label: 'Default process'
|
||||
|
||||
migrate.process.callback:
|
||||
type: migrate_process
|
||||
label: 'Callback process'
|
||||
mapping:
|
||||
callback:
|
||||
type: string
|
||||
label: 'Callback'
|
||||
|
||||
migrate.process.concat:
|
||||
type: migrate_process
|
||||
label: 'Concat process'
|
||||
mapping:
|
||||
delimiter:
|
||||
type: string
|
||||
label: 'Delimiter'
|
||||
|
||||
migrate.process.dedupe_entity:
|
||||
type: migrate_process
|
||||
label: 'Dedupe Entity process'
|
||||
mapping:
|
||||
entity_type:
|
||||
type: string
|
||||
label: 'Entity type'
|
||||
field:
|
||||
type: string
|
||||
label: 'Field name'
|
||||
postfix:
|
||||
type: string
|
||||
label: 'Postfix'
|
||||
start:
|
||||
type: integer
|
||||
label: 'Start'
|
||||
length:
|
||||
type: integer
|
||||
label: 'Length'
|
||||
|
||||
migrate.process.explode:
|
||||
type: migrate_process
|
||||
label: 'Explode process'
|
||||
mapping:
|
||||
delimiter:
|
||||
type: string
|
||||
label: 'Delimiter'
|
||||
limit:
|
||||
type: integer
|
||||
label: 'Limit'
|
||||
|
||||
migrate.process.extract:
|
||||
type: migrate_process
|
||||
label: 'Extract process'
|
||||
mapping:
|
||||
default:
|
||||
type: string
|
||||
label: 'Default value'
|
||||
|
||||
migrate.process.flatten:
|
||||
type: migrate_process
|
||||
label: 'Flatten process'
|
||||
|
||||
migrate.process.get:
|
||||
type: migrate_process
|
||||
label: 'Get process'
|
||||
mapping:
|
||||
source:
|
||||
type: string
|
||||
label: 'Source key'
|
||||
|
||||
migrate.process.iterator:
|
||||
type: migrate_process
|
||||
label: 'Iterator process'
|
||||
mapping:
|
||||
process:
|
||||
type: ignore
|
||||
label: 'Process'
|
||||
key:
|
||||
type: string
|
||||
label: 'Key'
|
||||
|
||||
migrate.process.machine_name:
|
||||
type: migrate_process
|
||||
label: 'Machine name process'
|
||||
|
||||
migrate.process.migration:
|
||||
type: migrate_process
|
||||
label: 'Migration process'
|
||||
mapping:
|
||||
migration:
|
||||
type: sequence
|
||||
label: 'Migration'
|
||||
source:
|
||||
type: sequence
|
||||
label: 'Source keys'
|
||||
source_ids:
|
||||
type: string
|
||||
label: 'Source IDs'
|
||||
stub_id:
|
||||
type: string
|
||||
label: 'Stub ID'
|
||||
|
||||
migrate.process.route:
|
||||
type: migrate_process
|
||||
label: 'Route process'
|
||||
|
||||
migrate.process.skip_on_empty:
|
||||
type: migrate_process
|
||||
label: 'Skip on Empty'
|
||||
|
||||
migrate.process.skip_row_if_not_set:
|
||||
type: migrate_process
|
||||
label: 'Skip Row process if not set'
|
||||
mapping:
|
||||
index:
|
||||
type: integer
|
||||
label: 'Index'
|
||||
|
||||
migrate.process.static_map:
|
||||
type: migrate_process
|
||||
label: 'Static Map'
|
||||
mapping:
|
||||
map:
|
||||
type: sequence
|
||||
label: 'Map'
|
||||
default_value:
|
||||
type: string
|
||||
label: 'Default value'
|
||||
bypass:
|
||||
type: boolean
|
||||
label: 'Bypass lookup'
|
||||
|
||||
migrate.process.default_value:
|
||||
type: migrate_process
|
||||
label: 'Default value'
|
||||
mapping:
|
||||
strict:
|
||||
type: boolean
|
||||
label: 'Strict type check'
|
||||
default_value:
|
||||
type: string
|
||||
label: 'Default value'
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# Schema for the configuration files of the Migrate module.
|
||||
|
||||
migrate.migration.*:
|
||||
type: config_entity
|
||||
label: 'Migration'
|
||||
mapping:
|
||||
id:
|
||||
type: string
|
||||
label: 'ID'
|
||||
migration_tags:
|
||||
type: sequence
|
||||
label: 'Migration Tags'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Tag'
|
||||
label:
|
||||
type: label
|
||||
label: 'Label'
|
||||
source:
|
||||
type: migrate.source.[plugin]
|
||||
label: 'Source'
|
||||
process:
|
||||
type: ignore
|
||||
label: 'Process'
|
||||
destination:
|
||||
type: migrate.destination.[plugin]
|
||||
label: 'Destination'
|
||||
template:
|
||||
type: string
|
||||
label: 'Template'
|
||||
migration_dependencies:
|
||||
type: mapping
|
||||
label: 'Dependencies'
|
||||
mapping:
|
||||
required:
|
||||
type: sequence
|
||||
label: 'Required dependencies'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Dependency'
|
||||
optional:
|
||||
type: sequence
|
||||
label: 'Optional dependencies'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Dependency'
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Schema for the migrate source plugins.
|
||||
|
||||
migrate.source.*:
|
||||
type: migrate_source
|
||||
label: 'Default source'
|
||||
|
||||
migrate.source.empty:
|
||||
type: migrate_source_sql
|
||||
label: 'Empty source'
|
||||
mapping:
|
||||
provider:
|
||||
type: string
|
||||
label: 'Provider'
|
||||
|
||||
migrate.source.embedded_data:
|
||||
type: migrate_source
|
||||
label: 'Embedded data source'
|
||||
mapping:
|
||||
data_rows:
|
||||
type: sequence
|
||||
label: 'Data rows'
|
||||
sequence:
|
||||
type: ignore
|
||||
label: 'Data row'
|
||||
ids:
|
||||
type: sequence
|
||||
label: 'Unique key'
|
||||
sequence:
|
||||
type: mapping
|
||||
label: 'Key column'
|
||||
mapping:
|
||||
type:
|
||||
type: string
|
||||
label: 'Column type'
|
||||
|
|
@ -26,6 +26,3 @@ services:
|
|||
plugin.manager.migrate.builder:
|
||||
class: Drupal\migrate\Plugin\MigratePluginManager
|
||||
arguments: [builder, '@container.namespaces', '@cache.discovery', '@module_handler']
|
||||
plugin.manager.migration:
|
||||
class: Drupal\migrate\Plugin\MigrationPluginManager
|
||||
arguments: ['@module_handler', '@cache.discovery', '@language_manager']
|
||||
|
|
|
|||
|
|
@ -2,26 +2,39 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate\Plugin\Migration.
|
||||
* Contains \Drupal\migrate\Entity\Migration.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate\Plugin;
|
||||
namespace Drupal\migrate\Entity;
|
||||
|
||||
use Drupal\Core\Plugin\PluginBase;
|
||||
use Drupal\Core\Config\Entity\ConfigEntityBase;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate\MigrateException;
|
||||
use Drupal\migrate\MigrateSkipRowException;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\migrate\Plugin\RequirementsInterface;
|
||||
use Drupal\Component\Utility\NestedArray;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
|
||||
/**
|
||||
* Defines the Migration plugin.
|
||||
* Defines the Migration entity.
|
||||
*
|
||||
* The migration entity stores the information about a single migration, like
|
||||
* the source, process and destination plugins.
|
||||
*
|
||||
* @ConfigEntityType(
|
||||
* id = "migration",
|
||||
* label = @Translation("Migration"),
|
||||
* handlers = {
|
||||
* "storage" = "Drupal\migrate\MigrationStorage"
|
||||
* },
|
||||
* entity_keys = {
|
||||
* "id" = "id",
|
||||
* "label" = "label",
|
||||
* "weight" = "weight"
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
class Migration extends PluginBase implements MigrationInterface, RequirementsInterface {
|
||||
class Migration extends ConfigEntityBase implements MigrationInterface, RequirementsInterface {
|
||||
|
||||
/**
|
||||
* The migration ID (machine name).
|
||||
|
|
@ -211,6 +224,13 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
|
|||
*/
|
||||
protected $dependencies = [];
|
||||
|
||||
/**
|
||||
* The ID of the template from which this migration was derived, if any.
|
||||
*
|
||||
* @var string|NULL
|
||||
*/
|
||||
protected $template;
|
||||
|
||||
/**
|
||||
* The entity manager.
|
||||
*
|
||||
|
|
@ -231,46 +251,6 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
|
|||
self::STATUS_DISABLED => 'Disabled',
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||
foreach ($plugin_definition as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function id() {
|
||||
return $this->pluginId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any arbitrary property.
|
||||
*
|
||||
* @param string $property
|
||||
* The property to retrieve.
|
||||
*
|
||||
* @return mixed
|
||||
* The value for that property, or NULL if the property does not exist.
|
||||
*/
|
||||
public function get($key) {
|
||||
return isset($this->$key) ? $this->$key : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the ID map plugin.
|
||||
*
|
||||
* @return \Drupal\migrate\Plugin\MigrateIdMapInterface
|
||||
* The ID map plugin.
|
||||
*/
|
||||
public function getIdMapPlugin() {
|
||||
return $this->idMapPlugin;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
|
@ -286,7 +266,7 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
|
|||
*/
|
||||
public function getProcessPlugins(array $process = NULL) {
|
||||
if (!isset($process)) {
|
||||
$process = $this->getProcess();
|
||||
$process = $this->process;
|
||||
}
|
||||
$index = serialize($process);
|
||||
if (!isset($this->processPlugins[$index])) {
|
||||
|
|
@ -507,8 +487,7 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
|
|||
// Invalidate the destination plugin.
|
||||
unset($this->destinationPlugin);
|
||||
}
|
||||
$this->{$property_name} = $value;
|
||||
return $this;
|
||||
return parent::set($property_name, $value);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -592,13 +571,28 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
|
|||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getPluginDefinition() {
|
||||
$definition = [];
|
||||
// While normal plugins do not change their definitions on the fly, this
|
||||
// one does so accommodate for that.
|
||||
foreach (parent::getPluginDefinition() as $key => $value) {
|
||||
$definition[$key] = isset($this->$key) ? $this->$key : $value;
|
||||
public function trustData() {
|
||||
// Migrations cannot be trusted since they are often written by hand and not
|
||||
// through a UI.
|
||||
$this->trustedData = FALSE;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function calculateDependencies() {
|
||||
parent::calculateDependencies();
|
||||
$this->calculatePluginDependencies($this->getSourcePlugin());
|
||||
$this->calculatePluginDependencies($this->getDestinationPlugin());
|
||||
|
||||
// Add hard dependencies on required migrations.
|
||||
$dependencies = $this->getEntityManager()->getStorage($this->entityTypeId)
|
||||
->getVariantIds($this->getMigrationDependencies()['required']);
|
||||
foreach ($dependencies as $dependency) {
|
||||
$this->addDependency('config', $this->getEntityType()->getConfigPrefix() . '.' . $dependency);
|
||||
}
|
||||
return $definition;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
@ -7,10 +7,12 @@
|
|||
|
||||
namespace Drupal\migrate\Entity;
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityInterface;
|
||||
|
||||
/**
|
||||
* Interface for migrations.
|
||||
*/
|
||||
interface MigrationInterface {
|
||||
interface MigrationInterface extends ConfigEntityInterface {
|
||||
|
||||
/**
|
||||
* A constant used for systemOfRecord.
|
||||
|
|
@ -97,13 +99,6 @@ interface MigrationInterface {
|
|||
*/
|
||||
const RESULT_DISABLED = 6;
|
||||
|
||||
/**
|
||||
* An alias for getPluginId() for backwards compatibility reasons.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function id();
|
||||
|
||||
/**
|
||||
* Returns the initialized source plugin.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class MigrateExecutable implements MigrateExecutableInterface {
|
|||
/**
|
||||
* The configuration of the migration to do.
|
||||
*
|
||||
* @var \Drupal\migrate\Plugin\Migration
|
||||
* @var \Drupal\migrate\Entity\Migration
|
||||
*/
|
||||
protected $migration;
|
||||
|
||||
|
|
@ -186,8 +186,7 @@ class MigrateExecutable implements MigrateExecutableInterface {
|
|||
|
||||
// Knock off migration if the requirements haven't been met.
|
||||
try {
|
||||
// @TODO https://www.drupal.org/node/2666640
|
||||
#$this->migration->checkRequirements();
|
||||
$this->migration->checkRequirements();
|
||||
}
|
||||
catch (RequirementsException $e) {
|
||||
$this->message->display(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Plugin\MigratePluginManager;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate\Plugin\MigrationDeriverTrait.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate\Plugin;
|
||||
|
||||
/**
|
||||
* Provides functionality for migration derivers.
|
||||
*/
|
||||
trait MigrationDeriverTrait {
|
||||
|
||||
/**
|
||||
* Returns a fully initialized instance of a source plugin.
|
||||
*
|
||||
* @param string $plugin_id
|
||||
* The plugin ID.
|
||||
* @param array $configuration
|
||||
* (optional) Additional configuration for the plugin. Defaults to an empty
|
||||
* array.
|
||||
*
|
||||
* @return \Drupal\migrate\Plugin\MigrateSourceInterface|\Drupal\migrate\Plugin\RequirementsInterface
|
||||
* The fully initialized source plugin.
|
||||
*/
|
||||
public static function getSourcePlugin($source_plugin_id) {
|
||||
$definition = [
|
||||
'source' => [
|
||||
'ignore_map' => TRUE,
|
||||
'plugin' => $source_plugin_id,
|
||||
],
|
||||
'destination' => [
|
||||
'plugin' => 'null',
|
||||
],
|
||||
];
|
||||
return (new Migration([], uniqid(), $definition))->getSourcePlugin();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate\Plugin\MigrationPluginManager.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate\Plugin;
|
||||
|
||||
use Drupal\Core\Cache\CacheBackendInterface;
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\Core\Language\LanguageManagerInterface;
|
||||
use Drupal\Core\Plugin\DefaultPluginManager;
|
||||
use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator;
|
||||
use Drupal\Core\Plugin\Discovery\YamlDirectoryDiscovery;
|
||||
use Drupal\Core\Plugin\Factory\ContainerFactory;
|
||||
|
||||
/**
|
||||
* Plugin manager for migration plugins.
|
||||
*/
|
||||
class MigrationPluginManager extends DefaultPluginManager implements MigrationPluginManagerInterface {
|
||||
|
||||
/**
|
||||
* Provides default values for migrations.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $defaults = array(
|
||||
'class' => '\Drupal\migrate\Plugin\Migration',
|
||||
);
|
||||
|
||||
/**
|
||||
* The interface the plugins should implement.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $pluginInterface = 'Drupal\migrate\Entity\MigrationInterface';
|
||||
|
||||
/**
|
||||
* The module handler.
|
||||
*
|
||||
* @var \Drupal\Core\Extension\ModuleHandlerInterface
|
||||
*/
|
||||
protected $moduleHandler;
|
||||
|
||||
/**
|
||||
* Construct a migration plugin manager.
|
||||
*
|
||||
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
|
||||
* The module handler.
|
||||
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
|
||||
* The cache backend for the definitions.
|
||||
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
|
||||
* The language manager.
|
||||
*/
|
||||
public function __construct(ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager) {
|
||||
$this->factory = new ContainerFactory($this, $this->pluginInterface);
|
||||
$this->alterInfo('migration_plugins');
|
||||
$this->setCacheBackend($cache_backend, 'migration_plugins', array('migration_plugins'));
|
||||
$this->moduleHandler = $module_handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getDiscovery() {
|
||||
if (!isset($this->discovery)) {
|
||||
$directories = array_map(function($directory) {
|
||||
return [$directory . '/migration_templates', $directory . '/migrations'];
|
||||
}, $this->moduleHandler->getModuleDirectories());
|
||||
|
||||
$yaml_discovery = new YamlDirectoryDiscovery($directories, 'migrate');
|
||||
$this->discovery = new ContainerDerivativeDiscoveryDecorator($yaml_discovery);
|
||||
}
|
||||
return $this->discovery;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function createInstances($id, array $configuration = array()) {
|
||||
$factory = $this->getFactory();
|
||||
$instances = [];
|
||||
$plugin_ids = preg_grep('/^' . preg_quote($id, '/') . ':/', array_keys($this->getDefinitions()));
|
||||
if ($this->hasDefinition($id)) {
|
||||
$plugin_ids[] = $id;
|
||||
}
|
||||
foreach ($plugin_ids as $plugin_id) {
|
||||
$instances[$plugin_id] = $factory->createInstance($plugin_id, isset($configuration[$plugin_id]) ? $configuration[$plugin_id] : []);
|
||||
}
|
||||
return $instances;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate\Plugin\MigrationPluginManagerInterface.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate\Plugin;
|
||||
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
|
||||
/**
|
||||
* Migration plugin manager interface
|
||||
*/
|
||||
interface MigrationPluginManagerInterface extends PluginManagerInterface {
|
||||
|
||||
/**
|
||||
* Create pre-configured instance of plugin derivatives.
|
||||
*
|
||||
* @param string $id
|
||||
* Either the plugin ID or the base plugin ID of the plugins being
|
||||
* instantiated.
|
||||
* @param array $configuration
|
||||
* An array of configuration relevant to the plugin instances. Keyed by the
|
||||
* plugin id.
|
||||
*
|
||||
* @return \Drupal\migrate\Entity\MigrationInterface[]
|
||||
* Fully configured plugin instances.
|
||||
*
|
||||
* @throws \Drupal\Component\Plugin\Exception\PluginException
|
||||
* If the instance cannot be created, such as if the ID is invalid.
|
||||
*/
|
||||
public function createInstances($id, array $configuration = array());
|
||||
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\migrate\Plugin\migrate\builder;
|
||||
|
||||
use Drupal\Core\Plugin\PluginBase;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Plugin\MigrateBuilderInterface;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@
|
|||
|
||||
namespace Drupal\migrate\Plugin\migrate\process;
|
||||
|
||||
use Drupal\Core\Entity\EntityStorageInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\MigrateSkipProcessException;
|
||||
use Drupal\migrate\Plugin\MigratePluginManager;
|
||||
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
|
||||
use Drupal\migrate\ProcessPluginBase;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\MigrateExecutableInterface;
|
||||
|
|
@ -34,18 +34,18 @@ class Migration extends ProcessPluginBase implements ContainerFactoryPluginInter
|
|||
protected $processPluginManager;
|
||||
|
||||
/**
|
||||
* The migration plugin manager.
|
||||
* The entity storage manager.
|
||||
*
|
||||
* @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
|
||||
* @var \Drupal\Core\Entity\EntityStorageInterface
|
||||
*/
|
||||
protected $migrationPluginManager;
|
||||
protected $migrationStorage;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrationPluginManagerInterface $migration_plugin_manager, MigratePluginManager $process_plugin_manager) {
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, MigratePluginManager $process_plugin_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||
$this->migrationPluginManager = $migration_plugin_manager;
|
||||
$this->migrationStorage = $storage;
|
||||
$this->migration = $migration;
|
||||
$this->processPluginManager = $process_plugin_manager;
|
||||
}
|
||||
|
|
@ -59,7 +59,7 @@ class Migration extends ProcessPluginBase implements ContainerFactoryPluginInter
|
|||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('plugin.manager.migration'),
|
||||
$container->get('entity.manager')->getStorage('migration'),
|
||||
$container->get('plugin.manager.migrate.process')
|
||||
);
|
||||
}
|
||||
|
|
@ -80,14 +80,10 @@ class Migration extends ProcessPluginBase implements ContainerFactoryPluginInter
|
|||
$this->skipOnEmpty($value);
|
||||
$self = FALSE;
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface[] $migrations */
|
||||
$migrations = $this->migrationStorage->loadMultiple($migration_ids);
|
||||
$destination_ids = NULL;
|
||||
$source_id_values = array();
|
||||
$migrations = array();
|
||||
$candidates = array();
|
||||
foreach ($migration_ids as $migration_id) {
|
||||
$candidates += $this->migrationPluginManager->createInstances($migration_id);
|
||||
}
|
||||
foreach ($candidates as $migration_id => $migration) {
|
||||
foreach ($migrations as $migration_id => $migration) {
|
||||
if ($migration_id == $this->migration->id()) {
|
||||
$self = TRUE;
|
||||
}
|
||||
|
|
@ -104,7 +100,6 @@ class Migration extends ProcessPluginBase implements ContainerFactoryPluginInter
|
|||
if ($destination_ids = $migration->getIdMap()->lookupDestinationID($source_id_values[$migration_id])) {
|
||||
break;
|
||||
}
|
||||
$migrations[] = $migration;
|
||||
}
|
||||
|
||||
if (!$destination_ids && !empty($this->configuration['no_stub'])) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\simpletest\KernelTestBase;
|
||||
|
||||
|
|
@ -34,7 +34,8 @@ class MigrateEmbeddedDataTest extends KernelTestBase {
|
|||
['key' => '2', 'field1' => 'f1value2', 'field2' => 'f2value2'],
|
||||
];
|
||||
$ids = ['key' => ['type' => 'integer']];
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'sample_data',
|
||||
'migration_tags' => ['Embedded data test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -45,7 +46,7 @@ class MigrateEmbeddedDataTest extends KernelTestBase {
|
|||
'destination' => ['plugin' => 'null'],
|
||||
];
|
||||
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($config);
|
||||
$source = $migration->getSourcePlugin();
|
||||
|
||||
// Validate the plugin returns the source data that was provided.
|
||||
|
|
|
|||
|
|
@ -7,15 +7,16 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Event\MigrateImportEvent;
|
||||
use Drupal\migrate\Event\MigrateMapDeleteEvent;
|
||||
use Drupal\migrate\Event\MigrateMapSaveEvent;
|
||||
use Drupal\migrate\Event\MigratePostRowSaveEvent;
|
||||
use Drupal\migrate\Event\MigratePreRowSaveEvent;
|
||||
use Drupal\migrate\MigrateMessage;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\Event\MigrateEvents;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\simpletest\KernelTestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -65,7 +66,8 @@ class MigrateEventsTest extends KernelTestBase {
|
|||
public function testMigrateEvents() {
|
||||
// Run a simple little migration, which should trigger one of each event
|
||||
// other than map_delete.
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'sample_data',
|
||||
'migration_tags' => ['Event test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -80,8 +82,9 @@ class MigrateEventsTest extends KernelTestBase {
|
|||
'destination' => ['plugin' => 'dummy'],
|
||||
];
|
||||
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($config);
|
||||
|
||||
/** @var MigrationInterface $migration */
|
||||
$executable = new MigrateExecutable($migration, new MigrateMessage());
|
||||
// As the import runs, events will be dispatched, recording the received
|
||||
// information in state.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Event\MigratePostRowSaveEvent;
|
||||
use Drupal\migrate\MigrateMessage;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
|
|
@ -44,7 +44,8 @@ class MigrateInterruptionTest extends KernelTestBase {
|
|||
public function testMigrateEvents() {
|
||||
// Run a simple little migration, which should trigger one of each event
|
||||
// other than map_delete.
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'sample_data',
|
||||
'migration_tags' => ['Interruption test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -60,8 +61,9 @@ class MigrateInterruptionTest extends KernelTestBase {
|
|||
'destination' => ['plugin' => 'dummy'],
|
||||
];
|
||||
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($config);
|
||||
|
||||
/** @var MigrationInterface $migration */
|
||||
$executable = new MigrateExecutable($migration, new MigrateMessage());
|
||||
// When the import runs, the first row imported will trigger an
|
||||
// interruption.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\Event\MigrateEvents;
|
||||
use Drupal\migrate\Event\MigrateIdMapMessageEvent;
|
||||
|
|
@ -53,7 +53,8 @@ class MigrateMessageTest extends KernelTestBase implements MigrateMessageInterfa
|
|||
|
||||
// A simple migration, which will generate a message to the ID map because
|
||||
// the concat plugin throws an exception if its source is not an array.
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'sample_data',
|
||||
'migration_tags' => ['Message test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -76,7 +77,7 @@ class MigrateMessageTest extends KernelTestBase implements MigrateMessageInterfa
|
|||
],
|
||||
];
|
||||
|
||||
$this->migration = new Migration([], uniqid(), $definition);
|
||||
$this->migration = Migration::create($config);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\migrate\Row;
|
||||
|
|
@ -49,7 +49,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
['id' => '2', 'name' => 'tags', 'weight' => '1'],
|
||||
];
|
||||
$ids = ['id' => ['type' => 'integer']];
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'vocabularies',
|
||||
'migration_tags' => ['Import and rollback test'],
|
||||
'source' => [
|
||||
|
|
@ -65,7 +65,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
'destination' => ['plugin' => 'entity:taxonomy_vocabulary'],
|
||||
];
|
||||
|
||||
$vocabulary_migration = new Migration([], uniqid(), $definition);
|
||||
$vocabulary_migration = Migration::create($config);
|
||||
$vocabulary_id_map = $vocabulary_migration->getIdMap();
|
||||
|
||||
$this->assertTrue($vocabulary_migration->getDestinationPlugin()->supportsRollback());
|
||||
|
|
@ -89,7 +89,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
['id' => '3', 'vocab' => '2', 'name' => 'Beethoven'],
|
||||
];
|
||||
$ids = ['id' => ['type' => 'integer']];
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'terms',
|
||||
'migration_tags' => ['Import and rollback test'],
|
||||
'source' => [
|
||||
|
|
@ -106,7 +106,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
'migration_dependencies' => ['required' => ['vocabularies']],
|
||||
];
|
||||
|
||||
$term_migration = new Migration([], uniqid(), $definition);
|
||||
$term_migration = Migration::create($config);
|
||||
$term_id_map = $term_migration->getIdMap();
|
||||
|
||||
$this->assertTrue($term_migration->getDestinationPlugin()->supportsRollback());
|
||||
|
|
@ -160,7 +160,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
['id' => 1, 'override_selector' => '0', 'terms_per_page_admin' => '10'],
|
||||
];
|
||||
$ids = ['id' => ['type' => 'integer']];
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'taxonomy_settings',
|
||||
'migration_tags' => ['Import and rollback test'],
|
||||
'source' => [
|
||||
|
|
@ -179,7 +179,7 @@ class MigrateRollbackTest extends MigrateTestBase {
|
|||
'migration_dependencies' => ['required' => ['vocabularies']],
|
||||
];
|
||||
|
||||
$settings_migration = new Migration([], uniqid(), $definition);
|
||||
$settings_migration = Migration::create($config);
|
||||
$this->assertFalse($settings_migration->getDestinationPlugin()->supportsRollback());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateMessage;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\simpletest\KernelTestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -34,7 +34,8 @@ class MigrateSkipRowTest extends KernelTestBase {
|
|||
public function testPrepareRowSkip() {
|
||||
// Run a simple little migration with two data rows which should be skipped
|
||||
// in different ways.
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'sample_data',
|
||||
'migration_tags' => ['prepare_row test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -54,7 +55,7 @@ class MigrateSkipRowTest extends KernelTestBase {
|
|||
'load' => ['plugin' => 'null'],
|
||||
];
|
||||
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($config);
|
||||
|
||||
$executable = new MigrateExecutable($migration, new MigrateMessage());
|
||||
$result = $executable->import();
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
|
||||
/**
|
||||
|
|
@ -22,7 +22,7 @@ class MigrateStatusTest extends MigrateTestBase {
|
|||
*/
|
||||
public function testStatus() {
|
||||
// Create a minimally valid migration.
|
||||
$definition = [
|
||||
$configuration = [
|
||||
'id' => 'migration_status_test',
|
||||
'migration_tags' => ['Testing'],
|
||||
'source' => ['plugin' => 'empty'],
|
||||
|
|
@ -32,7 +32,8 @@ class MigrateStatusTest extends MigrateTestBase {
|
|||
],
|
||||
'process' => ['foo' => 'bar'],
|
||||
];
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($configuration);
|
||||
$migration->save();
|
||||
|
||||
// Default status is idle.
|
||||
$status = $migration->getStatus();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\MigrateMessageInterface;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
|
|
@ -127,9 +128,9 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI
|
|||
* IDs.
|
||||
*/
|
||||
protected function prepareMigrations(array $id_mappings) {
|
||||
$manager = $this->container->get('plugin.manager.migration');
|
||||
foreach ($id_mappings as $migration_id => $data) {
|
||||
foreach ($manager->createInstances($migration_id) as $migration) {
|
||||
// Use loadMultiple() here in order to load all variants.
|
||||
foreach (Migration::loadMultiple([$migration_id]) as $migration) {
|
||||
$id_map = $migration->getIdMap();
|
||||
$id_map->setMessage($this);
|
||||
$source_ids = $migration->getSourcePlugin()->getIds();
|
||||
|
|
@ -149,7 +150,7 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI
|
|||
*/
|
||||
protected function executeMigration($migration) {
|
||||
if (is_string($migration)) {
|
||||
$this->migration = $this->getMigration($migration);
|
||||
$this->migration = Migration::load($migration);
|
||||
}
|
||||
else {
|
||||
$this->migration = $migration;
|
||||
|
|
@ -167,12 +168,8 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI
|
|||
* Array of migration IDs, in any order.
|
||||
*/
|
||||
protected function executeMigrations(array $ids) {
|
||||
$manager = $this->container->get('plugin.manager.migration');
|
||||
array_walk($ids, function ($id) use ($manager) {
|
||||
// This is possibly a base plugin id and we want to run all derivatives.
|
||||
$instances = $manager->createInstances($id);
|
||||
array_walk($instances, [$this, 'executeMigration']);
|
||||
});
|
||||
$migrations = Migration::loadMultiple($ids);
|
||||
array_walk($migrations, [$this, 'executeMigration']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -218,7 +215,7 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI
|
|||
*/
|
||||
protected function mockFailure($migration, array $row, $status = MigrateIdMapInterface::STATUS_FAILED) {
|
||||
if (is_string($migration)) {
|
||||
$migration = $this->getMigration($migration);
|
||||
$migration = Migration::load($migration);
|
||||
}
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$destination = array_map(function() { return NULL; }, $migration->getDestinationPlugin()->getIds());
|
||||
|
|
@ -226,11 +223,4 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI
|
|||
$migration->getIdMap()->saveIdMapping($row, $destination, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Drupal\migrate\Plugin\Migration
|
||||
*/
|
||||
protected function getMigration($plugin_id) {
|
||||
return $this->container->get('plugin.manager.migration')->createInstance($plugin_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
|
||||
namespace Drupal\migrate\Tests;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\simpletest\KernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests the migration plugin.
|
||||
* Tests the migration entity.
|
||||
*
|
||||
* @group migrate
|
||||
* @coversDefaultClass \Drupal\migrate\Plugin\Migration
|
||||
* @coversDefaultClass \Drupal\migrate\Entity\Migration
|
||||
*/
|
||||
class MigrationTest extends KernelTestBase {
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ class MigrationTest extends KernelTestBase {
|
|||
* @covers ::set()
|
||||
*/
|
||||
public function testSetInvalidation() {
|
||||
$migration = new Migration([], uniqid(), [
|
||||
$migration = Migration::create([
|
||||
'source' => ['plugin' => 'empty'],
|
||||
'destination' => ['plugin' => 'entity:entity_view_mode'],
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
namespace Drupal\Tests\migrate\Kernel\Entity;
|
||||
|
||||
use Drupal\KernelTests\KernelTestBase;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
|
||||
/**
|
||||
* Tests the Migration entity.
|
||||
*
|
||||
* @coversDefaultClass \Drupal\migrate\Plugin\Migration
|
||||
* @coversDefaultClass \Drupal\migrate\Entity\Migration
|
||||
* @group migrate
|
||||
*/
|
||||
class MigrationTest extends KernelTestBase {
|
||||
|
|
@ -24,12 +24,9 @@ class MigrationTest extends KernelTestBase {
|
|||
public static $modules = ['migrate'];
|
||||
|
||||
/**
|
||||
* @todo: this should be covers, fix when dependencies are fixed.
|
||||
* @-covers ::calculateDependencies
|
||||
* @covers ::calculateDependencies
|
||||
*/
|
||||
public function testCalculateDependencies() {
|
||||
// @TODO https://www.drupal.org/node/2666640
|
||||
return;
|
||||
$fixture_migrations = [
|
||||
'd6_node__article' => 'd6_node',
|
||||
'd6_node__page' => 'd6_node',
|
||||
|
|
@ -37,7 +34,7 @@ class MigrationTest extends KernelTestBase {
|
|||
];
|
||||
|
||||
foreach ($fixture_migrations as $id => $template) {
|
||||
$definition = [
|
||||
$values = [
|
||||
'id' => $id,
|
||||
'template' => $template,
|
||||
'source' => [
|
||||
|
|
@ -48,10 +45,10 @@ class MigrationTest extends KernelTestBase {
|
|||
],
|
||||
'migration_tags' => []
|
||||
];
|
||||
new Migration([], uniqid(), $definition);
|
||||
Migration::create($values)->save();
|
||||
}
|
||||
|
||||
$definition = [
|
||||
$values = [
|
||||
'migration_dependencies' => [
|
||||
'required' => [
|
||||
'd6_node:*',
|
||||
|
|
@ -66,7 +63,7 @@ class MigrationTest extends KernelTestBase {
|
|||
],
|
||||
];
|
||||
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = new Migration($values, 'migration');
|
||||
$expected = [
|
||||
'migrate.migration.d6_node__article',
|
||||
'migrate.migration.d6_node__page',
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
namespace Drupal\Tests\migrate\Unit\Entity;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* Tests the migrate entity.
|
||||
*
|
||||
* @coversDefaultClass \Drupal\migrate\Plugin\Migration
|
||||
* @coversDefaultClass \Drupal\migrate\Entity\Migration
|
||||
* @group migrate
|
||||
*/
|
||||
class MigrationTest extends UnitTestCase {
|
||||
|
|
@ -24,7 +24,7 @@ class MigrationTest extends UnitTestCase {
|
|||
* @covers ::getProcessPlugins
|
||||
*/
|
||||
public function testGetProcessPlugins() {
|
||||
$migration = new Migration([], uniqid(), []);
|
||||
$migration = new Migration([], 'migration');
|
||||
$this->assertEquals([], $migration->getProcessPlugins([]));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ abstract class MigrateTestCase extends UnitTestCase {
|
|||
* The mocked migration.
|
||||
*/
|
||||
protected function getMigration() {
|
||||
$this->migrationConfiguration += ['migrationClass' => 'Drupal\migrate\Plugin\Migration'];
|
||||
$this->migrationConfiguration += ['migrationClass' => 'Drupal\migrate\Entity\Migration'];
|
||||
$this->idMap = $this->getMock('Drupal\migrate\Plugin\MigrateIdMapInterface');
|
||||
|
||||
$this->idMap
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
namespace Drupal\Tests\migrate\Unit;
|
||||
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate\Plugin\MigrateDestinationInterface;
|
||||
use Drupal\migrate\Plugin\MigrateSourceInterface;
|
||||
|
|
@ -16,7 +16,7 @@ use Drupal\migrate\Plugin\RequirementsInterface;
|
|||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\migrate\Plugin\Migration
|
||||
* @coversDefaultClass \Drupal\migrate\Entity\Migration
|
||||
* @group Migration
|
||||
*/
|
||||
class MigrationTest extends UnitTestCase {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ class ConfigTest extends UnitTestCase {
|
|||
$source = array(
|
||||
'test' => 'x',
|
||||
);
|
||||
$migration = $this->getMockBuilder('Drupal\migrate\Plugin\Migration')
|
||||
$migration = $this->getMockBuilder('Drupal\migrate\Entity\Migration')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$config = $this->getMockBuilder('Drupal\Core\Config\Config')
|
||||
|
|
|
|||
|
|
@ -27,9 +27,6 @@ class MigrationTest extends MigrateProcessTestCase {
|
|||
* @covers ::transform
|
||||
*/
|
||||
public function testTransformWithStubSkipping() {
|
||||
// @TODO https://www.drupal.org/node/2667620
|
||||
$this->assertSame(TRUE, TRUE);
|
||||
return;
|
||||
$migration_entity = $this->prophesize(MigrationInterface::class);
|
||||
$migration_storage = $this->prophesize(EntityStorageInterface::class);
|
||||
$process_plugin_manager = $this->prophesize(MigratePluginManager::class);
|
||||
|
|
@ -58,9 +55,6 @@ class MigrationTest extends MigrateProcessTestCase {
|
|||
* @covers ::transform
|
||||
*/
|
||||
public function testTransformWithStubbing() {
|
||||
// @TODO https://www.drupal.org/node/2667620
|
||||
$this->assertSame(TRUE, TRUE);
|
||||
return;
|
||||
$migration_entity = $this->prophesize(MigrationInterface::class);
|
||||
$migration_storage = $this->prophesize(EntityStorageInterface::class);
|
||||
$process_plugin_manager = $this->prophesize(MigratePluginManager::class);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,153 @@
|
|||
# Schema for the migrate_drupal source plugins.
|
||||
|
||||
migrate.source.variable:
|
||||
type: migrate_source_sql
|
||||
label: 'Variable'
|
||||
mapping:
|
||||
variables:
|
||||
type: sequence
|
||||
label: 'Variables'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Variable'
|
||||
constants:
|
||||
type: mapping
|
||||
label: 'Constants'
|
||||
mapping:
|
||||
entity_type:
|
||||
type: string
|
||||
label: 'Entity type'
|
||||
id:
|
||||
type: string
|
||||
label: 'ID'
|
||||
label:
|
||||
type: label
|
||||
label: 'Label'
|
||||
description:
|
||||
type: text
|
||||
label: 'Description'
|
||||
path:
|
||||
type: string
|
||||
label: 'Path'
|
||||
plugin:
|
||||
type: string
|
||||
label: 'Plugin'
|
||||
status:
|
||||
type: boolean
|
||||
label: 'Status'
|
||||
slash:
|
||||
type: string
|
||||
label: 'Slash'
|
||||
|
||||
migrate.source.variable_multirow:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal variable multirow'
|
||||
mapping:
|
||||
variables:
|
||||
type: sequence
|
||||
label: 'Variables'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Variable'
|
||||
|
||||
migrate_entity_constant:
|
||||
type: mapping
|
||||
mapping:
|
||||
entity_type:
|
||||
type: string
|
||||
label: 'Entity type'
|
||||
bundle:
|
||||
type: string
|
||||
label: 'Bundle'
|
||||
label:
|
||||
type: label
|
||||
label: 'Label'
|
||||
id:
|
||||
type: string
|
||||
label: 'ID'
|
||||
target_entity_type:
|
||||
type: string
|
||||
label: 'Target entity type'
|
||||
view_mode:
|
||||
type: string
|
||||
label: 'View mode'
|
||||
form_mode:
|
||||
type: string
|
||||
label: 'Form mode'
|
||||
field_name:
|
||||
type: string
|
||||
label: 'Field name'
|
||||
empty:
|
||||
type: sequence
|
||||
label: 'Empty'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Empty'
|
||||
name:
|
||||
type: string
|
||||
label: 'Name'
|
||||
preview:
|
||||
type: integer
|
||||
label: 'Preview'
|
||||
create_body:
|
||||
type: boolean
|
||||
label: 'create body'
|
||||
required:
|
||||
type: boolean
|
||||
label: 'Required'
|
||||
type:
|
||||
type: string
|
||||
label: 'Type'
|
||||
cardinality:
|
||||
type: integer
|
||||
label: 'Cardinality'
|
||||
parent:
|
||||
type: integer
|
||||
label: 'Parent'
|
||||
langcode:
|
||||
type: string
|
||||
label: 'Language code'
|
||||
third_party_settings:
|
||||
type: sequence
|
||||
label: 'Settings'
|
||||
sequence:
|
||||
type: ignore
|
||||
label: 'Settings'
|
||||
settings:
|
||||
type: sequence
|
||||
label: 'Settings'
|
||||
sequence:
|
||||
type: ignore
|
||||
label: 'Settings'
|
||||
options:
|
||||
type: mapping
|
||||
label: 'Options'
|
||||
mapping:
|
||||
label:
|
||||
type: string
|
||||
label: 'label'
|
||||
type:
|
||||
type: string
|
||||
label: 'Type'
|
||||
weight:
|
||||
type: integer
|
||||
label: 'Weight'
|
||||
settings:
|
||||
type: sequence
|
||||
label: 'Settings'
|
||||
sequence:
|
||||
type: string
|
||||
label: 'Settings'
|
||||
selection_handler:
|
||||
type: string
|
||||
label: 'Entity reference selection handler'
|
||||
auto_create:
|
||||
type: boolean
|
||||
label: 'Entity reference selection setting: Auto-create new entities'
|
||||
status:
|
||||
type: boolean
|
||||
label: 'Status'
|
||||
|
||||
migrate.source.md_empty:
|
||||
type: migrate.source.empty
|
||||
label: 'Empty source for migrate_drupal migrations'
|
||||
|
|
@ -6,9 +6,6 @@
|
|||
*/
|
||||
|
||||
use Drupal\Core\Routing\RouteMatchInterface;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\MigrateMessage;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
|
||||
/**
|
||||
* Implements hook_help().
|
||||
|
|
@ -22,41 +19,3 @@ function migrate_drupal_help($route_name, RouteMatchInterface $route_match) {
|
|||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_migration_plugins_alter().
|
||||
*/
|
||||
function migrate_drupal_migration_plugins_alter(&$definitions) {
|
||||
// This is why the deriver can't do this: the 'd6_taxonomy_vocabulary'
|
||||
// definition is not available to the deriver as it is running inside
|
||||
// getDefinitions().
|
||||
if (isset($definitions['d6_taxonomy_vocabulary'])) {
|
||||
$vocabulary_migration_definition = [
|
||||
'source' => [
|
||||
'ignore_map' => TRUE,
|
||||
'plugin' => 'd6_taxonomy_vocabulary',
|
||||
],
|
||||
'destination' => [
|
||||
'plugin' => 'null',
|
||||
],
|
||||
];
|
||||
$vocabulary_migration = new Migration([], uniqid(), $vocabulary_migration_definition);
|
||||
$executable = new MigrateExecutable($vocabulary_migration, new MigrateMessage());
|
||||
$process = ['vid' => $definitions['d6_taxonomy_vocabulary']['process']['vid']];
|
||||
try {
|
||||
foreach ($vocabulary_migration->getSourcePlugin() as $row) {
|
||||
$executable->processRow($row, $process);
|
||||
$source_vid = $row->getSourceProperty('vid');
|
||||
$plugin_ids = ['d6_term_node:' . $source_vid, 'd6_term_node_revision:' . $source_vid];
|
||||
foreach ($plugin_ids as $plugin_id) {
|
||||
if (isset($definitions[$plugin_id])) {
|
||||
$definitions[$plugin_id]['process'][$row->getDestinationProperty('vid')] = 'tid';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,114 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate_drupal\Plugin\migrate\CckMigration.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate_drupal\Plugin\migrate;
|
||||
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate\Plugin\MigratePluginManager;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
|
||||
use Drupal\migrate\Plugin\RequirementsInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Migration plugin class for migrations dealing with CCK field values.
|
||||
*/
|
||||
class CckMigration extends Migration implements ContainerFactoryPluginInterface {
|
||||
|
||||
/**
|
||||
* Flag indicating whether the CCK data has been filled already.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $init = FALSE;
|
||||
|
||||
/**
|
||||
* List of cckfield plugin IDs which have already run.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $processedFieldTypes = [];
|
||||
|
||||
/**
|
||||
* Already-instantiated cckfield plugins, keyed by ID.
|
||||
*
|
||||
* @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[]
|
||||
*/
|
||||
protected $cckPluginCache;
|
||||
|
||||
/**
|
||||
* The migration plugin manager.
|
||||
*
|
||||
* @var \Drupal\Component\Plugin\PluginManagerInterface
|
||||
*/
|
||||
protected $migrationPluginManager;
|
||||
|
||||
/**
|
||||
* Constructs a CckMigration.
|
||||
*
|
||||
* @param array $configuration
|
||||
* Plugin configuration.
|
||||
* @param string $plugin_id
|
||||
* The plugin ID.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin definition.
|
||||
* @param \Drupal\migrate\Plugin\MigratePluginManager $cck_manager
|
||||
* The cckfield plugin manager.
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigratePluginManager $cck_manager, MigrationPluginManagerInterface $migration_plugin_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||
$this->cckPluginManager = $cck_manager;
|
||||
$this->migrationPluginManager = $migration_plugin_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$container->get('plugin.manager.migrate.cckfield'),
|
||||
$container->get('plugin.manager.migration')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getProcess() {
|
||||
if (!$this->init) {
|
||||
$this->init = TRUE;
|
||||
$source_plugin = $this->migrationPluginManager->createInstance($this->pluginId)->getSourcePlugin();
|
||||
if ($source_plugin instanceof RequirementsInterface) {
|
||||
try {
|
||||
$source_plugin->checkRequirements();
|
||||
}
|
||||
catch (RequirementsException $e) {
|
||||
// Kill the rest of the method.
|
||||
$source_plugin = [];
|
||||
}
|
||||
}
|
||||
foreach ($source_plugin as $row) {
|
||||
$field_type = $row->getSourceProperty('type');
|
||||
if (!isset($this->processedFieldTypes[$field_type]) && $this->cckPluginManager->hasDefinition($field_type)) {
|
||||
$this->processedFieldTypes[$field_type] = TRUE;
|
||||
// Allow the cckfield plugin to alter the migration as necessary so that
|
||||
// it knows how to handle fields of this type.
|
||||
if (!isset($this->cckPluginCache[$field_type])) {
|
||||
$this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $this);
|
||||
}
|
||||
call_user_func([$this->cckPluginCache[$field_type], $this->pluginDefinition['cck_plugin_method']], $this);
|
||||
}
|
||||
}
|
||||
}
|
||||
return parent::getProcess();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\migrate_drupal\Plugin\migrate\builder\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate\Plugin\RequirementsInterface;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\builder\CckBuilder;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class EntityFieldStorageConfig extends BaseEntityFieldStorageConfig {
|
|||
* The plugin_id for the plugin instance.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin implementation definition.
|
||||
* @param \Drupal\migrate\Entity\MigrationInterface $migration
|
||||
* @param MigrationInterface $migration
|
||||
* The migration.
|
||||
* @param EntityStorageInterface $storage
|
||||
* The storage for this entity type.
|
||||
|
|
|
|||
|
|
@ -58,8 +58,6 @@ abstract class MigrateDrupalTestBase extends MigrateTestBase {
|
|||
* Drupal version as provided in migration_tags - e.g., 'Drupal 6'.
|
||||
*/
|
||||
protected function installMigrations($version) {
|
||||
// @TODO https://www.drupal.org/node/2668436
|
||||
return;
|
||||
$migration_templates = \Drupal::service('migrate.template_storage')->findTemplatesByTag($version);
|
||||
$migrations = \Drupal::service('migrate.migration_builder')->createMigrations($migration_templates);
|
||||
foreach ($migrations as $migration) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
namespace Drupal\migrate_drupal\Tests;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
|
|
@ -45,13 +45,14 @@ trait StubTestTrait {
|
|||
*/
|
||||
protected function createStub($entity_type_id) {
|
||||
// Create a dummy migration to pass to the destination plugin.
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'dummy',
|
||||
'migration_tags' => ['Stub test'],
|
||||
'source' => ['plugin' => 'empty'],
|
||||
'process' => [],
|
||||
'destination' => ['plugin' => 'entity:' . $entity_type_id],
|
||||
];
|
||||
$migration = new Migration([], uniqid(), $definition);
|
||||
$migration = Migration::create($config);
|
||||
$destination_plugin = $migration->getDestinationPlugin(TRUE);
|
||||
$stub_row = new Row([], [], TRUE);
|
||||
$destination_ids = $destination_plugin->import($stub_row);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\migrate_drupal\Tests\d6\CckMigrationBuilderTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\migrate_drupal\Tests\d6;
|
||||
|
||||
use Drupal\Core\Database\Database;
|
||||
|
||||
/**
|
||||
* @group migrate_drupal
|
||||
*/
|
||||
class CckMigrationBuilderTest extends MigrateDrupal6TestBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = ['field'];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$database = Database::getConnection('default', 'migrate');
|
||||
$database
|
||||
->update('system')
|
||||
->fields(array('status' => 0))
|
||||
->condition('name', 'content')
|
||||
->condition('type', 'module')
|
||||
->execute();
|
||||
$database->schema()->dropTable('content_node_field');
|
||||
$database->schema()->dropTable('content_node_field_instance');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the CckMigration builder performs a requirements check on the
|
||||
* source plugin.
|
||||
*/
|
||||
public function testRequirementCheck() {
|
||||
$template = \Drupal::service('migrate.template_storage')
|
||||
->getTemplateByName('d6_field');
|
||||
// Without the requirements check, this will throw a \PDOException because
|
||||
// the CCK tables do not exist.
|
||||
\Drupal::service('migrate.migration_builder')->createMigrations([$template]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -6,6 +6,8 @@
|
|||
*/
|
||||
|
||||
namespace Drupal\migrate_drupal\Tests\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -56,6 +58,13 @@ abstract class MigrateDrupal6TestBase extends MigrateDrupalTestBase {
|
|||
'user_picture_entity_form_display',
|
||||
]);
|
||||
}
|
||||
else {
|
||||
// These are optional dependencies of d6_user, but we don't need them if
|
||||
// we're not migrating user pictures.
|
||||
Migration::load('d6_user_picture_file')->delete();
|
||||
Migration::load('user_picture_entity_display')->delete();
|
||||
Migration::load('user_picture_entity_form_display')->delete();
|
||||
}
|
||||
|
||||
$this->executeMigration('d6_user');
|
||||
}
|
||||
|
|
@ -95,10 +104,10 @@ abstract class MigrateDrupal6TestBase extends MigrateDrupalTestBase {
|
|||
$this->migrateFields();
|
||||
|
||||
$this->installEntitySchema('node');
|
||||
$this->executeMigrations(['d6_node_settings', 'd6_node']);
|
||||
$this->executeMigrations(['d6_node_settings', 'd6_node:*']);
|
||||
|
||||
if ($include_revisions) {
|
||||
$this->executeMigrations(['d6_node_revision']);
|
||||
$this->executeMigrations(['d6_node_revision:*']);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\migrate_drupal\Tests\dependencies;
|
||||
|
||||
use Drupal\Component\Utility\SafeMarkup;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
|
|
@ -27,26 +28,24 @@ class MigrateDependenciesTest extends MigrateDrupal6TestBase {
|
|||
* Tests that the order is correct when loading several migrations.
|
||||
*/
|
||||
public function testMigrateDependenciesOrder() {
|
||||
$migration_items = array('d6_comment', 'd6_filter_format', 'd6_node:page');
|
||||
// @TODO https://www.drupal.org/node/2666640
|
||||
return;
|
||||
$migrations = $this->getMigration()->createInstances($migration_items);
|
||||
$expected_order = array('d6_filter_format', 'd6_node:page', 'd6_comment');
|
||||
$migration_items = array('d6_comment', 'd6_filter_format', 'd6_node__page');
|
||||
$migrations = Migration::loadMultiple($migration_items);
|
||||
$expected_order = array('d6_filter_format', 'd6_node__page', 'd6_comment');
|
||||
$this->assertIdentical(array_keys($migrations), $expected_order);
|
||||
$expected_requirements = array(
|
||||
// d6_comment depends on d6_node:*, which the storage controller expands
|
||||
// into every variant of d6_node created by the MigrationBuilder.
|
||||
'd6_node:article',
|
||||
'd6_node:company',
|
||||
'd6_node:employee',
|
||||
'd6_node:event',
|
||||
'd6_node:page',
|
||||
'd6_node:sponsor',
|
||||
'd6_node:story',
|
||||
'd6_node:test_event',
|
||||
'd6_node:test_page',
|
||||
'd6_node:test_planet',
|
||||
'd6_node:test_story',
|
||||
'd6_node__article',
|
||||
'd6_node__company',
|
||||
'd6_node__employee',
|
||||
'd6_node__event',
|
||||
'd6_node__page',
|
||||
'd6_node__sponsor',
|
||||
'd6_node__story',
|
||||
'd6_node__test_event',
|
||||
'd6_node__test_page',
|
||||
'd6_node__test_planet',
|
||||
'd6_node__test_story',
|
||||
'd6_node_type',
|
||||
'd6_node_settings',
|
||||
'd6_filter_format',
|
||||
|
|
@ -68,10 +67,8 @@ class MigrateDependenciesTest extends MigrateDrupal6TestBase {
|
|||
* Tests dependencies on the migration of aggregator feeds & items.
|
||||
*/
|
||||
public function testAggregatorMigrateDependencies() {
|
||||
// @TODO: fix when dependencies are working again.
|
||||
return;
|
||||
/** @var \Drupal\migrate\entity\Migration $migration */
|
||||
$migration = $this->getMigration('d6_aggregator_item');
|
||||
$migration = Migration::load('d6_aggregator_item');
|
||||
$executable = new MigrateExecutable($migration, $this);
|
||||
$this->startCollectingMessages();
|
||||
$executable->import();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
migrate.source.d6_view_mode:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 view mode'
|
||||
mapping:
|
||||
constants:
|
||||
type: mapping
|
||||
label: 'Constants'
|
||||
mapping:
|
||||
targetEntityType:
|
||||
type: string
|
||||
label: 'Target entity type'
|
||||
status:
|
||||
type: boolean
|
||||
label: 'Status'
|
||||
|
||||
migrate.source.d6_node_type:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 node type'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_node:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 node'
|
||||
mapping:
|
||||
node_type:
|
||||
type: string
|
||||
label: 'Node type'
|
||||
|
||||
migrate.source.d7_node:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 node'
|
||||
mapping:
|
||||
node_type:
|
||||
type: string
|
||||
label: 'Node type'
|
||||
|
||||
migrate.source.d6_node_revision:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 node revision'
|
||||
mapping:
|
||||
node_type:
|
||||
type: string
|
||||
label: 'Node type'
|
||||
|
||||
migrate.source.d7_node_revision:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 node revision'
|
||||
mapping:
|
||||
node_type:
|
||||
type: string
|
||||
label: 'Node type'
|
||||
|
||||
migrate.source.d7_node_type:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 7 node type'
|
||||
|
|
@ -2,7 +2,8 @@ id: d6_node
|
|||
label: Nodes
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
|
||||
builder:
|
||||
plugin: d6_node
|
||||
source:
|
||||
plugin: d6_node
|
||||
process:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ id: d6_node_revision
|
|||
label: Node revisions
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
|
||||
builder:
|
||||
plugin: d6_node
|
||||
source:
|
||||
plugin: d6_node_revision
|
||||
process:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ id: d7_node
|
|||
label: Nodes
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
|
||||
builder:
|
||||
plugin: d7_node
|
||||
source:
|
||||
plugin: d7_node
|
||||
process:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ id: d7_node_revision
|
|||
label: Node revisions
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
|
||||
builder:
|
||||
plugin: d7_node
|
||||
source:
|
||||
plugin: d7_node_revision
|
||||
process:
|
||||
|
|
|
|||
|
|
@ -1,131 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\node\Plugin\migrate\D6NodeDeriver.
|
||||
*/
|
||||
|
||||
namespace Drupal\node\Plugin\migrate;
|
||||
|
||||
use Drupal\Component\Plugin\Derivative\DeriverBase;
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Plugin\MigrationDeriverTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Deriver for Drupal 6 node and node revision migrations based on node types.
|
||||
*/
|
||||
class D6NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
|
||||
use MigrationDeriverTrait;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $init = FALSE;
|
||||
|
||||
/**
|
||||
* Already-instantiated cckfield plugins, keyed by ID.
|
||||
*
|
||||
* @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[]
|
||||
*/
|
||||
protected $cckPluginCache;
|
||||
|
||||
/**
|
||||
* @var \Drupal\Component\Plugin\PluginManagerInterface
|
||||
*/
|
||||
protected $cckPluginManager;
|
||||
|
||||
/**
|
||||
* D6NodeDeriver constructor.
|
||||
*
|
||||
* @param $base_plugin_id
|
||||
* @param \Drupal\Component\Plugin\PluginManagerInterface $cck_manager
|
||||
*/
|
||||
public function __construct($base_plugin_id, PluginManagerInterface $cck_manager) {
|
||||
$this->basePluginId = $base_plugin_id;
|
||||
$this->cckPluginManager = $cck_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, $base_plugin_id) {
|
||||
return new static(
|
||||
$base_plugin_id,
|
||||
$container->get('plugin.manager.migrate.cckfield')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the definition of all derivatives of a base plugin.
|
||||
*
|
||||
* @param array $base_plugin_definition
|
||||
* The definition array of the base plugin.
|
||||
* @return array
|
||||
* An array of full derivative definitions keyed on derivative id.
|
||||
*
|
||||
* @see getDerivativeDefinition()
|
||||
*/
|
||||
public function getDerivativeDefinitions($base_plugin_definition) {
|
||||
// Read all CCK field instance definitions in the source database.
|
||||
$fields = array();
|
||||
$source_plugin = static::getSourcePlugin('d6_field_instance');
|
||||
try {
|
||||
$source_plugin->checkRequirements();
|
||||
|
||||
foreach ($source_plugin as $row) {
|
||||
$fields[$row->getSourceProperty('type_name')][$row->getSourceProperty('field_name')] = $row->getSource();
|
||||
}
|
||||
}
|
||||
catch (RequirementsException $e) {
|
||||
// Don't do anything; $fields will be empty.
|
||||
}
|
||||
|
||||
try {
|
||||
foreach (static::getSourcePlugin('d6_node_type') as $row) {
|
||||
$node_type = $row->getSourceProperty('type');
|
||||
$values = $base_plugin_definition;
|
||||
$derivative_id = $node_type;
|
||||
|
||||
$label = $base_plugin_definition['label'];
|
||||
$values['label'] = t("@label (@type)", [
|
||||
'@label' => $label,
|
||||
'@type' => $node_type
|
||||
]);
|
||||
$values['source']['node_type'] = $node_type;
|
||||
|
||||
// If this migration is based on the d6_node_revision template, it should
|
||||
// explicitly depend on the corresponding d6_node variant.
|
||||
if ($base_plugin_definition['id'] == 'd6_node_revision') {
|
||||
$values['migration_dependencies']['required'][] = 'd6_node:' . $node_type;
|
||||
}
|
||||
|
||||
$migration = new Migration([], uniqid(), $values);
|
||||
if (isset($fields[$node_type])) {
|
||||
foreach ($fields[$node_type] as $field_name => $info) {
|
||||
$field_type = $info['type'];
|
||||
if ($this->cckPluginManager->hasDefinition($info['type'])) {
|
||||
if (!isset($this->cckPluginCache[$field_type])) {
|
||||
$this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $migration);
|
||||
}
|
||||
$this->cckPluginCache[$field_type]
|
||||
->processCckFieldValues($migration, $field_name, $info);
|
||||
}
|
||||
else {
|
||||
$migration->setProcessOfProperty($field_name, $field_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->derivatives[$derivative_id] = $migration->getPluginDefinition();
|
||||
}
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
// @TODO https://www.drupal.org/node/2666640
|
||||
}
|
||||
return $this->derivatives;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,112 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\node\Plugin\migrate\D7NodeDeriver.
|
||||
*/
|
||||
|
||||
namespace Drupal\node\Plugin\migrate;
|
||||
|
||||
use Drupal\Component\Plugin\Derivative\DeriverBase;
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Plugin\MigrationDeriverTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Deriver for Drupal 7 node and node revision migrations based on node types.
|
||||
*/
|
||||
class D7NodeDeriver extends DeriverBase implements ContainerDeriverInterface {
|
||||
use MigrationDeriverTrait;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $init = FALSE;
|
||||
|
||||
/**
|
||||
* Already-instantiated cckfield plugins, keyed by ID.
|
||||
*
|
||||
* @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[]
|
||||
*/
|
||||
protected $cckPluginCache;
|
||||
|
||||
/**
|
||||
* @var \Drupal\Component\Plugin\PluginManagerInterface
|
||||
*/
|
||||
protected $cckPluginManager;
|
||||
|
||||
/**
|
||||
* D7NodeDeriver constructor.
|
||||
*
|
||||
* @param $base_plugin_id
|
||||
* @param \Drupal\Component\Plugin\PluginManagerInterface $cck_manager
|
||||
*/
|
||||
public function __construct($base_plugin_id, PluginManagerInterface $cck_manager) {
|
||||
$this->basePluginId = $base_plugin_id;
|
||||
$this->cckPluginManager = $cck_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, $base_plugin_id) {
|
||||
return new static(
|
||||
$base_plugin_id,
|
||||
$container->get('plugin.manager.migrate.cckfield')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDerivativeDefinitions($base_plugin_definition) {
|
||||
try {
|
||||
// Read all field instance definitions in the source database.
|
||||
$fields = array();
|
||||
foreach (static::getSourcePlugin('d7_field_instance') as $row) {
|
||||
if ($row->getSourceProperty('entity_type') == 'node') {
|
||||
$fields[$row->getSourceProperty('bundle')][$row->getSourceProperty('field_name')] = $row->getSource();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (static::getSourcePlugin('d7_node_type') as $row) {
|
||||
$node_type = $row->getSourceProperty('type');
|
||||
$values = $base_plugin_definition;
|
||||
$derivative_id = $node_type;
|
||||
|
||||
$values['label'] = t('@label (@type)', [
|
||||
'@label' => $values['label'],
|
||||
'@type' => $row->getSourceProperty('name')
|
||||
]);
|
||||
$values['source']['node_type'] = $node_type;
|
||||
|
||||
$migration = new Migration([], uniqid(), $values);
|
||||
if (isset($fields[$node_type])) {
|
||||
foreach ($fields[$node_type] as $field_name => $info) {
|
||||
$field_type = $info['type'];
|
||||
if ($this->cckPluginManager->hasDefinition($field_type)) {
|
||||
if (!isset($this->cckPluginCache[$field_type])) {
|
||||
$this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $migration);
|
||||
}
|
||||
$this->cckPluginCache[$field_type]
|
||||
->processCckFieldValues($migration, $field_name, $info);
|
||||
}
|
||||
else {
|
||||
$migration->setProcessOfProperty($field_name, $field_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->derivatives[$derivative_id] = $migration->getPluginDefinition();
|
||||
}
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
// It is possible no D7 tables are loaded so just eat exceptions.
|
||||
}
|
||||
|
||||
return $this->derivatives;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\node\Plugin\migrate\builder\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Exception\RequirementsException;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\builder\CckBuilder;
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\node\Plugin\migrate\builder\d7;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\builder\CckBuilder;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\node\Tests\Migrate\d6\MigrateNodeBuilderTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\node\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
|
||||
/**
|
||||
* @group migrate_drupal_6
|
||||
*/
|
||||
class MigrateNodeBuilderTest extends MigrateDrupal6TestBase {
|
||||
|
||||
/**
|
||||
* @var MigrationInterface[]
|
||||
*/
|
||||
protected $builtMigrations = [];
|
||||
|
||||
/**
|
||||
* Asserts various aspects of a migration entity.
|
||||
*
|
||||
* @param string $id
|
||||
* The migration ID.
|
||||
* @param string $label
|
||||
* The label.
|
||||
*/
|
||||
protected function assertEntity($id, $label) {
|
||||
$migration = $this->builtMigrations[$id];
|
||||
$this->assertTrue($migration instanceof Migration);
|
||||
$this->assertIdentical($id, $migration->id());
|
||||
$this->assertEqual($label, $migration->label());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests creating migrations from a template, using a builder plugin.
|
||||
*/
|
||||
public function testCreateMigrations() {
|
||||
$templates = [
|
||||
'd6_node' => [
|
||||
'id' => 'd6_node',
|
||||
'label' => 'Drupal 6 nodes',
|
||||
'builder' => [
|
||||
'plugin' => 'd6_node',
|
||||
],
|
||||
'source' => [
|
||||
'plugin' => 'd6_node',
|
||||
],
|
||||
'process' => [
|
||||
'nid' => 'nid',
|
||||
'vid' => 'vid',
|
||||
'uid' => 'uid',
|
||||
],
|
||||
'destination' => [
|
||||
'plugin' => 'entity:node',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$migrations = \Drupal::service('migrate.migration_builder')->createMigrations($templates);
|
||||
// Key the array.
|
||||
foreach ($migrations as $migration) {
|
||||
$this->builtMigrations[$migration->id()] = $migration;
|
||||
}
|
||||
$this->assertIdentical(11, count($this->builtMigrations));
|
||||
$this->assertEntity('d6_node__article', 'Drupal 6 nodes (article)');
|
||||
$this->assertEntity('d6_node__company', 'Drupal 6 nodes (company)');
|
||||
$this->assertEntity('d6_node__employee', 'Drupal 6 nodes (employee)');
|
||||
$this->assertEntity('d6_node__event', 'Drupal 6 nodes (event)');
|
||||
$this->assertEntity('d6_node__page', 'Drupal 6 nodes (page)');
|
||||
$this->assertEntity('d6_node__sponsor', 'Drupal 6 nodes (sponsor)');
|
||||
$this->assertEntity('d6_node__story', 'Drupal 6 nodes (story)');
|
||||
$this->assertEntity('d6_node__test_event', 'Drupal 6 nodes (test_event)');
|
||||
$this->assertEntity('d6_node__test_page', 'Drupal 6 nodes (test_page)');
|
||||
$this->assertEntity('d6_node__test_planet', 'Drupal 6 nodes (test_planet)');
|
||||
$this->assertEntity('d6_node__test_story', 'Drupal 6 nodes (test_story)');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -19,7 +19,7 @@ class MigrateNodeRevisionTest extends MigrateNodeTestBase {
|
|||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->executeMigrations(['d6_node', 'd6_node_revision']);
|
||||
$this->executeMigrations(['d6_node:*', 'd6_node_revision:*']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@
|
|||
|
||||
namespace Drupal\node\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\file\Tests\Migrate\d6\FileMigrationTestTrait;
|
||||
use Drupal\migrate\Entity\MigrationInterface;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\node\Entity\Node;
|
||||
|
||||
|
|
@ -19,16 +20,12 @@ use Drupal\node\Entity\Node;
|
|||
*/
|
||||
class MigrateNodeTest extends MigrateNodeTestBase {
|
||||
|
||||
use FileMigrationTestTrait;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->setUpMigratedFiles();
|
||||
$this->installSchema('file', ['file_usage']);
|
||||
$this->executeMigrations(['d6_node']);
|
||||
$this->executeMigrations(['d6_node:*']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -54,25 +51,6 @@ class MigrateNodeTest extends MigrateNodeTestBase {
|
|||
$this->assertIdentical('1', $node_revision->getRevisionAuthor()->id(), 'Node revision has the correct user');
|
||||
// This is empty on the first revision.
|
||||
$this->assertIdentical(NULL, $node_revision->revision_log->value);
|
||||
$this->assertIdentical('This is a shared text field', $node->field_test->value);
|
||||
$this->assertIdentical('filtered_html', $node->field_test->format);
|
||||
$this->assertIdentical('10', $node->field_test_two->value);
|
||||
$this->assertIdentical('20', $node->field_test_two[1]->value);
|
||||
|
||||
$this->assertIdentical('42.42', $node->field_test_three->value, 'Single field second value is correct.');
|
||||
$this->assertIdentical('3412', $node->field_test_integer_selectlist[0]->value);
|
||||
$this->assertIdentical('1', $node->field_test_identical1->value, 'Integer value is correct');
|
||||
$this->assertIdentical('1', $node->field_test_identical2->value, 'Integer value is correct');
|
||||
$this->assertIdentical('This is a field with exclude unset.', $node->field_test_exclude_unset->value, 'Field with exclude unset is correct.');
|
||||
|
||||
// Test that link fields are migrated.
|
||||
$this->assertIdentical('https://www.drupal.org/project/drupal', $node->field_test_link->uri);
|
||||
$this->assertIdentical('Drupal project page', $node->field_test_link->title);
|
||||
$this->assertIdentical(['target' => '_blank'], $node->field_test_link->options['attributes']);
|
||||
|
||||
// Test the file field meta.
|
||||
$this->assertIdentical('desc', $node->field_test_filefield->description);
|
||||
$this->assertIdentical('5', $node->field_test_filefield->target_id);
|
||||
|
||||
$node = Node::load(2);
|
||||
$this->assertIdentical('Test title rev 3', $node->getTitle());
|
||||
|
|
@ -108,6 +86,7 @@ class MigrateNodeTest extends MigrateNodeTestBase {
|
|||
*/
|
||||
protected function rerunMigration($new_row = []) {
|
||||
$title = $this->randomString();
|
||||
$migration = Migration::load('d6_node__story');
|
||||
$source_connection = Database::getConnection('default', 'migrate');
|
||||
$source_connection->update('node_revisions')
|
||||
->fields(array(
|
||||
|
|
@ -116,7 +95,6 @@ class MigrateNodeTest extends MigrateNodeTestBase {
|
|||
))
|
||||
->condition('vid', 3)
|
||||
->execute();
|
||||
$migration = $this->getMigration('d6_node:story');
|
||||
$table_name = $migration->getIdMap()->mapTableName();
|
||||
$default_connection = \Drupal::database();
|
||||
$default_connection->truncate($table_name)->execute();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\node\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
use Drupal\node\Entity\NodeType;
|
||||
|
||||
|
|
@ -31,7 +32,7 @@ class MigrateNodeTypeTest extends MigrateDrupal6TestBase {
|
|||
* Tests Drupal 6 node type to Drupal 8 migration.
|
||||
*/
|
||||
public function testNodeType() {
|
||||
$id_map = $this->getMigration('d6_node_type')->getIdMap();
|
||||
$id_map = Migration::load('d6_node_type')->getIdMap();
|
||||
// Test the test_page content type.
|
||||
$node_type_page = NodeType::load('test_page');
|
||||
$this->assertIdentical('test_page', $node_type_page->id(), 'Node type test_page loaded');
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\node\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\Core\Entity\Entity\EntityViewMode;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -34,7 +35,7 @@ class MigrateViewModesTest extends MigrateDrupal6TestBase {
|
|||
$this->assertIdentical(FALSE, is_null($view_mode), 'Preview view mode loaded.');
|
||||
$this->assertIdentical('Preview', $view_mode->label(), 'View mode has correct label.');
|
||||
// Test the ID map.
|
||||
$this->assertIdentical(array('node', 'preview'), $this->getMigration('d6_view_modes')->getIdMap()->lookupDestinationID(array(1)));
|
||||
$this->assertIdentical(array('node', 'preview'), Migration::load('d6_view_modes')->getIdMap()->lookupDestinationID(array(1)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ class MigrateNodeTest extends MigrateDrupal7TestBase {
|
|||
'd7_comment_type',
|
||||
'd7_field',
|
||||
'd7_field_instance',
|
||||
'd7_node:test_content_type',
|
||||
'd7_node:article',
|
||||
'd7_node__test_content_type',
|
||||
'd7_node__article',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\node\Tests\Migrate\d7;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate_drupal\Tests\d7\MigrateDrupal7TestBase;
|
||||
|
||||
/**
|
||||
|
|
@ -19,7 +20,7 @@ class NodeBuilderTest extends MigrateDrupal7TestBase {
|
|||
public static $modules = ['node'];
|
||||
|
||||
public function testBuilder() {
|
||||
$process = $this->getMigration('d7_node:test_content_type')->getProcess();
|
||||
$process = Migration::load('d7_node__test_content_type')->getProcess();
|
||||
$this->assertIdentical('field_boolean', $process['field_boolean'][0]['source']);
|
||||
$this->assertIdentical('field_email', $process['field_email'][0]['source']);
|
||||
$this->assertIdentical('field_phone', $process['field_phone'][0]['source']);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class UrlAlias extends DestinationBase implements ContainerFactoryPluginInterfac
|
|||
* The plugin_id for the plugin instance.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin implementation definition.
|
||||
* @param \Drupal\migrate\Entity\MigrationInterface $migration
|
||||
* @param MigrationInterface $migration
|
||||
* The migration.
|
||||
* @param \Drupal\Core\Path\AliasStorage $alias_storage
|
||||
* The alias storage service.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\path\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
|
@ -52,8 +53,7 @@ class MigrateUrlAliasTest extends MigrateDrupal6TestBase {
|
|||
* Test the url alias migration.
|
||||
*/
|
||||
public function testUrlAlias() {
|
||||
$id_map = $this->getMigration('d6_url_alias')->getIdMap();
|
||||
// Test that the field exists.
|
||||
$id_map = Migration::load('d6_url_alias')->getIdMap();
|
||||
$conditions = array(
|
||||
'source' => '/node/1',
|
||||
'alias' => '/alias-one',
|
||||
|
|
@ -82,7 +82,9 @@ class MigrateUrlAliasTest extends MigrateDrupal6TestBase {
|
|||
->update($id_map->mapTableName())
|
||||
->fields(array('source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE))
|
||||
->execute();
|
||||
$migration = $this->getMigration('d6_url_alias');
|
||||
$migration = \Drupal::entityManager()
|
||||
->getStorage('migration')
|
||||
->loadUnchanged('d6_url_alias');
|
||||
$this->executeMigration($migration);
|
||||
|
||||
$path = \Drupal::service('path.alias_storage')->load(array('pid' => $path['pid']));
|
||||
|
|
|
|||
|
|
@ -58,7 +58,9 @@ class MigrateSearchPageTest extends MigrateDrupal6TestBase {
|
|||
->execute();
|
||||
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = $this->getMigration('search_page');
|
||||
$migration = \Drupal::entityManager()
|
||||
->getStorage('migration')
|
||||
->loadUnchanged('search_page');
|
||||
// Indicate we're rerunning a migration that's already run.
|
||||
$migration->getIdMap()->prepareUpdate();
|
||||
$this->executeMigration($migration);
|
||||
|
|
|
|||
|
|
@ -60,7 +60,9 @@ class MigrateSearchPageTest extends MigrateDrupal7TestBase {
|
|||
->execute();
|
||||
|
||||
/** @var \Drupal\migrate\Entity\MigrationInterface $migration */
|
||||
$migration = $this->getMigration('search_page');
|
||||
$migration = \Drupal::entityManager()
|
||||
->getStorage('migration')
|
||||
->loadUnchanged('search_page');
|
||||
// Indicate we're rerunning a migration that's already run.
|
||||
$migration->getIdMap()->prepareUpdate();
|
||||
$this->executeMigration($migration);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class ShortcutSetUsers extends DestinationBase implements ContainerFactoryPlugin
|
|||
* The plugin_id for the plugin instance.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin implementation definition.
|
||||
* @param \Drupal\migrate\Entity\MigrationInterface $migration
|
||||
* @param MigrationInterface $migration
|
||||
* The migration.
|
||||
* @param \Drupal\shortcut\ShortcutSetStorageInterface $shortcut_set_storage
|
||||
* The shortcut_set entity storage handler.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\system\Tests\Migrate;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
use Drupal\system\Entity\Menu;
|
||||
|
|
@ -45,7 +46,7 @@ EOT;
|
|||
->condition('menu_name', 'navigation')
|
||||
->execute();
|
||||
|
||||
$migration = $this->getMigration('menu');
|
||||
$migration = Migration::load('menu');
|
||||
\Drupal::database()
|
||||
->truncate($migration->getIdMap()->mapTableName())
|
||||
->execute();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\system\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\Core\Datetime\Entity\DateFormat;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
|
|
@ -46,11 +47,13 @@ class MigrateDateFormatTest extends MigrateDrupal6TestBase {
|
|||
->condition('name', 'date_format_short')
|
||||
->execute();
|
||||
|
||||
$migration = $this->getMigration('d6_date_formats');
|
||||
\Drupal::database()
|
||||
->truncate($migration->getIdMap()->mapTableName())
|
||||
->truncate(Migration::load('d6_date_formats')->getIdMap()->mapTableName())
|
||||
->execute();
|
||||
|
||||
$migration = \Drupal::entityManager()
|
||||
->getStorage('migration')
|
||||
->loadUnchanged('d6_date_formats');
|
||||
$this->executeMigration($migration);
|
||||
|
||||
$short_date_format = DateFormat::load('short');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
# Schema for the migration source plugins.
|
||||
|
||||
migrate.source.d6_taxonomy_vocabulary:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field instance form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_taxonomy_vocabulary_per_type:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field instance form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_taxonomy_vocabulary_per_type:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 field instance form display'
|
||||
mapping:
|
||||
constants:
|
||||
type: migrate_entity_constant
|
||||
label: 'Constants'
|
||||
|
||||
migrate.source.d6_term_node:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 terms per node'
|
||||
mapping:
|
||||
vid:
|
||||
type: integer
|
||||
label: 'Vocabulary ID'
|
||||
|
||||
migrate.source.d6_term_node_revision:
|
||||
type: migrate_source_sql
|
||||
label: 'Drupal 6 terms per node revision'
|
||||
mapping:
|
||||
vid:
|
||||
type: integer
|
||||
label: 'Vocabulary ID'
|
||||
|
|
@ -2,14 +2,15 @@ id: d6_term_node
|
|||
label: Term/node relationships
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D6TermNodeDeriver
|
||||
builder:
|
||||
plugin: d6_term_node
|
||||
source:
|
||||
plugin: d6_term_node
|
||||
process:
|
||||
nid:
|
||||
-
|
||||
plugin: migration
|
||||
migration: d6_node
|
||||
migration: d6_node:*
|
||||
source: nid
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
|
|
|
|||
|
|
@ -2,14 +2,15 @@ id: d6_term_node_revision
|
|||
label: Term/node relationship revisions
|
||||
migration_tags:
|
||||
- Drupal 6
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D6TermNodeDeriver
|
||||
builder:
|
||||
plugin: d6_term_node
|
||||
source:
|
||||
plugin: d6_term_node_revision
|
||||
process:
|
||||
vid:
|
||||
-
|
||||
plugin: migration
|
||||
migration: d6_node
|
||||
migration: d6_node:*
|
||||
source: vid
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\taxonomy\Plugin\migrate\D6TermNodeDeriver.
|
||||
*/
|
||||
|
||||
namespace Drupal\taxonomy\Plugin\migrate;
|
||||
|
||||
use Drupal\Component\Plugin\Derivative\DeriverBase;
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
|
||||
use Drupal\migrate\Plugin\MigrationDeriverTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Deriver for Drupal 6 term node migrations based on vocabularies.
|
||||
*/
|
||||
class D6TermNodeDeriver extends DeriverBase implements ContainerDeriverInterface {
|
||||
use MigrationDeriverTrait;
|
||||
|
||||
protected $basePluginId;
|
||||
|
||||
public function __construct($base_plugin_id, PluginManagerInterface $migration_plugin_manager) {
|
||||
$this->basePluginId = $base_plugin_id;
|
||||
$this->migrationPluginManager = $migration_plugin_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, $base_plugin_id) {
|
||||
return new static(
|
||||
$base_plugin_id,
|
||||
$container->get('plugin.manager.migration')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDerivativeDefinitions($base_plugin_definition, $base_plugin_definitions = NULL) {
|
||||
try {
|
||||
foreach (static::getSourcePlugin('d6_taxonomy_vocabulary') as $row) {
|
||||
$source_vid = $row->getSourceProperty('vid');
|
||||
$definition = $base_plugin_definition;
|
||||
$definition['source']['vid'] = $source_vid;
|
||||
// migrate_drupal_migration_plugins_alter() adds to this definition.
|
||||
$this->derivatives[$source_vid] = $definition;
|
||||
}
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
// @TODO https://www.drupal.org/node/2666640
|
||||
}
|
||||
return $this->derivatives;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
namespace Drupal\taxonomy\Plugin\migrate\builder\d6;
|
||||
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate\MigrateMessage;
|
||||
use Drupal\migrate\MigrateTemplateStorageInterface;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
namespace Drupal\taxonomy\Tests\Migrate;
|
||||
|
||||
use Drupal\migrate\Plugin\Migration;
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\MigrateExecutable;
|
||||
use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
|
||||
use Drupal\migrate_drupal\Tests\StubTestTrait;
|
||||
|
|
@ -26,7 +26,7 @@ class MigrateTaxonomyTermStubTest extends MigrateDrupalTestBase {
|
|||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = ['taxonomy', 'text', 'taxonomy_term_stub_test'];
|
||||
public static $modules = ['taxonomy', 'text'];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
|
|
@ -56,7 +56,8 @@ class MigrateTaxonomyTermStubTest extends MigrateDrupalTestBase {
|
|||
['id' => '1', 'name' => 'tags'],
|
||||
];
|
||||
$ids = ['id' => ['type' => 'integer']];
|
||||
$definition = [
|
||||
$config = [
|
||||
'id' => 'vocabularies',
|
||||
'migration_tags' => ['Stub test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
|
|
@ -69,13 +70,42 @@ class MigrateTaxonomyTermStubTest extends MigrateDrupalTestBase {
|
|||
],
|
||||
'destination' => ['plugin' => 'entity:taxonomy_vocabulary'],
|
||||
];
|
||||
$vocabulary_migration = new Migration([], uniqid(), $definition);
|
||||
$vocabulary_migration = Migration::create($config);
|
||||
$vocabulary_executable = new MigrateExecutable($vocabulary_migration, $this);
|
||||
$vocabulary_executable->import();
|
||||
|
||||
// We have a term referencing an unmigrated parent, forcing a stub to be
|
||||
// created.
|
||||
$term_executable = new MigrateExecutable($this->getMigration('taxonomy_term_stub_test'), $this);
|
||||
$term_data_rows = [
|
||||
['id' => '1', 'vocab' => '1', 'name' => 'music', 'parent' => '2'],
|
||||
];
|
||||
$ids = ['id' => ['type' => 'integer']];
|
||||
$config = [
|
||||
'id' => 'terms',
|
||||
'migration_tags' => ['Import and rollback test'],
|
||||
'source' => [
|
||||
'plugin' => 'embedded_data',
|
||||
'data_rows' => $term_data_rows,
|
||||
'ids' => $ids,
|
||||
],
|
||||
'process' => [
|
||||
'tid' => 'id',
|
||||
'vid' => 'vocab',
|
||||
'name' => 'name',
|
||||
'weight' => 'weight',
|
||||
'parent' => [
|
||||
'plugin' => 'migration',
|
||||
'migration' => 'terms',
|
||||
'source' => 'parent',
|
||||
],
|
||||
],
|
||||
'destination' => ['plugin' => 'entity:taxonomy_term'],
|
||||
'migration_dependencies' => ['required' => ['vocabularies']],
|
||||
];
|
||||
|
||||
$term_migration = Migration::create($config);
|
||||
$term_migration->save();
|
||||
$term_executable = new MigrateExecutable($term_migration, $this);
|
||||
$term_executable->import();
|
||||
// Load the referenced term, which should exist as a stub.
|
||||
/** @var \Drupal\Core\Entity\ContentEntityBase $stub_entity */
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Drupal\taxonomy\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\taxonomy\Entity\Vocabulary;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
|
||||
|
|
@ -37,7 +38,7 @@ class MigrateTaxonomyVocabularyTest extends MigrateDrupal6TestBase {
|
|||
for ($i = 0; $i < 3; $i++) {
|
||||
$j = $i + 1;
|
||||
$vocabulary = Vocabulary::load("vocabulary_{$j}_i_{$i}_");
|
||||
$this->assertIdentical($this->getMigration('d6_taxonomy_vocabulary')->getIdMap()->lookupDestinationID(array($j)), array($vocabulary->id()));
|
||||
$this->assertIdentical(Migration::load('d6_taxonomy_vocabulary')->getIdMap()->lookupDestinationID(array($j)), array($vocabulary->id()));
|
||||
$this->assertIdentical("vocabulary $j (i=$i)", $vocabulary->label());
|
||||
$this->assertIdentical("description of vocabulary $j (i=$i)", $vocabulary->getDescription());
|
||||
$this->assertIdentical($i, $vocabulary->getHierarchy());
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class MigrateTermNodeRevisionTest extends MigrateDrupal6TestBase {
|
|||
$this->installSchema('node', ['node_access']);
|
||||
$this->migrateContent(TRUE);
|
||||
$this->migrateTaxonomy();
|
||||
$this->executeMigrations(['d6_term_node', 'd6_term_node_revision']);
|
||||
$this->executeMigrations(['d6_term_node:*', 'd6_term_node_revision:*']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@
|
|||
|
||||
namespace Drupal\taxonomy\Tests\Migrate\d6;
|
||||
|
||||
use Drupal\migrate\Entity\Migration;
|
||||
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
|
||||
use Drupal\node\Entity\Node;
|
||||
|
||||
|
|
@ -36,8 +39,7 @@ class MigrateTermNodeTest extends MigrateDrupal6TestBase {
|
|||
* Tests the Drupal 6 term-node association to Drupal 8 migration.
|
||||
*/
|
||||
public function testTermNode() {
|
||||
// This is a base plugin id and we want to run all derivatives.
|
||||
$this->executeMigrations(['d6_term_node']);
|
||||
$this->executeMigrations(['d6_term_node:*']);
|
||||
|
||||
$this->container->get('entity.manager')
|
||||
->getStorage('node')
|
||||
|
|
@ -60,11 +62,11 @@ class MigrateTermNodeTest extends MigrateDrupal6TestBase {
|
|||
public function testSkipNonExistentNode() {
|
||||
// Node 2 is migrated by d6_node__story, but we need to pretend that it
|
||||
// failed, so record that in the map table.
|
||||
$this->mockFailure('d6_node:story', ['nid' => 2]);
|
||||
$this->mockFailure('d6_node__story', ['nid' => 2]);
|
||||
|
||||
// d6_term_node__2 should skip over node 2 (a.k.a. revision 3) because,
|
||||
// according to the map table, it failed.
|
||||
$migration = $this->getMigration('d6_term_node:2');
|
||||
$migration = Migration::load('d6_term_node__2');
|
||||
$this->executeMigration($migration);
|
||||
$this->assertNull($migration->getIdMap()->lookupDestinationId(['vid' => 3])[0]);
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue