Esempio n. 1
0
 /**
  * @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;
 }
Esempio n. 2
0
    //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()));
Esempio n. 3
0
 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;
 }