/** * @param $arData * @return bool * @throws \Bitrix\Main\ArgumentException */ public static function unsubscribe($arData) { $result = false; if (isset($arData['TEST']) && $arData['TEST'] == 'Y') { return true; } $arPosting = null; if ($arData['RECIPIENT_ID']) { $postingDb = PostingRecipientTable::getList(array('select' => array('POSTING_ID', 'POSTING_MAILING_ID' => 'POSTING.MAILING_ID'), 'filter' => array('ID' => $arData['RECIPIENT_ID'], 'EMAIL' => $arData['EMAIL']))); $arPosting = $postingDb->fetch(); } $mailingDb = MailingTable::getList(array('select' => array('ID'), 'filter' => array('ID' => $arData['UNSUBSCRIBE_LIST']))); while ($mailing = $mailingDb->fetch()) { $unsub = null; if ($arPosting && $arPosting['POSTING_MAILING_ID'] == $mailing['ID']) { $unsub = array('POSTING_ID' => $arPosting['POSTING_ID'], 'RECIPIENT_ID' => $arData['RECIPIENT_ID']); } else { $mailingPostingDb = PostingRecipientTable::getList(array('select' => array('RECIPIENT_ID' => 'ID', 'POSTING_ID'), 'filter' => array('=POSTING.MAILING_ID' => $mailing['ID'], 'EMAIL' => $arData['EMAIL']))); if ($arMailingPosting = $mailingPostingDb->fetch()) { $unsub = $arMailingPosting; } } if (!empty($unsub)) { $unsubExists = PostingUnsubTable::getRowById($unsub); if (!$unsubExists) { PostingUnsubTable::add($unsub); } $result = true; } $contactDb = ContactTable::getList(array('select' => array('ID'), 'filter' => array('=EMAIL' => $arData['EMAIL']))); while ($contact = $contactDb->fetch()) { MailingSubscriptionTable::delete(array('MAILING_ID' => $mailing['ID'], 'CONTACT_ID' => $contact['ID'])); $result = true; } } return $result; }
/** * @param $data * @return bool * @throws \Bitrix\Main\ArgumentException */ public static function unsubscribe($data) { $result = false; if(isset($data['TEST']) && $data['TEST'] == 'Y') return true; $posting = null; if($data['RECIPIENT_ID']) { $postingDb = PostingRecipientTable::getList(array( 'select' => array('POSTING_ID', 'POSTING_MAILING_ID' => 'POSTING.MAILING_ID'), 'filter' => array('ID' => $data['RECIPIENT_ID'], 'EMAIL' => $data['EMAIL']) )); $posting = $postingDb->fetch(); } $mailingDb = MailingTable::getList(array( 'select' => array('ID'), 'filter' => array( 'ID' => $data['UNSUBSCRIBE_LIST'], ) )); while($mailing = $mailingDb->fetch()) { $unsub = null; if($posting && $posting['POSTING_MAILING_ID'] == $mailing['ID']) { $unsub = array( 'POSTING_ID' => $posting['POSTING_ID'], 'RECIPIENT_ID' => $data['RECIPIENT_ID'], ); } else { $mailingPostingDb = PostingRecipientTable::getList(array( 'select' => array('RECIPIENT_ID' => 'ID', 'POSTING_ID'), 'filter' => array('=POSTING.MAILING_ID' => $mailing['ID'], 'EMAIL' => $data['EMAIL']) )); if($mailingPosting = $mailingPostingDb->fetch()) { $unsub = $mailingPosting; } } if(!empty($unsub)) { $unsubExists = PostingUnsubTable::getRowById($unsub); if(!$unsubExists) { $unsubResult = PostingUnsubTable::add($unsub); if($unsubResult->isSuccess()) { $eventData = array( 'MAILING_ID' => $mailing['ID'], 'RECIPIENT_ID' => $unsub['RECIPIENT_ID'], 'EMAIL' => $data['EMAIL'], ); $event = new \Bitrix\Main\Event('sender', 'OnAfterRecipientUnsub', array($eventData)); $event->send(); } } $result = true; } $contactDb = ContactTable::getList(array( 'select' => array('ID'), 'filter' => array('=EMAIL' => $data['EMAIL']) )); while($contact = $contactDb->fetch()) { MailingSubscriptionTable::delete(array('MAILING_ID' => $mailing['ID'], 'CONTACT_ID' => $contact['ID'])); $result = true; } } return $result; }