- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/mailing.php
- Класс: Bitrix\Sender\MailingTable
- Вызов: MailingTable::updateChainTrigger
static function updateChainTrigger($id)
{
// get first item of chain
$chainDb = MailingChainTable::getList(array(
'select' => array('ID', 'TRIGGER_FIELDS' => 'MAILING.TRIGGER_FIELDS'),
'filter' => array('=MAILING_ID' => $id, '=IS_TRIGGER' => 'Y', '=PARENT_ID' => null),
));
$chain = $chainDb->fetch();
if(!$chain) return;
$chainId = $chain['ID'];
// get trigger settings from mailing
$triggerFields = $chain['TRIGGER_FIELDS'];
if(!is_array($triggerFields))
$triggerFields = array();
// init TriggerSettings objects
$settingsList = array();
foreach($triggerFields as $key => $point)
{
if(empty($point['CODE'])) continue;
$point['IS_EVENT_OCCUR'] = true;
$point['IS_PREVENT_EMAIL'] = false;
$point['SEND_INTERVAL_UNIT'] = 'M';
$point['IS_CLOSED_TRIGGER'] = ($point['IS_CLOSED_TRIGGER'] == 'Y' ? true : false);
switch($key)
{
case 'END':
$point['IS_TYPE_START'] = false;
break;
case 'START':
default:
$point['IS_TYPE_START'] = true;
}
$settingsList[] = new Trigger\Settings($point);
}
// prepare fields for save
$mailingTriggerList = array();
foreach($settingsList as $settings)
{
/* @var \Bitrix\Sender\Trigger\Settings $settings */
$trigger = Trigger\Manager::getOnce($settings->getEndpoint());
if($trigger)
{
$triggerFindId = $trigger->getFullEventType() . "/" .((int) $settings->isTypeStart());
$mailingTriggerList[$triggerFindId] = array(
'IS_TYPE_START' => $settings->isTypeStart(),
'NAME' => $trigger->getName(),
'EVENT' => $trigger->getFullEventType(),
'ENDPOINT' => $settings->getArray(),
);
}
}
// add new, update exists, delete old rows
$triggerDb = MailingTriggerTable::getList(array(
'select' => array('EVENT', 'MAILING_CHAIN_ID', 'IS_TYPE_START'),
'filter' => array('=MAILING_CHAIN_ID' => $chainId)
));
while($trigger = $triggerDb->fetch())
{
$triggerFindId = $trigger['EVENT'] . "/" . ((int) $trigger['IS_TYPE_START']);
if(!isset($mailingTriggerList[$triggerFindId]))
{
MailingTriggerTable::delete($trigger);
}
else
{
MailingTriggerTable::update($trigger, $mailingTriggerList[$triggerFindId]);
unset($mailingTriggerList[$triggerFindId]);
}
}
foreach($mailingTriggerList as $triggerFindId => $settings)
{
/** @var array $settings */
$settings['MAILING_CHAIN_ID'] = $chainId;
MailingTriggerTable::add($settings);
}
Trigger\Manager::actualizeHandlerForChild();
}