- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/trigger/manager.php
- Класс: BitrixSenderTriggerManager
- Вызов: Manager::processEvent
static function processEvent($params)
{
$moduleId = $params['MODULE_ID'];
$eventType = $params['EVENT_TYPE'];
$eventData = $params['EVENT_DATA'];
$filter = array(
'=MAILING_CHAIN.MAILING.ACTIVE' => 'Y',
'=MAILING_CHAIN.IS_TRIGGER' => 'Y',
'=MAILING_CHAIN.STATUS' => array(MailingChainTable::STATUS_WAIT, MailingChainTable::STATUS_SEND),
'=EVENT' => $moduleId.'/'.$eventType
);
if(isset($params['FILTER']) && is_array($params['FILTER']))
{
$filter = $filter + $params['FILTER'];
}
$chainDb = MailingTriggerTable::getList(array(
'select' => array(
'ENDPOINT',
'SITE_ID' => 'MAILING_CHAIN.MAILING.SITE_ID',
'ID' => 'MAILING_CHAIN.ID',
'MAILING_ID' => 'MAILING_CHAIN.MAILING_ID',
'PARENT_ID' => 'MAILING_CHAIN.PARENT_ID',
'POSTING_ID' => 'MAILING_CHAIN.POSTING_ID',
'TIME_SHIFT' => 'MAILING_CHAIN.TIME_SHIFT',
'STATUS' => 'MAILING_CHAIN.STATUS',
'AUTO_SEND_TIME' => 'MAILING_CHAIN.AUTO_SEND_TIME'
),
'filter' => $filter,
'order' => array('MAILING_CHAIN_ID' => 'ASC', 'IS_TYPE_START' => 'ASC')
));
while($chain = $chainDb->fetch())
{
$settings = new Settings($chain['ENDPOINT']);
$trigger = static::getOnce($settings->getEndpoint());
if(!$trigger) continue;
$trigger->setSiteId($chain['SITE_ID']);
$trigger->setFields($settings->getFields());
$trigger->setParams(array('CHAIN' => $chain, 'EVENT' => $eventData));
// mark trigger as first run for process old data
$runForOldData = ($trigger->canRunForOldData() && $settings->canRunForOldData() && !$settings->wasRunForOldData());
$trigger->setRunForOldData($runForOldData);
// run trigger filter
if(!$trigger->filter()) continue;
//add recipient to posting
static::$postingId = null;
$recipientDb = $trigger->getRecipientResult();
while($recipient = $recipientDb->fetch())
{
if($settings->isTypeStart())
{
static::addRecipient($chain, $settings, $recipient);
}
else
{
static::stop($chain, $recipient, true);
}
}
// mark mailing trigger fields as first run for process old data
if($runForOldData)
{
MailingTable::setWasRunForOldData($chain['MAILING_ID'], $runForOldData);
}
if($settings->isTypeStart())
{
// prevent email event
if($settings->isPreventEmail())
{
static::preventMailEvent($trigger->getMailEventToPrevent());
}
//start sending of mailing chain
static::send($chain);
}
}
//return $data;
}