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