first commit
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
class ModelExtensionAdvertiseGoogle extends Model {
|
||||
public function getHumanReadableCategory($product_id, $store_id) {
|
||||
$this->load->config('googleshopping/googleshopping');
|
||||
|
||||
$google_category_result = $this->db->query("SELECT google_product_category FROM `" . DB_PREFIX . "googleshopping_product` pag WHERE pag.product_id = " . (int)$product_id . " AND pag.store_id = " . (int)$store_id);
|
||||
|
||||
if ($google_category_result->num_rows > 0) {
|
||||
$google_category_id = $google_category_result->row['google_product_category'];
|
||||
$google_categories = $this->config->get('advertise_google_google_product_categories');
|
||||
|
||||
if (!empty($google_category_id) && isset($google_categories[$google_category_id])) {
|
||||
return $google_categories[$google_category_id];
|
||||
}
|
||||
}
|
||||
|
||||
$oc_category_result = $this->db->query("SELECT c.category_id FROM `" . DB_PREFIX . "product_to_category` p2c LEFT JOIN `" . DB_PREFIX . "category` c ON (c.category_id = p2c.category_id) WHERE p2c.product_id=" . (int)$product_id . " LIMIT 0,1");
|
||||
|
||||
if ($oc_category_result->num_rows > 0) {
|
||||
return $this->getHumanReadableOpenCartCategory((int)$oc_category_result->row['category_id']);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public function getHumanReadableOpenCartCategory($category_id) {
|
||||
$sql = "SELECT GROUP_CONCAT(cd.name ORDER BY cp.level SEPARATOR ' > ') AS path FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category_description cd ON (cp.path_id = cd.category_id) WHERE cd.language_id=" . (int)$this->config->get('config_language_id') . " AND cp.category_id=" . (int)$category_id;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
|
||||
if ($result->num_rows > 0) {
|
||||
return $result->row['path'];
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public function getSizeAndColorOptionMap($product_id, $store_id) {
|
||||
$color_id = $this->getOptionId($product_id, $store_id, 'color');
|
||||
$size_id = $this->getOptionId($product_id, $store_id, 'size');
|
||||
|
||||
$groups = $this->googleshopping->getGroups($product_id, $this->config->get('config_language_id'), $color_id, $size_id);
|
||||
|
||||
$colors = $this->googleshopping->getProductOptionValueNames($product_id, $this->config->get('config_language_id'), $color_id);
|
||||
$sizes = $this->googleshopping->getProductOptionValueNames($product_id, $this->config->get('config_language_id'), $size_id);
|
||||
|
||||
$map = array(
|
||||
'groups' => $groups,
|
||||
'colors' => count($colors) > 1 ? $colors : null,
|
||||
'sizes' => count($sizes) > 1 ? $sizes : null,
|
||||
);
|
||||
|
||||
return $map;
|
||||
}
|
||||
|
||||
public function getCoupon($order_id) {
|
||||
$sql = "SELECT c.code FROM `" . DB_PREFIX . "coupon_history` ch LEFT JOIN `" . DB_PREFIX . "coupon` c ON (c.coupon_id = ch.coupon_id) WHERE ch.order_id=" . (int)$order_id;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
|
||||
if ($result->num_rows > 0) {
|
||||
return $result->row['code'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getRemarketingProductIds($products, $store_id) {
|
||||
$ecomm_prodid = array();
|
||||
|
||||
foreach ($products as $product) {
|
||||
if (null !== $id = $this->getRemarketingProductId($product, $store_id)) {
|
||||
$ecomm_prodid[] = $id;
|
||||
}
|
||||
}
|
||||
|
||||
return $ecomm_prodid;
|
||||
}
|
||||
|
||||
public function getRemarketingItems($products, $store_id) {
|
||||
$items = array();
|
||||
|
||||
foreach ($products as $product) {
|
||||
if (null !== $id = $this->getRemarketingProductId($product, $store_id)) {
|
||||
$items[] = array(
|
||||
'google_business_vertical' => 'retail',
|
||||
'id' => (string)$id,
|
||||
'name' => (string)$product['name'],
|
||||
'quantity' => (int)$product['quantity']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
protected function getRemarketingProductId($product, $store_id) {
|
||||
$option_map = $this->getSizeAndColorOptionMap($product['product_id'], $store_id);
|
||||
$found_color = "";
|
||||
$found_size = "";
|
||||
|
||||
foreach ($product['option'] as $option) {
|
||||
if (is_array($option_map['colors'])) {
|
||||
foreach ($option_map['colors'] as $product_option_value_id => $color) {
|
||||
if ($option['product_option_value_id'] == $product_option_value_id) {
|
||||
$found_color = $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($option_map['sizes'])) {
|
||||
foreach ($option_map['sizes'] as $product_option_value_id => $size) {
|
||||
if ($option['product_option_value_id'] == $product_option_value_id) {
|
||||
$found_size = $size;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($option_map['groups'] as $id => $group) {
|
||||
if ($group['color'] === $found_color && $group['size'] === $found_size) {
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function getOptionId($product_id, $store_id, $type) {
|
||||
$sql = "SELECT pag." . $type . " FROM `" . DB_PREFIX . "googleshopping_product` pag WHERE product_id=" . (int)$product_id . " AND store_id=" . (int)$store_id;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
|
||||
if ($result->num_rows > 0) {
|
||||
return (int)$result->row[$type];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class ModelExtensionFeedGoogleBase extends Model {
|
||||
public function getCategories() {
|
||||
$query = $this->db->query("SELECT google_base_category_id, (SELECT name FROM `" . DB_PREFIX . "google_base_category` gbc WHERE gbc.google_base_category_id = gbc2c.google_base_category_id) AS google_base_category, category_id, (SELECT name FROM `" . DB_PREFIX . "category_description` cd WHERE cd.category_id = gbc2c.category_id AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS category FROM `" . DB_PREFIX . "google_base_category_to_category` gbc2c ORDER BY google_base_category ASC");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getTotalCategories() {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "google_base_category_to_category`");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
// * @source See SOURCE.txt for source and other copyright.
|
||||
// * @license GNU General Public License version 3; see LICENSE.txt
|
||||
|
||||
class ModelExtensionFeedYandexMarket extends Model {
|
||||
public function getCategory() {
|
||||
$query = $this->db->query("SELECT cd.name, c.category_id, c.parent_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' AND c.sort_order <> '-1'");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getProduct($allowed_categories, $allowed_manufacturers, $out_of_stock_id, $vendor_required = true, $bus_image = true, $bus_image_quantity = '9', $bus_main_category = true, $bus_quantity_status = false) {
|
||||
$sql = "SELECT p2c.category_id, p.product_id, p.model, p.sku, p.upc, p.ean, p.jan, p.isbn, p.mpn, p.location, p.quantity, p.stock_status_id, p.image, p.tax_class_id, pd.name, pd.description, pd.meta_title, pd.meta_description, pd.meta_keyword, pd.meta_h1,";
|
||||
|
||||
if ((int)$bus_image_quantity > '1') {
|
||||
$sql .= " (SELECT SUBSTRING_INDEX(GROUP_CONCAT(pi.image ORDER BY pi.image SEPARATOR ','), ',', " . ((int)$bus_image_quantity <= "10" ? (int)$bus_image_quantity - 1 : "9") . ") FROM " . DB_PREFIX . "product_image pi WHERE pi.product_id = p2c.product_id) AS images,";
|
||||
}
|
||||
|
||||
$sql .= " m.name AS manufacturer, IFNULL(ps.price, p.price) AS price FROM " . DB_PREFIX . "product_to_category AS p2c JOIN " . DB_PREFIX . "product AS p ON (p.product_id = p2c.product_id) " . ($vendor_required ? '' : 'LEFT ') . "JOIN " . DB_PREFIX . "manufacturer AS m ON (m.manufacturer_id = p.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description AS pd ON (pd.product_id = p2c.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store AS p2s ON (p2s.product_id = p2c.product_id) LEFT JOIN " . DB_PREFIX . "product_special AS ps ON (ps.product_id = p2c.product_id) AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ps.date_start < NOW() AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())";
|
||||
|
||||
if (!empty($allowed_categories)) {
|
||||
$sql .= " WHERE p2c.category_id IN (" . $this->db->escape($allowed_categories) . ")";
|
||||
} else {
|
||||
$sql .= " WHERE p2c.category_id";
|
||||
}
|
||||
|
||||
if (!empty($bus_main_category)) {
|
||||
$sql .= " AND p2c.main_category = '1'";
|
||||
}
|
||||
|
||||
if (!empty($allowed_manufacturers)) {
|
||||
$sql .= " AND m.manufacturer_id IN (" . $this->db->escape($allowed_manufacturers) . ")";
|
||||
}
|
||||
|
||||
$sql .= " AND p.status = '1'";
|
||||
|
||||
if (!empty($bus_image)) {
|
||||
$sql .= " AND p.image != ''";
|
||||
}
|
||||
|
||||
$sql .= " AND p.date_available <= NOW() AND (p.quantity " . (!empty($bus_quantity_status) ? '>=' : '>') . " '0' OR p.stock_status_id != '" . (int)$out_of_stock_id . "') AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
|
||||
|
||||
$sql .= " GROUP BY p2c.product_id";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
class ModelExtensionFeedYandexTurbo extends Model {
|
||||
|
||||
public function getCategories() {
|
||||
$query = $this->db->query("SELECT cd.name, c.category_id, c.parent_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' AND c.sort_order <> '-1'");
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getProducts() {
|
||||
$sql = "SELECT p.*, pd.name, pd.description, p2c.category_id, IFNULL(ps.price, p.price) AS price FROM " . DB_PREFIX . "product p JOIN " . DB_PREFIX . "product_to_category AS p2c ON (p.product_id = p2c.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) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ps.date_start < NOW() AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()) WHERE p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' GROUP BY p.product_id";
|
||||
$query = $this->db->query($sql);
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
class ModelExtensionFraudFraudLabsPro extends Model {
|
||||
public function check($data) {
|
||||
// Do not perform fraud check if FraudLabs Pro is disabled or API key is not provided.
|
||||
if (!$this->config->get('fraud_fraudlabspro_status') ||!$this->config->get('fraud_fraudlabspro_key')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$risk_score = 0;
|
||||
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "fraudlabspro` WHERE order_id = '" . (int)$data['order_id'] . "'");
|
||||
|
||||
// Do not call FraudLabs Pro API if order is already screened.
|
||||
if ($query->num_rows) {
|
||||
return;
|
||||
}
|
||||
|
||||
$ip = $data['ip'];
|
||||
|
||||
// Detect client IP is store is behind CloudFlare protection.
|
||||
if(isset($_SERVER['HTTP_CF_CONNECTING_IP']) && filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP)){
|
||||
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
|
||||
}
|
||||
|
||||
// Get real client IP is they are behind proxy server.
|
||||
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)){
|
||||
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||
}
|
||||
|
||||
// Overwrite client IP if simulate IP is provided.
|
||||
if (filter_var($this->config->get('fraud_fraudlabspro_simulate_ip'), FILTER_VALIDATE_IP)) {
|
||||
$ip = $this->config->get('fraud_fraudlabspro_simulate_ip');
|
||||
}
|
||||
|
||||
$request['key'] = $this->config->get('fraud_fraudlabspro_key');
|
||||
$request['ip'] = $ip;
|
||||
$request['first_name'] = $data['firstname'];
|
||||
$request['last_name'] = $data['lastname'];
|
||||
$request['bill_city'] = $data['payment_city'];
|
||||
$request['bill_state'] = $data['payment_zone'];
|
||||
$request['bill_country'] = $data['payment_iso_code_2'];
|
||||
$request['bill_zip_code'] = $data['payment_postcode'];
|
||||
$request['email_domain'] = utf8_substr(strrchr($data['email'], '@'), 1);
|
||||
$request['user_phone'] = $data['telephone'];
|
||||
|
||||
if ($data['shipping_method']) {
|
||||
$request['ship_addr'] = $data['shipping_address_1'];
|
||||
$request['ship_city'] = $data['shipping_city'];
|
||||
$request['ship_state'] = $data['shipping_zone'];
|
||||
$request['ship_zip_code'] = $data['shipping_postcode'];
|
||||
$request['ship_country'] = $data['shipping_iso_code_2'];
|
||||
}
|
||||
|
||||
$request['email'] = $data['email'];
|
||||
$request['email_hash'] = $this->hashIt($data['email']);
|
||||
$request['amount'] = $this->currency->format($data['total'], $data['currency_code'], $data['currency_value'], false);
|
||||
$request['quantity'] = 1;
|
||||
$request['currency'] = $data['currency_code'];
|
||||
$request['payment_mode'] = $data['payment_code'];
|
||||
$request['user_order_id'] = $data['order_id'];
|
||||
$request['flp_checksum'] = (isset($_COOKIE['flp_checksum'])) ? $_COOKIE['flp_checksum'] : '';
|
||||
$request['format'] = 'json';
|
||||
$request['source'] = 'opencart';
|
||||
$request['source_version'] = '2.1.0.2';
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, 'https://api.fraudlabspro.com/v1/order/screen?' . http_build_query($request));
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_FORBID_REUSE, 1);
|
||||
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
|
||||
|
||||
$response = curl_exec($curl);
|
||||
|
||||
curl_close($curl);
|
||||
|
||||
$risk_score = 0;
|
||||
|
||||
if (is_null($json = json_decode($response)) === FALSE) {
|
||||
$this->db->query("REPLACE INTO `" . DB_PREFIX . "fraudlabspro` SET order_id = '" . (int)$data['order_id'] . "',
|
||||
is_country_match = '" . $this->db->escape($json->is_country_match) . "',
|
||||
is_high_risk_country = '" . $this->db->escape($json->is_high_risk_country) . "',
|
||||
distance_in_km = '" . $this->db->escape($json->distance_in_km) . "',
|
||||
distance_in_mile = '" . $this->db->escape($json->distance_in_mile) . "',
|
||||
ip_country = '" . $this->db->escape($json->ip_country) . "',
|
||||
ip_region = '" . $this->db->escape($json->ip_region) . "',
|
||||
ip_city = '" . $this->db->escape($json->ip_city) . "',
|
||||
ip_continent = '" . $this->db->escape($json->ip_continent) . "',
|
||||
ip_latitude = '" . $this->db->escape($json->ip_latitude) . "',
|
||||
ip_longitude = '" . $this->db->escape($json->ip_longitude) . "',
|
||||
ip_timezone = '" . $this->db->escape($json->ip_timezone) . "',
|
||||
ip_elevation = '" . $this->db->escape($json->ip_elevation) . "',
|
||||
ip_domain = '" . $this->db->escape($json->ip_domain) . "',
|
||||
ip_mobile_mnc = '" . $this->db->escape($json->ip_mobile_mnc) . "',
|
||||
ip_mobile_mcc = '" . $this->db->escape($json->ip_mobile_mcc) . "',
|
||||
ip_mobile_brand = '" . $this->db->escape($json->ip_mobile_brand) . "',
|
||||
ip_netspeed = '" . $this->db->escape($json->ip_netspeed) . "',
|
||||
ip_isp_name = '" . $this->db->escape($json->ip_isp_name) . "',
|
||||
ip_usage_type = '" . $this->db->escape($json->ip_usage_type) . "',
|
||||
is_free_email = '" . $this->db->escape($json->is_free_email) . "',
|
||||
is_new_domain_name = '" . $this->db->escape($json->is_new_domain_name) . "',
|
||||
is_proxy_ip_address = '" . $this->db->escape($json->is_proxy_ip_address) . "',
|
||||
is_bin_found = '" . $this->db->escape($json->is_bin_found) . "',
|
||||
is_bin_country_match = '" . $this->db->escape($json->is_bin_country_match) . "',
|
||||
is_bin_name_match = '" . $this->db->escape($json->is_bin_name_match) . "',
|
||||
is_bin_phone_match = '" . $this->db->escape($json->is_bin_phone_match) . "',
|
||||
is_bin_prepaid = '" . $this->db->escape($json->is_bin_prepaid) . "',
|
||||
is_address_ship_forward = '" . $this->db->escape($json->is_address_ship_forward) . "',
|
||||
is_bill_ship_city_match = '" . $this->db->escape($json->is_bill_ship_city_match) . "',
|
||||
is_bill_ship_state_match = '" . $this->db->escape($json->is_bill_ship_state_match) . "',
|
||||
is_bill_ship_country_match = '" . $this->db->escape($json->is_bill_ship_country_match) . "',
|
||||
is_bill_ship_postal_match = '" . $this->db->escape($json->is_bill_ship_postal_match) . "',
|
||||
is_ip_blacklist = '" . $this->db->escape($json->is_ip_blacklist) . "',
|
||||
is_email_blacklist = '" . $this->db->escape($json->is_email_blacklist) . "',
|
||||
is_credit_card_blacklist = '" . $this->db->escape($json->is_credit_card_blacklist) . "',
|
||||
is_device_blacklist = '" . $this->db->escape($json->is_device_blacklist) . "',
|
||||
is_user_blacklist = '" . $this->db->escape($json->is_user_blacklist) . "',
|
||||
fraudlabspro_score = '" . $this->db->escape($json->fraudlabspro_score) . "',
|
||||
fraudlabspro_distribution = '" . $this->db->escape($json->fraudlabspro_distribution) . "',
|
||||
fraudlabspro_status = '" . $this->db->escape($json->fraudlabspro_status) . "',
|
||||
fraudlabspro_id = '" . $this->db->escape($json->fraudlabspro_id) . "',
|
||||
fraudlabspro_error = '" . $this->db->escape($json->fraudlabspro_error_code) . "',
|
||||
fraudlabspro_message = '" . $this->db->escape($json->fraudlabspro_message) . "',
|
||||
fraudlabspro_credits = '" . $this->db->escape($json->fraudlabspro_credits) . "',
|
||||
api_key = '" . $this->config->get('fraud_fraudlabspro_key') . "',
|
||||
ip_address = '" . $ip . "'"
|
||||
);
|
||||
|
||||
$risk_score = (int)$json->fraudlabspro_score;
|
||||
}
|
||||
|
||||
// Do not perform any action if error found
|
||||
if ($json->fraudlabspro_error_code) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($risk_score > $this->config->get('fraud_fraudlabspro_score')) {
|
||||
return $this->config->get('fraud_fraudlabspro_order_status_id');
|
||||
}
|
||||
|
||||
if ($json->fraudlabspro_status == 'REVIEW') {
|
||||
return $this->config->get('fraud_fraudlabspro_review_status_id');
|
||||
}
|
||||
|
||||
if ($json->fraudlabspro_status == 'APPROVE') {
|
||||
return $this->config->get('fraud_fraudlabspro_approve_status_id');
|
||||
}
|
||||
|
||||
if ($json->fraudlabspro_status == 'REJECT') {
|
||||
return $this->config->get('fraud_fraudlabspro_reject_status_id');
|
||||
}
|
||||
}
|
||||
|
||||
private function hashIt($s) {
|
||||
$hash = 'fraudlabspro_' . $s;
|
||||
|
||||
for ($i = 0; $i < 65536; $i++)
|
||||
$hash = sha1('fraudlabspro_' . $hash);
|
||||
|
||||
return $hash;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
class ModelExtensionFraudIp extends Model {
|
||||
public function check($order_info) {
|
||||
$this->load->model('account/customer');
|
||||
|
||||
$status = false;
|
||||
|
||||
if ($order_info['customer_id']) {
|
||||
$results = $this->model_account_customer->getIps($order_info['customer_id']);
|
||||
|
||||
foreach ($results as $result) {
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "fraud_ip` WHERE ip = '" . $this->db->escape($result['ip']) . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
$status = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "fraud_ip` WHERE ip = '" . $this->db->escape($order_info['ip']) . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
$status = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($status) {
|
||||
return $this->config->get('fraud_ip_order_status_id');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,380 @@
|
||||
<?php
|
||||
class ModelExtensionFraudMaxMind extends Model {
|
||||
public function check($order_info) {
|
||||
$risk_score = 0;
|
||||
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "maxmind` WHERE order_id = '" . (int)$order_info['order_id'] . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
$risk_score = $query->row['risk_score'];
|
||||
} else {
|
||||
/*
|
||||
maxmind api
|
||||
http://www.maxmind.com/app/ccv
|
||||
|
||||
paypal api
|
||||
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables
|
||||
*/
|
||||
|
||||
$request = 'i=' . urlencode($order_info['ip']);
|
||||
$request .= '&city=' . urlencode($order_info['payment_city']);
|
||||
$request .= '®ion=' . urlencode($order_info['payment_zone']);
|
||||
$request .= '&postal=' . urlencode($order_info['payment_postcode']);
|
||||
$request .= '&country=' . urlencode($order_info['payment_country']);
|
||||
$request .= '&domain=' . urlencode(utf8_substr(strrchr($order_info['email'], '@'), 1));
|
||||
$request .= '&custPhone=' . urlencode($order_info['telephone']);
|
||||
$request .= '&license_key=' . urlencode($this->config->get('fraud_maxmind_key'));
|
||||
|
||||
if ($order_info['shipping_method']) {
|
||||
$request .= '&shipAddr=' . urlencode($order_info['shipping_address_1']);
|
||||
$request .= '&shipCity=' . urlencode($order_info['shipping_city']);
|
||||
$request .= '&shipRegion=' . urlencode($order_info['shipping_zone']);
|
||||
$request .= '&shipPostal=' . urlencode($order_info['shipping_postcode']);
|
||||
$request .= '&shipCountry=' . urlencode($order_info['shipping_country']);
|
||||
}
|
||||
|
||||
$request .= '&user_agent=' . urlencode($order_info['user_agent']);
|
||||
$request .= '&forwardedIP=' . urlencode($order_info['forwarded_ip']);
|
||||
$request .= '&emailMD5=' . urlencode(md5(utf8_strtolower($order_info['email'])));
|
||||
//$request .= '&passwordMD5=' . urlencode($order_info['password']);
|
||||
$request .= '&accept_language=' . urlencode($order_info['accept_language']);
|
||||
$request .= '&order_amount=' . urlencode($this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false));
|
||||
$request .= '&order_currency=' . urlencode($order_info['currency_code']);
|
||||
|
||||
$curl = curl_init('https://minfraud1.maxmind.com/app/ccv2r');
|
||||
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_FORBID_REUSE, 1);
|
||||
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
|
||||
curl_setopt($curl, CURLOPT_POST, 1);
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
|
||||
|
||||
$response = curl_exec($curl);
|
||||
|
||||
curl_close($curl);
|
||||
|
||||
$risk_score = 0;
|
||||
|
||||
if ($response) {
|
||||
$order_id = $order_info['order_id'];
|
||||
$customer_id = $order_info['customer_id'];
|
||||
|
||||
$response_info = array();
|
||||
|
||||
$parts = explode(';', $response);
|
||||
|
||||
foreach ($parts as $part) {
|
||||
list($key, $value) = explode('=', $part);
|
||||
|
||||
$response_info[$key] = $value;
|
||||
}
|
||||
|
||||
if (isset($response_info['countryMatch'])) {
|
||||
$country_match = $response_info['countryMatch'];
|
||||
} else {
|
||||
$country_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['countryCode'])) {
|
||||
$country_code = $response_info['countryCode'];
|
||||
} else {
|
||||
$country_code = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['highRiskCountry'])) {
|
||||
$high_risk_country = $response_info['highRiskCountry'];
|
||||
} else {
|
||||
$high_risk_country = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['distance'])) {
|
||||
$distance = $response_info['distance'];
|
||||
} else {
|
||||
$distance = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_region'])) {
|
||||
$ip_region = $response_info['ip_region'];
|
||||
} else {
|
||||
$ip_region = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_city'])) {
|
||||
$ip_city = $response_info['ip_city'];
|
||||
} else {
|
||||
$ip_city = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_latitude'])) {
|
||||
$ip_latitude = $response_info['ip_latitude'];
|
||||
} else {
|
||||
$ip_latitude = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_longitude'])) {
|
||||
$ip_longitude = $response_info['ip_longitude'];
|
||||
} else {
|
||||
$ip_longitude = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_isp'])) {
|
||||
$ip_isp = $response_info['ip_isp'];
|
||||
} else {
|
||||
$ip_isp = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_org'])) {
|
||||
$ip_org = $response_info['ip_org'];
|
||||
} else {
|
||||
$ip_org = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_asnum'])) {
|
||||
$ip_asnum = $response_info['ip_asnum'];
|
||||
} else {
|
||||
$ip_asnum = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_userType'])) {
|
||||
$ip_user_type = $response_info['ip_userType'];
|
||||
} else {
|
||||
$ip_user_type = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_countryConf'])) {
|
||||
$ip_country_confidence = $response_info['ip_countryConf'];
|
||||
} else {
|
||||
$ip_country_confidence = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_regionConf'])) {
|
||||
$ip_region_confidence = $response_info['ip_regionConf'];
|
||||
} else {
|
||||
$ip_region_confidence = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_cityConf'])) {
|
||||
$ip_city_confidence = $response_info['ip_cityConf'];
|
||||
} else {
|
||||
$ip_city_confidence = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_postalConf'])) {
|
||||
$ip_postal_confidence = $response_info['ip_postalConf'];
|
||||
} else {
|
||||
$ip_postal_confidence = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_postalCode'])) {
|
||||
$ip_postal_code = $response_info['ip_postalCode'];
|
||||
} else {
|
||||
$ip_postal_code = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_accuracyRadius'])) {
|
||||
$ip_accuracy_radius = $response_info['ip_accuracyRadius'];
|
||||
} else {
|
||||
$ip_accuracy_radius = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_netSpeedCell'])) {
|
||||
$ip_net_speed_cell = $response_info['ip_netSpeedCell'];
|
||||
} else {
|
||||
$ip_net_speed_cell = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_metroCode'])) {
|
||||
$ip_metro_code = $response_info['ip_metroCode'];
|
||||
} else {
|
||||
$ip_metro_code = '';
|
||||
}
|
||||
if (isset($response_info['ip_areaCode'])) {
|
||||
$ip_area_code = $response_info['ip_areaCode'];
|
||||
} else {
|
||||
$ip_area_code = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_timeZone'])) {
|
||||
$ip_time_zone = $response_info['ip_timeZone'];
|
||||
} else {
|
||||
$ip_time_zone = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_regionName'])) {
|
||||
$ip_region_name = $response_info['ip_regionName'];
|
||||
} else {
|
||||
$ip_region_name = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_domain'])) {
|
||||
$ip_domain = $response_info['ip_domain'];
|
||||
} else {
|
||||
$ip_domain = '';
|
||||
}
|
||||
if (isset($response_info['ip_countryName'])) {
|
||||
$ip_country_name = $response_info['ip_countryName'];
|
||||
} else {
|
||||
$ip_country_name = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_continentCode'])) {
|
||||
$ip_continent_code = $response_info['ip_continentCode'];
|
||||
} else {
|
||||
$ip_continent_code = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['ip_corporateProxy'])) {
|
||||
$ip_corporate_proxy = $response_info['ip_corporateProxy'];
|
||||
} else {
|
||||
$ip_corporate_proxy = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['anonymousProxy'])) {
|
||||
$anonymous_proxy = $response_info['anonymousProxy'];
|
||||
} else {
|
||||
$anonymous_proxy = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['proxyScore'])) {
|
||||
$proxy_score = $response_info['proxyScore'];
|
||||
} else {
|
||||
$proxy_score = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['isTransProxy'])) {
|
||||
$is_trans_proxy = $response_info['isTransProxy'];
|
||||
} else {
|
||||
$is_trans_proxy = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['freeMail'])) {
|
||||
$free_mail = $response_info['freeMail'];
|
||||
} else {
|
||||
$free_mail = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['carderEmail'])) {
|
||||
$carder_email = $response_info['carderEmail'];
|
||||
} else {
|
||||
$carder_email = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['highRiskUsername'])) {
|
||||
$high_risk_username = $response_info['highRiskUsername'];
|
||||
} else {
|
||||
$high_risk_username = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['highRiskPassword'])) {
|
||||
$high_risk_password = $response_info['highRiskPassword'];
|
||||
} else {
|
||||
$high_risk_password = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binMatch'])) {
|
||||
$bin_match = $response_info['binMatch'];
|
||||
} else {
|
||||
$bin_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binCountry'])) {
|
||||
$bin_country = $response_info['binCountry'];
|
||||
} else {
|
||||
$bin_country = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binNameMatch'])) {
|
||||
$bin_name_match = $response_info['binNameMatch'];
|
||||
} else {
|
||||
$bin_name_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binName'])) {
|
||||
$bin_name = $response_info['binName'];
|
||||
} else {
|
||||
$bin_name = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binPhoneMatch'])) {
|
||||
$bin_phone_match = $response_info['binPhoneMatch'];
|
||||
} else {
|
||||
$bin_phone_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['binPhone'])) {
|
||||
$bin_phone = $response_info['binPhone'];
|
||||
} else {
|
||||
$bin_phone = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['custPhoneInBillingLoc'])) {
|
||||
$customer_phone_in_billing_location = $response_info['custPhoneInBillingLoc'];
|
||||
} else {
|
||||
$customer_phone_in_billing_location = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['shipForward'])) {
|
||||
$ship_forward = $response_info['shipForward'];
|
||||
} else {
|
||||
$ship_forward = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['cityPostalMatch'])) {
|
||||
$city_postal_match = $response_info['cityPostalMatch'];
|
||||
} else {
|
||||
$city_postal_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['shipCityPostalMatch'])) {
|
||||
$ship_city_postal_match = $response_info['shipCityPostalMatch'];
|
||||
} else {
|
||||
$ship_city_postal_match = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['score'])) {
|
||||
$score = $response_info['score'];
|
||||
} else {
|
||||
$score = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['explanation'])) {
|
||||
$explanation = $response_info['explanation'];
|
||||
} else {
|
||||
$explanation = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['riskScore'])) {
|
||||
$risk_score = $response_info['riskScore'];
|
||||
} else {
|
||||
$risk_score = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['queriesRemaining'])) {
|
||||
$queries_remaining = $response_info['queriesRemaining'];
|
||||
} else {
|
||||
$queries_remaining = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['maxmindID'])) {
|
||||
$maxmind_id = $response_info['maxmindID'];
|
||||
} else {
|
||||
$maxmind_id = '';
|
||||
}
|
||||
|
||||
if (isset($response_info['err'])) {
|
||||
$error = $response_info['err'];
|
||||
} else {
|
||||
$error = '';
|
||||
}
|
||||
|
||||
$this->db->query("INSERT INTO `" . DB_PREFIX . "maxmind` SET order_id = '" . (int)$order_id . "', customer_id = '" . (int)$customer_id . "', country_match = '" . $this->db->escape($country_match) . "', country_code = '" . $this->db->escape($country_code) . "', high_risk_country = '" . $this->db->escape($high_risk_country) . "', distance = '" . (int)$distance . "', ip_region = '" . $this->db->escape($ip_region) . "', ip_city = '" . $this->db->escape($ip_city) . "', ip_latitude = '" . $this->db->escape($ip_latitude) . "', ip_longitude = '" . $this->db->escape($ip_longitude) . "', ip_isp = '" . $this->db->escape($ip_isp) . "', ip_org = '" . $this->db->escape($ip_org) . "', ip_asnum = '" . (int)$ip_asnum . "', ip_user_type = '" . $this->db->escape($ip_user_type) . "', ip_country_confidence = '" . $this->db->escape($ip_country_confidence) . "', ip_region_confidence = '" . $this->db->escape($ip_region_confidence) . "', ip_city_confidence = '" . $this->db->escape($ip_city_confidence) . "', ip_postal_confidence = '" . $this->db->escape($ip_postal_confidence) . "', ip_postal_code = '" . $this->db->escape($ip_postal_code) . "', ip_accuracy_radius = '" . (int)$ip_accuracy_radius . "', ip_net_speed_cell = '" . $this->db->escape($ip_net_speed_cell) . "', ip_metro_code = '" . (int)$ip_metro_code . "', ip_area_code = '" . (int)$ip_area_code . "', ip_time_zone = '" . $this->db->escape($ip_time_zone) . "', ip_region_name = '" . $this->db->escape($ip_region_name) . "', ip_domain = '" . $this->db->escape($ip_domain) . "', ip_country_name = '" . $this->db->escape($ip_country_name) . "', ip_continent_code = '" . $this->db->escape($ip_continent_code) . "', ip_corporate_proxy = '" . $this->db->escape($ip_corporate_proxy) . "', anonymous_proxy = '" . $this->db->escape($anonymous_proxy) . "', proxy_score = '" . (float)$proxy_score . "', is_trans_proxy = '" . $this->db->escape($is_trans_proxy) . "', free_mail = '" . $this->db->escape($free_mail) . "', carder_email = '" . $this->db->escape($carder_email) . "', high_risk_username = '" . $this->db->escape($high_risk_username) . "', high_risk_password = '" . $this->db->escape($high_risk_password) . "', bin_match = '" . $this->db->escape($bin_match) . "', bin_country = '" . $this->db->escape($bin_country) . "', bin_name_match = '" . $this->db->escape($bin_name_match) . "', bin_name = '" . $this->db->escape($bin_name) . "', bin_phone_match = '" . $this->db->escape($bin_phone_match) . "', bin_phone = '" . $this->db->escape($bin_phone) . "', customer_phone_in_billing_location = '" . $this->db->escape($customer_phone_in_billing_location) . "', ship_forward = '" . $this->db->escape($ship_forward) . "', city_postal_match = '" . $this->db->escape($city_postal_match) . "', ship_city_postal_match = '" . $this->db->escape($ship_city_postal_match) . "', score = '" . (float)$score . "', explanation = '" . $this->db->escape($explanation) . "', risk_score = '" . (float)$risk_score . "', queries_remaining = '" . (int)$queries_remaining . "', maxmind_id = '" . $this->db->escape($maxmind_id) . "', error = '" . $this->db->escape($error) . "', date_added = NOW()");
|
||||
}
|
||||
}
|
||||
|
||||
if ($risk_score > $this->config->get('fraud_maxmind_score') && $this->config->get('fraud_maxmind_key')) {
|
||||
return $this->config->get('maxmind_order_status_id');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
class ModelExtensionModuleCallback extends Model {
|
||||
public function addCallback($data) {
|
||||
|
||||
$query = $this->db->query("INSERT INTO " . DB_PREFIX . "callback SET name = '" . $this->db->escape($data['name']) . "', telephone = '" . $this->db->escape($data['phone']) . "', date_added = NOW(), date_modified = NOW(), status_id = '0', comment = '" . $this->db->escape($data['comment']) . "'");
|
||||
|
||||
return $this->db->getLastId();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
class ModelExtensionModuleLbcomment extends Model {
|
||||
public function addComment($blog_id, $data) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_comment SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', blog_id = '" . (int)$blog_id . "', text = '" . $this->db->escape($data['text']) . "', rating = 0, date_added = NOW()");
|
||||
|
||||
$comment_id = $this->db->getLastId();
|
||||
|
||||
if (in_array('comment', (array)$this->config->get('config_mail_alert'))) {
|
||||
$this->load->language('mail/review');
|
||||
$this->load->model('catalog/product');
|
||||
|
||||
$product_info = $this->model_catalog_product->getProduct($blog_id);
|
||||
|
||||
$subject = sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
|
||||
|
||||
$message = $this->language->get('text_waiting') . "\n";
|
||||
$message .= sprintf($this->language->get('text_product'), html_entity_decode($product_info['name'], ENT_QUOTES, 'UTF-8')) . "\n";
|
||||
$message .= sprintf($this->language->get('text_reviewer'), html_entity_decode($data['name'], ENT_QUOTES, 'UTF-8')) . "\n";
|
||||
$message .= sprintf($this->language->get('text_rating'), $data['rating']) . "\n";
|
||||
$message .= $this->language->get('text_review') . "\n";
|
||||
$message .= html_entity_decode($data['text'], ENT_QUOTES, 'UTF-8') . "\n\n";
|
||||
|
||||
$mail = new Mail();
|
||||
$mail->protocol = $this->config->get('config_mail_protocol');
|
||||
$mail->parameter = $this->config->get('config_mail_parameter');
|
||||
$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
|
||||
$mail->smtp_username = $this->config->get('config_mail_smtp_username');
|
||||
$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
|
||||
$mail->smtp_port = $this->config->get('config_mail_smtp_port');
|
||||
$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
|
||||
|
||||
$mail->setTo($this->config->get('config_email'));
|
||||
$mail->setFrom($this->config->get('config_email'));
|
||||
$mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
|
||||
$mail->setSubject($subject);
|
||||
$mail->setText($message);
|
||||
$mail->send();
|
||||
|
||||
// Send to additional alert emails
|
||||
$emails = explode(',', $this->config->get('config_alert_email'));
|
||||
|
||||
foreach ($emails as $email) {
|
||||
if ($email && preg_match($this->config->get('config_mail_regexp'), $email)) {
|
||||
$mail->setTo($email);
|
||||
$mail->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getCommentsByBlogId($blog_id, $start = 0, $limit = 20) {
|
||||
if ($start < 0) {
|
||||
$start = 0;
|
||||
}
|
||||
|
||||
if ($limit < 1) {
|
||||
$limit = 20;
|
||||
}
|
||||
|
||||
$sql = "SELECT r.comment_id, r.author, r.rating, r.text, p.blog_id, pd.title, r.date_added FROM " . DB_PREFIX . "lightshop_blog_comment r LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (r.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (p.blog_id = pd.blog_id) WHERE p.blog_id = '" . (int)$blog_id . "'";
|
||||
|
||||
if (!$this->config->get('theme_lightshop_blog_rev_moder')) {
|
||||
$sql .= " AND r.status = '1' ";
|
||||
}
|
||||
|
||||
$sql .= " AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY r.date_added DESC LIMIT " . (int)$start . "," . (int)$limit . "";
|
||||
//var_dump($sql);
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getTotalCommentsByBlogId($blog_id) {
|
||||
|
||||
if ($this->config->get('theme_lightshop_blog_rev_moder')) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_comment r LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (r.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (p.blog_id = pd.blog_id) WHERE p.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
|
||||
}else{
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_comment r LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (r.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (p.blog_id = pd.blog_id) WHERE p.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND r.status = '1' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
|
||||
}
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,430 @@
|
||||
<?php //004fb
|
||||
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
|
||||
?>
|
||||
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
|
||||
Dm==
|
||||
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
class ModelExtensionModuleLightshopblog extends Model {
|
||||
|
||||
public function updateViewed($blog_id) {
|
||||
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog SET viewed = (viewed + 1) WHERE blog_id = '" . (int)$blog_id . "'");
|
||||
}
|
||||
|
||||
public function getBlog($blog_id) {
|
||||
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshop_blog i LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE i.blog_id = '" . (int)$blog_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getBlogs($data) {
|
||||
|
||||
$sql = "SELECT * ";
|
||||
|
||||
if (!empty($data['filter_category_id'])) {
|
||||
if (!empty($data['filter_sub_category'])) {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog i ON (p2c.blog_id = i.blog_id)";
|
||||
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog i";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (i.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ";
|
||||
|
||||
if (!empty($data['filter_category_id'])) {
|
||||
if (!empty($data['filter_sub_category'])) {
|
||||
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
|
||||
} else {
|
||||
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!empty($data['filtertag'])) {
|
||||
$sql .= " AND bt.tag = '" . $this->db->escape($data['filtertag']) . "'";
|
||||
}
|
||||
|
||||
if (!empty($data['filter_name'])) {
|
||||
$sql .= " AND id.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
|
||||
}
|
||||
|
||||
$sql .= " GROUP BY i.blog_id ORDER BY i.date_added DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
public function getBlogsTotal() {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog WHERE status = '1'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getBlogLayoutId($blog_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE blog_id = '" . (int)$blog_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
return $query->row['layout_id'];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
public function isModuleSet() {
|
||||
$isSet = false;
|
||||
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_blog'");
|
||||
if($query->num_rows){
|
||||
$isSet = true;
|
||||
}
|
||||
|
||||
return $isSet;
|
||||
}
|
||||
public function getBlogRelated($blog_id) {
|
||||
$product_data = array();
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related pr LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (pr.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pr.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
|
||||
$querys = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_key'");
|
||||
if($querys->num_rows){$queryss = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_key WHERE 1");}
|
||||
foreach ($query->rows as $result) {
|
||||
$product_data[$result['related_id']] = $result['related_id'];
|
||||
}
|
||||
if(!isset($queryss->row['value']) || !$queryss->row['value']){$product_data = array();}
|
||||
return $product_data;
|
||||
}
|
||||
|
||||
public function getBlogRelatedProd($blog_id) {
|
||||
$product_data = array();
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related_prod pr LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (pr.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pr.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
|
||||
$querys = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_key'");
|
||||
if($querys->num_rows){$queryss = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_key WHERE 1");}
|
||||
foreach ($query->rows as $result) {
|
||||
$product_data[$result['related_id']] = $result['related_id'];
|
||||
}
|
||||
if(!isset($queryss->row['value']) || !$queryss->row['value']){$product_data = array();}
|
||||
return $product_data;
|
||||
}
|
||||
|
||||
|
||||
public function getTotalBlogs($data = array()) {
|
||||
|
||||
|
||||
$sql = "SELECT COUNT(DISTINCT p.blog_id) AS total";
|
||||
|
||||
|
||||
if (!empty($data['filter_category_id'])) {
|
||||
if (!empty($data['filter_sub_category'])) {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (p2c.blog_id = p.blog_id)";
|
||||
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog p";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (p.blog_id = pd.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (p.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' 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'] . "'";
|
||||
} else {
|
||||
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!empty($data['filtertag'])) {
|
||||
$sql .= " AND bt.tag = '" . $this->db->escape($data['filtertag']) . "'";
|
||||
}
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
$total = 0;
|
||||
|
||||
if(isset($query->row['total'])){
|
||||
$total = $query->row['total'];
|
||||
}
|
||||
|
||||
return $total;
|
||||
}
|
||||
public function getBlogsTag($data) {
|
||||
|
||||
$sql = "SELECT *,COUNT(i.blog_id) as total ";
|
||||
|
||||
if (!empty($data['filter_category_id'])) {
|
||||
if (!empty($data['filter_sub_category'])) {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog i ON (p2c.blog_id = i.blog_id)";
|
||||
|
||||
} else {
|
||||
$sql .= " FROM " . DB_PREFIX . "lightshop_blog i";
|
||||
}
|
||||
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (i.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE bt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND bt.tag IS NOT NULL AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ";
|
||||
|
||||
if (!empty($data['filter_category_id'])) {
|
||||
if (!empty($data['filter_sub_category'])) {
|
||||
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
|
||||
} else {
|
||||
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$sql .= " GROUP BY bt.tag ORDER BY total DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getBlogTag($blog_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_tag WHERE language_id = '" . (int)$this->config->get('config_language_id') . "' AND blog_id = '" . (int)$blog_id . "'");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getBlogCat($blog_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_category b2c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cbd ON (b2c.category_id = cbd.category_id ) WHERE cbd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND b2c.blog_id= '" . (int)$blog_id . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getTotalReviewsByBlogId($blog_id) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_comment c LEFT JOIN " . DB_PREFIX . "lightshop_blog b ON (c.blog_id = b.blog_id) WHERE b.blog_id = '" . (int)$blog_id . "' AND c.status = '1'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
class ModelExtensionModuleLightshopcatblog extends Model {
|
||||
public function getBlogCategory($blogcategory_id) {
|
||||
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$blogcategory_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getBlogCategories($parent_id = 0) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getBlogCategoryFilters($blogcategory_id) {
|
||||
$implode = array();
|
||||
|
||||
$query = $this->db->query("SELECT filter_id FROM " . DB_PREFIX . "lightshopcat_blog_filter WHERE category_id = '" . (int)$blogcategory_id . "'");
|
||||
|
||||
foreach ($query->rows as $result) {
|
||||
$implode[] = (int)$result['filter_id'];
|
||||
}
|
||||
|
||||
$filter_group_data = array();
|
||||
|
||||
if ($implode) {
|
||||
$filter_group_query = $this->db->query("SELECT DISTINCT f.filter_group_id, fgd.name, fg.sort_order FROM " . DB_PREFIX . "filter f LEFT JOIN " . DB_PREFIX . "filter_group fg ON (f.filter_group_id = fg.filter_group_id) LEFT JOIN " . DB_PREFIX . "filter_group_description fgd ON (fg.filter_group_id = fgd.filter_group_id) WHERE f.filter_id IN (" . implode(',', $implode) . ") AND fgd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY f.filter_group_id ORDER BY fg.sort_order, LCASE(fgd.name)");
|
||||
|
||||
foreach ($filter_group_query->rows as $filter_group) {
|
||||
$filter_data = array();
|
||||
|
||||
$filter_query = $this->db->query("SELECT DISTINCT f.filter_id, fd.name FROM " . DB_PREFIX . "filter f LEFT JOIN " . DB_PREFIX . "filter_description fd ON (f.filter_id = fd.filter_id) WHERE f.filter_id IN (" . implode(',', $implode) . ") AND f.filter_group_id = '" . (int)$filter_group['filter_group_id'] . "' AND fd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY f.sort_order, LCASE(fd.name)");
|
||||
|
||||
foreach ($filter_query->rows as $filter) {
|
||||
$filter_data[] = array(
|
||||
'filter_id' => $filter['filter_id'],
|
||||
'name' => $filter['name']
|
||||
);
|
||||
}
|
||||
|
||||
if ($filter_data) {
|
||||
$filter_group_data[] = array(
|
||||
'filter_group_id' => $filter_group['filter_group_id'],
|
||||
'name' => $filter_group['name'],
|
||||
'filter' => $filter_data
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $filter_group_data;
|
||||
}
|
||||
|
||||
public function getBlogCategoryLayoutId($blogcategory_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE category_id = '" . (int)$blogcategory_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
return $query->row['layout_id'];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getBlogsTotalByCategoryId($category_id = 0) {
|
||||
if ($category_id) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog b LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store b2s ON (b.blog_id = b2s.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category b2c ON (b.blog_id = b2c.blog_id) WHERE b2c.category_id = '" . (int)$category_id . "' AND b2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND b.status = '1'");
|
||||
}else{
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog WHERE status = '1'");
|
||||
}
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getBlogTotalCategoriesByCategoryId($parent_id = 0) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getPathByBlog($blog_id) {
|
||||
$blog_id = (int)$blog_id;
|
||||
if ($blog_id < 1) return false;
|
||||
|
||||
static $path = null;
|
||||
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . $blog_id . "' ORDER BY main_category DESC LIMIT 1");
|
||||
|
||||
$path[$blog_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);
|
||||
|
||||
return $path[$blog_id];
|
||||
}
|
||||
|
||||
private function getPathByCategory($category_id) {
|
||||
$category_id = (int)$category_id;
|
||||
if ($category_id < 1) return false;
|
||||
|
||||
static $path = null;
|
||||
|
||||
$max_level = 10;
|
||||
|
||||
$sql = "SELECT CONCAT_WS('_'";
|
||||
for ($i = $max_level-1; $i >= 0; --$i) {
|
||||
$sql .= ",t$i.category_id";
|
||||
}
|
||||
$sql .= ") AS path FROM " . DB_PREFIX . "lightshopcat_blog t0";
|
||||
for ($i = 1; $i < $max_level; ++$i) {
|
||||
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshopcat_blog t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
|
||||
}
|
||||
$sql .= " WHERE t0.category_id = '" . $category_id . "'";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
$path[$category_id] = $query->num_rows ? $query->row['path'] : false;
|
||||
|
||||
return $path[$category_id];
|
||||
}
|
||||
|
||||
public function isModuleSet() {
|
||||
$isSet = false;
|
||||
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshopcat_blog'");
|
||||
if($query->num_rows){
|
||||
$isSet = true;
|
||||
}
|
||||
|
||||
return $isSet;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
class ModelExtensionModuleLightshopnews extends Model {
|
||||
public function getNews($news_id) {
|
||||
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) LEFT JOIN " . DB_PREFIX . "lightshop_news_to_store i2s ON (i.news_id = i2s.news_id) WHERE i.news_id = '" . (int)$news_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getNewss($data) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) LEFT JOIN " . DB_PREFIX . "lightshop_news_to_store i2s ON (i.news_id = i2s.news_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ORDER BY i.date_added DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
public function getNewssTotal() {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_news WHERE status = '1'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getNewsLayoutId($news_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE news_id = '" . (int)$news_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
|
||||
|
||||
if ($query->num_rows) {
|
||||
return $query->row['layout_id'];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
public function isModuleSet() {
|
||||
$isSet = false;
|
||||
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_news'");
|
||||
if($query->num_rows){
|
||||
$isSet = true;
|
||||
}
|
||||
|
||||
return $isSet;
|
||||
}
|
||||
public function getProductRelated($news_id) {
|
||||
$product_data = array();
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_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.news_id = '" . (int)$news_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']] = $result['related_id'];
|
||||
}
|
||||
return $product_data;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
class ModelExtensionModuleLightshopsubscribe extends Model {
|
||||
|
||||
public function addSubscribe($data) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "subscribe SET email = '" . $this->db->escape($data['email']) . "', status = '" . (int) $data['status'] . "'");
|
||||
}
|
||||
|
||||
public function editSubscribe($data) {
|
||||
$this->db->query("UPDATE " . DB_PREFIX . "subscribe SET status = '" . (int) $data['status'] . "' WHERE email = '" . $this->db->escape($data['email']) . "'");
|
||||
}
|
||||
|
||||
public function getSubscribers() {
|
||||
$query = $this->db->query("SELECT email FROM " . DB_PREFIX . "subscribe WHERE status = '0'");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function checkEmail($email) {
|
||||
$query = $this->db->query("SELECT email FROM " . DB_PREFIX . "subscribe WHERE email ='" . $this->db->escape($email) . "'");
|
||||
|
||||
return isset($query->row['email']) ? $query->row['email'] : 0;
|
||||
}
|
||||
|
||||
public function getAuthDescription($language_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "subscribe_auth_description WHERE language_id='" .(int)$language_id . "'");
|
||||
|
||||
return isset($query->row['subscribe_authorization']) ? $query->row['subscribe_authorization'] : '';
|
||||
}
|
||||
|
||||
public function getEmailDescription($language_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "subscribe_email_description WHERE language_id='" . (int)$language_id . "'");
|
||||
|
||||
return isset($query->row['subscribe_descriptions']) ? $query->row['subscribe_descriptions'] : '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
class ModelExtensionPaymentCOD extends Model {
|
||||
public function getMethod($address, $total) {
|
||||
$this->load->language('extension/payment/cod');
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('payment_cod_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");
|
||||
|
||||
if ($this->config->get('payment_cod_total') > 0 && $this->config->get('payment_cod_total') > $total) {
|
||||
$status = false;
|
||||
} elseif (!$this->cart->hasShipping()) {
|
||||
$status = false;
|
||||
} elseif (!$this->config->get('payment_cod_geo_zone_id')) {
|
||||
$status = true;
|
||||
} elseif ($query->num_rows) {
|
||||
$status = true;
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
$method_data = array();
|
||||
|
||||
if ($status) {
|
||||
$method_data = array(
|
||||
'code' => 'cod',
|
||||
'title' => $this->language->get('text_title'),
|
||||
'terms' => '',
|
||||
'sort_order' => $this->config->get('payment_cod_sort_order')
|
||||
);
|
||||
}
|
||||
|
||||
return $method_data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
class ModelExtensionShippingFlat extends Model {
|
||||
function getQuote($address) {
|
||||
$this->load->language('extension/shipping/flat');
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('shipping_flat_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");
|
||||
|
||||
if (!$this->config->get('shipping_flat_geo_zone_id')) {
|
||||
$status = true;
|
||||
} elseif ($query->num_rows) {
|
||||
$status = true;
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
$method_data = array();
|
||||
|
||||
if ($status) {
|
||||
$quote_data = array();
|
||||
|
||||
$quote_data['flat'] = array(
|
||||
'code' => 'flat.flat',
|
||||
'title' => $this->language->get('text_description'),
|
||||
'cost' => $this->config->get('shipping_flat_cost'),
|
||||
'tax_class_id' => $this->config->get('shipping_flat_tax_class_id'),
|
||||
'text' => $this->currency->format($this->tax->calculate($this->config->get('shipping_flat_cost'), $this->config->get('shipping_flat_tax_class_id'), $this->config->get('config_tax')), $this->session->data['currency'])
|
||||
);
|
||||
|
||||
$method_data = array(
|
||||
'code' => 'flat',
|
||||
'title' => $this->language->get('text_title'),
|
||||
'quote' => $quote_data,
|
||||
'sort_order' => $this->config->get('shipping_flat_sort_order'),
|
||||
'error' => false
|
||||
);
|
||||
}
|
||||
|
||||
return $method_data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
<?php
|
||||
class ModelExtensionTotalCoupon extends Model {
|
||||
public function getCoupon($code) {
|
||||
$status = true;
|
||||
|
||||
$coupon_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon` WHERE code = '" . $this->db->escape($code) . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
|
||||
|
||||
if ($coupon_query->num_rows) {
|
||||
if ($coupon_query->row['total'] > $this->cart->getSubTotal()) {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
$coupon_total = $this->getTotalCouponHistoriesByCoupon($code);
|
||||
|
||||
if ($coupon_query->row['uses_total'] > 0 && ($coupon_total >= $coupon_query->row['uses_total'])) {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($coupon_query->row['logged'] && !$this->customer->getId()) {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($this->customer->getId()) {
|
||||
$customer_total = $this->getTotalCouponHistoriesByCustomerId($code, $this->customer->getId());
|
||||
|
||||
if ($coupon_query->row['uses_customer'] > 0 && ($customer_total >= $coupon_query->row['uses_customer'])) {
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Products
|
||||
$coupon_product_data = array();
|
||||
|
||||
$coupon_product_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon_product` WHERE coupon_id = '" . (int)$coupon_query->row['coupon_id'] . "'");
|
||||
|
||||
foreach ($coupon_product_query->rows as $product) {
|
||||
$coupon_product_data[] = $product['product_id'];
|
||||
}
|
||||
|
||||
// Categories
|
||||
$coupon_category_data = array();
|
||||
|
||||
$coupon_category_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon_category` cc LEFT JOIN `" . DB_PREFIX . "category_path` cp ON (cc.category_id = cp.path_id) WHERE cc.coupon_id = '" . (int)$coupon_query->row['coupon_id'] . "'");
|
||||
|
||||
foreach ($coupon_category_query->rows as $category) {
|
||||
$coupon_category_data[] = $category['category_id'];
|
||||
}
|
||||
|
||||
$product_data = array();
|
||||
|
||||
if ($coupon_product_data || $coupon_category_data) {
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
if (in_array($product['product_id'], $coupon_product_data)) {
|
||||
$product_data[] = $product['product_id'];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($coupon_category_data as $category_id) {
|
||||
$coupon_category_query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "product_to_category` WHERE `product_id` = '" . (int)$product['product_id'] . "' AND category_id = '" . (int)$category_id . "'");
|
||||
|
||||
if ($coupon_category_query->row['total']) {
|
||||
$product_data[] = $product['product_id'];
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$product_data) {
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($status) {
|
||||
return array(
|
||||
'coupon_id' => $coupon_query->row['coupon_id'],
|
||||
'code' => $coupon_query->row['code'],
|
||||
'name' => $coupon_query->row['name'],
|
||||
'type' => $coupon_query->row['type'],
|
||||
'discount' => $coupon_query->row['discount'],
|
||||
'shipping' => $coupon_query->row['shipping'],
|
||||
'total' => $coupon_query->row['total'],
|
||||
'product' => $product_data,
|
||||
'date_start' => $coupon_query->row['date_start'],
|
||||
'date_end' => $coupon_query->row['date_end'],
|
||||
'uses_total' => $coupon_query->row['uses_total'],
|
||||
'uses_customer' => $coupon_query->row['uses_customer'],
|
||||
'status' => $coupon_query->row['status'],
|
||||
'date_added' => $coupon_query->row['date_added']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTotal($total) {
|
||||
if (isset($this->session->data['coupon'])) {
|
||||
$this->load->language('extension/total/coupon', 'coupon');
|
||||
|
||||
$coupon_info = $this->getCoupon($this->session->data['coupon']);
|
||||
|
||||
if ($coupon_info) {
|
||||
$discount_total = 0;
|
||||
|
||||
if (!$coupon_info['product']) {
|
||||
$sub_total = $this->cart->getSubTotal();
|
||||
} else {
|
||||
$sub_total = 0;
|
||||
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
if (in_array($product['product_id'], $coupon_info['product'])) {
|
||||
$sub_total += $product['total'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($coupon_info['type'] == 'F') {
|
||||
$coupon_info['discount'] = min($coupon_info['discount'], $sub_total);
|
||||
}
|
||||
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
$discount = 0;
|
||||
|
||||
if (!$coupon_info['product']) {
|
||||
$status = true;
|
||||
} else {
|
||||
$status = in_array($product['product_id'], $coupon_info['product']);
|
||||
}
|
||||
|
||||
if ($status) {
|
||||
if ($coupon_info['type'] == 'F') {
|
||||
$discount = $coupon_info['discount'] * ($product['total'] / $sub_total);
|
||||
} elseif ($coupon_info['type'] == 'P') {
|
||||
$discount = $product['total'] / 100 * $coupon_info['discount'];
|
||||
}
|
||||
|
||||
if ($product['tax_class_id']) {
|
||||
$tax_rates = $this->tax->getRates($product['total'] - ($product['total'] - $discount), $product['tax_class_id']);
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if ($tax_rate['type'] == 'P') {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] -= $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$discount_total += $discount;
|
||||
}
|
||||
|
||||
if ($coupon_info['shipping'] && isset($this->session->data['shipping_method'])) {
|
||||
if (!empty($this->session->data['shipping_method']['tax_class_id'])) {
|
||||
$tax_rates = $this->tax->getRates($this->session->data['shipping_method']['cost'], $this->session->data['shipping_method']['tax_class_id']);
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if ($tax_rate['type'] == 'P') {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] -= $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$discount_total += $this->session->data['shipping_method']['cost'];
|
||||
}
|
||||
|
||||
// If discount greater than total
|
||||
if ($discount_total > $total['total']) {
|
||||
$discount_total = $total['total'];
|
||||
}
|
||||
|
||||
if ($discount_total > 0) {
|
||||
$total['totals'][] = array(
|
||||
'code' => 'coupon',
|
||||
'title' => sprintf($this->language->get('coupon')->get('text_coupon'), $this->session->data['coupon']),
|
||||
'value' => -$discount_total,
|
||||
'sort_order' => $this->config->get('total_coupon_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] -= $discount_total;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function confirm($order_info, $order_total) {
|
||||
$code = '';
|
||||
|
||||
$start = strpos($order_total['title'], '(') + 1;
|
||||
$end = strrpos($order_total['title'], ')');
|
||||
|
||||
if ($start && $end) {
|
||||
$code = substr($order_total['title'], $start, $end - $start);
|
||||
}
|
||||
|
||||
if ($code) {
|
||||
$status = true;
|
||||
|
||||
$coupon_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon` WHERE code = '" . $this->db->escape($code) . "' AND status = '1'");
|
||||
|
||||
if ($coupon_query->num_rows) {
|
||||
$coupon_total = $this->getTotalCouponHistoriesByCoupon($code);
|
||||
|
||||
if ($coupon_query->row['uses_total'] > 0 && ($coupon_total >= $coupon_query->row['uses_total'])) {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($order_info['customer_id']) {
|
||||
$customer_total = $this->getTotalCouponHistoriesByCustomerId($code, $order_info['customer_id']);
|
||||
|
||||
if ($coupon_query->row['uses_customer'] > 0 && ($customer_total >= $coupon_query->row['uses_customer'])) {
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($status) {
|
||||
$this->db->query("INSERT INTO `" . DB_PREFIX . "coupon_history` SET coupon_id = '" . (int)$coupon_query->row['coupon_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', customer_id = '" . (int)$order_info['customer_id'] . "', amount = '" . (float)$order_total['value'] . "', date_added = NOW()");
|
||||
} else {
|
||||
return $this->config->get('config_fraud_status_id');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function unconfirm($order_id) {
|
||||
$this->db->query("DELETE FROM `" . DB_PREFIX . "coupon_history` WHERE order_id = '" . (int)$order_id . "'");
|
||||
}
|
||||
|
||||
public function getTotalCouponHistoriesByCoupon($coupon) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "coupon_history` ch LEFT JOIN `" . DB_PREFIX . "coupon` c ON (ch.coupon_id = c.coupon_id) WHERE c.code = '" . $this->db->escape($coupon) . "'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getTotalCouponHistoriesByCustomerId($coupon, $customer_id) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "coupon_history` ch LEFT JOIN `" . DB_PREFIX . "coupon` c ON (ch.coupon_id = c.coupon_id) WHERE c.code = '" . $this->db->escape($coupon) . "' AND ch.customer_id = '" . (int)$customer_id . "'");
|
||||
|
||||
return $query->row['total'];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
class ModelExtensionTotalCredit extends Model {
|
||||
public function getTotal($total) {
|
||||
$this->load->language('extension/total/credit');
|
||||
|
||||
$balance = $this->customer->getBalance();
|
||||
|
||||
if ((float)$balance) {
|
||||
$credit = min($balance, $total['total']);
|
||||
|
||||
if ((float)$credit > 0) {
|
||||
$total['totals'][] = array(
|
||||
'code' => 'credit',
|
||||
'title' => $this->language->get('text_credit'),
|
||||
'value' => -$credit,
|
||||
'sort_order' => $this->config->get('total_credit_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] -= $credit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function confirm($order_info, $order_total) {
|
||||
$this->load->language('extension/total/credit');
|
||||
|
||||
if ($order_info['customer_id']) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_transaction SET customer_id = '" . (int)$order_info['customer_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', description = '" . $this->db->escape(sprintf($this->language->get('text_order_id'), (int)$order_info['order_id'])) . "', amount = '" . (float)$order_total['value'] . "', date_added = NOW()");
|
||||
}
|
||||
}
|
||||
|
||||
public function unconfirm($order_id) {
|
||||
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_transaction WHERE order_id = '" . (int)$order_id . "'");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
class ModelExtensionTotalHandling extends Model {
|
||||
public function getTotal($total) {
|
||||
if (($this->cart->getSubTotal() > $this->config->get('total_handling_total')) && ($this->cart->getSubTotal() > 0) && ($this->cart->hasDownload() == false) && $this->cart->hasShipping() == true) {
|
||||
$this->load->language('extension/total/handling');
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'handling',
|
||||
'title' => $this->language->get('text_handling'),
|
||||
'value' => $this->config->get('total_handling_fee'),
|
||||
'sort_order' => $this->config->get('total_handling_sort_order')
|
||||
);
|
||||
|
||||
if ($this->config->get('total_handling_tax_class_id')) {
|
||||
$tax_rates = $this->tax->getRates($this->config->get('total_handling_fee'), $this->config->get('total_handling_tax_class_id'));
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if (!isset($total['taxes'][$tax_rate['tax_rate_id']])) {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] = $tax_rate['amount'];
|
||||
} else {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] += $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$total['total'] += $this->config->get('total_handling_fee');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
class ModelExtensionTotalLightshopsets extends Model {
|
||||
|
||||
|
||||
public function getTotal($total) {
|
||||
$this->load->language('extension/total/lightshopsets');
|
||||
|
||||
$this->load->model('extension/module/lightshop');
|
||||
|
||||
$setids = array();
|
||||
if (isset($this->session->data['lightshopsetid']) && $this->session->data['lightshopsetid']) {
|
||||
$setids = $this->session->data['lightshopsetid'];
|
||||
}
|
||||
|
||||
$cartProducts = array();
|
||||
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
$cartProducts[$product['product_id']]['quantity'] = $product['quantity'];
|
||||
$cartProducts[$product['product_id']]['price'] = $product['price'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
foreach ($setids as $setid) {
|
||||
|
||||
$lightshopsets = $this->model_extension_module_lightshop->getSetDiscount($total,$setid,$cartProducts);
|
||||
|
||||
if (!empty($this->session->data['vouchers'])) {
|
||||
foreach ($this->session->data['vouchers'] as $voucher) {
|
||||
$lightshopsets += $voucher['amount'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($lightshopsets['discount']) {
|
||||
|
||||
$setInfo = $this->model_extension_module_lightshop->getSetInfo($setid);
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'lightshopsets',
|
||||
'title' => $this->language->get('text_lightshopsets').' - '.$setInfo['title'],
|
||||
'value' => -$lightshopsets['discount'],
|
||||
'sort_order' => $this->config->get('total_lightshopsets_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] -= $lightshopsets['discount'];
|
||||
$cartProducts = $lightshopsets['cartproducts'];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
class ModelExtensionTotalLowOrderFee extends Model {
|
||||
public function getTotal($total) {
|
||||
if ($this->cart->getSubTotal() && ($this->cart->getSubTotal() < $this->config->get('total_low_order_fee_total'))) {
|
||||
$this->load->language('extension/total/low_order_fee');
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'low_order_fee',
|
||||
'title' => $this->language->get('text_low_order_fee'),
|
||||
'value' => $this->config->get('total_low_order_fee_fee'),
|
||||
'sort_order' => $this->config->get('total_low_order_fee_sort_order')
|
||||
);
|
||||
|
||||
if ($this->config->get('total_low_order_fee_tax_class_id')) {
|
||||
$tax_rates = $this->tax->getRates($this->config->get('total_low_order_fee_fee'), $this->config->get('total_low_order_fee_tax_class_id'));
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if (!isset($total['taxes'][$tax_rate['tax_rate_id']])) {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] = $tax_rate['amount'];
|
||||
} else {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] += $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$total['total'] += $this->config->get('total_low_order_fee_fee');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
class ModelExtensionTotalReward extends Model {
|
||||
public function getTotal($total) {
|
||||
if (isset($this->session->data['reward'])) {
|
||||
$this->load->language('extension/total/reward', 'reward');
|
||||
|
||||
$points = $this->customer->getRewardPoints();
|
||||
|
||||
if ($this->session->data['reward'] <= $points) {
|
||||
$discount_total = 0;
|
||||
|
||||
$points_total = 0;
|
||||
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
if ($product['points']) {
|
||||
$points_total += $product['points'];
|
||||
}
|
||||
}
|
||||
|
||||
$points = min($points, $points_total);
|
||||
|
||||
foreach ($this->cart->getProducts() as $product) {
|
||||
$discount = 0;
|
||||
|
||||
if ($product['points']) {
|
||||
$discount = $product['total'] * ($this->session->data['reward'] / $points_total);
|
||||
|
||||
if ($product['tax_class_id']) {
|
||||
$tax_rates = $this->tax->getRates($product['total'] - ($product['total'] - $discount), $product['tax_class_id']);
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if ($tax_rate['type'] == 'P') {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] -= $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$discount_total += $discount;
|
||||
}
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'reward',
|
||||
'title' => sprintf($this->language->get('reward')->get('text_reward'), $this->session->data['reward']),
|
||||
'value' => -$discount_total,
|
||||
'sort_order' => $this->config->get('total_reward_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] -= $discount_total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function confirm($order_info, $order_total) {
|
||||
$this->load->language('extension/total/reward');
|
||||
|
||||
$points = 0;
|
||||
|
||||
$start = strpos($order_total['title'], '(') + 1;
|
||||
$end = strrpos($order_total['title'], ')');
|
||||
|
||||
if ($start && $end) {
|
||||
$points = substr($order_total['title'], $start, $end - $start);
|
||||
}
|
||||
|
||||
$this->load->model('account/customer');
|
||||
|
||||
if ($this->model_account_customer->getRewardTotal($order_info['customer_id']) >= $points) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_reward SET customer_id = '" . (int)$order_info['customer_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', description = '" . $this->db->escape(sprintf($this->language->get('text_order_id'), (int)$order_info['order_id'])) . "', points = '" . (float)-$points . "', date_added = NOW()");
|
||||
} else {
|
||||
return $this->config->get('config_fraud_status_id');
|
||||
}
|
||||
}
|
||||
|
||||
public function unconfirm($order_id) {
|
||||
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_reward WHERE order_id = '" . (int)$order_id . "' AND points < 0");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
class ModelExtensionTotalShipping extends Model {
|
||||
public function getTotal($total) {
|
||||
if ($this->cart->hasShipping() && isset($this->session->data['shipping_method'])) {
|
||||
$total['totals'][] = array(
|
||||
'code' => 'shipping',
|
||||
'title' => $this->session->data['shipping_method']['title'],
|
||||
'value' => $this->session->data['shipping_method']['cost'],
|
||||
'sort_order' => $this->config->get('total_shipping_sort_order')
|
||||
);
|
||||
|
||||
if ($this->session->data['shipping_method']['tax_class_id']) {
|
||||
$tax_rates = $this->tax->getRates($this->session->data['shipping_method']['cost'], $this->session->data['shipping_method']['tax_class_id']);
|
||||
|
||||
foreach ($tax_rates as $tax_rate) {
|
||||
if (!isset($total['taxes'][$tax_rate['tax_rate_id']])) {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] = $tax_rate['amount'];
|
||||
} else {
|
||||
$total['taxes'][$tax_rate['tax_rate_id']] += $tax_rate['amount'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$total['total'] += $this->session->data['shipping_method']['cost'];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
class ModelExtensionTotalSubTotal extends Model {
|
||||
public function getTotal($total) {
|
||||
$this->load->language('extension/total/sub_total');
|
||||
|
||||
$sub_total = $this->cart->getSubTotal();
|
||||
|
||||
if (!empty($this->session->data['vouchers'])) {
|
||||
foreach ($this->session->data['vouchers'] as $voucher) {
|
||||
$sub_total += $voucher['amount'];
|
||||
}
|
||||
}
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'sub_total',
|
||||
'title' => $this->language->get('text_sub_total'),
|
||||
'value' => $sub_total,
|
||||
'sort_order' => $this->config->get('total_sub_total_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] += $sub_total;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
class ModelExtensionTotalTax extends Model {
|
||||
public function getTotal($total) {
|
||||
foreach ($total['taxes'] as $key => $value) {
|
||||
if ($value > 0) {
|
||||
$total['totals'][] = array(
|
||||
'code' => 'tax',
|
||||
'title' => $this->tax->getRateName($key),
|
||||
'value' => $value,
|
||||
'sort_order' => $this->config->get('total_tax_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] += $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
class ModelExtensionTotalTotal extends Model {
|
||||
public function getTotal($total) {
|
||||
$this->load->language('extension/total/total');
|
||||
|
||||
$total['totals'][] = array(
|
||||
'code' => 'total',
|
||||
'title' => $this->language->get('text_total'),
|
||||
'value' => max(0, $total['total']),
|
||||
'sort_order' => $this->config->get('total_total_sort_order')
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
class ModelExtensionTotalVoucher extends Model {
|
||||
public function addVoucher($order_id, $data) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($data['code']) . "', from_name = '" . $this->db->escape($data['from_name']) . "', from_email = '" . $this->db->escape($data['from_email']) . "', to_name = '" . $this->db->escape($data['to_name']) . "', to_email = '" . $this->db->escape($data['to_email']) . "', voucher_theme_id = '" . (int)$data['voucher_theme_id'] . "', message = '" . $this->db->escape($data['message']) . "', amount = '" . (float)$data['amount'] . "', status = '1', date_added = NOW()");
|
||||
|
||||
return $this->db->getLastId();
|
||||
}
|
||||
|
||||
public function disableVoucher($order_id) {
|
||||
$this->db->query("UPDATE " . DB_PREFIX . "voucher SET status = '0' WHERE order_id = '" . (int)$order_id . "'");
|
||||
}
|
||||
|
||||
public function getVoucher($code) {
|
||||
$status = true;
|
||||
|
||||
$voucher_query = $this->db->query("SELECT *, vtd.name AS theme FROM " . DB_PREFIX . "voucher v LEFT JOIN " . DB_PREFIX . "voucher_theme vt ON (v.voucher_theme_id = vt.voucher_theme_id) LEFT JOIN " . DB_PREFIX . "voucher_theme_description vtd ON (vt.voucher_theme_id = vtd.voucher_theme_id) WHERE v.code = '" . $this->db->escape($code) . "' AND vtd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND v.status = '1'");
|
||||
|
||||
if ($voucher_query->num_rows) {
|
||||
if ($voucher_query->row['order_id']) {
|
||||
$implode = array();
|
||||
|
||||
foreach ($this->config->get('config_complete_status') as $order_status_id) {
|
||||
$implode[] = "'" . (int)$order_status_id . "'";
|
||||
}
|
||||
|
||||
$order_query = $this->db->query("SELECT order_id FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$voucher_query->row['order_id'] . "' AND order_status_id IN(" . implode(",", $implode) . ")");
|
||||
|
||||
if (!$order_query->num_rows) {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
$order_voucher_query = $this->db->query("SELECT order_voucher_id FROM `" . DB_PREFIX . "order_voucher` WHERE order_id = '" . (int)$voucher_query->row['order_id'] . "' AND voucher_id = '" . (int)$voucher_query->row['voucher_id'] . "'");
|
||||
|
||||
if (!$order_voucher_query->num_rows) {
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
|
||||
$voucher_history_query = $this->db->query("SELECT SUM(amount) AS total FROM `" . DB_PREFIX . "voucher_history` vh WHERE vh.voucher_id = '" . (int)$voucher_query->row['voucher_id'] . "' GROUP BY vh.voucher_id");
|
||||
|
||||
if ($voucher_history_query->num_rows) {
|
||||
$amount = $voucher_query->row['amount'] + $voucher_history_query->row['total'];
|
||||
} else {
|
||||
$amount = $voucher_query->row['amount'];
|
||||
}
|
||||
|
||||
if ($amount <= 0) {
|
||||
$status = false;
|
||||
}
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
if ($status) {
|
||||
return array(
|
||||
'voucher_id' => $voucher_query->row['voucher_id'],
|
||||
'code' => $voucher_query->row['code'],
|
||||
'from_name' => $voucher_query->row['from_name'],
|
||||
'from_email' => $voucher_query->row['from_email'],
|
||||
'to_name' => $voucher_query->row['to_name'],
|
||||
'to_email' => $voucher_query->row['to_email'],
|
||||
'voucher_theme_id' => $voucher_query->row['voucher_theme_id'],
|
||||
'theme' => $voucher_query->row['theme'],
|
||||
'message' => $voucher_query->row['message'],
|
||||
'image' => $voucher_query->row['image'],
|
||||
'amount' => $amount,
|
||||
'status' => $voucher_query->row['status'],
|
||||
'date_added' => $voucher_query->row['date_added']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTotal($total) {
|
||||
if (isset($this->session->data['voucher'])) {
|
||||
$this->load->language('extension/total/voucher', 'voucher');
|
||||
|
||||
$voucher_info = $this->getVoucher($this->session->data['voucher']);
|
||||
|
||||
if ($voucher_info) {
|
||||
$amount = min($voucher_info['amount'], $total['total']);
|
||||
|
||||
if ($amount > 0) {
|
||||
$total['totals'][] = array(
|
||||
'code' => 'voucher',
|
||||
'title' => sprintf($this->language->get('voucher')->get('text_voucher'), $this->session->data['voucher']),
|
||||
'value' => -$amount,
|
||||
'sort_order' => $this->config->get('total_voucher_sort_order')
|
||||
);
|
||||
|
||||
$total['total'] -= $amount;
|
||||
} else {
|
||||
unset($this->session->data['voucher']);
|
||||
}
|
||||
} else {
|
||||
unset($this->session->data['voucher']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function confirm($order_info, $order_total) {
|
||||
$code = '';
|
||||
|
||||
$start = strpos($order_total['title'], '(') + 1;
|
||||
$end = strrpos($order_total['title'], ')');
|
||||
|
||||
if ($start && $end) {
|
||||
$code = substr($order_total['title'], $start, $end - $start);
|
||||
}
|
||||
|
||||
if ($code) {
|
||||
$voucher_info = $this->getVoucher($code);
|
||||
|
||||
if ($voucher_info) {
|
||||
$this->db->query("INSERT INTO `" . DB_PREFIX . "voucher_history` SET voucher_id = '" . (int)$voucher_info['voucher_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', amount = '" . (float)$order_total['value'] . "', date_added = NOW()");
|
||||
} else {
|
||||
return $this->config->get('config_fraud_status_id');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function unconfirm($order_id) {
|
||||
$this->db->query("DELETE FROM `" . DB_PREFIX . "voucher_history` WHERE order_id = '" . (int)$order_id . "'");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
class ModelExtensionTotalVoucherTheme extends Model {
|
||||
public function getVoucherTheme($voucher_theme_id) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "voucher_theme vt LEFT JOIN " . DB_PREFIX . "voucher_theme_description vtd ON (vt.voucher_theme_id = vtd.voucher_theme_id) WHERE vt.voucher_theme_id = '" . (int)$voucher_theme_id . "' AND vtd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getVoucherThemes($data = array()) {
|
||||
if ($data) {
|
||||
$sql = "SELECT * FROM " . DB_PREFIX . "voucher_theme vt LEFT JOIN " . DB_PREFIX . "voucher_theme_description vtd ON (vt.voucher_theme_id = vtd.voucher_theme_id) WHERE vtd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY vtd.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;
|
||||
} else {
|
||||
$voucher_theme_data = $this->cache->get('voucher_theme.' . (int)$this->config->get('config_language_id'));
|
||||
|
||||
if (!$voucher_theme_data) {
|
||||
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "voucher_theme vt LEFT JOIN " . DB_PREFIX . "voucher_theme_description vtd ON (vt.voucher_theme_id = vtd.voucher_theme_id) WHERE vtd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY vtd.name");
|
||||
|
||||
$voucher_theme_data = $query->rows;
|
||||
|
||||
$this->cache->set('voucher_theme.' . (int)$this->config->get('config_language_id'), $voucher_theme_data);
|
||||
}
|
||||
|
||||
return $voucher_theme_data;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user