startSetup(); if (version_compare($context->getVersion(), '1.1.0', '<') && $installer->tableExists('klarna_kco_order')) { $newTable = 'klarna_core_order'; $this->renameKlarnaKcoOrderTable($installer, $newTable); $this->updateColumnsInKlarnaOrderTable($installer, $newTable); } if (version_compare($context->getVersion(), '4.5.3', '<')) { $this->addAcknowledgedIndex($installer); } if (version_compare($context->getVersion(), '4.5.4', '<')) { $this->removeFKConstraintFromOrderTable( $installer, 'klarna_core_order', 'order_id', 'sales_order', 'entity_id' ); $this->removeFKConstraintFromOrderTable( $installer, 'klarna_kco_order', 'order_id', 'sales_order', 'entity_id' ); } $installer->endSetup(); } /** * Updating the columns from the Klarna order table * * @param SchemaSetupInterface $installer * @param string $tableName */ private function updateColumnsInKlarnaOrderTable(SchemaSetupInterface $installer, $tableName) { $installer->getConnection() ->addColumn( $tableName, 'session_id', [ 'type' => Table::TYPE_TEXT, 'length' => 255, 'comment' => 'Session Id', 'after' => 'klarna_checkout_id' ] ); $installer->getConnection() ->changeColumn( $tableName, 'kco_order_id', 'id', [ 'type' => Table::TYPE_INTEGER, 'identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true, 'comment' => 'Entity Id' ] ); $installer->getConnection() ->changeColumn( $tableName, 'klarna_checkout_id', 'klarna_order_id', [ 'type' => Table::TYPE_TEXT, 'length' => 255, 'comment' => 'Klarna Order Id' ] ); $installer->getConnection() ->changeColumn( $tableName, 'klarna_reservation_id', 'reservation_id', [ 'type' => Table::TYPE_TEXT, 'length' => 255, 'comment' => 'Reservation Id' ] ); } /** * Renaming the Klarna kco order table * * @param SchemaSetupInterface $installer * @param string $newTableName */ private function renameKlarnaKcoOrderTable(SchemaSetupInterface $installer, $newTableName) { $oldTable = $installer->getTable('klarna_kco_order'); $newTable = $installer->getTable($newTableName); $installer->getConnection()->renameTable($oldTable, $newTable); } /** * Adding a index to the acknowledged column in the Klarna order table * * @param SchemaSetupInterface $installer */ private function addAcknowledgedIndex(SchemaSetupInterface $installer) { $table = $installer->getTable('klarna_core_order'); $index_list = $installer->getConnection()->getIndexList($table); $index_name = $installer->getIdxName($table, 'is_acknowledged'); if (!isset($index_list[$index_name])) { $installer->getConnection()->addIndex($table, $index_name, 'is_acknowledged'); } } /** * Remove FK constraint from `klarna_core_order` table * * @param SchemaSetupInterface $installer * @param string $myTable * @param string $myColumn * @param string $foriegnTable * @param string $foriegnColumn */ private function removeFKConstraintFromOrderTable( SchemaSetupInterface $installer, $myTable, $myColumn, $foriegnTable, $foriegnColumn ) { $targetTable = $installer->getTable('klarna_core_order'); $foreignKeyConstraints = $installer->getConnection()->getForeignKeys($targetTable); $targetConstraintName = $installer->getConnection()->getForeignKeyName( $installer->getTable($myTable), $myColumn, $installer->getTable($foriegnTable), $foriegnColumn ); if (isset($foreignKeyConstraints[$targetConstraintName])) { $installer->getConnection()->dropForeignKey( $installer->getTable('klarna_core_order'), $installer->getFkName( $installer->getTable($myTable), $myColumn, $installer->getTable($foriegnTable), $foriegnColumn ) ); } } }