name = 'criteo_bbb'; $this->tab = 'advertising_marketing'; $this->version = '2.6'; $this->need_instance = 0; $this->author = 'Web In Color'; parent::__construct(); $this->displayName = $this->l('Criteo'); $this->description = $this->l('Criteo product export and tag display.'); /* Backward compatibility */ if (version_compare(_PS_VERSION_, '1.5', '<')) require(_PS_MODULE_DIR_.$this->name.'/backward_compatibility/backward.php'); } public function install() { return (parent::install());/* && $this->registerHook('header') && $this->registerHook('productfooter') && $this->registerHook('home') && $this->registerHook('shoppingCartExtra') && $this->registerHook('footer') && $this->registerHook('orderConfirmation'));*/ } private function postProcess() { if (Tools::isSubmit('submitCriteo')) { if (!Tools::getValue('id_criteo_account')) return $this->displayError($this->l('All fields required')); Configuration::updateValue('WIC_CRITEO_ID_ACCOUNT', pSQL(Tools::getValue('id_criteo_account'))); Configuration::updateValue('WIC_CRITEO_SITE_TYPE', pSQL(Tools::getValue('site_type_criteo'))); Configuration::updateValue('WIC_CRITEO_CATEGORY', (Tools::getValue('category') ? implode(',', Tools::getValue('category')) : '')); Configuration::updateValue('WIC_CRITEO_DISPLAY_CAT', Tools::getValue('display_category_criteo')); Configuration::updateValue('WIC_CRITEO_URL_MODE', pSQL(Tools::getValue('url_criteo_mode'))); return $this->displayConfirmation($this->l('Settings updated successfully')); } return false; } public function getContent() { if (version_compare(_PS_VERSION_, '1.4', '>=')) $this->_html = ''; else $this->_html = ''; //$this->_html .= '
'; if (version_compare(_PS_VERSION_, '1.5', '<=')) $this->_html .= ''; $this->_html .= $this->postProcess(); $this->_html .= ' '; //$this->_html .= ''; return $this->_html; } /* Build a categories tree * * @param array $indexed_categories Array with categories where product is indexed (in order to check checkbox) * @param array $categories Categories to list * @param array $current Current category * @param integer $id_category Current category id */ private function recurseCategoryForInclude($indexed_categories, $categories, $current, $id_category = 1, $id_category_default = null, $has_suite = array(), $done = array()) { static $irow; if (!isset($done[$current['infos']['id_parent']])) $done[$current['infos']['id_parent']] = 0; $done[$current['infos']['id_parent']] += 1; $todo = count($categories[$current['infos']['id_parent']]); $done_c = $done[$current['infos']['id_parent']]; $level = $current['infos']['level_depth'] + 1; $this->_html .= '';var_dump($params['products'], $id_products);echo '';die(); $products_sales = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_product`, `id_sale` FROM `'._DB_PREFIX_.'product_ps_cache` WHERE `id_product` IN ('.implode(', ', $id_products).') AND `id_sale` != 0 ') as $row) { $products_sales[(int) $row['id_product']] = (int) $row['id_sale']; } if(count($products_sales) == 0) { return; } $product_result = array(); foreach ($params['products'] as $product) { if(isset($products_sales[(int) $product['id_product']])) { if(!isset($product_result[$products_sales[(int) $product['id_product']]])) { $product_result[$products_sales[(int) $product['id_product']]] = 0; } $product_obj = new Product((int)$product['id_product']); $price = $product_obj->getPrice(true, ($product['id_product_attribute'] ? $product['id_product_attribute'] : (int)Product::getDefaultAttribute($product_obj->id)), 2); $product_result[$products_sales[(int) $product['id_product']]] += $price * (int) $product['quantity']; unset($product_obj); } } foreach($product_result as $id_product => $value) { $strproducts .= '{ id: '.$id_product.', price: '.$value.', quantity: 1 },'; } $strproducts = Tools::substr($strproducts, 0, -1); if ($this->context->customer && $this->context->customer->id) { $email = $this->context->customer->email; } else { $email = ''; } $this->context->smarty->assign(array( 'wic_criteo_account' => Configuration::get('WIC_CRITEO_ID_ACCOUNT'), 'wic_criteo_site_type' => Configuration::get('WIC_CRITEO_SITE_TYPE'), 'wic_product_list' => rtrim($strproducts, ','), 'wic_action' => 'shoppingCart', 'id_customer' => $this->context->customer? $this->context->customer->id: 0, 'customer_email' => ($email) ? md5($email) : '', )); return $this->fetchTemplate('/views/templates/hooks/', 'criteo'); } public function hookNewOrder($params) { return $this->hookOrderConfirmation($params); } public function hookOrderConfirmation($params) { global $site_version; if(!isset($site_version) || $site_version != 'com') { return; } if (!Configuration::get('WIC_CRITEO_ID_ACCOUNT') || !Configuration::get('WIC_CRITEO_SITE_TYPE')) { return false; } if(isset($params['objOrder'])) { $cart = new Cart((int)$params['objOrder']->id_cart); } elseif(isset($params['cart']) && Validate::isLoadedObject($params['cart'])) { $cart = $params['cart']; } else { return; } $products = $cart->getProducts(); $strproducts = ''; $id_products = array(); foreach ($products as $product) { $id_products[] = (int) $product['id_product']; } $products_sales = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_product`, `id_sale` FROM `'._DB_PREFIX_.'product_ps_cache` WHERE `id_product` IN ('.implode(', ', $id_products).') AND `id_sale` != 0 ') as $row) { $products_sales[(int) $row['id_product']] = (int) $row['id_sale']; } if(count($products_sales) == 0) { return; } $product_result = array(); foreach ($products as $product) { if(isset($products_sales[$product['id_product']])) { if(!isset($product_result[$products_sales[$product['id_product']]])) { $product_result[$products_sales[$product['id_product']]] = 0; } $product_obj = new Product((int)$product['id_product']); $price = $product_obj->getPrice(true, ($product['id_product_attribute'] ? $product['id_product_attribute'] : (int)Product::getDefaultAttribute($product_obj->id)), 2); $product_result[$products_sales[$product['id_product']]] += $price * (int) $product['quantity']; unset($product_obj); } } foreach($product_result as $id_product => $value) { $strproducts .= '{ id: '.$id_product.', price: '.$value.', quantity: 1 },'; } $strproducts = Tools::substr($strproducts, 0, -1); /*$customer = new Customer($this->context->customer->id);*/ $new = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT COUNT(`id_order`) FROM `'._DB_PREFIX_.'orders` o WHERE o.valid = 1 AND o.`id_customer` = '.(int) ($this->context->customer? $this->context->customer->id: 0)); $this->context->smarty->assign(array( 'wic_criteo_account' => Configuration::get('WIC_CRITEO_ID_ACCOUNT'), 'wic_criteo_site_type' => Configuration::get('WIC_CRITEO_SITE_TYPE'), 'wic_product_list' => rtrim($strproducts, ','), 'wic_action' => 'orderConfirmation', 'wic_id_order' => (int) $cart->id, 'id_customer' => $this->context->customer? $this->context->customer->id: 0, 'old_customer' => (($new > 1) ? '1' : '0'), 'customer_email' => ($this->context->customer) ? md5($this->context->customer->email) : '', )); return $this->fetchTemplate('/views/templates/hooks/', 'criteo'); } public function hookHeader($params) { global $site_version, $page_name; // if($page_name != 'order' && $page_name != 'order-confirmation' && $page_name != 'submit') { // return; // } if(!isset($site_version) || $site_version != 'com') { return; } if (!Configuration::get('WIC_CRITEO_ID_ACCOUNT') || !Configuration::get('WIC_CRITEO_SITE_TYPE')) return false; return ''; } public function hookHome($params) { global $site_version; if(!isset($site_version) || $site_version != 'com') { return; } if (!Configuration::get('WIC_CRITEO_ID_ACCOUNT') || !Configuration::get('WIC_CRITEO_SITE_TYPE')) return false; if ($this->context->customer && $this->context->customer->id) { $email = $this->context->customer->email; } else { $email = ''; } $this->context->smarty->assign(array( 'wic_criteo_account' => Configuration::get('WIC_CRITEO_ID_ACCOUNT'), 'wic_criteo_site_type' => Configuration::get('WIC_CRITEO_SITE_TYPE'), 'wic_action' => 'home', 'id_customer' => $this->context->customer? $this->context->customer->id: 0, 'customer_email' => ($email) ? md5($email) : '', )); return $this->fetchTemplate('/views/templates/hooks/', 'criteo'); } public function hookFooter($params) { global $site_version; if(!isset($site_version) || $site_version != 'com') { return; } if (!Configuration::get('WIC_CRITEO_ID_ACCOUNT') || !Configuration::get('WIC_CRITEO_SITE_TYPE')) { return false; } if (Tools::getValue('id_category')) { $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT cp.`id_product` FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = '.(int)Tools::getValue('id_category').' AND p.`active` = 1 ORDER BY cp.`position` LIMIT 3 '); if ($this->context->customer && $this->context->customer->id) { $email = $this->context->customer->email; } else { $email = ''; } $this->context->smarty->assign(array( 'wic_criteo_account' => Configuration::get('WIC_CRITEO_ID_ACCOUNT'), 'wic_criteo_site_type' => Configuration::get('WIC_CRITEO_SITE_TYPE'), 'wic_action' => 'productList', 'id_customer' => $this->context->customer? $this->context->customer->id: 0, 'customer_email' => ($email) ? md5($email) : '', )); if (isset($products)) { $products_data = array(); foreach ($products as $product) { $products_data[] = (int)$product['id_product']; } $this->context->smarty->assign(array('products_data' => implode(',', $products_data))); } return $this->fetchTemplate('/views/templates/hooks/', 'criteo'); } elseif (Tools::getValue('search_query')) { if ($this->context->customer && $this->context->customer->id) { $email = $this->context->customer->email; } else { $email = ''; } $this->context->smarty->assign(array( 'wic_criteo_account' => Configuration::get('WIC_CRITEO_ID_ACCOUNT'), 'wic_criteo_site_type' => Configuration::get('WIC_CRITEO_SITE_TYPE'), 'wic_action' => 'search', 'id_customer' => $this->context->customer? $this->context->customer->id: 0, 'customer_email' => ($email) ? md5($email) : '', 'searchQuery' => Tools::getValue('search_query'), )); return $this->fetchTemplate('/views/templates/hooks/', 'criteo'); } else { return false; } } }