From 26ea56e700f660480dfdcd30bade12754342ff42 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Tue, 26 Mar 2019 13:10:18 +0000 Subject: [PATCH] Issue #3035259 by quietone: Unknown column 'lt.i18n_status' in 'field list' (cherry picked from commit 8627d76afedf17deb252097b0e6ecbe24615d0b4) --- .../Plugin/migrate/source/d7/BlockTranslation.php | 12 +++++++++++- .../migrate/source/d7/BlockTranslationTest.php | 7 +++++++ .../migrate/source/d6/FieldOptionTranslation.php | 10 +++++++++- .../migrate/source/d6/FieldOptionTranslationTest.php | 8 ++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/core/modules/block/src/Plugin/migrate/source/d7/BlockTranslation.php b/core/modules/block/src/Plugin/migrate/source/d7/BlockTranslation.php index acf9e2b7c8ae..cb8c1be4e1e4 100644 --- a/core/modules/block/src/Plugin/migrate/source/d7/BlockTranslation.php +++ b/core/modules/block/src/Plugin/migrate/source/d7/BlockTranslation.php @@ -45,11 +45,21 @@ public function query() { 'language', 'plid', 'plural', - 'i18n_status', ]) ->condition('i18n_mode', 1); $query->leftjoin($this->blockTable, 'b', ('b.delta = i18n.objectid')); $query->leftjoin('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'. + /** @var \Drupal\Core\Database\Schema $db */ + if ($this->getDatabase()->schema()->fieldExists('locales_target', 'status')) { + $query->addField('lt', 'status', 'i18n_status'); + } + if ($this->getDatabase()->schema()->fieldExists('locales_target', 'i18n_status')) { + $query->addField('lt', 'i18n_status', 'i18n_status'); + } + return $query; } diff --git a/core/modules/block/tests/src/Kernel/Plugin/migrate/source/d7/BlockTranslationTest.php b/core/modules/block/tests/src/Kernel/Plugin/migrate/source/d7/BlockTranslationTest.php index 01b2dced662c..6f9279777fb1 100644 --- a/core/modules/block/tests/src/Kernel/Plugin/migrate/source/d7/BlockTranslationTest.php +++ b/core/modules/block/tests/src/Kernel/Plugin/migrate/source/d7/BlockTranslationTest.php @@ -141,6 +141,13 @@ public function providerSource() { ], ]; + // Change the name of the locale_target i18n status field. + $tests[1] = $tests[0]; + foreach ($tests[1]['source_data']['locales_target'] as &$lt) { + $lt['status'] = $lt['i18n_status']; + unset($lt['i18n_status']); + } + return $tests; } diff --git a/core/modules/field/src/Plugin/migrate/source/d6/FieldOptionTranslation.php b/core/modules/field/src/Plugin/migrate/source/d6/FieldOptionTranslation.php index bc2671a9c4a5..578026fbb975 100644 --- a/core/modules/field/src/Plugin/migrate/source/d6/FieldOptionTranslation.php +++ b/core/modules/field/src/Plugin/migrate/source/d6/FieldOptionTranslation.php @@ -24,7 +24,6 @@ public function query() { 'language', 'plid', 'plural', - 'i18n_status', ]) ->condition('i18n.type', 'field') ->condition('property', 'option\_%', 'LIKE') @@ -39,6 +38,15 @@ public function query() { $query->addField('cnf', 'type'); $query->addField('i18n', 'type', 'i18n_type'); + // The i18n_string module adds a status column to locale_target. It was + // originally 'status' in a later revision it was named 'i18n_status'. + /** @var \Drupal\Core\Database\Schema $db */ + if ($this->getDatabase()->schema()->fieldExists('locales_target', 'status')) { + $query->addField('lt', 'status', 'i18n_status'); + } + if ($this->getDatabase()->schema()->fieldExists('locales_target', 'i18n_status')) { + $query->addField('lt', 'i18n_status'); + } return $query; } diff --git a/core/modules/field/tests/src/Kernel/Plugin/migrate/source/d6/FieldOptionTranslationTest.php b/core/modules/field/tests/src/Kernel/Plugin/migrate/source/d6/FieldOptionTranslationTest.php index 8503a3f581fa..fcf657e1596d 100644 --- a/core/modules/field/tests/src/Kernel/Plugin/migrate/source/d6/FieldOptionTranslationTest.php +++ b/core/modules/field/tests/src/Kernel/Plugin/migrate/source/d6/FieldOptionTranslationTest.php @@ -236,6 +236,14 @@ public function providerSource() { 'i18n_status' => 0, ], ]; + + // Change the name of the locale_target i18n status field. + $test[1] = $test[0]; + foreach ($test[1]['source_data']['locales_target'] as &$lt) { + $lt['status'] = $lt['i18n_status']; + unset($lt['i18n_status']); + } + return $test; } -- GitLab