• Модуль: 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;
}