Beispiel #1
0
 /**
  * @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;
 }