* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 6594 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_CAN_LOAD_FILES_')) exit; class BlockViewed extends Module { private $_html = ''; private $_postErrors = array(); function __construct() { $this->name = 'blockviewed'; $this->tab = 'front_office_features'; $this->version = 0.9; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Viewed products block'); $this->description = $this->l('Adds a block displaying last-viewed products.'); } function install() { if (!parent::install() OR !$this->registerHook('leftColumn') OR !$this->registerHook('header') OR !Configuration::updateValue('PRODUCTS_VIEWED_NBR', 2)) return false; return true; } public function getContent() { $output = '

'.$this->displayName.'

'; if (Tools::isSubmit('submitBlockViewed')) { if (!$productNbr = Tools::getValue('productNbr') OR empty($productNbr)) $output .= '
'.$this->l('You must fill in the \'Products displayed\' field.').'
'; elseif ((int)($productNbr) == 0) $output .= '
'.$this->l('Invalid number.').'
'; else { Configuration::updateValue('PRODUCTS_VIEWED_NBR', (int)($productNbr)); $output .= '
'.$this->l('Confirmation').''.$this->l('Settings updated').'
'; } } return $output.$this->displayForm(); } public function displayForm() { $output = '
'.$this->l('Settings').'

'.$this->l('Define the number of products displayed in this block').'

'; return $output; } function hookRightColumn($params) { global $link, $smarty, $cookie; $id_product = (int)(Tools::getValue('id_product')); $productsViewed = (isset($params['cookie']->viewed) AND !empty($params['cookie']->viewed)) ? array_slice(explode(',', $params['cookie']->viewed), 0, Configuration::get('PRODUCTS_VIEWED_NBR')) : array(); if (sizeof($productsViewed)) { $defaultCover = Language::getIsoById($params['cookie']->id_lang).'-default'; $productIds = implode(',', $productsViewed); $productsImages = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT i.id_image, p.id_product, il.legend, p.active, pl.name, pl.description_short, pl.link_rewrite, cl.link_rewrite AS category_rewrite FROM '._DB_PREFIX_.'product p LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product) LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1) LEFT JOIN '._DB_PREFIX_.'image_lang il ON (il.id_image = i.id_image) LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default) WHERE p.id_product IN ('.$productIds.') AND pl.id_lang = '.(int)($params['cookie']->id_lang).' AND cl.id_lang = '.(int)($params['cookie']->id_lang) ); $productsImagesArray = array(); foreach ($productsImages AS $pi) $productsImagesArray[$pi['id_product']] = $pi; $productsViewedObj = array(); foreach ($productsViewed AS $productViewed) { $obj = (object)'Product'; if (!isset($productsImagesArray[$productViewed]) || (!$obj->active = $productsImagesArray[$productViewed]['active'])) continue; else { $obj->id = (int)($productsImagesArray[$productViewed]['id_product']); $obj->cover = (int)($productsImagesArray[$productViewed]['id_product']).'-'.(int)($productsImagesArray[$productViewed]['id_image']); $obj->legend = $productsImagesArray[$productViewed]['legend']; $obj->name = $productsImagesArray[$productViewed]['name']; $obj->description_short = $productsImagesArray[$productViewed]['description_short']; $obj->link_rewrite = $productsImagesArray[$productViewed]['link_rewrite']; $obj->category_rewrite = $productsImagesArray[$productViewed]['category_rewrite']; if (!isset($obj->cover) || !$productsImagesArray[$productViewed]['id_image']) { $obj->cover = $defaultCover; $obj->legend = ''; } $productsViewedObj[] = $obj; } } if ($id_product AND !in_array($id_product, $productsViewed)) { // Check if the user to the right of access to this product $result = Db::getInstance()->getRow(' SELECT COUNT(cug.`id_customer`) AS total FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_product` = p.`id_product`) LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = cp.`id_category`) LEFT JOIN `'._DB_PREFIX_.'customer_group` cug ON (cug.`id_group` = cg.`id_group`) WHERE p.`id_product` = '.(int)($id_product).' '.($cookie->id_customer ? 'AND cug.`id_customer` = '.(int)($cookie->id_customer) : 'AND cg.`id_group` = 1') ); if ($result['total']) array_unshift($productsViewed, $id_product); } $viewed = ''; foreach ($productsViewed AS $id_product_viewed) $viewed .= (int)($id_product_viewed).','; $params['cookie']->viewed = rtrim($viewed, ','); if (!sizeof($productsViewedObj)) return ; $smarty->assign(array( 'productsViewedObj' => $productsViewedObj, 'mediumSize' => Image::getSize('medium'))); return $this->display(__FILE__, 'blockviewed.tpl'); } elseif ($id_product) $params['cookie']->viewed = (int)($id_product); return ; } function hookLeftColumn($params) { return $this->hookRightColumn($params); } function hookHeader($params) { Tools::addCSS(($this->_path).'blockviewed.css', 'all'); } }