Exemplo n.º 1
0
 /**
  * @param \Bitrix\Main\Event $event
  * @return void
  */
 public static function onAfterPostingSendRecipient(\Bitrix\Main\Event $event)
 {
     $data = $event->getParameter(0);
     if (!$data || !$data['SEND_RESULT'] || empty($data['POSTING']['MAILING_CHAIN_ID'])) {
         return;
     }
     $chainId = $data['POSTING']['MAILING_CHAIN_ID'];
     $dataRecipient = $data['RECIPIENT'];
     static $mailingParams = array();
     if (!isset($mailingParams[$chainId])) {
         $mailingParams[$chainId] = array();
         $childChainDb = MailingChainTable::getList(array('select' => array('ID', 'MAILING_ID', 'PARENT_ID', 'POSTING_ID'), 'filter' => array('=MAILING.ACTIVE' => 'Y', '=IS_TRIGGER' => 'Y', '=STATUS' => array(MailingChainTable::STATUS_WAIT, MailingChainTable::STATUS_SEND), '=PARENT_ID' => $chainId)));
         while ($childChain = $childChainDb->fetch()) {
             // add posting
             $postingAddDb = PostingTable::add(array('MAILING_ID' => $childChain['MAILING_ID'], 'MAILING_CHAIN_ID' => $childChain['ID']));
             if (!$postingAddDb->isSuccess()) {
                 continue;
             }
             $mailingParams[$chainId][] = array('POSTING_ID' => $postingAddDb->getId(), 'CHAIN' => $childChain);
         }
     }
     if (empty($mailingParams[$chainId])) {
         return;
     }
     foreach ($mailingParams[$chainId] as $mailingParamsItem) {
         $postingId = $mailingParamsItem['POSTING_ID'];
         $childChain = $mailingParamsItem['CHAIN'];
         // check email as unsubscribed
         if (Subscription::isUnsubscibed($childChain['MAILING_ID'], $data['RECIPIENT']['EMAIL'])) {
             continue;
         }
         $recipient = array('POSTING_ID' => $postingId);
         $recipient['STATUS'] = PostingRecipientTable::SEND_RESULT_NONE;
         $recipient['EMAIL'] = $dataRecipient['EMAIL'];
         if (!empty($dataRecipient['FIELDS'])) {
             $recipient['FIELDS'] = $dataRecipient['FIELDS'];
         }
         if (!empty($dataRecipient['ROOT_ID'])) {
             $recipient['ROOT_ID'] = $dataRecipient['ROOT_ID'];
         } else {
             $recipient['ROOT_ID'] = $dataRecipient['ID'];
         }
         if (!empty($dataRecipient['NAME'])) {
             $recipient['NAME'] = $dataRecipient['NAME'];
         }
         if (!empty($dataRecipient['USER_ID'])) {
             $recipient['USER_ID'] = $dataRecipient['USER_ID'];
         }
         // add recipient
         PostingTable::addRecipient($recipient, true);
         if (empty($mailingParams[$chainId]['CHAIN']['POSTING_ID'])) {
             $chainUpdateDb = MailingChainTable::update(array('ID' => $childChain['ID']), array('POSTING_ID' => $postingId));
             if ($chainUpdateDb->isSuccess()) {
                 $mailingParams[$chainId]['CHAIN']['POSTING_ID'] = $postingId;
             }
         }
     }
 }