Issue #3030937 by quietone, Gábor Hojtsy, heddn, mikelutz: Ensure language is not Null in translation source queries
parent
d881bd0abb
commit
1be0372d40
|
@ -48,7 +48,7 @@ class BlockTranslation extends Block {
|
|||
])
|
||||
->condition('i18n_mode', 1);
|
||||
$query->leftjoin($this->blockTable, 'b', ('b.delta = i18n.objectid'));
|
||||
$query->leftjoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
|
||||
// The i18n_string module adds a status column to locale_target. It was
|
||||
// originally 'status' in a later revision it was named 'i18n_status'.
|
||||
|
|
|
@ -38,7 +38,7 @@ class BlockTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'pages' => '',
|
||||
'title' => '',
|
||||
'cache' => -1,
|
||||
'i18n_mode' => 0,
|
||||
'i18n_mode' => 1,
|
||||
],
|
||||
[
|
||||
'bid' => 2,
|
||||
|
@ -84,6 +84,16 @@ class BlockTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => 0,
|
||||
'format' => '',
|
||||
],
|
||||
[
|
||||
'lid' => 2,
|
||||
'textgroup' => 'block',
|
||||
'context' => '1',
|
||||
'objectid' => 'main',
|
||||
'type' => 'system',
|
||||
'property' => 'title',
|
||||
'objectindex' => 0,
|
||||
'format' => '',
|
||||
],
|
||||
];
|
||||
|
||||
$tests[0]['source_data']['locales_target'] = [
|
||||
|
@ -147,7 +157,29 @@ class BlockTranslationTest extends MigrateSqlSourceTestBase {
|
|||
$lt['status'] = $lt['i18n_status'];
|
||||
unset($lt['i18n_status']);
|
||||
}
|
||||
|
||||
$tests[1]['expected_data'] = [
|
||||
[
|
||||
'bid' => 2,
|
||||
'module' => 'system',
|
||||
'delta' => 'navigation',
|
||||
'theme' => 'bartik',
|
||||
'status' => 1,
|
||||
'weight' => 0,
|
||||
'region' => 'sidebar_first',
|
||||
'custom' => '0',
|
||||
'visibility' => 0,
|
||||
'pages' => '',
|
||||
'title' => 'Navigation',
|
||||
'cache' => -1,
|
||||
'i18n_mode' => 1,
|
||||
'lid' => 1,
|
||||
'translation' => 'fr - Navigation',
|
||||
'language' => 'fr',
|
||||
'plid' => 0,
|
||||
'plural' => 0,
|
||||
'i18n_status' => 0,
|
||||
],
|
||||
];
|
||||
return $tests;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,8 +36,7 @@ class BlockCustomTranslation extends DrupalSqlBase {
|
|||
->fields('b', ['bid', 'format', 'body'])
|
||||
->fields('i18n', ['property'])
|
||||
->fields('lt', ['lid', 'translation', 'language'])
|
||||
->orderBy('b.bid')
|
||||
->isNotNull('lt.lid');
|
||||
->orderBy('b.bid');
|
||||
|
||||
// Use 'title' for the info field to match the property name in
|
||||
// i18nStringTable.
|
||||
|
@ -49,7 +48,7 @@ class BlockCustomTranslation extends DrupalSqlBase {
|
|||
$query->condition('i18n.type', 'block');
|
||||
|
||||
// Add in the translation for the property.
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,12 @@ class BlockCustomTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'info' => 'box 2 title',
|
||||
'format' => '2',
|
||||
],
|
||||
[
|
||||
'bid' => 4,
|
||||
'body' => 'box 2 body',
|
||||
'info' => 'box 2 title',
|
||||
'format' => '2',
|
||||
],
|
||||
];
|
||||
|
||||
$tests[0]['database']['i18n_string'] = [
|
||||
|
@ -65,6 +71,14 @@ class BlockCustomTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => 2,
|
||||
'format' => 2,
|
||||
],
|
||||
[
|
||||
'lid' => 4,
|
||||
'objectid' => 4,
|
||||
'type' => 'block',
|
||||
'property' => 'body',
|
||||
'objectindex' => 4,
|
||||
'format' => 2,
|
||||
],
|
||||
];
|
||||
|
||||
$tests[0]['database']['locales_target'] = [
|
||||
|
|
|
@ -20,10 +20,9 @@ class ProfileFieldTranslation extends ProfileField {
|
|||
public function query() {
|
||||
$query = parent::query();
|
||||
$query->fields('i18n', ['property'])
|
||||
->fields('lt', ['lid', 'translation', 'language'])
|
||||
->isNotNull('language');
|
||||
->fields('lt', ['lid', 'translation', 'language']);
|
||||
$query->leftJoin('i18n_strings', 'i18n', 'i18n.objectid = pf.name');
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,11 @@ class ProfileFieldTranslationTest extends MigrateSqlSourceTestBase {
|
|||
$test = [];
|
||||
$test[0]['source_data'] = [
|
||||
'profile_fields' => [
|
||||
[
|
||||
'fid' => 2,
|
||||
'title' => 'Test',
|
||||
'name' => 'profile_test',
|
||||
],
|
||||
[
|
||||
'fid' => 42,
|
||||
'title' => 'I love migrations',
|
||||
|
@ -31,6 +36,12 @@ class ProfileFieldTranslationTest extends MigrateSqlSourceTestBase {
|
|||
],
|
||||
],
|
||||
'i18n_strings' => [
|
||||
[
|
||||
'lid' => 1,
|
||||
'objectid' => 'profile_test',
|
||||
'type' => 'field',
|
||||
'property' => 'explanation',
|
||||
],
|
||||
[
|
||||
'lid' => 10,
|
||||
'objectid' => 'profile_love_migrations',
|
||||
|
|
|
@ -22,14 +22,12 @@ class FieldLabelDescriptionTranslation extends DrupalSqlBase {
|
|||
$query = $this->select('i18n_strings', 'i18n')
|
||||
->fields('i18n', ['property', 'objectid', 'type'])
|
||||
->fields('lt', ['lid', 'translation', 'language'])
|
||||
->condition('i18n.type', 'field')
|
||||
->isNotNull('language')
|
||||
->isNotNull('translation');
|
||||
->condition('i18n.type', 'field');
|
||||
$condition = $query->orConditionGroup()
|
||||
->condition('property', 'widget_label')
|
||||
->condition('property', 'widget_description');
|
||||
$query->condition($condition);
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
|
|
@ -26,9 +26,8 @@ class FieldOptionTranslation extends Field {
|
|||
'plural',
|
||||
])
|
||||
->condition('i18n.type', 'field')
|
||||
->condition('property', 'option\_%', 'LIKE')
|
||||
->isNotNull('translation');
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
->condition('property', 'option\_%', 'LIKE');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->leftjoin('content_node_field', 'cnf', 'cnf.field_name = i18n.objectid');
|
||||
$query->addField('cnf', 'field_name');
|
||||
$query->addField('cnf', 'global_settings');
|
||||
|
|
|
@ -38,14 +38,12 @@ class FieldLabelDescriptionTranslation extends DrupalSqlBase {
|
|||
'data',
|
||||
'deleted',
|
||||
])
|
||||
->condition('i18n.textgroup', 'field')
|
||||
->isNotNull('language')
|
||||
->isNotNull('translation');
|
||||
->condition('i18n.textgroup', 'field');
|
||||
$condition = $query->orConditionGroup()
|
||||
->condition('textgroup', 'field')
|
||||
->condition('objectid', '#allowed_values', '!=');
|
||||
$query->condition($condition);
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
|
||||
$query->leftjoin('field_config_instance', 'fci', 'fci.bundle = i18n.objectid AND fci.field_name = i18n.type');
|
||||
return $query;
|
||||
|
|
|
@ -18,10 +18,9 @@ class FieldOptionTranslation extends Field {
|
|||
public function query() {
|
||||
$query = parent::query();
|
||||
$query->leftJoin('i18n_string', 'i18n', 'i18n.type = fc.field_name');
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->condition('i18n.textgroup', 'field')
|
||||
->condition('objectid', '#allowed_values')
|
||||
->isNotNull('language');
|
||||
->condition('objectid', '#allowed_values');
|
||||
// Add all i18n and locales_target fields.
|
||||
$query
|
||||
->fields('i18n')
|
||||
|
|
|
@ -110,6 +110,14 @@ class FieldOptionTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => 0,
|
||||
'format' => 0,
|
||||
],
|
||||
[
|
||||
'lid' => 22,
|
||||
'objectid' => 'field_test_integer_selectlist',
|
||||
'type' => 'field',
|
||||
'property' => 'option_0',
|
||||
'objectindex' => 0,
|
||||
'format' => 0,
|
||||
],
|
||||
];
|
||||
$test[0]['source_data']['locales_target'] = [
|
||||
[
|
||||
|
|
|
@ -47,6 +47,13 @@ class FieldInstanceLabelDescriptionTranslationTest extends MigrateSqlSourceTestB
|
|||
'type' => 'taxonomy_forums',
|
||||
'property' => 'label',
|
||||
],
|
||||
[
|
||||
'lid' => 1,
|
||||
'textgroup' => 'field',
|
||||
'objectid' => 'story',
|
||||
'type' => 'field_text',
|
||||
'property' => 'label',
|
||||
],
|
||||
],
|
||||
'locales_target' => [
|
||||
[
|
||||
|
|
|
@ -118,6 +118,16 @@ class FieldOptionTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => '0',
|
||||
'format' => '',
|
||||
],
|
||||
[
|
||||
'lid' => '4',
|
||||
'textgroup' => 'field',
|
||||
'context' => 'field_rating:#allowed_values:4',
|
||||
'objectid' => '#allowed_values',
|
||||
'type' => 'field_rating',
|
||||
'property' => '4',
|
||||
'objectindex' => '0',
|
||||
'format' => '',
|
||||
],
|
||||
];
|
||||
$test[0]['source_data']['locales_target'] = [
|
||||
[
|
||||
|
|
|
@ -41,7 +41,6 @@ class MenuLinkTranslation extends MenuLink {
|
|||
// Add in the property, which is either title or description. Cast the mlid
|
||||
// to text so PostgreSQL can make the join.
|
||||
$query->leftJoin(static::I18N_STRING_TABLE, 'i18n', 'CAST(ml.mlid as CHAR(255)) = i18n.objectid');
|
||||
$query->isNotNull('i18n.lid');
|
||||
$query->addField('i18n', 'lid');
|
||||
$query->addField('i18n', 'property');
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@ class TermLocalizedTranslation extends Term {
|
|||
// Add in the property, which is either name or description.
|
||||
// Cast td.tid as char for PostgreSQL compatibility.
|
||||
$query->leftJoin('i18n_strings', 'i18n', 'CAST(td.tid AS CHAR(255)) = i18n.objectid');
|
||||
$query->isNotNull('i18n.lid');
|
||||
$query->addField('i18n', 'lid');
|
||||
$query->addField('i18n', 'property');
|
||||
|
||||
|
|
|
@ -23,17 +23,15 @@ class VocabularyTranslation extends DrupalSqlBase {
|
|||
->fields('v')
|
||||
->fields('i18n', ['lid', 'type', 'property', 'objectid'])
|
||||
->fields('lt', ['lid', 'translation'])
|
||||
->condition('i18n.type', 'vocabulary')
|
||||
->isNotNull('lt.language');
|
||||
->condition('i18n.type', 'vocabulary');
|
||||
$query->addField('lt', 'language', 'lt.language');
|
||||
// The i18n_strings table has two columns containing the object ID, objectid
|
||||
// and objectindex. The objectid column is a text field. Therefore, for the
|
||||
// join to work in PostgreSQL, use the objectindex field as this is numeric
|
||||
// like the vid field.
|
||||
$query->join('i18n_strings', 'i18n', 'v.vid = i18n.objectindex');
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
|
||||
$a = $query->execute()->fetchAll();
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,14 @@ class TermLocalizedTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => '3',
|
||||
'format' => 0,
|
||||
],
|
||||
[
|
||||
'lid' => 9,
|
||||
'objectid' => 4,
|
||||
'type' => 'term',
|
||||
'property' => 'description',
|
||||
'objectindex' => '4',
|
||||
'format' => 0,
|
||||
],
|
||||
];
|
||||
$tests[0]['source_data']['locales_target'] = [
|
||||
[
|
||||
|
|
|
@ -41,6 +41,14 @@ class VocabularyTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'objectindex' => 2,
|
||||
'format' => 0,
|
||||
],
|
||||
[
|
||||
'lid' => 3,
|
||||
'objectid' => 3,
|
||||
'type' => 'vocabulary',
|
||||
'property' => 'name',
|
||||
'objectindex' => 3,
|
||||
'format' => 0,
|
||||
],
|
||||
];
|
||||
|
||||
$tests[0][0]['locales_target'] = [
|
||||
|
@ -91,6 +99,20 @@ class VocabularyTranslationTest extends MigrateSqlSourceTestBase {
|
|||
'weight' => 5,
|
||||
'language' => '',
|
||||
],
|
||||
[
|
||||
'vid' => 3,
|
||||
'name' => 'vocabulary 3',
|
||||
'description' => 'description of vocabulary 3',
|
||||
'help' => 1,
|
||||
'relations' => 1,
|
||||
'hierarchy' => 1,
|
||||
'multiple' => 0,
|
||||
'required' => 0,
|
||||
'tags' => 0,
|
||||
'module' => 'taxonomy',
|
||||
'weight' => 5,
|
||||
'language' => '',
|
||||
],
|
||||
];
|
||||
|
||||
$tests[0]['expected_results'] = [
|
||||
|
|
|
@ -23,10 +23,9 @@ class ProfileFieldOptionTranslation extends ProfileField {
|
|||
->fields('i18n', ['property', 'objectid'])
|
||||
->fields('lt', ['translation', 'language'])
|
||||
->condition('i18n.type', 'field')
|
||||
->condition('property', 'options')
|
||||
->isNotNull('translation');
|
||||
->condition('property', 'options');
|
||||
$query->leftjoin('i18n_strings', 'i18n', 'pf.name = i18n.objectid');
|
||||
$query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
$query->innerJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,12 @@ class ProfileFieldOptionTranslationTest extends ProfileFieldTest {
|
|||
'type' => 'field',
|
||||
'property' => 'options',
|
||||
],
|
||||
[
|
||||
'lid' => 1,
|
||||
'objectid' => 'profile_last_name',
|
||||
'type' => 'field',
|
||||
'property' => 'options',
|
||||
],
|
||||
];
|
||||
$test[0]['source_data']['locales_target'] = [
|
||||
[
|
||||
|
|
Loading…
Reference in New Issue