1001.php (11598B)
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 7 // order 8 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` CHANGE `payment_company` `payment_company` VARCHAR(40) NOT NULL"); 9 10 // order 11 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` CHANGE `shipping_company` `shipping_company` VARCHAR(40) NOT NULL"); 12 13 // affiliate 14 $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "affiliate'"); 15 16 if ($query->num_rows) { 17 $this->db->query("ALTER TABLE `" . DB_PREFIX . "affiliate` CHANGE `company` `company` VARCHAR(40) NOT NULL"); 18 } 19 20 // order_history 21 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_history` CHANGE `order_status_id` `order_status_id` int(11) NOT NULL"); 22 23 // order_recurring 24 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `status` `status` tinyint(4) NOT NULL AFTER `trial_price`"); 25 26 // order_recurring 27 $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'"); 28 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 = 'date_added'"); 31 32 if ($query->num_rows) { 33 $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `date_added` = `created` WHERE `date_added` IS NULL or `date_added` = ''"); 34 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `created`"); 35 } else { 36 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `created` `date_added` datetime NOT NULL AFTER `status`"); 37 } 38 } 39 40 // order_recurring 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 = 'profile_id'"); 42 43 if ($query->num_rows) { 44 $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'"); 45 46 if ($query->num_rows) { 47 $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_id` = `profile_id` WHERE `recurring_id` IS NULL or `recurring_id` = ''"); 48 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_id`"); 49 } else { 50 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_id` `recurring_id` int(11) NOT NULL"); 51 } 52 } 53 54 // order_recurring 55 $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'"); 56 57 if ($query->num_rows) { 58 $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'"); 59 60 if ($query->num_rows) { 61 $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_name` = `profile_name` WHERE `recurring_name` IS NULL or `recurring_name` = ''"); 62 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_name`"); 63 } else { 64 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_name` `recurring_name` varchar(255) NOT NULL"); 65 } 66 } 67 68 // order_recurring 69 $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'"); 70 71 if ($query->num_rows) { 72 $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'"); 73 74 if ($query->num_rows) { 75 $this->db->query("UPDATE `" . DB_PREFIX . "order_recurring` SET `recurring_description` = `profile_description` WHERE `recurring_description` IS NULL or `recurring_description` = ''"); 76 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` DROP `profile_description`"); 77 } else { 78 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order_recurring` CHANGE `profile_description` `recurring_description` varchar(255) NOT NULL"); 79 } 80 } 81 82 // address 83 $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'"); 84 85 if (!$query->num_rows) { 86 $this->db->query("ALTER TABLE `" . DB_PREFIX . "address` ADD `custom_field` TEXT NOT NULL AFTER `zone_id`"); 87 } 88 89 // customer 90 $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'"); 91 92 if (!$query->num_rows) { 93 $this->db->query("ALTER TABLE `" . DB_PREFIX . "customer` ADD `custom_field` TEXT NOT NULL AFTER `address_id`"); 94 } 95 96 // order 97 $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'"); 98 99 if (!$query->num_rows) { 100 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `custom_field` TEXT NOT NULL AFTER `telephone`"); 101 } 102 103 // order 104 $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'"); 105 106 if (!$query->num_rows) { 107 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `payment_custom_field` TEXT NOT NULL AFTER `payment_address_format`"); 108 } 109 110 // order 111 $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'"); 112 113 if (!$query->num_rows) { 114 $this->db->query("ALTER TABLE `" . DB_PREFIX . "order` ADD `shipping_custom_field` TEXT NOT NULL AFTER `shipping_address_format`"); 115 } 116 117 // banner 118 $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'"); 119 120 if (!$query->num_rows) { 121 $this->db->query("ALTER TABLE `" . DB_PREFIX . "banner_image` ADD `sort_order` INT(3) NOT NULL AFTER `image`"); 122 } 123 124 // setting 125 $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "setting' AND COLUMN_NAME = 'group'"); 126 127 if ($query->num_rows) { 128 // Leave code if already there and just drop group 129 $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "setting' AND COLUMN_NAME = 'code'"); 130 131 if ($query->num_rows) { 132 $this->db->query("UPDATE `" . DB_PREFIX . "setting` SET `code` = `group` WHERE `code` IS NULL or `code` = ''"); 133 $this->db->query("ALTER TABLE `" . DB_PREFIX . "setting` DROP `group`"); 134 } else { 135 $this->db->query("ALTER TABLE `" . DB_PREFIX . "setting` CHANGE `group` `code` varchar(32) NOT NULL"); 136 } 137 } 138 139 // tags 140 $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "product_tag'"); 141 142 if ($query->num_rows) { 143 $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language"); 144 145 foreach ($query->rows as $language) { 146 // Get old tags 147 $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"); 148 149 if ($query->num_rows) { 150 foreach ($query->rows as $row) { 151 $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'] . "'"); 152 $this->db->query("DELETE FROM " . DB_PREFIX . "product_tag WHERE product_id = '" . (int)$row['product_id'] . "' AND language_id = '" . (int)$language['language_id'] . "'"); 153 } 154 } 155 } 156 } 157 158 // Update the config.php by adding a DIR_MODIFICATION 159 if (is_file(DIR_OPENCART . 'config.php')) { 160 $files = glob(DIR_OPENCART . '{config.php,admin/config.php}', GLOB_BRACE); 161 162 foreach ($files as $file) { 163 if (!is_writable($file)) { 164 exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file))); 165 } 166 167 $upgrade = true; 168 169 $lines = file($file); 170 171 foreach ($lines as $line) { 172 if (strpos($line, 'DIR_MODIFICATION') !== false) { 173 $upgrade = false; 174 175 break; 176 } 177 } 178 179 if ($upgrade) { 180 $output = ''; 181 182 foreach ($lines as $line_id => $line) { 183 if (strpos($line, 'DIR_LOGS') !== false) { 184 $new_line = "define('DIR_MODIFICATION', '" . str_replace("\\", "/", DIR_SYSTEM) . 'modification/' . "');"; 185 $output .= $new_line . "\n"; 186 $output .= $line; 187 } else { 188 $output .= $line; 189 } 190 } 191 192 file_put_contents($file, $output); 193 } 194 } 195 196 // Update the config.php by adding a DIR_UPLOAD 197 foreach ($files as $file) { 198 if (!is_writable($file)) { 199 exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file))); 200 } 201 202 $upgrade = true; 203 204 $lines = file($file); 205 206 foreach ($lines as $line) { 207 if (strpos($line, 'DIR_UPLOAD') !== false) { 208 $upgrade = false; 209 210 break; 211 } 212 } 213 214 if ($upgrade) { 215 $output = ''; 216 217 foreach ($lines as $line_id => $line) { 218 if (strpos($line, 'DIR_LOGS') !== false) { 219 $new_line = "define('DIR_UPLOAD', '" . str_replace("\\", "/", DIR_SYSTEM) . 'upload/' . "');"; 220 $output .= $new_line . "\n"; 221 $output .= $line; 222 } else { 223 $output .= $line; 224 } 225 } 226 227 file_put_contents($file, $output); 228 } 229 } 230 231 // Update the config.php to change mysql to mysqli 232 foreach ($files as $file) { 233 if (!is_writable($file)) { 234 exit(json_encode(array('error' => 'File is read only. Please adjust and try again: ' . $file))); 235 } 236 237 $upgrade = false; 238 239 $lines = file($file); 240 241 foreach ($lines as $line) { 242 if (strpos($line, "'mysql'") !== false) { 243 $upgrade = true; 244 245 break; 246 } 247 } 248 249 if ($upgrade) { 250 $output = ''; 251 252 foreach ($lines as $line_id => $line) { 253 if (strpos($line, "'mysql'") !== false) { 254 $new_line = "define('DB_DRIVER', 'mysqli');"; 255 $output .= $new_line . "\n"; 256 } else { 257 $output .= $line; 258 } 259 } 260 261 file_put_contents($file, $output); 262 } 263 } 264 } 265 } 266 }