/** * @param array $params * @return void */ protected 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 TriggerSettings($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; }