From 1a106b91fd9ff32d132346abffb51967df7258de Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:33:40 +0300 Subject: [PATCH 1/6] pkp/pkp-lib#10249 Fixed regression on migration --- .../upgrade/OPSv3_3_0UpgradeMigration.inc.php | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php index 4a6343587b..c30dc63034 100644 --- a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php @@ -143,17 +143,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 8d9d8672e1ace062327d61b5c64061f329dd8258 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:34:41 +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 c395cfc545..90e6dec082 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -30,6 +30,10 @@ + + + + From 194411b7066da64e636f3af36361c33d06342cd6 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:55:59 +0300 Subject: [PATCH 3/6] pkp/pkp-lib#10249 Added code to look for primary keys --- .../upgrade/OPSv3_3_0UpgradeMigration.inc.php | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php index c30dc63034..097acc9b5a 100644 --- a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php @@ -144,12 +144,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 4904381c183176a26c72151e140906ffe79e56c5 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:57:54 +0300 Subject: [PATCH 4/6] pkp/pkp-lib#10249 Updated affected version --- classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php | 2 +- dbscripts/xml/upgrade.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php index 097acc9b5a..cc847c9fd1 100644 --- a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php @@ -148,7 +148,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 90e6dec082..a7b50f6733 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -30,7 +30,7 @@ - + From cb3b96fd01b2f4b2288901e56277a7fc541340ec Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 15:19:15 +0300 Subject: [PATCH 5/6] pkp/pkp-lib#10249 Cast object to array --- classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php index cc847c9fd1..030378d3fb 100644 --- a/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OPSv3_3_0UpgradeMigration.inc.php @@ -158,7 +158,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 79e503391cf8323a8727f3d779c54c9e96473488 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 13:58:08 +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