* @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').'](../img/admin/ok.gif)
'.$this->l('Settings updated').'
';
}
}
return $output.$this->displayForm();
}
public function displayForm()
{
$output = '
';
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');
}
}