- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/trigger/manager.php
- Класс: BitrixSenderTriggerManager
- Вызов: Manager::onAfterPostingSendRecipient
static function onAfterPostingSendRecipient(Event $event)
{
$data = $event->getParameter(0);
if(!$data || !$data['SEND_RESULT'] || empty($data['POSTING']['MAILING_CHAIN_ID']))
return;
$chainId = $data['POSTING']['MAILING_CHAIN_ID'];
$dataRecipient = $data['RECIPIENT'];
static $mailingParams = array();
if(!isset($mailingParams[$chainId]))
{
$mailingParams[$chainId] = array();
$childChainDb = MailingChainTable::getList(array(
'select' => array(
'ID', 'MAILING_ID', 'PARENT_ID', 'POSTING_ID'
),
'filter' => array(
'=MAILING.ACTIVE' => 'Y',
'=IS_TRIGGER' => 'Y',
'=STATUS' => array(MailingChainTable::STATUS_WAIT, MailingChainTable::STATUS_SEND),
'=PARENT_ID' => $chainId
)
));
while($childChain = $childChainDb->fetch())
{
// add posting
$postingAddDb = PostingTable::add(array(
'MAILING_ID' => $childChain['MAILING_ID'],
'MAILING_CHAIN_ID' => $childChain['ID'],
));
if(!$postingAddDb->isSuccess())
{
continue;
}
$mailingParams[$chainId][] = array(
'POSTING_ID' => $postingAddDb->getId(),
'CHAIN' => $childChain,
);
}
}
if(empty($mailingParams[$chainId]))
{
return;
}
foreach($mailingParams[$chainId] as $chainKey => $mailingParamsItem)
{
$postingId = $mailingParamsItem['POSTING_ID'];
$childChain = $mailingParamsItem['CHAIN'];
// check email as unsubscribed
// TODO: modify to accept RID
if(Subscription::isUnsubscibed($childChain['MAILING_ID'], $data['RECIPIENT']['EMAIL']))
continue;
$recipient = array('POSTING_ID' => $postingId);
$recipient['STATUS'] = PostingRecipientTable::SEND_RESULT_NONE;
$recipient['CONTACT_ID'] = $dataRecipient['CONTACT_ID'];
if(!empty($dataRecipient['FIELDS']))
{
$recipient['FIELDS'] = $dataRecipient['FIELDS'];
}
if(!empty($dataRecipient['ROOT_ID']))
{
$recipient['ROOT_ID'] = $dataRecipient['ROOT_ID'];
}
else
{
$recipient['ROOT_ID'] = $dataRecipient['ID'];
}
if(!empty($dataRecipient['USER_ID']))
{
$recipient['USER_ID'] = $dataRecipient['USER_ID'];
}
// add recipient
PostingTable::addRecipient($recipient, true);
if(empty($childChain['POSTING_ID']))
{
$chainUpdateDb = ModelLetterTable::update($childChain['ID'], array('POSTING_ID' => $postingId));
if($chainUpdateDb->isSuccess())
{
$mailingParams[$chainId][$chainKey]['CHAIN']['POSTING_ID'] = $postingId;
}
}
}
}