...Человеческий поиск в разработке...
- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/subscription.php
- Класс: Bitrix\Sender\Subscription
- Вызов: Subscription::getSubscriptions
static function getSubscriptions($data) { $resultMailingList = array(); $mailing = MailingTable::getRowById(array('ID' => $data['MAILING_ID'])); if(isset($data['TEST']) && $data['TEST'] == 'Y') { $resultMailingList[] = array( 'ID' => $mailing['ID'], 'NAME' => $mailing['NAME'], 'DESC' => $mailing['DESCRIPTION'], 'SELECTED' => true, ); return $resultMailingList; } $contactData = $contactId = null; if($data['RECIPIENT_ID'] && $recipient = PostingRecipientTable::getRowById(array('ID' => $data['RECIPIENT_ID']))) { if(isset($data['CONTACT_ID']) && $recipient['CONTACT_ID'] != $data['CONTACT_ID']) { return []; } $contactData = ContactTable::getRowById($contactId = $recipient['CONTACT_ID']); } elseif($data['CONTACT_ID'] && $contactData = ContactTable::getRowById($data['CONTACT_ID'])) { $contactId = $contactData['ID']; } else { return []; } if ($contactData && $contactData['BLACKLISTED'] === 'Y') { return []; } $mailingUnsub = array(); $unSubDb = MailingSubscriptionTable::getUnSubscriptionList(array( 'select' => array('MAILING_ID'), 'filter' => array( '=CONTACT.ID' => $contactId, '=MAILING.SITE_ID' => $mailing['SITE_ID'] ) )); while($unSub = $unSubDb->fetch()) { $mailingUnsub[] = $unSub['MAILING_ID']; } $mailingList = array(); // all receives mailings $mailingDb = PostingRecipientTable::getList(array( 'select' => array('MAILING_ID' => 'POSTING.MAILING.ID'), 'filter' => array( '=CONTACT_ID' => $contactId, '=POSTING.MAILING.ACTIVE' => 'Y', '=POSTING.MAILING.SITE_ID' => $mailing['SITE_ID'] ), 'group' => array('MAILING_ID') )); while ($mailing = $mailingDb->fetch()) { $mailingList[] = $mailing['MAILING_ID']; } // all subscribed mailings $mailingDb = MailingSubscriptionTable::getSubscriptionList(array( 'select' => array('MAILING_ID'), 'filter' => array( '=CONTACT.ID' => $contactId, '=MAILING.ACTIVE' => 'Y', '=MAILING.SITE_ID' => $mailing['SITE_ID'] ) )); 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) { $resultMailingList[] = array( 'ID' => $mailingDesc['ID'], 'NAME' => $mailingDesc['NAME'], 'DESC' => $mailingDesc['DESCRIPTION'], 'SELECTED' => in_array($mailingDesc['ID'], array($data['MAILING_ID'])), ); } } } return $resultMailingList; }