Skip to content

Instantly share code, notes, and snippets.

@IP-CAM
Forked from hkulekci/opencart_mongo.js
Created July 2, 2019 01:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IP-CAM/6d04f229883926cabf598c934d3f6cfe to your computer and use it in GitHub Desktop.
Save IP-CAM/6d04f229883926cabf598c934d3f6cfe to your computer and use it in GitHub Desktop.
{
_id: ObjectId("51174626b173c26d4d000006"),
product_description: {
name: "iPod Nano",
meta_description: "",
meta_keyword: "",
description: "<div>\r\n\t<p>\r\n\t\t<strong>Video in your pocket.</strong></p>\r\n\t<p>\r\n\t\tIts the small iPod with one very big idea: video. The worlds most popular music player now lets you enjoy movies, TV shows, and more on a two-inch display thats 65% brighter than before.</p>\r\n\t<p>\r\n\t\t<strong>Cover Flow.</strong></p>\r\n\t<p>\r\n\t\tBrowse through your music collection by flipping through album art. Select an album to turn it over and see the track list.<strong> </strong></p>\r\n\t<p>\r\n\t\t<strong>Enhanced interface.</strong></p>\r\n\t<p>\r\n\t\tExperience a whole new way to browse and view your music and video.</p>\r\n\t<p>\r\n\t\t<strong>Sleek and colorful.</strong></p>\r\n\t<p>\r\n\t\tWith an anodized aluminum and polished stainless steel enclosure and a choice of five colors, iPod nano is dressed to impress.</p>\r\n\t<p>\r\n\t\t<strong>iTunes.</strong></p>\r\n\t<p>\r\n\t\tAvailable as a free download, iTunes makes it easy to browse and buy millions of songs, movies, TV shows, audiobooks, and games and download free podcasts all at the iTunes Store. And you can import your own music, manage your whole media library, and sync your iPod or iPhone with ease.</p>\r\n</div>\r\n",
tag: ""
},
model: "Product 9",
sku: "",
upc: "",
ean: "",
jan: "",
isbn: "",
mpn: "",
location: "",
price: "100.0000",
tax_class_id: "9",
quantity: "994",
minimum: "1",
subtract: "1",
stock_status_id: "6",
shipping: "0",
keyword: "",
image: "data/demo/ipod_nano_1.jpg",
date_available: "2009-02-03",
length: "0.00000000",
width: "0.00000000",
height: "0.00000000",
length_class_id: "2",
weight: "5.00000000",
weight_class_id: "1",
status: "1",
sort_order: "0",
manufacturer: "Apple",
manufacturer_id: "8",
category: "",
product_category: [
"34"
],
filter: "",
product_store: [
"0"
],
download: "",
related: "",
product_related: [],
product_attribute: [],
option: "",
product_discount: [],
product_special: [],
product_image: [
{
image: "data/demo/ipod_nano_5.jpg",
sort_order: "0"
},
{
image: "data/demo/ipod_nano_4.jpg",
sort_order: "0"
},
{
image: "data/demo/ipod_nano_2.jpg",
sort_order: "0"
},
{
image: "data/demo/ipod_nano_3.jpg",
sort_order: "0"
}
],
points: "100",
product_reward: {
"1": {
points: "0"
}
},
product_layout: {
layout: ""
},
product_id: 36
}
<?php
// /upload/admin/model/catalog/product.php
class ModelCatalogProduct extends MongoDBCatalogProduct {
public function initMongoDbProducts($datas = array()){
$sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
$query = $this->db->query($sql);
foreach ($query->rows as $d) {
$data = array();
$data['product_description'] = array(
"name" => $d['name'],
"meta_description"=> $d['meta_description'],
"meta_keyword"=> $d['meta_keyword'],
"description"=> $d['description'],
"tag"=> $d['tag']
);
$data['model'] = $d['model'];
$data['sku'] = $d['sku'];
$data['upc'] = $d['upc'];
$data['ean'] = $d['ean'];
$data['jan'] = $d['jan'];
$data['isbn'] = $d['isbn'];
$data['mpn'] = $d['mpn'];
$data['location'] = $d['location'];
$data['price'] = $d['price'];
$data['tax_class_id'] = $d['tax_class_id'];
$data['quantity'] = $d['quantity'];
$data['minimum'] = $d['minimum'];
$data['subtract'] = $d['subtract'];
$data['stock_status_id'] = $d['stock_status_id'];
$data['shipping'] = $d['shipping'];
$query_seo = $this->db->query("SELECT keyword FROM ".DB_PREFIX."url_alias WHERE query = 'product_id=".(int)$d['product_id']."' LIMIT 1");
$data['keyword'] = ( (isset( $query_seo->row['keyword'] ))?($query_seo->row['keyword']):("") );
$data['image'] = $d['image'];
$data['date_available'] = $d['date_available'];
$data['length'] = $d['length'];
$data['width'] = $d['width'];
$data['height'] = $d['height'];
$data['length_class_id'] = $d['length_class_id'];
$data['weight'] = $d['weight'];
$data['weight_class_id'] = $d['weight_class_id'];
$data['status'] = $d['status'];
$data['sort_order'] = $d['sort_order'];
$query_man = $this->db->query("SELECT name FROM ".DB_PREFIX."manufacturer WHERE manufacturer_id = '".(int)$d['manufacturer_id']."' LIMIT 1");
$data['manufacturer'] = ( ( isset( $query_man->row['name'] ) )?($query_man->row['name']):("") ); //TODO:
$data['manufacturer_id'] = $d['manufacturer_id'];
$data['category'] = ""; //TODO:
$data['product_category'] = array();
$query_category = $this->db->query("SELECT category_id FROM ".DB_PREFIX."product_to_category WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_category->rows as $row) {
$data['product_category'][] = $row['category_id'];
}
$data['filter'] = ""; //TODO:
$data['product_store'] = array();
$query_store = $this->db->query("SELECT store_id FROM ".DB_PREFIX."product_to_store WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_store->rows as $row) {
$data['product_store'][] = $row['store_id'];
}
$data['download'] = ""; //TODO:
$data['related'] = ""; //TODO:
$data['product_related'] = array();
$query_related = $this->db->query("SELECT related_id FROM ".DB_PREFIX."product_related WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_related->rows as $row) {
$data['product_related'][] = $row['related_id'];
}
$data['product_attribute'] = array();
$query_attr = $this->db->query("SELECT pa.attribute_id, ad.name, pa.text FROM ".DB_PREFIX."product_attribute pa LEFT JOIN ".DB_PREFIX."attribute_description ad ON pa.attribute_id = ad.attribute_id WHERE pa.product_id = '".(int)$d['product_id']."' AND pa.language_id = '".(int)$this->config->get('config_language_id')."'");
foreach ($query_attr->rows as $row) {
$attr_data = array( "name"=> $row['name'],
"attribute_id"=> $row['attribute_id'],
"product_attribute_description"=> array(
"1" => array(
"text"=> $row['text']
)
)
);
$data['product_attribute'][] = $attr_data;
}
$data['option'] = ""; //TODO:
$data['product_discount'] = array();
$query_discount = $this->db->query("SELECT customer_group_id, quantity, priority, price, date_start, date_end FROM ".DB_PREFIX."product_discount WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_discount->rows as $row) {
$data['product_discount'][] = array(
"customer_group_id"=> $row['customer_group_id'] ,
"quantity"=> $row['quantity'] ,
"priority"=> $row['priority'] ,
"price"=> $row['price'] ,
"date_start"=> $row['date_start'] ,
"date_end"=> $row['date_end']
);
}
$data['product_special'] = array();
$query_special = $this->db->query("SELECT customer_group_id, priority, price, date_start, date_end FROM ".DB_PREFIX."product_special WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_special->rows as $row) {
$data['product_special'][] = array(
"customer_group_id"=> $row['customer_group_id'] ,
"priority"=> $row['priority'] ,
"price"=> $row['price'] ,
"date_start"=> $row['date_start'] ,
"date_end"=> $row['date_end']
);
}
$data['product_image'] = array();
$query_image = $this->db->query("SELECT image, sort_order FROM ".DB_PREFIX."product_image WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_image->rows as $row) {
$data['product_image'][] = array(
"image"=> $row['image'],
"sort_order"=> $row['sort_order']
);
}
$data['points'] = $d['points'];
$data['product_reward'] = array();
$query_reward = $this->db->query("SELECT customer_group_id, points FROM ".DB_PREFIX."product_reward WHERE product_id = '".(int)$d['product_id']."'");
foreach ($query_reward->rows as $row) {
$data['product_reward'][$row['customer_group_id']] = array(
"points"=> $row['points']
);
}
$data['product_layout']['layout'] = "";
$query_reward = $this->db->query("SELECT layout_id FROM ".DB_PREFIX."product_to_layout WHERE product_id = '".(int)$d['product_id']."'"); //where'a store_id eklenmesi lazım
foreach ($query_reward->rows as $row) {
$data['product_layout']['layout'] = $row['layout_id'];
}
$data['product_id'] = (int)$d['product_id'];
$this->MongoDb->remove( array("product_id" => (int)$data['product_id']) );
//$data['product_id'] = (int)$product_id;
$this->MongoDb->insert( $data );
}
}
public function addProduct($data){
$product_id = parent::addProduct($data);
$data['product_id'] = (int)$product_id;
$this->MongoDb->insert( $data );
}
public function editProduct($product_id, $data){
parent::editProduct($product_id, $data);
$this->MongoDb->remove( array("product_id" => (int)$product_id), array("justOne" => true) );
$data['product_id'] = (int)$product_id;
$this->MongoDb->insert( $data );
}
public function deleteProduct($product_id){
parent::deleteProduct($product_id);
$this->MongoDb->remove( array("product_id" => (int)$product_id), array("justOne" => true) );
}
/*
public function getProduct($product_id) {
$result = parent::getProduct($product_id);
return $result;
}
public function getProducts($data = array()) {
$result = parent::getProducts($data);
return $result;
}
public function getProductsByCategoryId($category_id) {
$result = parent::getProductsByCategoryId($category_id);
return $result;
}
public function getProductDescriptions($product_id) {
$result = parent::getProductDescriptions($product_id);
return $result;
}
public function getProductCategories($product_id) {
$result = parent::getProductCategories($product_id);
return $result;
}*/
}
class MongoDBCatalogProduct extends Model {
public function addProduct($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . $this->db->escape($data['tax_class_id']) . "', sort_order = '" . (int)$data['sort_order'] . "', date_added = NOW()");
$product_id = $this->db->getLastId();
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET image = '" . $this->db->escape(html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8')) . "' WHERE product_id = '" . (int)$product_id . "'");
}
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "'");
}
if (isset($data['product_store'])) {
foreach ($data['product_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");
}
}
if (isset($data['product_attribute'])) {
foreach ($data['product_attribute'] as $product_attribute) {
if ($product_attribute['attribute_id']) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "'");
foreach ($product_attribute['product_attribute_description'] as $language_id => $product_attribute_description) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'");
}
}
}
}
if (isset($data['product_option'])) {
foreach ($data['product_option'] as $product_option) {
if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
if (isset($product_option['product_option_value'])) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', required = '" . (int)$product_option['required'] . "'");
$product_option_id = $this->db->getLastId();
foreach ($product_option['product_option_value'] as $product_option_value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
}
}
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', value = '" . $this->db->escape($product_option['value']) . "', required = '" . (int)$product_option['required'] . "'");
}
}
}
if (isset($data['product_discount'])) {
foreach ($data['product_discount'] as $product_discount) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_discount SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_discount['customer_group_id'] . "', quantity = '" . (int)$product_discount['quantity'] . "', priority = '" . (int)$product_discount['priority'] . "', price = '" . (float)$product_discount['price'] . "', date_start = '" . $this->db->escape($product_discount['date_start']) . "', date_end = '" . $this->db->escape($product_discount['date_end']) . "'");
}
}
if (isset($data['product_special'])) {
foreach ($data['product_special'] as $product_special) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_special SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_special['customer_group_id'] . "', priority = '" . (int)$product_special['priority'] . "', price = '" . (float)$product_special['price'] . "', date_start = '" . $this->db->escape($product_special['date_start']) . "', date_end = '" . $this->db->escape($product_special['date_end']) . "'");
}
}
if (isset($data['product_image'])) {
foreach ($data['product_image'] as $product_image) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_image SET product_id = '" . (int)$product_id . "', image = '" . $this->db->escape(html_entity_decode($product_image['image'], ENT_QUOTES, 'UTF-8')) . "', sort_order = '" . (int)$product_image['sort_order'] . "'");
}
}
if (isset($data['product_download'])) {
foreach ($data['product_download'] as $download_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_download SET product_id = '" . (int)$product_id . "', download_id = '" . (int)$download_id . "'");
}
}
if (isset($data['product_category'])) {
foreach ($data['product_category'] as $category_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "'");
}
}
if (isset($data['product_filter'])) {
foreach ($data['product_filter'] as $filter_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_filter SET product_id = '" . (int)$product_id . "', filter_id = '" . (int)$filter_id . "'");
}
}
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
}
}
if (isset($data['product_reward'])) {
foreach ($data['product_reward'] as $customer_group_id => $product_reward) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_reward SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$customer_group_id . "', points = '" . (int)$product_reward['points'] . "'");
}
}
if (isset($data['product_layout'])) {
foreach ($data['product_layout'] as $store_id => $layout) {
if ($layout['layout_id']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_layout SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout['layout_id'] . "'");
}
}
}
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
$this->cache->delete('product');
return $product_id;
}
public function editProduct($product_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . $this->db->escape($data['tax_class_id']) . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET image = '" . $this->db->escape(html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8')) . "' WHERE product_id = '" . (int)$product_id . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_store'])) {
foreach ($data['product_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "'");
if (!empty($data['product_attribute'])) {
foreach ($data['product_attribute'] as $product_attribute) {
if ($product_attribute['attribute_id']) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "'");
foreach ($product_attribute['product_attribute_description'] as $language_id => $product_attribute_description) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'");
}
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_option'])) {
foreach ($data['product_option'] as $product_option) {
if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
if (isset($product_option['product_option_value'])) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_option_id = '" . (int)$product_option['product_option_id'] . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', required = '" . (int)$product_option['required'] . "'");
$product_option_id = $this->db->getLastId();
foreach ($product_option['product_option_value'] as $product_option_value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_value_id = '" . (int)$product_option_value['product_option_value_id'] . "', product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
}
}
} else {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_option_id = '" . (int)$product_option['product_option_id'] . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', value = '" . $this->db->escape($product_option['value']) . "', required = '" . (int)$product_option['required'] . "'");
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_discount'])) {
foreach ($data['product_discount'] as $product_discount) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_discount SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_discount['customer_group_id'] . "', quantity = '" . (int)$product_discount['quantity'] . "', priority = '" . (int)$product_discount['priority'] . "', price = '" . (float)$product_discount['price'] . "', date_start = '" . $this->db->escape($product_discount['date_start']) . "', date_end = '" . $this->db->escape($product_discount['date_end']) . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_special'])) {
foreach ($data['product_special'] as $product_special) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_special SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_special['customer_group_id'] . "', priority = '" . (int)$product_special['priority'] . "', price = '" . (float)$product_special['price'] . "', date_start = '" . $this->db->escape($product_special['date_start']) . "', date_end = '" . $this->db->escape($product_special['date_end']) . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_image'])) {
foreach ($data['product_image'] as $product_image) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_image SET product_id = '" . (int)$product_id . "', image = '" . $this->db->escape(html_entity_decode($product_image['image'], ENT_QUOTES, 'UTF-8')) . "', sort_order = '" . (int)$product_image['sort_order'] . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_download WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_download'])) {
foreach ($data['product_download'] as $download_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_download SET product_id = '" . (int)$product_id . "', download_id = '" . (int)$download_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_category'])) {
foreach ($data['product_category'] as $category_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_filter WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_filter'])) {
foreach ($data['product_filter'] as $filter_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_filter SET product_id = '" . (int)$product_id . "', filter_id = '" . (int)$filter_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_reward WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_reward'])) {
foreach ($data['product_reward'] as $customer_group_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_reward SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$customer_group_id . "', points = '" . (int)$value['points'] . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "'");
if (isset($data['product_layout'])) {
foreach ($data['product_layout'] as $store_id => $layout) {
if ($layout['layout_id']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_layout SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout['layout_id'] . "'");
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$product_id. "'");
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
$this->cache->delete('product');
}
public function copyProduct($product_id) {
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($query->num_rows) {
$data = array();
$data = $query->row;
$data['sku'] = '';
$data['upc'] = '';
$data['viewed'] = '0';
$data['keyword'] = '';
$data['status'] = '0';
$data = array_merge($data, array('product_attribute' => $this->getProductAttributes($product_id)));
$data = array_merge($data, array('product_description' => $this->getProductDescriptions($product_id)));
$data = array_merge($data, array('product_discount' => $this->getProductDiscounts($product_id)));
$data = array_merge($data, array('product_filter' => $this->getProductFilters($product_id)));
$data = array_merge($data, array('product_image' => $this->getProductImages($product_id)));
$data = array_merge($data, array('product_option' => $this->getProductOptions($product_id)));
$data = array_merge($data, array('product_related' => $this->getProductRelated($product_id)));
$data = array_merge($data, array('product_reward' => $this->getProductRewards($product_id)));
$data = array_merge($data, array('product_special' => $this->getProductSpecials($product_id)));
$data = array_merge($data, array('product_category' => $this->getProductCategories($product_id)));
$data = array_merge($data, array('product_download' => $this->getProductDownloads($product_id)));
$data = array_merge($data, array('product_layout' => $this->getProductLayouts($product_id)));
$data = array_merge($data, array('product_store' => $this->getProductStores($product_id)));
$this->addProduct($data);
}
}
public function deleteProduct($product_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_filter WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_reward WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_download WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "review WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$product_id. "'");
$this->cache->delete('product');
}
public function getProduct($product_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT keyword FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$product_id . "') AS keyword FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
return $query->row;
}
public function getProducts($data = array()) {
$sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_name'])) {
$sql .= " AND pd.name LIKE '" . $this->db->escape($data['filter_name']) . "%'";
}
if (!empty($data['filter_model'])) {
$sql .= " AND p.model LIKE '" . $this->db->escape($data['filter_model']) . "%'";
}
if (!empty($data['filter_price'])) {
$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
}
if (isset($data['filter_quantity']) && $data['filter_quantity'] !== null) {
$sql .= " AND p.quantity = '" . $this->db->escape($data['filter_quantity']) . "'";
}
if (isset($data['filter_status']) && $data['filter_status'] !== null) {
$sql .= " AND p.status = '" . (int)$data['filter_status'] . "'";
}
$sql .= " GROUP BY p.product_id";
$sort_data = array(
'pd.name',
'p.model',
'p.price',
'p.quantity',
'p.status',
'p.sort_order'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY pd.name";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getProductsByCategoryId($category_id) {
$query = $this->db->query("SELECT * 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_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2c.category_id = '" . (int)$category_id . "' ORDER BY pd.name ASC");
return $query->rows;
}
public function getProductDescriptions($product_id) {
$product_description_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_description_data[$result['language_id']] = array(
'name' => $result['name'],
'description' => $result['description'],
'meta_keyword' => $result['meta_keyword'],
'meta_description' => $result['meta_description'],
'tag' => $result['tag']
);
}
return $product_description_data;
}
public function getProductCategories($product_id) {
$product_category_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_category_data[] = $result['category_id'];
}
return $product_category_data;
}
public function getProductFilters($product_id) {
$product_filter_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_filter WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_filter_data[] = $result['filter_id'];
}
return $product_filter_data;
}
public function getProductAttributes($product_id) {
$product_attribute_data = array();
$product_attribute_query = $this->db->query("SELECT attribute_id FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' GROUP BY attribute_id");
foreach ($product_attribute_query->rows as $product_attribute) {
$product_attribute_description_data = array();
$product_attribute_description_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "'");
foreach ($product_attribute_description_query->rows as $product_attribute_description) {
$product_attribute_description_data[$product_attribute_description['language_id']] = array('text' => $product_attribute_description['text']);
}
$product_attribute_data[] = array(
'attribute_id' => $product_attribute['attribute_id'],
'product_attribute_description' => $product_attribute_description_data
);
}
return $product_attribute_data;
}
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') . "'");
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 WHERE product_option_id = '" . (int)$product_option['product_option_id'] . "'");
foreach ($product_option_value_query->rows as $product_option_value) {
$product_option_value_data[] = array(
'product_option_value_id' => $product_option_value['product_option_value_id'],
'option_value_id' => $product_option_value['option_value_id'],
'quantity' => $product_option_value['quantity'],
'subtract' => $product_option_value['subtract'],
'price' => $product_option_value['price'],
'price_prefix' => $product_option_value['price_prefix'],
'points' => $product_option_value['points'],
'points_prefix' => $product_option_value['points_prefix'],
'weight' => $product_option_value['weight'],
'weight_prefix' => $product_option_value['weight_prefix']
);
}
$product_option_data[] = array(
'product_option_id' => $product_option['product_option_id'],
'product_option_value' => $product_option_value_data,
'option_id' => $product_option['option_id'],
'name' => $product_option['name'],
'type' => $product_option['type'],
'value' => $product_option['value'],
'required' => $product_option['required']
);
}
return $product_option_data;
}
public function getProductImages($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'");
return $query->rows;
}
public function getProductDiscounts($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' ORDER BY quantity, priority, price");
return $query->rows;
}
public function getProductSpecials($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' ORDER BY priority, price");
return $query->rows;
}
public function getProductRewards($product_id) {
$product_reward_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_reward WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_reward_data[$result['customer_group_id']] = array('points' => $result['points']);
}
return $product_reward_data;
}
public function getProductDownloads($product_id) {
$product_download_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_download WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_download_data[] = $result['download_id'];
}
return $product_download_data;
}
public function getProductStores($product_id) {
$product_store_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_store_data[] = $result['store_id'];
}
return $product_store_data;
}
public function getProductLayouts($product_id) {
$product_layout_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_layout_data[$result['store_id']] = $result['layout_id'];
}
return $product_layout_data;
}
public function getProductRelated($product_id) {
$product_related_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_related_data[] = $result['related_id'];
}
return $product_related_data;
}
public function getTotalProducts($data = array()) {
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)";
$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_name'])) {
$sql .= " AND pd.name LIKE '" . $this->db->escape($data['filter_name']) . "%'";
}
if (!empty($data['filter_model'])) {
$sql .= " AND p.model LIKE '" . $this->db->escape($data['filter_model']) . "%'";
}
if (!empty($data['filter_price'])) {
$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
}
if (isset($data['filter_quantity']) && $data['filter_quantity'] !== null) {
$sql .= " AND p.quantity = '" . $this->db->escape($data['filter_quantity']) . "'";
}
if (isset($data['filter_status']) && $data['filter_status'] !== null) {
$sql .= " AND p.status = '" . (int)$data['filter_status'] . "'";
}
$query = $this->db->query($sql);
return $query->row['total'];
}
public function getTotalProductsByTaxClassId($tax_class_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE tax_class_id = '" . (int)$tax_class_id . "'");
return $query->row['total'];
}
public function getTotalProductsByStockStatusId($stock_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE stock_status_id = '" . (int)$stock_status_id . "'");
return $query->row['total'];
}
public function getTotalProductsByWeightClassId($weight_class_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE weight_class_id = '" . (int)$weight_class_id . "'");
return $query->row['total'];
}
public function getTotalProductsByLengthClassId($length_class_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE length_class_id = '" . (int)$length_class_id . "'");
return $query->row['total'];
}
public function getTotalProductsByDownloadId($download_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_download WHERE download_id = '" . (int)$download_id . "'");
return $query->row['total'];
}
public function getTotalProductsByManufacturerId($manufacturer_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE manufacturer_id = '" . (int)$manufacturer_id . "'");
return $query->row['total'];
}
public function getTotalProductsByAttributeId($attribute_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_attribute WHERE attribute_id = '" . (int)$attribute_id . "'");
return $query->row['total'];
}
public function getTotalProductsByOptionId($option_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_option WHERE option_id = '" . (int)$option_id . "'");
return $query->row['total'];
}
public function getTotalProductsByLayoutId($layout_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
return $query->row['total'];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment