%PDF- %PDF-
| Direktori : /proc/self/root/home/bitrix/www/bitrix/components/bitrix/catalog.product.subscribe/ |
| Current File : //proc/self/root/home/bitrix/www/bitrix/components/bitrix/catalog.product.subscribe/class.php |
<?php
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\SystemException;
use Bitrix\Main\Loader;
use Bitrix\Catalog\SubscribeTable;
use Bitrix\Catalog\Product\SubscribeManager;
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
/**
* Class ProductSubscribe
*
* It provides an interface to work on a subscription product.
*/
class ProductSubscribe extends \CBitrixComponent
{
/**
* Errors list.
* @var string[]
*/
protected $errors = array();
/**
* Event called from includeComponent before component execution.
*/
public function onIncludeComponentLang()
{
Loc::loadMessages(__FILE__);
}
/**
* Event called from includeComponent before component execution.
* Takes component parameters as argument and should return it formatted as needed.
*
* @param $params
* @return mixed
*/
public function onPrepareComponentParams($params)
{
$params['PRODUCT_ID'] = isset($params['PRODUCT_ID']) ? (int)$params['PRODUCT_ID'] : 0;
$params['USE_CAPTCHA'] = isset($params['USE_CAPTCHA']) ? (string)$params['USE_CAPTCHA'] : 'N';
$params['BUTTON_ID'] = isset($params['BUTTON_ID']) ? (string)$params['BUTTON_ID'] : '';
$params['BUTTON_CLASS'] = isset($params['BUTTON_CLASS']) ? (string)$params['BUTTON_CLASS'] : '';
$params['DEFAULT_DISPLAY'] = isset($params['DEFAULT_DISPLAY']) ? (bool)$params['DEFAULT_DISPLAY'] : true;
$params['MESS_BTN_SUBSCRIBE'] = isset($params['MESS_BTN_SUBSCRIBE']) ? (string)$params['MESS_BTN_SUBSCRIBE'] : '';
if(!$params['PRODUCT_ID'])
$this->errors[] = Loc::getMessage('CPS_REQUIRED_PARAMETER', array('#PARAM#' => 'PRODUCT_ID'));
if(!$params['BUTTON_ID'])
$this->errors[] = Loc::getMessage('CPS_REQUIRED_PARAMETER', array('#PARAM#' => 'BUTTON_ID'));
return $params;
}
/**
* Check Required Modules
* @throws Exception
*/
protected function checkModules()
{
if (!Loader::includeModule('catalog'))
throw new SystemException(Loc::getMessage('CPS_MODULE_NOT_INSTALLED', array('#NAME#' => 'catalog')));
}
/**
* Prepare data to render.
* @throws SystemException
*/
protected function formatResult()
{
if($this->errors)
throw new SystemException(current($this->errors));
$this->arResult['PRODUCT_ID'] = $this->arParams['PRODUCT_ID'];
$this->arResult['USE_CAPTCHA'] = $this->arParams['USE_CAPTCHA'];
$this->arResult['BUTTON_CLASS'] = $this->arParams['BUTTON_CLASS'];
$this->arResult['BUTTON_ID'] = $this->arParams['BUTTON_ID'];
$this->arResult['DEFAULT_DISPLAY'] = $this->arParams['DEFAULT_DISPLAY'];
if ($this->arResult['USE_CAPTCHA'] == 'Y')
{
$_SESSION['SUBSCRIBE_PRODUCT']['useCaptcha'] = 'Y';
}
else
{
$_SESSION['SUBSCRIBE_PRODUCT']['useCaptcha'] = 'N';
}
$this->arResult['ALREADY_SUBSCRIBED'] = false;
if (!empty($_SESSION['SUBSCRIBE_PRODUCT']['LIST_PRODUCT_ID']))
{
if (array_key_exists($this->arParams['PRODUCT_ID'], $_SESSION['SUBSCRIBE_PRODUCT']['LIST_PRODUCT_ID']))
{
$this->arResult['ALREADY_SUBSCRIBED'] = true;
}
else
{
$this->arResult['ALREADY_SUBSCRIBED'] = $this->getStatusSubscribe();
}
}
else
{
$this->arResult['ALREADY_SUBSCRIBED'] = $this->getStatusSubscribe();
}
}
protected function getStatusSubscribe()
{
global $USER, $DB;
$userId = false;
if (is_object($USER) && $USER->isAuthorized())
$userId = $USER->getId();
$listItemId = array();
$offers = CCatalogSKU::getOffersList($this->arParams['PRODUCT_ID']);
if (is_array($offers) && !empty($offers[$this->arParams['PRODUCT_ID']]))
$listItemId = array_keys($offers[$this->arParams['PRODUCT_ID']]);
$listItemId[] = $this->arParams['PRODUCT_ID'];
$filter = array(
'ITEM_ID' => $listItemId,
'=SITE_ID' => SITE_ID,
array(
'LOGIC' => 'OR',
array('=DATE_TO' => false),
array('>DATE_TO' => date($DB->dateFormatToPHP(\CLang::getDateFormat('FULL')), time()))
)
);
if ($userId)
{
$filter['USER_ID'] = $userId;
}
else
{
if (!empty($_SESSION['SUBSCRIBE_PRODUCT']['TOKEN']) &&
!empty($_SESSION['SUBSCRIBE_PRODUCT']['USER_CONTACT']))
{
$filter['=Bitrix\Catalog\SubscribeAccessTable:SUBSCRIBE.TOKEN'] =
$_SESSION['SUBSCRIBE_PRODUCT']['TOKEN'];
$filter['=Bitrix\Catalog\SubscribeAccessTable:SUBSCRIBE.USER_CONTACT'] =
$_SESSION['SUBSCRIBE_PRODUCT']['USER_CONTACT'];
}
else
{
return false;
}
}
$queryObject = SubscribeTable::getList(array('select' => array('ITEM_ID'), 'filter' => $filter));
$subscribeManager = new SubscribeManager;
$listRealItemId = array();
while ($subscribe = $queryObject->fetch())
{
$subscribeManager->setSessionOfSibscribedProducts($subscribe['ITEM_ID']);
$listRealItemId[] = $subscribe['ITEM_ID'];
}
if (in_array($this->arParams['PRODUCT_ID'], $listRealItemId))
{
return true;
}
else
{
return false;
}
}
/**
* Function calls __includeComponent in order to execute the component.
*/
public function executeComponent()
{
try
{
$this->checkModules();
$this->formatResult();
$this->includeComponentTemplate();
}
catch (SystemException $e)
{
ShowError($e->getMessage());
}
}
}