- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/mailingtrigger.php
- Класс: Bitrix\Sender\MailingTriggerTable
- Вызов: MailingTriggerTable::actualizeHandlers
static function actualizeHandlers($chainId, array $fieldsNew = null, array $fieldsOld = null)
{
$settingsNew = null;
$settingsOld = null;
if($fieldsNew)
$settingsNew = new Trigger\Settings($fieldsNew);
if($fieldsOld)
$settingsOld = new Trigger\Settings($fieldsOld);
// if old item was closed trigger
if($settingsOld && $settingsOld->isClosedTrigger())
{
// delete agent
$agentName = Trigger\Manager::getClosedEventAgentName(
$settingsOld->getEventModuleId(),
$settingsOld->getEventType(),
$chainId
);
$agent = new \CAgent;
$agentListDb = $agent->GetList(array(), array('MODULE_ID' => 'sender', 'NAME' => $agentName));
while($agentItem = $agentListDb->Fetch())
$agent->Delete($agentItem['ID']);
}
// if new item is closed trigger
if($settingsNew && $settingsNew->isClosedTrigger())
{
// check active state of mailing
$chainDb = MailingChainTable::getList(array(
'select' => array('ID'),
'filter' => array('=ID' => $chainId, '=MAILING.ACTIVE' => 'Y')
));
if(!$chainDb->fetch())
return;
// add new agent
$agentName = Trigger\Manager::getClosedEventAgentName(
$settingsNew->getEventModuleId(),
$settingsNew->getEventType(),
$chainId
);
// set date of next exec
$agentTime = $settingsNew->getClosedTriggerTime();
$agentInterval = $settingsNew->getClosedTriggerInterval();
if($agentInterval <= 0) $agentInterval = 1440;
$agentTimeArray = explode(":", $agentTime);
$agentDate = new DateTime;
$agentDate->setTime((int)$agentTimeArray[0], (int)$agentTimeArray[1]);
// set next exec on next day if exec was today
if($agentDate->getTimestamp() < time())
$agentDate->add("1 days");
// add agent
$agent = new \CAgent;
$agent->AddAgent($agentName, 'sender', 'N', $agentInterval*60, '', 'Y', $agentDate->toString());
return;
}
// actualize deleted/changed event
if($settingsOld && !$settingsOld->isClosedTrigger() && $settingsOld->getFullEventType())
{
// if delete operation(no the NEW)
// or change operation(the NEW is not equal to the OLD)
if(!$settingsNew || $settingsOld->getFullEventType() != $settingsNew->getFullEventType())
{
Trigger\Manager::actualizeHandler(array(
'MODULE_ID' => $settingsOld->getEventModuleId(),
'EVENT_TYPE' => $settingsOld->getEventType(),
'CALLED_BEFORE_CHANGE' => true
));
}
}
// actualize new event
if($settingsNew && $settingsNew->getFullEventType())
{
$calledBeforeChange = ($fieldsOld ? false : true);
Trigger\Manager::actualizeHandler(array(
'MODULE_ID' => $settingsNew->getEventModuleId(),
'EVENT_TYPE' => $settingsNew->getEventType(),
'CALLED_BEFORE_CHANGE' => $calledBeforeChange
));
}
}