/** * @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; }
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; }