*/
public static $modules = [
'comment',
+ 'content_translation',
'datetime',
'file',
'image',
'language',
'link',
+ // Required for translation migrations.
+ 'migrate_drupal_multilingual',
'node',
'system',
'taxonomy',
// Prepare to migrate user pictures as well.
$this->installEntitySchema('file');
+ $this->installEntitySchema('comment');
+ $this->installEntitySchema('node');
+ $this->installEntitySchema('taxonomy_term');
$this->createNodeCommentCombination('page');
$this->createNodeCommentCombination('article');
$this->createNodeCommentCombination('blog');
'd7_field',
'd7_field_instance',
'd7_user',
+ 'd7_entity_translation_settings',
+ 'd7_user_entity_translation',
]);
}
* The last login time.
* @param bool $blocked
* Whether or not the account is blocked.
- * @param string $langcode
- * The user account's language code.
+ * @param string $entity_langcode
+ * The user entity language code.
+ * @param string $prefered_langcode
+ * The user prefered language code.
* @param string $timezone
* The user account's timezone name.
* @param string $init
* @param bool $has_picture
* (optional) Whether the user is expected to have a picture attached.
*/
- protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
+ protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $entity_langcode, $prefered_langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
/** @var \Drupal\user\UserInterface $user */
$user = User::load($id);
$this->assertTrue($user instanceof UserInterface);
// test if the value was imported correctly.
$language_manager = $this->container->get('language_manager');
$default_langcode = $language_manager->getDefaultLanguage()->getId();
- if ($langcode == '') {
+ if ($prefered_langcode == '') {
$this->assertSame('en', $user->langcode->value);
$this->assertSame($default_langcode, $user->preferred_langcode->value);
$this->assertSame($default_langcode, $user->preferred_admin_langcode->value);
}
- elseif ($language_manager->getLanguage($langcode) === NULL) {
+ elseif ($language_manager->getLanguage($prefered_langcode) === NULL) {
$this->assertSame($default_langcode, $user->langcode->value);
$this->assertSame($default_langcode, $user->preferred_langcode->value);
$this->assertSame($default_langcode, $user->preferred_admin_langcode->value);
}
else {
- $this->assertSame($langcode, $user->langcode->value);
- $this->assertSame($langcode, $user->preferred_langcode->value);
- $this->assertSame($langcode, $user->preferred_admin_langcode->value);
+ $this->assertSame($entity_langcode, $user->langcode->value);
+ $this->assertSame($prefered_langcode, $user->preferred_langcode->value);
+ $this->assertSame($prefered_langcode, $user->preferred_admin_langcode->value);
}
$this->assertSame($timezone, $user->getTimeZone());
$roles[] = reset($role);
}
+ $entity_translation = Database::getConnection('default', 'migrate')
+ ->select('entity_translation', 'et')
+ ->fields('et', ['language'])
+ ->condition('et.entity_type', 'user')
+ ->condition('et.entity_id', $source->uid)
+ ->condition('et.source', '')
+ ->execute()
+ ->fetchField();
+ $entity_language = $entity_translation ?: $source->language;
+
$field_integer = Database::getConnection('default', 'migrate')
->select('field_data_field_integer', 'fi')
->fields('fi', ['field_integer_value'])
->condition('fi.entity_id', $source->uid)
+ ->condition('fi.language', $entity_language)
->execute()
->fetchCol();
$field_integer = !empty($field_integer) ? $field_integer : NULL;
$source->access,
$source->login,
$source->status,
+ $entity_language,
$source->language,
$source->timezone,
$source->init,
}
}
+ /**
+ * Tests the Drupal 7 user entity translations to Drupal 8 migration.
+ */
+ public function testUserEntityTranslations() {
+ $manager = $this->container->get('content_translation.manager');
+
+ // Get the user and its translations.
+ $user = User::load(2);
+ $user_fr = $user->getTranslation('fr');
+ $user_is = $user->getTranslation('is');
+
+ // Test that fields translated with Entity Translation are migrated.
+ $this->assertSame('99', $user->field_integer->value);
+ $this->assertSame('9', $user_fr->field_integer->value);
+ $this->assertSame('1', $user_is->field_integer->value);
+
+ // Test that the French translation metadata is correctly migrated.
+ $metadata_fr = $manager->getTranslationMetadata($user_fr);
+ $this->assertSame('en', $metadata_fr->getSource());
+ $this->assertSame('1', $metadata_fr->getAuthor()->uid->value);
+ $this->assertSame('1531663916', $metadata_fr->getCreatedTime());
+ $this->assertFalse($metadata_fr->isOutdated());
+ $this->assertFalse($metadata_fr->isPublished());
+
+ // Test that the Icelandic translation metadata is correctly migrated.
+ $metadata_is = $manager->getTranslationMetadata($user_is);
+ $this->assertSame('en', $metadata_is->getSource());
+ $this->assertSame('2', $metadata_is->getAuthor()->uid->value);
+ $this->assertSame('1531663925', $metadata_is->getCreatedTime());
+ $this->assertTrue($metadata_is->isOutdated());
+ $this->assertTrue($metadata_is->isPublished());
+
+ // Test that untranslatable properties are the same as the source language.
+ $this->assertSame($user->label(), $user_fr->label());
+ $this->assertSame($user->label(), $user_is->label());
+ $this->assertSame($user->getEmail(), $user_fr->getEmail());
+ $this->assertSame($user->getEmail(), $user_is->getEmail());
+ $this->assertSame($user->getPassword(), $user_fr->getPassword());
+ $this->assertSame($user->getPassword(), $user_is->getPassword());
+ }
+
}