- Модуль: 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',
]
);
}
}