- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product/subscribemanager.php
- Класс: BitrixCatalogProductSubscribeManager
- Вызов: SubscribeManager::runSubscriberIdentification
public function runSubscriberIdentification(array $subscriberData, $sendLetter = true)
{
$this->checkRequiredInputParams($subscriberData,
array('contactType', 'userContact', 'siteId'));
if(!$this->errorCollection->isEmpty())
{
return false;
}
$currentContactType = $this->contactTypes[$subscriberData['contactType']];
if(!preg_match($currentContactType['RULE'], $subscriberData['userContact']))
{
$this->errorCollection->add(array(new Error(
Loc::getMessage('ERROR_SUBSCRIBE_ENTRY_CONFIRMATION_CODE'), self::ERROR_SUBSCRIBER_IDENTIFICATION)));
return false;
}
$token = Random::getString(6);
try
{
SubscribeAccessTable::clearOldRows();
$accessRow = SubscribeAccessTable::getRow(
array(
'select' => array('ID'),
'filter' => array('=USER_CONTACT' => $subscriberData['userContact'])
)
);
if($accessRow['ID'])
{
$result = SubscribeAccessTable::update($accessRow['ID'], array(
'DATE_FROM' => new DateTime(),
'TOKEN' => $token
));
}
else
{
$result = SubscribeAccessTable::add(array(
'DATE_FROM' => new DateTime(),
'USER_CONTACT' => $subscriberData['userContact'],
'TOKEN' => $token
));
}
if(!$result->isSuccess())
{
$this->errorCollection->add(array(new Error(
Loc::getMessage('ERROR_SUBSCRIBE_ENTRY_CONFIRMATION_CODE'), self::ERROR_SUBSCRIBER_IDENTIFICATION)));
}
}
catch(Exception $errorObject)
{
$this->errorCollection->add(array(new Error($errorObject->getMessage())));
}
if(!$this->errorCollection->isEmpty())
{
return false;
}
if(!$sendLetter)
{
return true;
}
/* Preparation of data for the mail template */
$dataSendToNotice = array();
$listSubscribesUrl = CHTTP::URN2URI('/personal/subscribe/');
$dataSendToNotice[$subscriberData['contactType']][$subscriberData['userContact']][] = array(
'EVENT_NAME' => 'CATALOG_PRODUCT_SUBSCRIBE_LIST_CONFIRM',
'EMAIL_TO' => $subscriberData['userContact'],
'SITE_ID' => $subscriberData['siteId'],
'USER_NAME' => Loc::getMessage('EMAIL_TEMPLATE_USER_NAME'),
'TOKEN' => $token,
'LIST_SUBSCRIBES' => $listSubscribesUrl,
'TOKEN_URL' => CHTTP::urlAddParams($listSubscribesUrl, array('accessCodeVerification' => 'Y',
'userContact' => $subscriberData['userContact'], 'subscribeToken' => $token)),
'URL_PARAMETERS' => CHTTP::urlAddParams('', array('accessCodeVerification' => 'Y',
'userContact' => $subscriberData['userContact'], 'subscribeToken' => $token))
);
foreach($this->contactTypes as $typeId => $typeData)
{
$eventKey = EventManager::getInstance()
->addEventHandler('catalog', 'OnSubscribeSubmit', $typeData['HANDLER']);
$event = new Event('catalog', 'OnSubscribeSubmit', $dataSendToNotice[$typeId]);
$event->send();
EventManager::getInstance()->removeEventHandler('catalog', 'OnSubscribeSubmit', $eventKey);
}
return true;
}