- Модуль: 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;
}