• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/postingmanager.php
  • Класс: BitrixSenderPostingManager
  • Вызов: PostingManager::click
static function click($recipientId, $url)
{
	$postingContactPrimary = ['ID' => $recipientId];
	$row = PostingRecipientTable::getRowById($postingContactPrimary);
	if (!$row)
	{
		return;
	}

	if ($row['ID'])
	{
		$read = PostingReadTable::getRowById(
			[
				'POSTING_ID'   => $row['POSTING_ID'],
				'RECIPIENT_ID' => $row['ID']
			]
		);
		if ($read === null)
		{
			static::read($recipientId);
		}

		$postingDb = PostingTable::getList(
			[
				'select' => ['ID'],
				'filter' => ['=ID' => $row['POSTING_ID']],
			]
		);
		if ($postingDb->fetch())
		{
			$deleteParameters = ['bx_sender_conversion_id'];
			$letter           = EntityLetter::createInstanceByPostingId($row['POSTING_ID']);
			$linkParams = $letter->getMessage()
								->getConfiguration()
								->get('LINK_PARAMS');
			if ($linkParams)
			{
				$parametersTmp = [];
				parse_str($linkParams, $parametersTmp);
				if (is_array($parametersTmp))
				{
					$parametersTmp    = array_keys($parametersTmp);
					$deleteParameters = array_merge($deleteParameters, $parametersTmp);
				}
			}

			$uri        = new BitrixMainWebUri($url);
			$fixedUrl = $uri->deleteParams($deleteParameters, false)
							->getUri();

			$fixedUrl   = urldecode($fixedUrl);

			if(mb_strpos($fixedUrl, 'pub/mail/unsubscribe.php') === false)
			{
				$addClickDb = PostingClickTable::add(
					[
						'POSTING_ID'   => $row['POSTING_ID'],
						'RECIPIENT_ID' => $row['ID'],
						'URL'          => $fixedUrl
					]
				);
			}

			if ($addClickDb && $addClickDb->isSuccess())
			{
				// send event
				$eventData = [
					'URL'       => $url,
					'URL_FIXED' => $fixedUrl,
					'CLICK_ID'  => $addClickDb->getId(),
					'RECIPIENT' => $row
				];
				$event = new Event('sender', 'OnAfterRecipientClick', [$eventData]);
				$event->send();
			}
		}
	}

	if ($row['CONTACT_ID'])
	{
		ContactTable::update(
			$row['CONTACT_ID'],
			[
				'IS_CLICK' => 'Y',
			]
		);
	}
}