/** * @param $arData * @return array * @throws \Bitrix\Main\ArgumentException */ public static function getList($arData) { $arMailing = array(); if (isset($arData['TEST']) && $arData['TEST'] == 'Y') { $mailing = MailingTable::getRowById(array('ID' => $arData['MAILING_ID'])); if ($mailing) { $arMailing[] = array('ID' => $mailing['ID'], 'NAME' => $mailing['NAME'], 'DESC' => $mailing['DESCRIPTION'], 'SELECTED' => true); } return $arMailing; } $mailingUnsub = array(); $recipientUnsubDb = PostingUnsubTable::getList(array('select' => array('MAILING_ID' => 'POSTING.MAILING_ID'), 'filter' => array('=POSTING_RECIPIENT.EMAIL' => trim(strtolower($arData['EMAIL']))))); while ($recipientUnsub = $recipientUnsubDb->fetch()) { $mailingUnsub[] = $recipientUnsub['MAILING_ID']; } $mailingList = array(); // all receives mailings $mailingDb = PostingRecipientTable::getList(array('select' => array('MAILING_ID' => 'POSTING.MAILING.ID'), 'filter' => array('=EMAIL' => trim(strtolower($arData['EMAIL'])), '=POSTING.MAILING.ACTIVE' => 'Y'), 'group' => array('MAILING_ID'))); while ($mailing = $mailingDb->fetch()) { $mailingList[] = $mailing['MAILING_ID']; } // all subscribed mailings $mailingDb = MailingSubscriptionTable::getList(array('select' => array('MAILING_ID'), 'filter' => array('=CONTACT.EMAIL' => trim(strtolower($arData['EMAIL'])), '=MAILING.ACTIVE' => 'Y'))); while ($mailing = $mailingDb->fetch()) { $mailingList[] = $mailing['MAILING_ID']; } $mailingList = array_unique($mailingList); foreach ($mailingList as $mailingId) { if (!in_array($mailingId, $mailingUnsub)) { $mailingDesc = MailingTable::getRowById($mailingId); if ($mailingDesc) { $arMailing[] = array('ID' => $mailingDesc['ID'], 'NAME' => $mailingDesc['NAME'], 'DESC' => $mailingDesc['DESCRIPTION'], 'SELECTED' => in_array($mailingDesc['ID'], array($arData['MAILING_ID']))); } } } return $arMailing; }
//get current user subscription from cookies if (empty($subscr_EMAIL)) { $subscr_EMAIL = $APPLICATION->get_cookie('SENDER_SUBSCR_EMAIL'); } $subscr_EMAIL = strtolower(strlen($subscr_EMAIL) > 0 ? $subscr_EMAIL : $USER->GetParam("EMAIL")); if (isset($_SESSION['SENDER_SUBSCRIBE_LIST']) && is_array($_SESSION['SENDER_SUBSCRIBE_LIST'])) { $arSubscription = $_SESSION['SENDER_SUBSCRIBE_LIST']['SUBSCRIPTION']; $arSubscriptionRubrics = $_SESSION['SENDER_SUBSCRIBE_LIST']['RUBRIC']; } else { if (!CModule::IncludeModule("sender")) { $obCache->AbortDataCache(); ShowError(GetMessage("SENDER_SUBSCR_MODULE_NOT_INSTALLED")); return; } if ($subscr_EMAIL != "") { $subscriptionDb = \Bitrix\Sender\MailingSubscriptionTable::getList(array('select' => array('ID' => 'CONTACT_ID', 'EMAIL' => 'CONTACT.EMAIL', 'EXISTED_MAILING_ID' => 'MAILING.ID'), 'filter' => array('=CONTACT.EMAIL' => $subscr_EMAIL, '!MAILING.ID' => null))); while ($subscription = $subscriptionDb->fetch()) { $arSubscription = $subscription; //get user's newsletter categories if (intval($subscription['EXISTED_MAILING_ID']) > 0) { $arSubscriptionRubrics[] = $subscription['EXISTED_MAILING_ID']; } } } $_SESSION['SENDER_SUBSCRIBE_LIST']['SUBSCRIPTION'] = $arSubscription; $_SESSION['SENDER_SUBSCRIBE_LIST']['RUBRIC'] = $arSubscriptionRubrics; } } //page title if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("SENDER_SUBSCR_TITLE"), array('COMPONENT_NAME' => $this->GetName()));
public static function updateMailingSubscription() { // get list of all subscribers and unsubscribers $existedSubList = array(); $existedSubDb = \Bitrix\Sender\MailingSubscriptionTable::getList(array('select' => array('EMAIL' => 'CONTACT.EMAIL', 'MAILING_ID'))); while ($existedSub = $existedSubDb->fetch()) { $existedSubList[$existedSub['EMAIL']][] = $existedSub['MAILING_ID']; } // get list of all unsubscribers $dataDb = \Bitrix\Sender\PostingUnsubTable::getList(array('select' => array('EMAIL' => 'UPDATE_RECIPIENT.EMAIL', 'MAILING_ID' => 'UPDATE_POSTING.MAILING_ID'), 'filter' => array(), 'runtime' => array(new \Bitrix\Main\Entity\ReferenceField('UPDATE_RECIPIENT', 'Bitrix\\Sender\\PostingRecipientTable', array('=this.RECIPIENT_ID' => 'ref.ID'), array('join_type' => 'INNER')), new \Bitrix\Main\Entity\ReferenceField('UPDATE_POSTING', 'Bitrix\\Sender\\PostingTable', array('=this.POSTING_ID' => 'ref.ID'), array('join_type' => 'INNER'))), 'order' => array('ID' => 'ASC'))); while ($data = $dataDb->fetch()) { if (self::isTimeUp()) { return true; } if (isset($existedSubList[$data['EMAIL']]) && in_array($data['MAILING_ID'], $existedSubList[$data['EMAIL']])) { continue; } $contactId = \Bitrix\Sender\ContactTable::addIfNotExist(array('EMAIL' => $data['EMAIL'])); $primary = array('MAILING_ID' => $data['MAILING_ID'], 'CONTACT_ID' => $contactId); $fields = array('IS_UNSUB' => 'Y'); $row = \Bitrix\Sender\MailingSubscriptionTable::getRowById($primary); if (!$row) { $result = \Bitrix\Sender\MailingSubscriptionTable::add($fields + $primary); $result->isSuccess(); } } return false; }