UpgradeSchema.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. /**
  3. * This file is part of the Klarna Core module
  4. *
  5. * (c) Klarna Bank AB (publ)
  6. *
  7. * For the full copyright and license information, please view the NOTICE
  8. * and LICENSE files that were distributed with this source code.
  9. */
  10. namespace Klarna\Core\Setup;
  11. use Magento\Framework\DB\Ddl\Table;
  12. use Magento\Framework\Setup\ModuleContextInterface;
  13. use Magento\Framework\Setup\SchemaSetupInterface;
  14. use Magento\Framework\Setup\UpgradeSchemaInterface;
  15. /**
  16. * Class UpgradeSchema
  17. *
  18. * @package Klarna\Core\Setup
  19. */
  20. class UpgradeSchema implements UpgradeSchemaInterface
  21. {
  22. /**
  23. * Upgrades DB schema for a module
  24. *
  25. * @param SchemaSetupInterface $setup
  26. * @param ModuleContextInterface $context
  27. * @return void
  28. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  29. */
  30. public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
  31. {
  32. $installer = $setup;
  33. $installer->startSetup();
  34. if (version_compare($context->getVersion(), '1.1.0', '<') && $installer->tableExists('klarna_kco_order')) {
  35. $newTable = 'klarna_core_order';
  36. $this->renameKlarnaKcoOrderTable($installer, $newTable);
  37. $this->updateColumnsInKlarnaOrderTable($installer, $newTable);
  38. }
  39. if (version_compare($context->getVersion(), '4.5.3', '<')) {
  40. $this->addAcknowledgedIndex($installer);
  41. }
  42. if (version_compare($context->getVersion(), '4.5.4', '<')) {
  43. $this->removeFKConstraintFromOrderTable(
  44. $installer,
  45. 'klarna_core_order',
  46. 'order_id',
  47. 'sales_order',
  48. 'entity_id'
  49. );
  50. $this->removeFKConstraintFromOrderTable(
  51. $installer,
  52. 'klarna_kco_order',
  53. 'order_id',
  54. 'sales_order',
  55. 'entity_id'
  56. );
  57. }
  58. $installer->endSetup();
  59. }
  60. /**
  61. * Updating the columns from the Klarna order table
  62. *
  63. * @param SchemaSetupInterface $installer
  64. * @param string $tableName
  65. */
  66. private function updateColumnsInKlarnaOrderTable(SchemaSetupInterface $installer, $tableName)
  67. {
  68. $installer->getConnection()
  69. ->addColumn(
  70. $tableName,
  71. 'session_id',
  72. [
  73. 'type' => Table::TYPE_TEXT,
  74. 'length' => 255,
  75. 'comment' => 'Session Id',
  76. 'after' => 'klarna_checkout_id'
  77. ]
  78. );
  79. $installer->getConnection()
  80. ->changeColumn(
  81. $tableName,
  82. 'kco_order_id',
  83. 'id',
  84. [
  85. 'type' => Table::TYPE_INTEGER,
  86. 'identity' => true,
  87. 'unsigned' => true,
  88. 'nullable' => false,
  89. 'primary' => true,
  90. 'comment' => 'Entity Id'
  91. ]
  92. );
  93. $installer->getConnection()
  94. ->changeColumn(
  95. $tableName,
  96. 'klarna_checkout_id',
  97. 'klarna_order_id',
  98. [
  99. 'type' => Table::TYPE_TEXT,
  100. 'length' => 255,
  101. 'comment' => 'Klarna Order Id'
  102. ]
  103. );
  104. $installer->getConnection()
  105. ->changeColumn(
  106. $tableName,
  107. 'klarna_reservation_id',
  108. 'reservation_id',
  109. [
  110. 'type' => Table::TYPE_TEXT,
  111. 'length' => 255,
  112. 'comment' => 'Reservation Id'
  113. ]
  114. );
  115. }
  116. /**
  117. * Renaming the Klarna kco order table
  118. *
  119. * @param SchemaSetupInterface $installer
  120. * @param string $newTableName
  121. */
  122. private function renameKlarnaKcoOrderTable(SchemaSetupInterface $installer, $newTableName)
  123. {
  124. $oldTable = $installer->getTable('klarna_kco_order');
  125. $newTable = $installer->getTable($newTableName);
  126. $installer->getConnection()->renameTable($oldTable, $newTable);
  127. }
  128. /**
  129. * Adding a index to the acknowledged column in the Klarna order table
  130. *
  131. * @param SchemaSetupInterface $installer
  132. */
  133. private function addAcknowledgedIndex(SchemaSetupInterface $installer)
  134. {
  135. $table = $installer->getTable('klarna_core_order');
  136. $index_list = $installer->getConnection()->getIndexList($table);
  137. $index_name = $installer->getIdxName($table, 'is_acknowledged');
  138. if (!isset($index_list[$index_name])) {
  139. $installer->getConnection()->addIndex($table, $index_name, 'is_acknowledged');
  140. }
  141. }
  142. /**
  143. * Remove FK constraint from `klarna_core_order` table
  144. *
  145. * @param SchemaSetupInterface $installer
  146. * @param string $myTable
  147. * @param string $myColumn
  148. * @param string $foriegnTable
  149. * @param string $foriegnColumn
  150. */
  151. private function removeFKConstraintFromOrderTable(
  152. SchemaSetupInterface $installer,
  153. $myTable,
  154. $myColumn,
  155. $foriegnTable,
  156. $foriegnColumn
  157. ) {
  158. $targetTable = $installer->getTable('klarna_core_order');
  159. $foreignKeyConstraints = $installer->getConnection()->getForeignKeys($targetTable);
  160. $targetConstraintName = $installer->getConnection()->getForeignKeyName(
  161. $installer->getTable($myTable),
  162. $myColumn,
  163. $installer->getTable($foriegnTable),
  164. $foriegnColumn
  165. );
  166. if (isset($foreignKeyConstraints[$targetConstraintName])) {
  167. $installer->getConnection()->dropForeignKey(
  168. $installer->getTable('klarna_core_order'),
  169. $installer->getFkName(
  170. $installer->getTable($myTable),
  171. $myColumn,
  172. $installer->getTable($foriegnTable),
  173. $foriegnColumn
  174. )
  175. );
  176. }
  177. }
  178. }