From 8444ccc95e3395545879a28a7fe8648614e4b5f2 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 12:25:17 +0300 Subject: [PATCH 1/6] pkp/pkp-lib#10249 Fixed regression on migration --- .../upgrade/OMPv3_3_0UpgradeMigration.inc.php | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php index d659d1dca5..f032154451 100644 --- a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php @@ -165,17 +165,20 @@ private function _toJSON($row, $tableName, $searchBy, $valueToConvert) { if (is_array($oldValue) && $this->_isNumerical($oldValue)) $oldValue = array_values($oldValue); $newValue = json_encode($oldValue, JSON_UNESCAPED_UNICODE); // don't convert utf-8 characters to unicode escaped code - $id = array_key_first((array)$row); // get first/primary key column - - // Remove empty filters - $searchBy = array_filter($searchBy, function ($item) use ($row) { - if (empty($row->{$item})) return false; - return true; - }); + // Ensure ID fields are included on the filter to avoid updating similar rows + foreach (array_keys($row) as $column) { + if (substr($column, -3, '_id')) { + $searchBy[] = $column; + } + } - $queryBuilder = Capsule::table($tableName)->where($id, $row->{$id}); - foreach ($searchBy as $key => $column) { - $queryBuilder = $queryBuilder->where($column, $row->{$column}); + $queryBuilder = Capsule::table($tableName); + foreach (array_unique($searchBy) as $column) { + if ($row->{$column} !== null) { + $queryBuilder->where($column, $row->{$column}); + } else { + $queryBuilder->whereNull($column); + } } $queryBuilder->update([$valueToConvert => $newValue]); } From d52c83f89eadfd1134cf2340da119b3007699cb0 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 12:33:06 +0300 Subject: [PATCH 2/6] pkp/pkp-lib#10249 Added migration to recover from data loss on the profile image --- dbscripts/xml/upgrade.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index fb7cf938f3..92c1d54377 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -167,6 +167,10 @@ + + + + From 448a80b21584789644273fbe2b4e9ffcf6f0bdfa Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:29:53 +0300 Subject: [PATCH 3/6] pkp/pkp-lib#10249 Added code to look for primary keys --- .../upgrade/OMPv3_3_0UpgradeMigration.inc.php | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php index f032154451..033a0401e7 100644 --- a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php @@ -166,12 +166,29 @@ private function _toJSON($row, $tableName, $searchBy, $valueToConvert) { $newValue = json_encode($oldValue, JSON_UNESCAPED_UNICODE); // don't convert utf-8 characters to unicode escaped code // Ensure ID fields are included on the filter to avoid updating similar rows - foreach (array_keys($row) as $column) { - if (substr($column, -3, '_id')) { - $searchBy[] = $column; + $tableDetails = Capsule::connection()->getDoctrineSchemaManager()->listTableDetails($tableName); + $primaryKeys = []; + try { + $primaryKeys = $tableDetails->getPrimaryKeyColumns(); + } catch(Exception $e) { + foreach ($tableDetails->getIndexes() as $index) { + if($index->isPrimary() || $index->isUnique()) { + $primaryKeys = $index->getColumns(); + break; + } + } + } + + if (!count($primaryKeys)) { + foreach (array_keys($row) as $column) { + if (substr($column, -3, '_id')) { + $primaryKeys[] = $column; + } } } + $searchBy = array_merge($searchBy, $primaryKeys); + $queryBuilder = Capsule::table($tableName); foreach (array_unique($searchBy) as $column) { if ($row->{$column} !== null) { From f13d1997896a92cbc343fc11957052eed17f0d3d Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:30:44 +0300 Subject: [PATCH 4/6] pkp/pkp-lib#10249 Updated affected version --- classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php | 2 +- dbscripts/xml/upgrade.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php index 033a0401e7..0a4ec4ba04 100644 --- a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php @@ -170,7 +170,7 @@ private function _toJSON($row, $tableName, $searchBy, $valueToConvert) { $primaryKeys = []; try { $primaryKeys = $tableDetails->getPrimaryKeyColumns(); - } catch(Exception $e) { + } catch (Exception $e) { foreach ($tableDetails->getIndexes() as $index) { if($index->isPrimary() || $index->isUnique()) { $primaryKeys = $index->getColumns(); diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index 92c1d54377..dfae4b437d 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -167,7 +167,7 @@ - + From 4d10f67bb8862bb99cab57d440e2f85c9ababd25 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 15:18:39 +0300 Subject: [PATCH 5/6] pkp/pkp-lib#10249 Cast object to array --- classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php index 0a4ec4ba04..b4129ab092 100644 --- a/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OMPv3_3_0UpgradeMigration.inc.php @@ -180,7 +180,7 @@ private function _toJSON($row, $tableName, $searchBy, $valueToConvert) { } if (!count($primaryKeys)) { - foreach (array_keys($row) as $column) { + foreach (array_keys(get_object_vars($row)) as $column) { if (substr($column, -3, '_id')) { $primaryKeys[] = $column; } From 76fda04213f948adc18f472d059590760157bb79 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:31:28 +0300 Subject: [PATCH 6/6] pkp/pkp-lib#10249 Submodule update ##jonasraoni/bugfix-stable-3_3_0-10249-fix-data-loss-on-settings## --- lib/pkp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pkp b/lib/pkp index a930f7b1aa..f09741c623 160000 --- a/lib/pkp +++ b/lib/pkp @@ -1 +1 @@ -Subproject commit a930f7b1aadd4e537b5cfb19a1b7df564da3c279 +Subproject commit f09741c62371de7721fad92321180ecd879749ab