diff options
Diffstat (limited to 'public/install/model/upgrade/1002.php')
-rw-r--r-- | public/install/model/upgrade/1002.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/public/install/model/upgrade/1002.php b/public/install/model/upgrade/1002.php new file mode 100644 index 0000000..bdb8e6f --- /dev/null +++ b/public/install/model/upgrade/1002.php @@ -0,0 +1,111 @@ +<?php +class ModelUpgrade1002 extends Model { + public function upgrade() { + // setting + $query = $this->db->query("SELECT setting_id FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_product_limit'"); + + if (!$query->num_rows) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "setting` SET `key` = 'config_product_limit', `value` = '20', `code` = 'config', `store_id` = 0"); + } + + // setting + $query = $this->db->query("SELECT setting_id FROM `" . DB_PREFIX . "setting` WHERE `store_id` = '0' AND `key` = 'config_voucher_min'"); + + if (!$query->num_rows) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "setting` SET `key` = 'config_voucher_min', `value` = '1', `code` = 'config', `store_id` = 0"); + } + + // setting + $query = $this->db->query("SELECT setting_id FROM `" . DB_PREFIX . "setting` WHERE `store_id` = '0' AND `key` = 'config_voucher_max'"); + + if (!$query->num_rows) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "setting` SET `key` = 'config_voucher_max', `value` = '1000', `code` = 'config', `store_id` = 0"); + } + + // customer + $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "customer' AND COLUMN_NAME = 'safe'"); + + if (!$query->num_rows) { + $this->db->query("ALTER TABLE `" . DB_PREFIX . "customer` ADD `safe` tinyint(1) NOT NULL AFTER `approved`"); + } + + // customer + $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "customer_group' AND COLUMN_NAME = 'name'"); + + if ($query->num_rows) { + $customer_group_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "customer_group`"); + + foreach ($customer_group_query->rows as $customer_group) { + $language_query = $this->db->query("SELECT `language_id` FROM `" . DB_PREFIX . "language`"); + + foreach ($language_query->rows as $language) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "customer_group_description` SET `customer_group_id` = '" . (int)$customer_group['customer_group_id'] . "', `language_id` = '" . (int)$language['language_id'] . "', `name` = '" . $this->db->escape($customer_group['name']) . "'"); + } + } + + $this->db->query("ALTER TABLE `" . DB_PREFIX . "customer_group` DROP `name`"); + } + + // product_option + $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "product_option' AND COLUMN_NAME = 'option_value'"); + + if ($query->num_rows) { + // Drop product option value if exsits + $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "product_option' AND COLUMN_NAME = 'value'"); + + if ($query->num_rows) { + $this->db->query("ALTER TABLE `" . DB_PREFIX . "product_option` DROP `value`"); + } + + $this->db->query("ALTER TABLE `" . DB_PREFIX . "product_option` CHANGE `option_value` `value` TEXT NOT NULL"); + } + + // category + $primary_data = array(); + + $query = $this->db->query("SHOW KEYS FROM `" . DB_PREFIX . "category` WHERE Key_name = 'PRIMARY'"); + + foreach ($query->rows as $result) { + $primary_data[] = $result['Column_name']; + } + + if (!in_array('category_id', $primary_data) || !in_array('parent_id', $primary_data)) { + $this->db->query("ALTER TABLE `" . DB_PREFIX . "category` DROP PRIMARY KEY, ADD PRIMARY KEY(`category_id`, `parent_id`)"); + } + + // category + $query = $this->db->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" . DB_DATABASE . "' AND TABLE_NAME = '" . DB_PREFIX . "category_description' AND COLUMN_NAME = 'meta_title'"); + + if (!$query->num_rows) { + $this->db->query("ALTER TABLE `" . DB_PREFIX . "category_description` ADD `meta_title` varchar(255) NOT NULL AFTER `description`"); + } + + // Sort the categories to take advantage of the nested set model + $this->repairCategories(0); + } + + // Function to repair any erroneous categories that are not in the category path table. + public function repairCategories($parent_id = 0) { + $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category` WHERE `parent_id` = '" . (int)$parent_id . "'"); + + foreach ($query->rows as $category) { + // Delete the path below the current one + $this->db->query("DELETE FROM `" . DB_PREFIX . "category_path` WHERE `category_id` = '" . (int)$category['category_id'] . "'"); + + // Fix for records with no paths + $level = 0; + + $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE `category_id` = '" . (int)$parent_id . "' ORDER BY `level` ASC"); + + foreach ($query->rows as $result) { + $this->db->query("INSERT INTO `" . DB_PREFIX . "category_path` SET `category_id` = '" . (int)$category['category_id'] . "', `path_id` = '" . (int)$result['path_id'] . "', `level` = '" . (int)$level . "'"); + + $level++; + } + + $this->db->query("REPLACE INTO `" . DB_PREFIX . "category_path` SET `category_id` = '" . (int)$category['category_id'] . "', `path_id` = '" . (int)$category['category_id'] . "', `level` = '" . (int)$level . "'"); + + $this->repairCategories($category['category_id']); + } + } +}
\ No newline at end of file |