shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

category.php (16530B)


      1 <?php
      2 class ModelCatalogCategory extends Model {
      3 	public function addCategory($data) {
      4 		$this->db->query("INSERT INTO " . DB_PREFIX . "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW(), date_added = NOW()");
      5 
      6 		$category_id = $this->db->getLastId();
      7 
      8 		if (isset($data['image'])) {
      9 			$this->db->query("UPDATE " . DB_PREFIX . "category SET image = '" . $this->db->escape($data['image']) . "' WHERE category_id = '" . (int)$category_id . "'");
     10 		}
     11 
     12 		foreach ($data['category_description'] as $language_id => $value) {
     13 			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
     14 		}
     15 
     16 		// MySQL Hierarchical Data Closure Table Pattern
     17 		$level = 0;
     18 
     19 		$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY `level` ASC");
     20 
     21 		foreach ($query->rows as $result) {
     22 			$this->db->query("INSERT INTO `" . DB_PREFIX . "category_path` SET `category_id` = '" . (int)$category_id . "', `path_id` = '" . (int)$result['path_id'] . "', `level` = '" . (int)$level . "'");
     23 
     24 			$level++;
     25 		}
     26 
     27 		$this->db->query("INSERT INTO `" . DB_PREFIX . "category_path` SET `category_id` = '" . (int)$category_id . "', `path_id` = '" . (int)$category_id . "', `level` = '" . (int)$level . "'");
     28 
     29 		if (isset($data['category_filter'])) {
     30 			foreach ($data['category_filter'] as $filter_id) {
     31 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_filter SET category_id = '" . (int)$category_id . "', filter_id = '" . (int)$filter_id . "'");
     32 			}
     33 		}
     34 
     35 		if (isset($data['category_store'])) {
     36 			foreach ($data['category_store'] as $store_id) {
     37 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_to_store SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "'");
     38 			}
     39 		}
     40 		
     41 		if (isset($data['category_seo_url'])) {
     42 			foreach ($data['category_seo_url'] as $store_id => $language) {
     43 				foreach ($language as $language_id => $keyword) {
     44 					if (!empty($keyword)) {
     45 						$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($keyword) . "'");
     46 					}
     47 				}
     48 			}
     49 		}
     50 		
     51 		// Set which layout to use with this category
     52 		if (isset($data['category_layout'])) {
     53 			foreach ($data['category_layout'] as $store_id => $layout_id) {
     54 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_to_layout SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
     55 			}
     56 		}
     57 
     58 		$this->cache->delete('category');
     59 
     60 		return $category_id;
     61 	}
     62 
     63 	public function editCategory($category_id, $data) {
     64 		$this->db->query("UPDATE " . DB_PREFIX . "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW() WHERE category_id = '" . (int)$category_id . "'");
     65 
     66 		if (isset($data['image'])) {
     67 			$this->db->query("UPDATE " . DB_PREFIX . "category SET image = '" . $this->db->escape($data['image']) . "' WHERE category_id = '" . (int)$category_id . "'");
     68 		}
     69 
     70 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int)$category_id . "'");
     71 
     72 		foreach ($data['category_description'] as $language_id => $value) {
     73 			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
     74 		}
     75 
     76 		// MySQL Hierarchical Data Closure Table Pattern
     77 		$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE path_id = '" . (int)$category_id . "' ORDER BY level ASC");
     78 
     79 		if ($query->rows) {
     80 			foreach ($query->rows as $category_path) {
     81 				// Delete the path below the current one
     82 				$this->db->query("DELETE FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$category_path['category_id'] . "' AND level < '" . (int)$category_path['level'] . "'");
     83 
     84 				$path = array();
     85 
     86 				// Get the nodes new parents
     87 				$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY level ASC");
     88 
     89 				foreach ($query->rows as $result) {
     90 					$path[] = $result['path_id'];
     91 				}
     92 
     93 				// Get whats left of the nodes current path
     94 				$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$category_path['category_id'] . "' ORDER BY level ASC");
     95 
     96 				foreach ($query->rows as $result) {
     97 					$path[] = $result['path_id'];
     98 				}
     99 
    100 				// Combine the paths with a new level
    101 				$level = 0;
    102 
    103 				foreach ($path as $path_id) {
    104 					$this->db->query("REPLACE INTO `" . DB_PREFIX . "category_path` SET category_id = '" . (int)$category_path['category_id'] . "', `path_id` = '" . (int)$path_id . "', level = '" . (int)$level . "'");
    105 
    106 					$level++;
    107 				}
    108 			}
    109 		} else {
    110 			// Delete the path below the current one
    111 			$this->db->query("DELETE FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$category_id . "'");
    112 
    113 			// Fix for records with no paths
    114 			$level = 0;
    115 
    116 			$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY level ASC");
    117 
    118 			foreach ($query->rows as $result) {
    119 				$this->db->query("INSERT INTO `" . DB_PREFIX . "category_path` SET category_id = '" . (int)$category_id . "', `path_id` = '" . (int)$result['path_id'] . "', level = '" . (int)$level . "'");
    120 
    121 				$level++;
    122 			}
    123 
    124 			$this->db->query("REPLACE INTO `" . DB_PREFIX . "category_path` SET category_id = '" . (int)$category_id . "', `path_id` = '" . (int)$category_id . "', level = '" . (int)$level . "'");
    125 		}
    126 
    127 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_filter WHERE category_id = '" . (int)$category_id . "'");
    128 
    129 		if (isset($data['category_filter'])) {
    130 			foreach ($data['category_filter'] as $filter_id) {
    131 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_filter SET category_id = '" . (int)$category_id . "', filter_id = '" . (int)$filter_id . "'");
    132 			}
    133 		}
    134 
    135 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_to_store WHERE category_id = '" . (int)$category_id . "'");
    136 
    137 		if (isset($data['category_store'])) {
    138 			foreach ($data['category_store'] as $store_id) {
    139 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_to_store SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "'");
    140 			}
    141 		}
    142 
    143 		// SEO URL
    144 		$this->db->query("DELETE FROM `" . DB_PREFIX . "seo_url` WHERE query = 'category_id=" . (int)$category_id . "'");
    145 
    146 		if (isset($data['category_seo_url'])) {
    147 			foreach ($data['category_seo_url'] as $store_id => $language) {
    148 				foreach ($language as $language_id => $keyword) {
    149 					if (!empty($keyword)) {
    150 						$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($keyword) . "'");
    151 					}
    152 				}
    153 			}
    154 		}
    155 		
    156 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_to_layout WHERE category_id = '" . (int)$category_id . "'");
    157 
    158 		if (isset($data['category_layout'])) {
    159 			foreach ($data['category_layout'] as $store_id => $layout_id) {
    160 				$this->db->query("INSERT INTO " . DB_PREFIX . "category_to_layout SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
    161 			}
    162 		}
    163 
    164 		$this->cache->delete('category');
    165 	}
    166 
    167 	public function deleteCategory($category_id) {
    168 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");
    169 
    170 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE path_id = '" . (int)$category_id . "'");
    171 
    172 		foreach ($query->rows as $result) {
    173 			$this->deleteCategory($result['category_id']);
    174 		}
    175 
    176 		$this->db->query("DELETE FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$category_id . "'");
    177 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int)$category_id . "'");
    178 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_filter WHERE category_id = '" . (int)$category_id . "'");
    179 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_to_store WHERE category_id = '" . (int)$category_id . "'");
    180 		$this->db->query("DELETE FROM " . DB_PREFIX . "category_to_layout WHERE category_id = '" . (int)$category_id . "'");
    181 		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE category_id = '" . (int)$category_id . "'");
    182 		$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'category_id=" . (int)$category_id . "'");
    183 		$this->db->query("DELETE FROM " . DB_PREFIX . "coupon_category WHERE category_id = '" . (int)$category_id . "'");
    184 
    185 		$this->cache->delete('category');
    186 	}
    187 
    188 	public function repairCategories($parent_id = 0) {
    189 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category WHERE parent_id = '" . (int)$parent_id . "'");
    190 
    191 		foreach ($query->rows as $category) {
    192 			// Delete the path below the current one
    193 			$this->db->query("DELETE FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$category['category_id'] . "'");
    194 
    195 			// Fix for records with no paths
    196 			$level = 0;
    197 
    198 			$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "category_path` WHERE category_id = '" . (int)$parent_id . "' ORDER BY level ASC");
    199 
    200 			foreach ($query->rows as $result) {
    201 				$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 . "'");
    202 
    203 				$level++;
    204 			}
    205 
    206 			$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 . "'");
    207 
    208 			$this->repairCategories($category['category_id']);
    209 		}
    210 	}
    211 
    212 	public function getCategory($category_id) {
    213 		$query = $this->db->query("SELECT DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY cp.category_id) AS path FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (c.category_id = cd2.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'");
    214 		
    215 		return $query->row;
    216 	}
    217 
    218 	public function getCategories($data = array()) {
    219 		$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
    220 
    221 		if (!empty($data['filter_name'])) {
    222 			$sql .= " AND cd2.name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
    223 		}
    224 
    225 		$sql .= " GROUP BY cp.category_id";
    226 
    227 		$sort_data = array(
    228 			'name',
    229 			'sort_order'
    230 		);
    231 
    232 		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
    233 			$sql .= " ORDER BY " . $data['sort'];
    234 		} else {
    235 			$sql .= " ORDER BY sort_order";
    236 		}
    237 
    238 		if (isset($data['order']) && ($data['order'] == 'DESC')) {
    239 			$sql .= " DESC";
    240 		} else {
    241 			$sql .= " ASC";
    242 		}
    243 
    244 		if (isset($data['start']) || isset($data['limit'])) {
    245 			if ($data['start'] < 0) {
    246 				$data['start'] = 0;
    247 			}
    248 
    249 			if ($data['limit'] < 1) {
    250 				$data['limit'] = 20;
    251 			}
    252 
    253 			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    254 		}
    255 
    256 		$query = $this->db->query($sql);
    257 
    258 		return $query->rows;
    259 	}
    260 
    261 	public function getCategoryDescriptions($category_id) {
    262 		$category_description_data = array();
    263 
    264 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int)$category_id . "'");
    265 
    266 		foreach ($query->rows as $result) {
    267 			$category_description_data[$result['language_id']] = array(
    268 				'name'             => $result['name'],
    269 				'meta_title'       => $result['meta_title'],
    270 				'meta_description' => $result['meta_description'],
    271 				'meta_keyword'     => $result['meta_keyword'],
    272 				'description'      => $result['description']
    273 			);
    274 		}
    275 
    276 		return $category_description_data;
    277 	}
    278 	
    279 	public function getCategoryPath($category_id) {
    280 		$query = $this->db->query("SELECT category_id, path_id, level FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");
    281 
    282 		return $query->rows;
    283 	}
    284 	
    285 	public function getCategoryFilters($category_id) {
    286 		$category_filter_data = array();
    287 
    288 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_filter WHERE category_id = '" . (int)$category_id . "'");
    289 
    290 		foreach ($query->rows as $result) {
    291 			$category_filter_data[] = $result['filter_id'];
    292 		}
    293 
    294 		return $category_filter_data;
    295 	}
    296 
    297 	public function getCategoryStores($category_id) {
    298 		$category_store_data = array();
    299 
    300 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_to_store WHERE category_id = '" . (int)$category_id . "'");
    301 
    302 		foreach ($query->rows as $result) {
    303 			$category_store_data[] = $result['store_id'];
    304 		}
    305 
    306 		return $category_store_data;
    307 	}
    308 	
    309 	public function getCategorySeoUrls($category_id) {
    310 		$category_seo_url_data = array();
    311 		
    312 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'category_id=" . (int)$category_id . "'");
    313 
    314 		foreach ($query->rows as $result) {
    315 			$category_seo_url_data[$result['store_id']][$result['language_id']] = $result['keyword'];
    316 		}
    317 
    318 		return $category_seo_url_data;
    319 	}
    320 	
    321 	public function getCategoryLayouts($category_id) {
    322 		$category_layout_data = array();
    323 
    324 		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_to_layout WHERE category_id = '" . (int)$category_id . "'");
    325 
    326 		foreach ($query->rows as $result) {
    327 			$category_layout_data[$result['store_id']] = $result['layout_id'];
    328 		}
    329 
    330 		return $category_layout_data;
    331 	}
    332 
    333 	public function getTotalCategories() {
    334 		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "category");
    335 
    336 		return $query->row['total'];
    337 	}
    338 	
    339 	public function getTotalCategoriesByLayoutId($layout_id) {
    340 		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "category_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
    341 
    342 		return $query->row['total'];
    343 	}	
    344 }