aboutsummaryrefslogtreecommitdiffstats
path: root/public/catalog/model/extension/advertise/google.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/catalog/model/extension/advertise/google.php')
-rw-r--r--public/catalog/model/extension/advertise/google.php141
1 files changed, 141 insertions, 0 deletions
diff --git a/public/catalog/model/extension/advertise/google.php b/public/catalog/model/extension/advertise/google.php
new file mode 100644
index 0000000..95e3aab
--- /dev/null
+++ b/public/catalog/model/extension/advertise/google.php
@@ -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 ' &gt; ') 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;
+ }
+} \ No newline at end of file