/install/model/upgrade/1001.php

https://gitlab.com/dadangnh/sb1-bon · PHP · 262 lines · 178 code · 61 blank · 23 comment · 39 complexity · 160a11cb520a1e3f88a5e485a89d1883 MD5 · raw file

  1. <?php
  2. class ModelUpgrade1001 extends Model {
  3. public function upgrade() {
  4. // address
  5. $this->db->query("ALTER TABLE `" . DB_PREFIX . "address` CHANGE `company` `company` VARCHAR(40) NOT NULL");
  6. // order
  7. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` CHANGE `payment_company` `payment_company` VARCHAR(40) NOT NULL");
  8. // order
  9. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` CHANGE `shipping_company` `shipping_company` VARCHAR(40) NOT NULL");
  10. // affiliate
  11. $this->db->query("ALTER TABLE `" . DB_PREFIX . "affiliate` CHANGE `company` `company` VARCHAR(40) NOT NULL");
  12. // order_history
  13. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_history` CHANGE `order_status_id` `order_status_id` int(11) NOT NULL");
  14. // order_recurring
  15. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `status` `status` tinyint(4) NOT NULL AFTER `trial_price`");
  16. // order_recurring
  17. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'created'");
  18. if ($query->num_rows) {
  19. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'date_added'");
  20. if ($query->num_rows) {
  21. $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `date_added` = `created` WHERE `date_added` IS NULL or `date_added` = ''");
  22. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `created`");
  23. } else {
  24. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `created` `date_added` datetime NOT NULL AFTER `status`");
  25. }
  26. }
  27. // order_recurring
  28. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'profile_id'");
  29. if ($query->num_rows) {
  30. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'recurring_id'");
  31. if ($query->num_rows) {
  32. $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_id` = `profile_id` WHERE `recurring_id` IS NULL or `recurring_id` = ''");
  33. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_id`");
  34. } else {
  35. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_id` `recurring_id` int(11) NOT NULL");
  36. }
  37. }
  38. // order_recurring
  39. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'profile_name'");
  40. if ($query->num_rows) {
  41. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'recurring_name'");
  42. if ($query->num_rows) {
  43. $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_name` = `profile_name` WHERE `recurring_name` IS NULL or `recurring_name` = ''");
  44. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_name`");
  45. } else {
  46. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_name` `recurring_name` varchar(255) NOT NULL");
  47. }
  48. }
  49. // order_recurring
  50. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'profile_description'");
  51. if ($query->num_rows) {
  52. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order_recurring' AND COLUMN_NAME = 'recurring_description'");
  53. if ($query->num_rows) {
  54. $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_description` = `profile_description` WHERE `recurring_description` IS NULL or `recurring_description` = ''");
  55. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_description`");
  56. } else {
  57. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_description` `recurring_description` varchar(255) NOT NULL");
  58. }
  59. }
  60. // address
  61. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "address' AND COLUMN_NAME = 'custom_field'");
  62. if (!$query->num_rows) {
  63. $this->db->query("ALTER TABLE `" . DB_PREFIX . "address` ADD `custom_field` TEXT NOT NULL AFTER `zone_id`");
  64. }
  65. // customer
  66. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "customer' AND COLUMN_NAME = 'custom_field'");
  67. if (!$query->num_rows) {
  68. $this->db->query("ALTER TABLE `" . DB_PREFIX . "customer` ADD `custom_field` TEXT NOT NULL AFTER `address_id`");
  69. }
  70. // order
  71. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order' AND COLUMN_NAME = 'custom_field'");
  72. if (!$query->num_rows) {
  73. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `custom_field` TEXT NOT NULL AFTER `fax`");
  74. }
  75. // order
  76. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order' AND COLUMN_NAME = 'payment_custom_field'");
  77. if (!$query->num_rows) {
  78. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `payment_custom_field` TEXT NOT NULL AFTER `payment_address_format`");
  79. }
  80. // order
  81. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "order' AND COLUMN_NAME = 'shipping_custom_field'");
  82. if (!$query->num_rows) {
  83. $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `shipping_custom_field` TEXT NOT NULL AFTER `shipping_address_format`");
  84. }
  85. // banner
  86. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "banner_image' AND COLUMN_NAME = 'sort_order'");
  87. if (!$query->num_rows) {
  88. $this->db->query("ALTER TABLE `" . DB_PREFIX . "banner_image` ADD `sort_order` INT(3) NOT NULL AFTER `image`");
  89. }
  90. // setting
  91. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "setting' AND COLUMN_NAME = 'group'");
  92. if ($query->num_rows) {
  93. // Leave code if already there and just drop group
  94. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "setting' AND COLUMN_NAME = 'code'");
  95. if ($query->num_rows) {
  96. $this->db->query("UPDATE `" . DB_PREFIX . "setting` SET `code` = `group` WHERE `code` IS NULL or `code` = ''");
  97. $this->db->query("ALTER TABLE `" . DB_PREFIX . "setting` DROP `group`");
  98. } else {
  99. $this->db->query("ALTER TABLE `" . DB_PREFIX . "setting` CHANGE `group` `code` varchar(32) NOT NULL");
  100. }
  101. }
  102. // tags
  103. $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "product_tag'");
  104. if ($query->num_rows) {
  105. $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language");
  106. foreach ($query->rows as $language) {
  107. // Get old tags
  108. $query = $this->db->query("SELECT p.product_id, GROUP_CONCAT(DISTINCT pt.tag order by pt.tag ASC SEPARATOR ',') as tags FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_tag pt ON (p.product_id = pt.product_id) WHERE pt.language_id = '" . (int)$language['language_id'] . "' GROUP BY p.product_id");
  109. if ($query->num_rows) {
  110. foreach ($query->rows as $row) {
  111. $this->db->query("UPDATE " . DB_PREFIX . "product_description SET tag = '" . $this->db->escape(strtolower($row['tags'])) . "' WHERE product_id = '" . (int)$row['product_id'] . "' AND language_id = '" . (int)$language['language_id'] . "'");
  112. $this->db->query("DELETE FROM " . DB_PREFIX . "product_tag WHERE product_id = '" . (int)$row['product_id'] . "' AND language_id = '" . (int)$language['language_id'] . "'");
  113. }
  114. }
  115. }
  116. }
  117. // Update the config.php by adding a DIR_MODIFICATION
  118. if (is_file(DIR_OPENCART . 'config.php')) {
  119. $files = glob(DIR_OPENCART . '{config.php,admin/config.php}', GLOB_BRACE);
  120. foreach ($files as $file) {
  121. if (!is_writable($file)) {
  122. exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file)));
  123. }
  124. $upgrade = true;
  125. $lines = file($file);
  126. foreach ($lines as $line) {
  127. if (strpos($line, 'DIR_MODIFICATION') !== false) {
  128. $upgrade = false;
  129. break;
  130. }
  131. }
  132. if ($upgrade) {
  133. $output = '';
  134. foreach ($lines as $line_id => $line) {
  135. if (strpos($line, 'DIR_LOGS') !== false) {
  136. $new_line = "define('DIR_MODIFICATION', '" . str_replace("\\", "/", DIR_SYSTEM) . 'modification/' . "');";
  137. $output .= $new_line . "\n";
  138. $output .= $line;
  139. } else {
  140. $output .= $line;
  141. }
  142. }
  143. file_put_contents($file, $output);
  144. }
  145. }
  146. // Update the config.php by adding a DIR_UPLOAD
  147. foreach ($files as $file) {
  148. if (!is_writable($file)) {
  149. exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file)));
  150. }
  151. $upgrade = true;
  152. $lines = file($file);
  153. foreach ($lines as $line) {
  154. if (strpos($line, 'DIR_UPLOAD') !== false) {
  155. $upgrade = false;
  156. break;
  157. }
  158. }
  159. if ($upgrade) {
  160. $output = '';
  161. foreach ($lines as $line_id => $line) {
  162. if (strpos($line, 'DIR_LOGS') !== false) {
  163. $new_line = "define('DIR_UPLOAD', '" . str_replace("\\", "/", DIR_SYSTEM) . 'upload/' . "');";
  164. $output .= $new_line . "\n";
  165. $output .= $line;
  166. } else {
  167. $output .= $line;
  168. }
  169. }
  170. file_put_contents($file, $output);
  171. }
  172. }
  173. // Update the config.php to change mysql to mysqli
  174. foreach ($files as $file) {
  175. if (!is_writable($file)) {
  176. exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file)));
  177. }
  178. $upgrade = false;
  179. $lines = file($file);
  180. foreach ($lines as $line) {
  181. if (strpos($line, "'mysql'") !== false) {
  182. $upgrade = true;
  183. break;
  184. }
  185. }
  186. if ($upgrade) {
  187. $output = '';
  188. foreach ($lines as $line_id => $line) {
  189. if (strpos($line, "'mysql'") !== false) {
  190. $new_line = "define('DB_DRIVER', 'mysqli');";
  191. $output .= $new_line . "\n";
  192. } else {
  193. $output .= $line;
  194. }
  195. }
  196. file_put_contents($file, $output);
  197. }
  198. }
  199. }
  200. }
  201. }