Commit 19387f80 authored by catch's avatar catch

Issue #2657978 by maxocub, quietone, Gábor Hojtsy, Kristen Pol, alexpott: ...

Issue #2657978 by maxocub, quietone, Gábor Hojtsy, Kristen Pol, alexpott:  Variable to config: language_default [d6]
parent f3a83727
id: default_language
label: Default language
migration_tags:
- Drupal 6
- Drupal 7
source:
plugin: variable
variables:
- language_default
process:
default_langcode:
-
plugin: callback
callable: get_object_vars
source: language_default
-
plugin: extract
index:
- language
destination:
plugin: default_langcode
config_name: system.site
migration_dependencies:
required:
- language
<?php
namespace Drupal\language\Plugin\migrate\destination;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\migrate\MigrateException;
use Drupal\migrate\Plugin\migrate\destination\Config;
use Drupal\migrate\Row;
/**
* Provides a destination plugin for the default langcode config.
*
* @MigrateDestination(
* id = "default_langcode"
* )
*/
class DefaultLangcode extends Config {
/**
* {@inheritdoc}
*/
public function import(Row $row, array $old_destination_id_values = array()) {
$destination = $row->getDestination();
$langcode = $destination['default_langcode'];
// Check if the language exists.
if (ConfigurableLanguage::load($langcode) === NULL) {
throw new MigrateException("The language '$langcode' does not exist on this site.");
}
$this->config->set('default_langcode', $destination['default_langcode']);
$this->config->save();
return [$this->config->getName()];
}
}
<?php
namespace Drupal\Tests\language\Kernel\Migrate;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\migrate\Plugin\MigrationInterface;
/**
* Tests the default language variable migration.
*/
trait MigrateDefaultLanguageTrait {
/**
* Helper method to test the migration.
*
* @param string $langcode
* The langcode of the default language.
* @param bool $existing
* Whether the default language exists on the destination.
*/
protected function doTestMigration($langcode, $existing = TRUE) {
// The default language of the test fixture is English. Change it to
// something else before migrating, to be sure that the source site
// default language is migrated.
$value = 'O:8:"stdClass":11:{s:8:"language";s:2:"' . $langcode . '";s:4:"name";s:6:"French";s:6:"native";s:6:"French";s:9:"direction";s:1:"0";s:7:"enabled";i:1;s:7:"plurals";s:1:"0";s:7:"formula";s:0:"";s:6:"domain";s:0:"";s:6:"prefix";s:0:"";s:6:"weight";s:1:"0";s:10:"javascript";s:0:"";}';
$this->sourceDatabase->update('variable')
->fields(array(
'value' => $value
))
->condition('name', 'language_default' )
->execute();
$this->startCollectingMessages();
$this->executeMigrations(['language', 'default_language']);
if ($existing) {
// If the default language exists, we should be able to load it and the
// default_langcode config should be set.
$default_language = ConfigurableLanguage::load($langcode);
$this->assertNotNull($default_language);
$this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode'));
}
else {
// Otherwise, the migration log should contain an error message.
$messages = $this->migration->getIdMap()->getMessageIterator();
$count = 0;
foreach ($messages as $message) {
$count++;
$this->assertEqual($message->message, "The language '$langcode' does not exist on this site.");
$this->assertEqual($message->level, MigrationInterface::MESSAGE_ERROR);
}
$this->assertEqual($count, 1);
}
}
}
<?php
namespace Drupal\Tests\language\Kernel\Migrate\d6;
use Drupal\Tests\language\Kernel\Migrate\MigrateDefaultLanguageTrait;
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
/**
* Tests the default language variable migration.
*
* @group migrate_drupal_6
*/
class MigrateDefaultLanguageTest extends MigrateDrupal6TestBase {
use MigrateDefaultLanguageTrait;
/**
* {@inheritdoc}
*/
public static $modules = ['language'];
/**
* Tests language_default migration with an existing language.
*/
public function testMigrationWithExistingLanguage() {
$this->doTestMigration('fr');
}
/**
* Tests language_default migration with a non-existing language.
*/
public function testMigrationWithNonExistentLanguage() {
$this->doTestMigration('tv', FALSE);
}
}
<?php
namespace Drupal\Tests\language\Kernel\Migrate\d7;
use Drupal\Tests\language\Kernel\Migrate\MigrateDefaultLanguageTrait;
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
/**
* Tests the default language variable migration.
*
* @group migrate_drupal_7
*/
class MigrateDefaultLanguageTest extends MigrateDrupal7TestBase {
use MigrateDefaultLanguageTrait;
/**
* {@inheritdoc}
*/
public static $modules = ['language'];
/**
* Tests language_default migration with a non-existing language.
*/
public function testMigrationWithExistingLanguage() {
$this->doTestMigration('is');
}
/**
* Tests language_default migration with a non-existing language.
*/
public function testMigrationWithNonExistentLanguage() {
$this->doTestMigration('tv', FALSE);
}
}
......@@ -170,6 +170,10 @@ class MigrateUpgradeForm extends ConfirmFormBase {
'source_module' => 'dblog',
'destination_module' => 'dblog',
],
'default_language' => [
'source_module' => 'locale',
'destination_module' => 'language',
],
'd6_field' => [
'source_module' => 'content',
'destination_module' => 'field',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment