From d14a50240b03a83d041268c2647b205df154f23e Mon Sep 17 00:00:00 2001 From: hissy Date: Fri, 29 Mar 2024 21:32:18 +0900 Subject: [PATCH 1/4] Fix SQL type error Cast int values before save --- .../Publisher/Block/StandardPublisher.php | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php index 24a08a5..b5efdaa 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php @@ -1,7 +1,10 @@ make(Connection::class); + $sm = $connection->getSchemaManager(); foreach ($records as $record) { if (strcasecmp($record->getTable(), $bt->getController()->getBlockTypeDatabaseTable()) != 0) { + $columns = $sm->listTableColumns($record->getTable()); $aar = new BlockRecord($record->getTable()); $aar->bID = $b->getBlockID(); foreach ($record->getData() as $key => $value) { $result = $inspector->inspect($value); - $aar->{$key} = $result->getReplacedValue(); + $value = $result->getReplacedValue(); + foreach ($columns as $column) { + if ($column->getName() === $key) { + if ($column->getType()->getName() === Type::INTEGER) { + if ($column->getNotnull()) { + $value = (int) $value; + } else { + $value = $value === null ? null : (int) $value; + } + } + } + } + $aar->{$key} = $value; } $aar->Save(); } From 761b9163e07d4e9aa3addc62873e390d0bc7c2ac Mon Sep 17 00:00:00 2001 From: hissy Date: Sat, 30 Mar 2024 10:37:26 +0900 Subject: [PATCH 2/4] Code creanup --- .../Publisher/Block/StandardPublisher.php | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php index b5efdaa..fe52ea2 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php @@ -13,6 +13,14 @@ class StandardPublisher implements PublisherInterface { + /** @var Connection */ + protected $connection; + + public function __construct(Connection $connection) + { + $this->connection = $connection; + } + public function publish(Batch $batch, $bt, Page $page, $area, BlockValue $value) { $records = $value->getRecords(); @@ -38,10 +46,7 @@ public function publish(Batch $batch, $bt, Page $page, $area, BlockValue $value) } // Now we import the OTHER records. if ($b) { - $app = Application::getFacadeApplication(); - /** @var Connection $connection */ - $connection = $app->make(Connection::class); - $sm = $connection->getSchemaManager(); + $sm = $this->connection->getSchemaManager(); foreach ($records as $record) { if (strcasecmp($record->getTable(), $bt->getController()->getBlockTypeDatabaseTable()) != 0) { $columns = $sm->listTableColumns($record->getTable()); @@ -51,15 +56,11 @@ public function publish(Batch $batch, $bt, Page $page, $area, BlockValue $value) $result = $inspector->inspect($value); $value = $result->getReplacedValue(); foreach ($columns as $column) { - if ($column->getName() === $key) { - if ($column->getType()->getName() === Type::INTEGER) { - if ($column->getNotnull()) { - $value = (int) $value; - } else { - $value = $value === null ? null : (int) $value; - } - } + if ($column->getName() !== $key || $column->getType()->getName() !== Type::INTEGER) { + continue; } + + $value = ($column->getNotnull() || $column !== null) ? (int) $value : null; } $aar->{$key} = $value; } From f2e84653a18bd91af5b886168cd758cfd8e4bab0 Mon Sep 17 00:00:00 2001 From: hissy Date: Sat, 30 Mar 2024 10:43:31 +0900 Subject: [PATCH 3/4] Fix typo --- .../MigrationTool/Publisher/Block/StandardPublisher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php index fe52ea2..ba4fa6d 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php @@ -60,7 +60,7 @@ public function publish(Batch $batch, $bt, Page $page, $area, BlockValue $value) continue; } - $value = ($column->getNotnull() || $column !== null) ? (int) $value : null; + $value = ($column->getNotnull() || $value !== null) ? (int) $value : null; } $aar->{$key} = $value; } From 0fececacaad5fab3b1b60db3f0d0ae475d72a602 Mon Sep 17 00:00:00 2001 From: hissy Date: Sat, 30 Mar 2024 10:55:27 +0900 Subject: [PATCH 4/4] Use container to instantiate standard publisher --- .../MigrationTool/Publisher/Block/ImageSliderPublisher.php | 2 +- .../Concrete5/MigrationTool/Publisher/Block/Manager.php | 2 +- .../MigrationTool/Publisher/Block/StandardPublisher.php | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/ImageSliderPublisher.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/ImageSliderPublisher.php index aaf9e18..4eaafcd 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/ImageSliderPublisher.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/ImageSliderPublisher.php @@ -92,7 +92,7 @@ public function publish(Batch $batch, $bt, Page $page, $area, BlockValue $value) return $b; } else { - $publisher = new StandardPublisher(); + $publisher = \Core::make(StandardPublisher::class); return $publisher->publish($batch, $bt, $page, $area, $value); } } diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/Manager.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/Manager.php index 041d975..018961b 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/Manager.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/Manager.php @@ -24,7 +24,7 @@ public function getDefaultDriver() public function createStandardDriver() { - return new StandardPublisher(); + return $this->app->make(StandardPublisher::class); } public function __construct($app) diff --git a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php index ba4fa6d..54a875c 100644 --- a/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php +++ b/packages/migration_tool/src/PortlandLabs/Concrete5/MigrationTool/Publisher/Block/StandardPublisher.php @@ -3,7 +3,6 @@ use Concrete\Core\Database\Connection\Connection; use Concrete\Core\Legacy\BlockRecord; -use Concrete\Core\Support\Facade\Application; use Doctrine\DBAL\Types\Type; use PortlandLabs\Concrete5\MigrationTool\Entity\Import\Batch; use PortlandLabs\Concrete5\MigrationTool\Entity\Import\BlockValue\BlockValue;