diff --git a/public/store/controller/product/category.php b/public/store/controller/product/category.php index 07d4fcb..a07da27 100644 --- a/public/store/controller/product/category.php +++ b/public/store/controller/product/category.php @@ -2,69 +2,70 @@ // * @source See SOURCE.txt for source and other copyright. // * @license GNU General Public License version 3; see LICENSE.txt -class ControllerProductCategory extends Controller { - public function index() { +class ControllerProductCategory extends Controller +{ + public function index() + { $this->load->language('product/category'); $this->load->model('catalog/category'); $this->load->model('catalog/product'); -$this->document->addStyle('store/view/theme/dominik/assets/css/swiper-bundle.min.css'); -$this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js'); + $this->document->addStyle('store/view/theme/dominik/assets/css/swiper-bundle.min.css'); + $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js'); $this->load->model('tool/image'); - $data['text_empty'] = $this->language->get('text_empty'); - if ($this->config->get('config_noindex_disallow_params')) { - $params = explode ("\r\n", $this->config->get('config_noindex_disallow_params')); - if(!empty($params)) { - $disallow_params = $params; - } - } + if ($this->config->get('config_noindex_disallow_params')) { + $params = explode("\r\n", $this->config->get('config_noindex_disallow_params')); + if (!empty($params)) { + $disallow_params = $params; + } + } if (isset($this->request->get['filter'])) { $filter = $this->request->get['filter']; - if (!in_array('filter', $disallow_params, true) && $this->config->get('config_noindex_status')){ - $this->document->setRobots('noindex,follow'); - } + if (!in_array('filter', $disallow_params, true) && $this->config->get('config_noindex_status')) { + $this->document->setRobots('noindex,follow'); + } } else { $filter = ''; } if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; - if (!in_array('sort', $disallow_params, true) && $this->config->get('config_noindex_status')) { - $this->document->setRobots('noindex,follow'); - } + if (!in_array('sort', $disallow_params, true) && $this->config->get('config_noindex_status')) { + $this->document->setRobots('noindex,follow'); + } } else { $sort = 'p.sort_order'; } if (isset($this->request->get['order'])) { $order = $this->request->get['order']; - if (!in_array('order', $disallow_params, true) && $this->config->get('config_noindex_status')) { - $this->document->setRobots('noindex,follow'); - } + if (!in_array('order', $disallow_params, true) && $this->config->get('config_noindex_status')) { + $this->document->setRobots('noindex,follow'); + } } else { $order = 'ASC'; } if (isset($this->request->get['page'])) { - $page = (int)$this->request->get['page']; - if (!in_array('page', $disallow_params, true) && $this->config->get('config_noindex_status')) { - $this->document->setRobots('noindex,follow'); - } + $page = (int) $this->request->get['page']; + if (!in_array('page', $disallow_params, true) && $this->config->get('config_noindex_status')) { + $this->document->setRobots('noindex,follow'); + } } else { $page = 1; } if (isset($this->request->get['limit'])) { - $limit = (int)$this->request->get['limit']; - if (!in_array('limit', $disallow_params, true) && $this->config->get('config_noindex_status')) { - $this->document->setRobots('noindex,follow'); - } + $limit = (int) $this->request->get['limit']; + if (!in_array('limit', $disallow_params, true) && $this->config->get('config_noindex_status')) { + $this->document->setRobots('noindex,follow'); + } } else { $limit = $this->config->get('theme_' . $this->config->get('config_theme') . '_product_limit'); } @@ -93,15 +94,15 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' $path = ''; - $parts = explode('_', (string)$this->request->get['path']); + $parts = explode('_', (string) $this->request->get['path']); - $category_id = (int)array_pop($parts); + $category_id = (int) array_pop($parts); foreach ($parts as $path_id) { if (!$path) { - $path = (int)$path_id; + $path = (int) $path_id; } else { - $path .= '_' . (int)$path_id; + $path .= '_' . (int) $path_id; } $category_info = $this->model_catalog_category->getCategory($path_id); @@ -120,7 +121,6 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' $category_info = $this->model_catalog_category->getCategory($category_id); if ($category_info) { - if ($category_info['meta_title']) { $this->document->setTitle($category_info['meta_title']); } else { @@ -154,9 +154,9 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' $data['thumb'] = ''; } - $data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8'); + $data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8'); $data['description_bottom'] = html_entity_decode($category_info['description_bottom'], ENT_QUOTES, 'UTF-8'); - $data['compare'] = $this->url->link('product/compare'); + $data['compare'] = $this->url->link('product/compare'); $url = ''; @@ -187,9 +187,9 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' ); $data['categories'][] = array( - 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), -'thumb' => $this->model_tool_image->resize($result['image'] ? $result['image'] : 'placeholder.png', 180, 180), - 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) + 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), + 'thumb' => $this->model_tool_image->resize($result['image'] ? $result['image'] : 'placeholder.png', 180, 180), + 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) ); } @@ -207,8 +207,9 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' $product_total = $this->model_catalog_product->getTotalProducts($filter_data); $results = $this->model_catalog_product->getProducts($filter_data); - + foreach ($results as $result) { + if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height')); } else { @@ -221,12 +222,12 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' $price = false; } - if (!is_null($result['special']) && (float)$result['special'] >= 0) { - $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); - $tax_price = (float)$result['special']; + if (!is_null($result['special']) && (float) $result['special'] >= 0) { + $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); + $tax_price = (float) $result['special']; } else { - $special = false; - $tax_price = (float)$result['price']; + $special = false; + $tax_price = (float) $result['price']; } if ($this->config->get('config_tax')) { @@ -236,35 +237,36 @@ $this->document->addScript('store/view/theme/dominik/assets/js/swiper-bundle.js' } if ($this->config->get('config_review_status')) { - $rating = (int)$result['rating']; + $rating = (int) $result['rating']; } else { $rating = false; } -$results = $this->model_catalog_product->getProductImages($result['product_id']); -if($results){ - $additional_image = $this->model_tool_image->resize($results[0]['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height')); -} else { - $additional_image = false; -} + $results = $this->model_catalog_product->getProductImages($result['product_id']); + if ($results) { + $additional_image = $this->model_tool_image->resize($results[0]['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height')); + } else { + $additional_image = false; + } + $data['products'][] = array( - 'product_id' => $result['product_id'], - 'thumb' => $image, -'additional_thumb' => $additional_image, -'price_n' => $result['price'], -'price_2' => $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), -'price_2_n' => $result['price_2'], -'price_3' => $this->currency->format($this->tax->calculate($result['price_3'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), -'price_3_n' => $result['price_3'], -'min_price' => $this->currency->format($this->tax->calculate(min([$result['price'],$result['price_2']]), $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), - 'name' => $result['name'], - 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', - 'price' => $price, - 'special' => $special, - 'tax' => $tax, - 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, - 'rating' => $result['rating'], - 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) + 'product_id' => $result['product_id'], + 'thumb' => $image, + 'additional_thumb' => $additional_image, + 'price_n' => $result['price'], + 'price_2' => $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), + 'price_2_n' => $result['price_2'], + 'price_3' => $this->currency->format($this->tax->calculate($result['price_3'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), + 'price_3_n' => $result['price_3'], + 'min_price' => $this->currency->format($this->tax->calculate(min([$result['price'], $result['price_2']]), $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']), + 'name' => $result['name'], + 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', + 'price' => $price, + 'special' => $special, + 'tax' => $tax, + 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, + 'rating' => $result['rating'], + 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id']) ); } @@ -356,7 +358,7 @@ if($results){ sort($limits); - foreach($limits as $value) { + foreach ($limits as $value) { $data['limits'][] = array( 'text' => $value, 'value' => $value, @@ -382,70 +384,68 @@ if($results){ $url .= '&limit=' . $this->request->get['limit']; } - $pagination = new Pagination(); + $pagination = new Pagination(); $pagination->total = $product_total; - $pagination->page = $page; + $pagination->page = $page; $pagination->limit = $limit; - $pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}'); + $pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}'); $data['pagination'] = $pagination->render(); $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit)); - if (!$this->config->get('config_canonical_method')) { - // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html - if ($page == 1) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'canonical'); - } elseif ($page == 2) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'prev'); - } else { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page - 1)), 'prev'); - } + if (!$this->config->get('config_canonical_method')) { + // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html + if ($page == 1) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'canonical'); + } elseif ($page == 2) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'prev'); + } else { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page - 1)), 'prev'); + } - if ($limit && ceil($product_total / $limit) > $page) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page + 1)), 'next'); - } - } else { + if ($limit && ceil($product_total / $limit) > $page) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page + 1)), 'next'); + } + } else { + if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { + $server = $this->config->get('config_ssl'); + } else { + $server = $this->config->get('config_url'); + }; - if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { - $server = $this->config->get('config_ssl'); - } else { - $server = $this->config->get('config_url'); - }; + $request_url = rtrim($server, '/') . $this->request->server['REQUEST_URI']; + $canonical_url = $this->url->link('product/category', 'path=' . $category_info['category_id']); - $request_url = rtrim($server, '/') . $this->request->server['REQUEST_URI']; - $canonical_url = $this->url->link('product/category', 'path=' . $category_info['category_id']); + if (($request_url != $canonical_url) || $this->config->get('config_canonical_self')) { + $this->document->addLink($canonical_url, 'canonical'); + } - if (($request_url != $canonical_url) || $this->config->get('config_canonical_self')) { - $this->document->addLink($canonical_url, 'canonical'); - } + if ($this->config->get('config_add_prevnext')) { + if ($page == 2) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'prev'); + } elseif ($page > 2) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page - 1)), 'prev'); + } - if ($this->config->get('config_add_prevnext')) { + if ($limit && ceil($product_total / $limit) > $page) { + $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page + 1)), 'next'); + } + } + } - if ($page == 2) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'prev'); - } elseif ($page > 2) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page - 1)), 'prev'); - } - - if ($limit && ceil($product_total / $limit) > $page) { - $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page=' . ($page + 1)), 'next'); - } - } - } - - $data['sort'] = $sort; + $data['sort'] = $sort; $data['order'] = $order; $data['limit'] = $limit; $data['continue'] = $this->url->link('common/home'); - $data['column_left'] = $this->load->controller('common/column_left'); - $data['column_right'] = $this->load->controller('common/column_right'); - $data['content_top'] = $this->load->controller('common/content_top'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['column_right'] = $this->load->controller('common/column_right'); + $data['content_top'] = $this->load->controller('common/content_top'); $data['content_bottom'] = $this->load->controller('common/content_bottom'); - $data['footer'] = $this->load->controller('common/footer'); - $data['header'] = $this->load->controller('common/header'); + $data['footer'] = $this->load->controller('common/footer'); + $data['header'] = $this->load->controller('common/header'); $this->response->setOutput($this->load->view('product/category', $data)); } else { @@ -486,12 +486,12 @@ if($results){ $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found'); - $data['column_left'] = $this->load->controller('common/column_left'); - $data['column_right'] = $this->load->controller('common/column_right'); - $data['content_top'] = $this->load->controller('common/content_top'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['column_right'] = $this->load->controller('common/column_right'); + $data['content_top'] = $this->load->controller('common/content_top'); $data['content_bottom'] = $this->load->controller('common/content_bottom'); - $data['footer'] = $this->load->controller('common/footer'); - $data['header'] = $this->load->controller('common/header'); + $data['footer'] = $this->load->controller('common/footer'); + $data['header'] = $this->load->controller('common/header'); $this->response->setOutput($this->load->view('error/not_found', $data)); } diff --git a/public/store/model/catalog/product.php b/public/store/model/catalog/product.php index 34935e8..f9609b2 100644 --- a/public/store/model/catalog/product.php +++ b/public/store/model/catalog/product.php @@ -2,97 +2,101 @@ // * @source See SOURCE.txt for source and other copyright. // * @license GNU General Public License version 3; see LICENSE.txt -class ModelCatalogProduct extends Model { - public function updateViewed($product_id) { - $this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int)$product_id . "'"); +class ModelCatalogProduct extends Model +{ + public function updateViewed($product_id) + { + $this->db->query('UPDATE ' . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int) $product_id . "'"); } - public function getProduct($product_id) { - $query = $this->db->query("SELECT DISTINCT *, COALESCE(pp.price, p.price) AS price, COALESCE(pp.price_2, p.price_2) AS price_2, COALESCE(pp.price_3, p.price_3) AS price_3, pd.name AS name, p.image, p.noindex AS noindex, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND pr.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_prices pp ON (p.product_id = pp.product_id AND pp.store_id = '" . (int)$this->config->get('config_store_id') . "') WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); + public function getProduct($product_id) + { + $query = $this->db->query('SELECT DISTINCT *, COALESCE(pp.price, p.price) AS price, COALESCE(pp.price_2, p.price_2) AS price_2, COALESCE(pp.price_3, p.price_3) AS price_3, pd.name AS name, p.image, p.noindex AS noindex, m.name AS manufacturer, (SELECT price FROM ' . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND pr.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int) $this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int) $this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int) $this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . 'product p LEFT JOIN ' . DB_PREFIX . 'product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ' . DB_PREFIX . 'product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN ' . DB_PREFIX . 'manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN ' . DB_PREFIX . "product_prices pp ON (p.product_id = pp.product_id AND pp.store_id = '" . (int) $this->config->get('config_store_id') . "') WHERE p.product_id = '" . (int) $product_id . "' AND pd.language_id = '" . (int) $this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "'"); if ($query->num_rows) { return array( - 'product_id' => $query->row['product_id'], - 'name' => $query->row['name'], - 'description' => $query->row['description'], + 'product_id' => $query->row['product_id'], + 'name' => $query->row['name'], + 'description' => $query->row['description'], 'description_first_rental' => $query->row['description_first_rental'], 'description_second_rental' => $query->row['description_second_rental'], 'description_purchase' => $query->row['description_purchase'], 'description_terms' => $query->row['description_terms'], - 'meta_title' => $query->row['meta_title'], - 'noindex' => $query->row['noindex'], - 'meta_h1' => $query->row['meta_h1'], - 'meta_description' => $query->row['meta_description'], - 'meta_keyword' => $query->row['meta_keyword'], - 'tag' => $query->row['tag'], - 'model' => $query->row['model'], - 'sku' => $query->row['sku'], - 'upc' => $query->row['upc'], - 'ean' => $query->row['ean'], - 'jan' => $query->row['jan'], - 'isbn' => $query->row['isbn'], - 'mpn' => $query->row['mpn'], - 'location' => $query->row['location'], - 'quantity' => $query->row['quantity'], - 'stock_status' => $query->row['stock_status'], - 'image' => $query->row['image'], - 'manufacturer_id' => $query->row['manufacturer_id'], - 'manufacturer' => $query->row['manufacturer'], - 'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']), -'price_2' => $query->row['price_2'], -'price_3' => $query->row['price_3'], - 'special' => $query->row['special'], - 'reward' => $query->row['reward'], - 'points' => $query->row['points'], - 'tax_class_id' => $query->row['tax_class_id'], - 'date_available' => $query->row['date_available'], - 'weight' => $query->row['weight'], - 'weight_class_id' => $query->row['weight_class_id'], - 'length' => $query->row['length'], - 'width' => $query->row['width'], - 'height' => $query->row['height'], - 'length_class_id' => $query->row['length_class_id'], - 'subtract' => $query->row['subtract'], - 'rating' => round($query->row['rating']), - 'reviews' => $query->row['reviews'] ? $query->row['reviews'] : 0, - 'minimum' => $query->row['minimum'], - 'sort_order' => $query->row['sort_order'], - 'status' => $query->row['status'], - 'date_added' => $query->row['date_added'], - 'date_modified' => $query->row['date_modified'], - 'viewed' => $query->row['viewed'] + 'meta_title' => $query->row['meta_title'], + 'noindex' => $query->row['noindex'], + 'meta_h1' => $query->row['meta_h1'], + 'meta_description' => $query->row['meta_description'], + 'meta_keyword' => $query->row['meta_keyword'], + 'tag' => $query->row['tag'], + 'model' => $query->row['model'], + 'sku' => $query->row['sku'], + 'upc' => $query->row['upc'], + 'ean' => $query->row['ean'], + 'jan' => $query->row['jan'], + 'isbn' => $query->row['isbn'], + 'mpn' => $query->row['mpn'], + 'location' => $query->row['location'], + 'quantity' => $query->row['quantity'], + 'stock_status' => $query->row['stock_status'], + 'image' => $query->row['image'], + 'manufacturer_id' => $query->row['manufacturer_id'], + 'manufacturer' => $query->row['manufacturer'], + 'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']), + 'price_2' => $query->row['price_2'], + 'price_3' => $query->row['price_3'], + 'special' => $query->row['special'], + 'reward' => $query->row['reward'], + 'points' => $query->row['points'], + 'tax_class_id' => $query->row['tax_class_id'], + 'date_available' => $query->row['date_available'], + 'weight' => $query->row['weight'], + 'weight_class_id' => $query->row['weight_class_id'], + 'length' => $query->row['length'], + 'width' => $query->row['width'], + 'height' => $query->row['height'], + 'length_class_id' => $query->row['length_class_id'], + 'subtract' => $query->row['subtract'], + 'rating' => round($query->row['rating']), + 'reviews' => $query->row['reviews'] ? $query->row['reviews'] : 0, + 'minimum' => $query->row['minimum'], + 'sort_order' => $query->row['sort_order'], + 'status' => $query->row['status'], + 'date_added' => $query->row['date_added'], + 'date_modified' => $query->row['date_modified'], + 'viewed' => $query->row['viewed'] ); } else { return false; } } - public function getProducts($data = array()) { - $sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special"; + public function getProducts($data = array()) + { + $sql = 'SELECT p.product_id, (SELECT AVG(rating) AS total FROM ' . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special"; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { - $sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)"; + $sql .= ' FROM ' . DB_PREFIX . 'category_path cp LEFT JOIN ' . DB_PREFIX . 'product_to_category p2c ON (cp.category_id = p2c.category_id)'; } else { - $sql .= " FROM " . DB_PREFIX . "product_to_category p2c"; + $sql .= ' FROM ' . DB_PREFIX . 'product_to_category p2c'; } if (!empty($data['filter_filter'])) { - $sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN ' . DB_PREFIX . 'product p ON (pf.product_id = p.product_id)'; } else { - $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product p ON (p2c.product_id = p.product_id)'; } } else { - $sql .= " FROM " . DB_PREFIX . "product p"; + $sql .= ' FROM ' . DB_PREFIX . 'product p'; } - $sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int) $this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "'"; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { - $sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'"; + $sql .= " AND cp.path_id = '" . (int) $data['filter_category_id'] . "'"; } else { - $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; + $sql .= " AND p2c.category_id = '" . (int) $data['filter_category_id'] . "'"; } if (!empty($data['filter_filter'])) { @@ -101,15 +105,15 @@ class ModelCatalogProduct extends Model { $filters = explode(',', $data['filter_filter']); foreach ($filters as $filter_id) { - $implode[] = (int)$filter_id; + $implode[] = (int) $filter_id; } - $sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")"; + $sql .= ' AND pf.filter_id IN (' . implode(',', $implode) . ')'; } } if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { - $sql .= " AND ("; + $sql .= ' AND ('; if (!empty($data['filter_name'])) { $implode = array(); @@ -121,7 +125,7 @@ class ModelCatalogProduct extends Model { } if ($implode) { - $sql .= " " . implode(" AND ", $implode) . ""; + $sql .= ' ' . implode(' AND ', $implode) . ''; } if (!empty($data['filter_description'])) { @@ -130,7 +134,7 @@ class ModelCatalogProduct extends Model { } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { - $sql .= " OR "; + $sql .= ' OR '; } if (!empty($data['filter_tag'])) { @@ -143,7 +147,7 @@ class ModelCatalogProduct extends Model { } if ($implode) { - $sql .= " " . implode(" AND ", $implode) . ""; + $sql .= ' ' . implode(' AND ', $implode) . ''; } } @@ -157,14 +161,14 @@ class ModelCatalogProduct extends Model { $sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; } - $sql .= ")"; + $sql .= ')'; } if (!empty($data['filter_manufacturer_id'])) { - $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'"; + $sql .= " AND p.manufacturer_id = '" . (int) $data['filter_manufacturer_id'] . "'"; } - $sql .= " GROUP BY p.product_id"; + $sql .= ' GROUP BY p.product_id'; $sort_data = array( 'pd.name', @@ -178,20 +182,20 @@ class ModelCatalogProduct extends Model { if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { - $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; + $sql .= ' ORDER BY LCASE(' . $data['sort'] . ')'; } elseif ($data['sort'] == 'p.price') { - $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; + $sql .= ' ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)'; } else { - $sql .= " ORDER BY " . $data['sort']; + $sql .= ' ORDER BY ' . $data['sort']; } } else { - $sql .= " ORDER BY p.sort_order"; + $sql .= ' ORDER BY p.sort_order'; } if (isset($data['order']) && ($data['order'] == 'DESC')) { - $sql .= " DESC, LCASE(pd.name) DESC"; + $sql .= ' DESC, LCASE(pd.name) DESC'; } else { - $sql .= " ASC, LCASE(pd.name) ASC"; + $sql .= ' ASC, LCASE(pd.name) ASC'; } if (isset($data['start']) || isset($data['limit'])) { @@ -203,7 +207,7 @@ class ModelCatalogProduct extends Model { $data['limit'] = 20; } - $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; + $sql .= ' LIMIT ' . (int) $data['start'] . ',' . (int) $data['limit']; } $product_data = array(); @@ -211,14 +215,19 @@ class ModelCatalogProduct extends Model { $query = $this->db->query($sql); foreach ($query->rows as $result) { - $product_data[$result['product_id']] = $this->getProduct($result['product_id']); + $product = $this->getProduct($result['product_id']); + + if ($product) { + $product_data[$result['product_id']] = $product; + } } return $product_data; } - public function getProductSpecials($data = array()) { - $sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id"; + public function getProductSpecials($data = array()) + { + $sql = 'SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM ' . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . 'product_special ps LEFT JOIN ' . DB_PREFIX . 'product p ON (ps.product_id = p.product_id) LEFT JOIN ' . DB_PREFIX . 'product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id"; $sort_data = array( 'pd.name', @@ -230,18 +239,18 @@ class ModelCatalogProduct extends Model { if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { - $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; + $sql .= ' ORDER BY LCASE(' . $data['sort'] . ')'; } else { - $sql .= " ORDER BY " . $data['sort']; + $sql .= ' ORDER BY ' . $data['sort']; } } else { - $sql .= " ORDER BY p.sort_order"; + $sql .= ' ORDER BY p.sort_order'; } if (isset($data['order']) && ($data['order'] == 'DESC')) { - $sql .= " DESC, LCASE(pd.name) DESC"; + $sql .= ' DESC, LCASE(pd.name) DESC'; } else { - $sql .= " ASC, LCASE(pd.name) ASC"; + $sql .= ' ASC, LCASE(pd.name) ASC'; } if (isset($data['start']) || isset($data['limit'])) { @@ -253,7 +262,7 @@ class ModelCatalogProduct extends Model { $data['limit'] = 20; } - $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; + $sql .= ' LIMIT ' . (int) $data['start'] . ',' . (int) $data['limit']; } $product_data = array(); @@ -261,71 +270,91 @@ class ModelCatalogProduct extends Model { $query = $this->db->query($sql); foreach ($query->rows as $result) { - $product_data[$result['product_id']] = $this->getProduct($result['product_id']); + $product = $this->getProduct($result['product_id']); + + if ($product) { + $product_data[$result['product_id']] = $product; + } } return $product_data; } - public function getLatestProducts($limit) { - $product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit); + public function getLatestProducts($limit) + { + $product_data = $this->cache->get('product.latest.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit); if (!$product_data) { - $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit); + $query = $this->db->query('SELECT p.product_id FROM ' . DB_PREFIX . 'product p LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int) $limit); foreach ($query->rows as $result) { - $product_data[$result['product_id']] = $this->getProduct($result['product_id']); + $product = $this->getProduct($result['product_id']); + + if ($product) { + $product_data[$result['product_id']] = $product; + } } - $this->cache->set('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit, $product_data); + $this->cache->set('product.latest.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit, $product_data); } return $product_data; } - public function getPopularProducts($limit) { - $product_data = $this->cache->get('product.popular.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit); - + public function getPopularProducts($limit) + { + $product_data = $this->cache->get('product.popular.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit); + if (!$product_data) { - $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.viewed DESC, p.date_added DESC LIMIT " . (int)$limit); - + $query = $this->db->query('SELECT p.product_id FROM ' . DB_PREFIX . 'product p LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' ORDER BY p.viewed DESC, p.date_added DESC LIMIT " . (int) $limit); + foreach ($query->rows as $result) { - $product_data[$result['product_id']] = $this->getProduct($result['product_id']); + $product = $this->getProduct($result['product_id']); + + if ($product) { + $product_data[$result['product_id']] = $product; + } } - - $this->cache->set('product.popular.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit, $product_data); + + $this->cache->set('product.popular.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit, $product_data); } - + return $product_data; } - public function getBestSellerProducts($limit) { - $product_data = $this->cache->get('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit); + public function getBestSellerProducts($limit) + { + $product_data = $this->cache->get('product.bestseller.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit); if (!$product_data) { $product_data = array(); - $query = $this->db->query("SELECT op.product_id, SUM(op.quantity) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit); + $query = $this->db->query('SELECT op.product_id, SUM(op.quantity) AS total FROM ' . DB_PREFIX . 'order_product op LEFT JOIN `' . DB_PREFIX . 'order` o ON (op.order_id = o.order_id) LEFT JOIN `' . DB_PREFIX . 'product` p ON (op.product_id = p.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int) $limit); foreach ($query->rows as $result) { - $product_data[$result['product_id']] = $this->getProduct($result['product_id']); + $product = $this->getProduct($result['product_id']); + + if ($product) { + $product_data[$result['product_id']] = $product; + } } - $this->cache->set('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int)$limit, $product_data); + $this->cache->set('product.bestseller.' . (int) $this->config->get('config_language_id') . '.' . (int) $this->config->get('config_store_id') . '.' . $this->config->get('config_customer_group_id') . '.' . (int) $limit, $product_data); } return $product_data; } - public function getProductAttributes($product_id) { + public function getProductAttributes($product_id) + { $product_attribute_group_data = array(); - $product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name"); + $product_attribute_group_query = $this->db->query('SELECT ag.attribute_group_id, agd.name FROM ' . DB_PREFIX . 'product_attribute pa LEFT JOIN ' . DB_PREFIX . 'attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN ' . DB_PREFIX . 'attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN ' . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int) $product_id . "' AND agd.language_id = '" . (int) $this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name"); foreach ($product_attribute_group_query->rows as $product_attribute_group) { $product_attribute_data = array(); - $product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name"); + $product_attribute_query = $this->db->query('SELECT a.attribute_id, ad.name, pa.text FROM ' . DB_PREFIX . 'product_attribute pa LEFT JOIN ' . DB_PREFIX . 'attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN ' . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int) $product_id . "' AND a.attribute_group_id = '" . (int) $product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int) $this->config->get('config_language_id') . "' AND pa.language_id = '" . (int) $this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name"); foreach ($product_attribute_query->rows as $product_attribute) { $product_attribute_data[] = array( @@ -345,15 +374,16 @@ class ModelCatalogProduct extends Model { return $product_attribute_group_data; } - public function getProductOptions($product_id) { + public function getProductOptions($product_id) + { $product_option_data = array(); - $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); + $product_option_query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'product_option po LEFT JOIN `' . DB_PREFIX . 'option` o ON (po.option_id = o.option_id) LEFT JOIN ' . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int) $product_id . "' AND od.language_id = '" . (int) $this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); - $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); + $product_option_value_query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'product_option_value pov LEFT JOIN ' . DB_PREFIX . 'option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN ' . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int) $product_id . "' AND pov.product_option_id = '" . (int) $product_option['product_option_id'] . "' AND ovd.language_id = '" . (int) $this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_data[] = array( @@ -384,22 +414,25 @@ class ModelCatalogProduct extends Model { return $product_option_data; } - public function getProductDiscounts($product_id) { - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity > 1 AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC, priority ASC, price ASC"); + public function getProductDiscounts($product_id) + { + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . "product_discount WHERE product_id = '" . (int) $product_id . "' AND customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND quantity > 1 AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC, priority ASC, price ASC"); return $query->rows; } - public function getProductImages($product_id) { - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "' ORDER BY sort_order ASC"); + public function getProductImages($product_id) + { + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . "product_image WHERE product_id = '" . (int) $product_id . "' ORDER BY sort_order ASC"); return $query->rows; } - public function getProductRelated($product_id) { + public function getProductRelated($product_id) + { $product_data = array(); - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'product_related pr LEFT JOIN ' . DB_PREFIX . 'product p ON (pr.related_id = p.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int) $product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "'"); foreach ($query->rows as $result) { $product_data[$result['related_id']] = $this->getProduct($result['related_id']); @@ -408,48 +441,51 @@ class ModelCatalogProduct extends Model { return $product_data; } - public function getProductLayoutId($product_id) { - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'"); + public function getProductLayoutId($product_id) + { + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int) $product_id . "' AND store_id = '" . (int) $this->config->get('config_store_id') . "'"); if ($query->num_rows) { - return (int)$query->row['layout_id']; + return (int) $query->row['layout_id']; } else { return 0; } } - public function getCategories($product_id) { - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'"); + public function getCategories($product_id) + { + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . "product_to_category WHERE product_id = '" . (int) $product_id . "'"); return $query->rows; } - public function getTotalProducts($data = array()) { - $sql = "SELECT COUNT(DISTINCT p.product_id) AS total"; + public function getTotalProducts($data = array()) + { + $sql = 'SELECT COUNT(DISTINCT p.product_id) AS total'; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { - $sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)"; + $sql .= ' FROM ' . DB_PREFIX . 'category_path cp LEFT JOIN ' . DB_PREFIX . 'product_to_category p2c ON (cp.category_id = p2c.category_id)'; } else { - $sql .= " FROM " . DB_PREFIX . "product_to_category p2c"; + $sql .= ' FROM ' . DB_PREFIX . 'product_to_category p2c'; } if (!empty($data['filter_filter'])) { - $sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN ' . DB_PREFIX . 'product p ON (pf.product_id = p.product_id)'; } else { - $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product p ON (p2c.product_id = p.product_id)'; } } else { - $sql .= " FROM " . DB_PREFIX . "product p"; + $sql .= ' FROM ' . DB_PREFIX . 'product p'; } - $sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; + $sql .= ' LEFT JOIN ' . DB_PREFIX . 'product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int) $this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "'"; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { - $sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'"; + $sql .= " AND cp.path_id = '" . (int) $data['filter_category_id'] . "'"; } else { - $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; + $sql .= " AND p2c.category_id = '" . (int) $data['filter_category_id'] . "'"; } if (!empty($data['filter_filter'])) { @@ -458,15 +494,15 @@ class ModelCatalogProduct extends Model { $filters = explode(',', $data['filter_filter']); foreach ($filters as $filter_id) { - $implode[] = (int)$filter_id; + $implode[] = (int) $filter_id; } - $sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")"; + $sql .= ' AND pf.filter_id IN (' . implode(',', $implode) . ')'; } } if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { - $sql .= " AND ("; + $sql .= ' AND ('; if (!empty($data['filter_name'])) { $implode = array(); @@ -478,7 +514,7 @@ class ModelCatalogProduct extends Model { } if ($implode) { - $sql .= " " . implode(" AND ", $implode) . ""; + $sql .= ' ' . implode(' AND ', $implode) . ''; } if (!empty($data['filter_description'])) { @@ -487,7 +523,7 @@ class ModelCatalogProduct extends Model { } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { - $sql .= " OR "; + $sql .= ' OR '; } if (!empty($data['filter_tag'])) { @@ -500,7 +536,7 @@ class ModelCatalogProduct extends Model { } if ($implode) { - $sql .= " " . implode(" AND ", $implode) . ""; + $sql .= ' ' . implode(' AND ', $implode) . ''; } } @@ -514,11 +550,11 @@ class ModelCatalogProduct extends Model { $sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; } - $sql .= ")"; + $sql .= ')'; } if (!empty($data['filter_manufacturer_id'])) { - $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'"; + $sql .= " AND p.manufacturer_id = '" . (int) $data['filter_manufacturer_id'] . "'"; } $query = $this->db->query($sql); @@ -526,20 +562,23 @@ class ModelCatalogProduct extends Model { return $query->row['total']; } - public function getProfile($product_id, $recurring_id) { - $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "recurring r JOIN " . DB_PREFIX . "product_recurring pr ON (pr.recurring_id = r.recurring_id AND pr.product_id = '" . (int)$product_id . "') WHERE pr.recurring_id = '" . (int)$recurring_id . "' AND status = '1' AND pr.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "'"); + public function getProfile($product_id, $recurring_id) + { + $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'recurring r JOIN ' . DB_PREFIX . "product_recurring pr ON (pr.recurring_id = r.recurring_id AND pr.product_id = '" . (int) $product_id . "') WHERE pr.recurring_id = '" . (int) $recurring_id . "' AND status = '1' AND pr.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "'"); return $query->row; } - public function getProfiles($product_id) { - $query = $this->db->query("SELECT rd.* FROM " . DB_PREFIX . "product_recurring pr JOIN " . DB_PREFIX . "recurring_description rd ON (rd.language_id = " . (int)$this->config->get('config_language_id') . " AND rd.recurring_id = pr.recurring_id) JOIN " . DB_PREFIX . "recurring r ON r.recurring_id = rd.recurring_id WHERE pr.product_id = " . (int)$product_id . " AND status = '1' AND pr.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' ORDER BY sort_order ASC"); + public function getProfiles($product_id) + { + $query = $this->db->query('SELECT rd.* FROM ' . DB_PREFIX . 'product_recurring pr JOIN ' . DB_PREFIX . 'recurring_description rd ON (rd.language_id = ' . (int) $this->config->get('config_language_id') . ' AND rd.recurring_id = pr.recurring_id) JOIN ' . DB_PREFIX . 'recurring r ON r.recurring_id = rd.recurring_id WHERE pr.product_id = ' . (int) $product_id . " AND status = '1' AND pr.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' ORDER BY sort_order ASC"); return $query->rows; } - public function getTotalProductSpecials() { - $query = $this->db->query("SELECT COUNT(DISTINCT ps.product_id) AS total FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))"); + public function getTotalProductSpecials() + { + $query = $this->db->query('SELECT COUNT(DISTINCT ps.product_id) AS total FROM ' . DB_PREFIX . 'product_special ps LEFT JOIN ' . DB_PREFIX . 'product p ON (ps.product_id = p.product_id) LEFT JOIN ' . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int) $this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))"); if (isset($query->row['total'])) { return $query->row['total']; diff --git a/storage/modification/index.html b/storage/modification/index.html deleted file mode 100644 index 170db24..0000000 --- a/storage/modification/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - -
- -