Beispiel #1
0
 /**
  * @param string $email
  * @param array $mailingList
  * @param string $siteId
  * @return int $contactId
  * //add subscription and returns subscription id
  */
 public static function add($email, array $mailingIdList)
 {
     $contactId = null;
     $email = strtolower($email);
     $contactDb = ContactTable::getList(array('filter' => array('=EMAIL' => $email)));
     if ($contact = $contactDb->fetch()) {
         $contactId = $contact['ID'];
     } else {
         $contactAddDb = ContactTable::add(array('EMAIL' => $email));
         if ($contactAddDb->isSuccess()) {
             $contactId = $contactAddDb->getId();
         }
     }
     if (!empty($contactId)) {
         foreach ($mailingIdList as $mailingId) {
             $primary = array('MAILING_ID' => $mailingId, 'CONTACT_ID' => $contactId);
             $existSub = MailingSubscriptionTable::getRowById($primary);
             if (!$existSub) {
                 MailingSubscriptionTable::add($primary);
             }
         }
     } else {
     }
     return $contactId;
 }
Beispiel #2
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;
 }