/** * @param Entity\Event $event * @return Entity\EventResult */ public static function onAfterDelete(Entity\Event $event) { TriggerManager::actualizeHandlerForChild(); }
public 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 \Bitrix\Sender\TriggerSettings($point); } // prepare fields for save $mailingTriggerList = array(); foreach ($settingsList as $settings) { /* @var \Bitrix\Sender\TriggerSettings $settings */ $trigger = \Bitrix\Sender\TriggerManager::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) { $settings['MAILING_CHAIN_ID'] = $chainId; MailingTriggerTable::add($settings); } TriggerManager::actualizeHandlerForChild(); }