/** * @param $mailingChainId * @return int|null */ public static function initPosting($mailingChainId) { $postingId = null; $chainPrimary = array('ID' => $mailingChainId); $arMailingChain = static::getRowById($chainPrimary); if ($arMailingChain) { $needAddPosting = true; if (!empty($arMailingChain['POSTING_ID'])) { $arPosting = PostingTable::getRowById(array('ID' => $arMailingChain['POSTING_ID'])); if ($arPosting) { if ($arPosting['STATUS'] == PostingTable::STATUS_NEW) { $postingId = $arMailingChain['POSTING_ID']; $needAddPosting = false; } /* elseif($arMailingChain['IS_TRIGGER'] == 'Y') { $postingId = $arMailingChain['POSTING_ID']; $needAddPosting = false; } */ } } if ($needAddPosting) { $postingAddDb = PostingTable::add(array('MAILING_ID' => $arMailingChain['MAILING_ID'], 'MAILING_CHAIN_ID' => $arMailingChain['ID'])); if ($postingAddDb->isSuccess()) { $postingId = $postingAddDb->getId(); static::update($chainPrimary, array('POSTING_ID' => $postingId)); } } if ($postingId && $arMailingChain['IS_TRIGGER'] != 'Y') { PostingTable::initGroupRecipients($postingId); } } return $postingId; }
/** * @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; } } } }