From b91c713e07017c17cb110a9dee9e3370b2a4cbcf Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Fri, 26 Jul 2024 16:33:09 +0300 Subject: [PATCH 1/7] pkp/pkp-lib#10249 Fixed regression on migration --- .../upgrade/OJSv3_3_0UpgradeMigration.inc.php | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php index 734c72b913d..8a32b636413 100644 --- a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php @@ -162,17 +162,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 9d4f667c61a37aab93b1ff91a7440a13a95e1f03 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Sun, 28 Jul 2024 18:15:05 +0300 Subject: [PATCH 2/7] pkp/pkp-lib#10249 Added migration to recover from data loss on the profile image --- dbscripts/xml/upgrade.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index fc5ac352ddf..55a8984a409 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -82,7 +82,7 @@ - + @@ -208,6 +208,10 @@ + + + + From ffba8e17a228527fe2974820ba3b15c78d737c3a Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Sun, 28 Jul 2024 18:15:34 +0300 Subject: [PATCH 3/7] pkp/pkp-lib#10249 Added code to look for primary keys --- .../upgrade/OJSv3_3_0UpgradeMigration.inc.php | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php index 8a32b636413..a4512f2d634 100644 --- a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php @@ -163,12 +163,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 4bda3584aa20f2db5945cbdbc79c8864fd988406 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Sun, 28 Jul 2024 18:54:43 +0300 Subject: [PATCH 4/7] 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 a930f7b1aad..2622ef626de 160000 --- a/lib/pkp +++ b/lib/pkp @@ -1 +1 @@ -Subproject commit a930f7b1aadd4e537b5cfb19a1b7df564da3c279 +Subproject commit 2622ef626de8d4802ffae4228457f2393afedb1d From 4c22b42437da782699caa784676730f77ce6cd20 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 11:02:38 +0300 Subject: [PATCH 5/7] pkp/pkp-lib#10249 Updated affected version --- classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php | 2 +- dbscripts/xml/upgrade.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php index a4512f2d634..8b1feb6f43a 100644 --- a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php @@ -167,7 +167,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 55a8984a409..de1eafb1293 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -208,7 +208,7 @@ - + From bf7fb570a544fbbec9e54cdeea9fc2cbd649b442 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 15:17:07 +0300 Subject: [PATCH 6/7] pkp/pkp-lib#10249 Cast object to array --- classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php index 8b1feb6f43a..c9952cf085b 100644 --- a/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php +++ b/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php @@ -177,7 +177,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 7ff912c885d86eedaa42dd602ecad9058c229a7a Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Wed, 31 Jul 2024 11:36:01 +0300 Subject: [PATCH 7/7] 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 2622ef626de..17b51e3afae 160000 --- a/lib/pkp +++ b/lib/pkp @@ -1 +1 @@ -Subproject commit 2622ef626de8d4802ffae4228457f2393afedb1d +Subproject commit 17b51e3afaeb954d38d3d36aa2db5a71f9e37dca