Current File : //var/www/vinorea/modules/tvcmsproductcompare/tvcmsproductcompare.php |
<?php
/**
* 2007-2025 PrestaShop.
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2025 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_')) {
exit;
}
class TvcmsProductCompare extends Module
{
public function __construct()
{
$this->name = 'tvcmsproductcompare';
$this->tab = 'front_office_features';
$this->version = '4.0.0';
$this->author = 'ThemeVolty';
$this->need_instance = 0;
/*
* Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6)
*/
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('ThemeVolty - Product Compare');
$this->description = $this->l('Compare Product in Front Side');
$this->ps_versions_compliancy = ['min' => '1.7', 'max' => _PS_VERSION_];
$this->module_key = '';
$this->confirmUninstall = $this->l('Warning: all the data saved in your database will be deleted.' .
' Are you sure you want uninstall this module?');
}
public function install()
{
$context = Context::getContext();
if (!$context->cookie->__isset('tvcmscompare_product_1')) {
$context->cookie->__set('tvcmscompare_product_1', '');
}
if (!$context->cookie->__isset('tvcmscompare_product_2')) {
$context->cookie->__set('tvcmscompare_product_2', '');
}
if (!$context->cookie->__isset('tvcmscompare_product_3')) {
$context->cookie->__set('tvcmscompare_product_3', '');
}
if (!$context->cookie->__isset('tvcmscompare_product_4')) {
$context->cookie->__set('tvcmscompare_product_4', '');
}
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayNavProductCompareBlock')
&& $this->registerHook('displayCompareBtnSticky')
&& $this->registerHook('displayProductCompareProductPage')
&& $this->registerHook('displayProductComparesticky')
&& $this->registerHook('displayNavProductCompareMobileBlock')
&& $this->registerHook('displayProductCompareProductList');
}
public function uninstall()
{
$context = Context::getContext();
if ($context->cookie->__isset('tvcmscompare_product_1')) {
$context->cookie->__unset('tvcmscompare_product_1', '');
}
if ($context->cookie->__isset('tvcmscompare_product_2')) {
$context->cookie->__unset('tvcmscompare_product_2', '');
}
if ($context->cookie->__isset('tvcmscompare_product_3')) {
$context->cookie->__unset('tvcmscompare_product_3', '');
}
if ($context->cookie->__isset('tvcmscompare_product_4')) {
$context->cookie->__unset('tvcmscompare_product_4', '');
}
return parent::uninstall();
}
public function hookdisplayHeader($params)
{
$this->context->controller->addJS($this->_path . 'views/js/ajax-product-compare.js');
$this->context->controller->addCss($this->_path . 'views/css/front.css');
}
public function hookdisplayNavProductCompareMobileBlock($params)
{
$this->countCompareProductCookie();
return $this->display(__FILE__, 'views/templates/front/display_mobile_top.tpl');
}
public function hookdisplayCompareBtnSticky($params)
{
$this->countCompareProductCookie();
return $this->display(__FILE__, 'views/templates/front/display_sticky.tpl');
}
// show in Product Details pages
public function hookdisplayProductAdditionalInfo($params)
{
$this->getAllCompareProductAssignInSmarty($params);
return $this->display(__FILE__, 'views/templates/front/display_product_details.tpl');
}
public function hookdisplayProductCompareProductPage($params)
{
return $this->hookdisplayProductAdditionalInfo($params);
}
public function hookdisplayNavProductCompareBlock($params)
{
$this->countCompareProductCookie();
return $this->display(__FILE__, 'views/templates/front/display_nav.tpl');
}
public function hookdisplayProductComparesticky($params)
{
$this->countCompareProductCookie();
return $this->display(__FILE__, 'views/templates/front/display_right_sticky.tpl');
}
public function hookDisplayProductCompareProductList($params)
{
$this->getAllCompareProductAssignInSmarty($params);
return $this->display(__FILE__, 'views/templates/front/display_compare_product.tpl');
}
public function getAllCompareProductAssignInSmarty($params)
{
$context = Context::getContext();
$this->smarty->assign('prod_1', $context->cookie->__get('tvcmscompare_product_1'));
$this->smarty->assign('prod_2', $context->cookie->__get('tvcmscompare_product_2'));
$this->smarty->assign('prod_3', $context->cookie->__get('tvcmscompare_product_3'));
$this->smarty->assign('prod_4', $context->cookie->__get('tvcmscompare_product_4'));
$this->smarty->assign('product', $params['product']);
}
public function countCompareProductCookie()
{
$context = Context::getContext();
$tmp = 0;
if ('' != $context->cookie->__get('tvcmscompare_product_1')) {
++$tmp;
}
if ('' != $context->cookie->__get('tvcmscompare_product_2')) {
++$tmp;
}
if ('' != $context->cookie->__get('tvcmscompare_product_3')) {
++$tmp;
}
if ('' != $context->cookie->__get('tvcmscompare_product_4')) {
++$tmp;
}
$this->smarty->assign('tot_comp_prod', $tmp);
}
public function getAllCompareProduct()
{
$context = Context::getContext();
$cookie = Context::getContext()->cookie;
$id_lang = $cookie->id_lang;
$id_currency = $cookie->id_currency;
$id_group = $context->customer->id_default_group;
$id_shop = $context->shop->id;
$id_country = Configuration::get('PS_COUNTRY_DEFAULT');
$prod_info_1 = [];
$prod_info_2 = [];
$prod_info_3 = [];
$prod_info_4 = [];
$prod_feature = [];
if ('' != $context->cookie->__get('tvcmscompare_product_1')) {
$prod_info_1['prod'] = new Product($context->cookie->__get('tvcmscompare_product_1'));
$prod_info_1['all_img'] = Image::getImages($id_lang, $context->cookie->__get('tvcmscompare_product_1'));
$prod_info_1['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_1')
);
$prod_info_1['prod_price'] = Tools::displayPrice($prod_info_1['prod']->price);
$prod_info_1['special_price'] = SpecificPrice::getSpecificPrice(
$context->cookie->__get('tvcmscompare_product_1'),
$id_shop,
$id_currency,
$id_country,
$id_group,
1,
null,
0,
0,
1
);
if ($prod_info_1['special_price']) {
if ('percentage' == $prod_info_1['special_price']['reduction_type']) {
$prod_info_1['special_price']['reduction'] = $prod_info_1['special_price']['reduction'] * 100;
$discount = $prod_info_1['prod']->price * $prod_info_1['special_price']['reduction'] / 100;
$discount_after_price = $prod_info_1['prod']->price - $discount;
$prod_info_1['special_price']['reduction'] = '-' . $prod_info_1['special_price']['reduction'] . '%';
$prod_info_1['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
} else {
// $prod_info_1['special_price']['reduction'];
$discount_after_price = $prod_info_1['prod']->price - $prod_info_1['special_price']['reduction'];
$prod_info_1['special_price']['reduction'] = Tools::displayPrice(
$prod_info_1['special_price']['reduction']
);
$prod_info_1['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
}
}
foreach ($prod_info_1['prod_attr'] as $feature) {
if (!in_array($feature['name'], $prod_feature)) {
$prod_feature[] = $feature['name'];
}
}
}
if ('' != $context->cookie->__get('tvcmscompare_product_2')) {
$prod_info_2['prod'] = new Product($context->cookie->__get('tvcmscompare_product_2'));
$prod_info_2['all_img'] = Image::getImages($id_lang, $context->cookie->__get('tvcmscompare_product_2'));
$prod_info_2['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_2')
);
$prod_info_2['prod_price'] = Tools::displayPrice($prod_info_2['prod']->price);
$prod_info_2['special_price'] = SpecificPrice::getSpecificPrice(
$context->cookie->__get('tvcmscompare_product_2'),
$id_shop,
$id_currency,
$id_country,
$id_group,
1,
null,
0,
0,
1
);
if ($prod_info_2['special_price']) {
if ('percentage' == $prod_info_2['special_price']['reduction_type']) {
$prod_info_2['special_price']['reduction'] = $prod_info_2['special_price']['reduction'] * 100;
$discount = $prod_info_2['prod']->price * $prod_info_2['special_price']['reduction'] / 100;
$discount_after_price = $prod_info_2['prod']->price - $discount;
$prod_info_2['special_price']['reduction'] = '-' . $prod_info_2['special_price']['reduction'] . '%';
$prod_info_2['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
} else {
// $prod_info_2['special_price']['reduction'];
$discount_after_price = $prod_info_2['prod']->price - $prod_info_2['special_price']['reduction'];
$prod_info_2['special_price']['reduction'] = Tools::displayPrice(
$prod_info_2['special_price']['reduction']
);
$prod_info_2['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
}
}
foreach ($prod_info_2['prod_attr'] as $feature) {
if (!in_array($feature['name'], $prod_feature)) {
$prod_feature[] = $feature['name'];
}
}
}
if ('' != $context->cookie->__get('tvcmscompare_product_3')) {
$prod_info_3['prod'] = new Product($context->cookie->__get('tvcmscompare_product_3'));
$prod_info_3['all_img'] = Image::getImages($id_lang, $context->cookie->__get('tvcmscompare_product_3'));
$prod_info_3['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_3')
);
$prod_info_3['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_3')
);
$prod_info_3['prod_price'] = Tools::displayPrice($prod_info_3['prod']->price);
$prod_info_3['special_price'] = SpecificPrice::getSpecificPrice(
$context->cookie->__get('tvcmscompare_product_3'),
$id_shop,
$id_currency,
$id_country,
$id_group,
1,
null,
0,
0,
1
);
if ($prod_info_3['special_price']) {
if ('percentage' == $prod_info_3['special_price']['reduction_type']) {
$prod_info_3['special_price']['reduction'] = $prod_info_3['special_price']['reduction'] * 100;
$discount = $prod_info_3['prod']->price * $prod_info_3['special_price']['reduction'] / 100;
$discount_after_price = $prod_info_3['prod']->price - $discount;
$prod_info_3['special_price']['reduction'] = '-' . $prod_info_3['special_price']['reduction'] . '%';
$prod_info_3['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
} else {
// $prod_info_3['special_price']['reduction'];
$discount_after_price = $prod_info_3['prod']->price - $prod_info_3['special_price']['reduction'];
$prod_info_3['special_price']['reduction'] = Tools::displayPrice(
$prod_info_3['special_price']['reduction']
);
$prod_info_3['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
}
}
foreach ($prod_info_3['prod_attr'] as $feature) {
if (!in_array($feature['name'], $prod_feature)) {
$prod_feature[] = $feature['name'];
}
}
}
if ('' != $context->cookie->__get('tvcmscompare_product_4')) {
$prod_info_4['prod'] = new Product($context->cookie->__get('tvcmscompare_product_4'));
$prod_info_4['all_img'] = Image::getImages($id_lang, $context->cookie->__get('tvcmscompare_product_4'));
$prod_info_4['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_4')
);
$prod_info_4['prod_attr'] = Product::getFrontFeaturesStatic(
$id_lang,
$context->cookie->__get('tvcmscompare_product_4')
);
$prod_info_4['prod_price'] = Tools::displayPrice($prod_info_4['prod']->price);
$prod_info_4['special_price'] = SpecificPrice::getSpecificPrice(
$context->cookie->__get('tvcmscompare_product_4'),
$id_shop,
$id_currency,
$id_country,
$id_group,
1,
null,
0,
0,
1
);
if ($prod_info_4['special_price']) {
if ('percentage' == $prod_info_4['special_price']['reduction_type']) {
$prod_info_4['special_price']['reduction'] = $prod_info_4['special_price']['reduction'] * 100;
$discount = $prod_info_4['prod']->price * $prod_info_4['special_price']['reduction'] / 100;
$discount_after_price = $prod_info_4['prod']->price - $discount;
$prod_info_4['special_price']['reduction'] = '-' . $prod_info_4['special_price']['reduction'] . '%';
$prod_info_4['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
} else {
// $prod_info_4['special_price']['reduction'];
$discount_after_price = $prod_info_4['prod']->price - $prod_info_4['special_price']['reduction'];
$prod_info_4['special_price']['reduction'] = Tools::displayPrice(
$prod_info_4['special_price']['reduction']
);
$prod_info_4['special_price']['discount_after_price'] = Tools::displayPrice($discount_after_price);
}
}
foreach ($prod_info_4['prod_attr'] as $feature) {
if (!in_array($feature['name'], $prod_feature)) {
$prod_feature[] = $feature['name'];
}
}
}
$prod_list = [];
$prod_list['id_lang'] = $id_lang;
$prod_list['id_currency'] = $id_currency;
$prod_list['prod_1'] = $prod_info_1;
$prod_list['prod_2'] = $prod_info_2;
$prod_list['prod_3'] = $prod_info_3;
$prod_list['prod_4'] = $prod_info_4;
$prod_list['all_feature'] = $prod_feature;
return $prod_list;
}
}