8namespace Bitrix\Sender;
10use Bitrix\Main\Type\DateTime;
12use Bitrix\Main\Config\Option;
13use Bitrix\Main\Mail\Tracking;
14use Bitrix\Main\Application;
15use Bitrix\Main\EventResult;
16use Bitrix\Sender\Internals\Model\AbuseTable;
17use Bitrix\Sender\Recipient;
18use Bitrix\Sender\Integration;
19use Bitrix\Sender\Runtime\Env;
33 return Tracking::getLinkUnsub(static::MODULE_ID,
$fields, Option::get(
'sender',
'unsub_link'));
44 $tag = Tracking::getSignedTag(static::MODULE_ID,
$fields);
45 $urlPage = Option::get(
'sender',
'sub_link');
48 $bitrixDirectory = Application::getInstance()->getPersonalRoot();
49 $result = $bitrixDirectory.
'/tools/sender_sub_confirm.php?sender_subscription=confirm&tag='.urlencode($tag);
53 $result = $urlPage.(mb_strpos($urlPage,
"?") ===
false ?
"?" :
"&").
'sender_subscription=confirm&tag='.urlencode($tag);
67 $data[
'LIST'] = static::getSubscriptions(
$data);
74 $resultMailingList =
array();
77 if(isset(
$data[
'TEST']) &&
$data[
'TEST'] ==
'Y')
79 $resultMailingList[] =
array(
80 'ID' => $mailing[
'ID'],
81 'NAME' => $mailing[
'NAME'],
82 'DESC' => $mailing[
'DESCRIPTION'],
86 return $resultMailingList;
88 $contactData = $contactId =
null;
91 if(isset(
$data[
'CONTACT_ID']) && $recipient[
'CONTACT_ID'] !=
$data[
'CONTACT_ID'])
99 $contactId = $contactData[
'ID'];
106 if ($contactData && $contactData[
'BLACKLISTED'] ===
'Y')
111 $mailingUnsub =
array();
113 'select' =>
array(
'MAILING_ID'),
115 '=CONTACT.ID' => $contactId,
116 '=MAILING.SITE_ID' => $mailing[
'SITE_ID']
119 while($unSub = $unSubDb->fetch())
121 $mailingUnsub[] = $unSub[
'MAILING_ID'];
124 $mailingList =
array();
127 'select' =>
array(
'MAILING_ID' =>
'POSTING.MAILING.ID'),
129 '=CONTACT_ID' => $contactId,
130 '=POSTING.MAILING.ACTIVE' =>
'Y',
131 '=POSTING.MAILING.SITE_ID' => $mailing[
'SITE_ID']
133 'group' =>
array(
'MAILING_ID')
135 while ($mailing = $mailingDb->fetch())
137 $mailingList[] = $mailing[
'MAILING_ID'];
142 'select' =>
array(
'MAILING_ID'),
144 '=CONTACT.ID' => $contactId,
145 '=MAILING.ACTIVE' =>
'Y',
146 '=MAILING.SITE_ID' => $mailing[
'SITE_ID']
149 while ($mailing = $mailingDb->fetch())
151 $mailingList[] = $mailing[
'MAILING_ID'];
154 $mailingList = array_unique($mailingList);
155 foreach($mailingList as $mailingId)
157 if(!in_array($mailingId, $mailingUnsub))
162 $resultMailingList[] =
array(
163 'ID' => $mailingDesc[
'ID'],
164 'NAME' => $mailingDesc[
'NAME'],
165 'DESC' => $mailingDesc[
'DESCRIPTION'],
166 'SELECTED' => in_array($mailingDesc[
'ID'],
array(
$data[
'MAILING_ID'])),
172 return $resultMailingList;
185 $result = EventResult::SUCCESS;
200 $data[
'SUCCESS'] = static::unsubscribeRecipient(
$data);
202 $result = EventResult::SUCCESS;
211 if(isset(
$data[
'TEST']) &&
$data[
'TEST'] ==
'Y')
216 if(!
$data[
'RECIPIENT_ID'])
221 $data[
'ABUSE'] = isset(
$data[
'ABUSE']) ? (bool)
$data[
'ABUSE'] :
false;
222 $data[
'ABUSE_TEXT'] = isset(
$data[
'ABUSE_TEXT']) ?
$data[
'ABUSE_TEXT'] :
null;
226 'ID',
'CONTACT_ID',
'CONTACT_CODE' =>
'CONTACT.CODE',
'CONTACT_TYPE_ID' =>
'CONTACT.TYPE_ID',
227 'POSTING_ID',
'POSTING_MAILING_ID' =>
'POSTING.MAILING_ID'
229 'filter' => [
'=ID' =>
$data[
'RECIPIENT_ID']]
233 'CONTACT_ID' =>
'ID',
'CONTACT_TYPE_ID' =>
'TYPE_ID',
'CONTACT_CODE' =>
'CODE'
235 'filter' => [
'=CONTACT_ID' =>
$data[
'CONTACT_ID']]
240 !$recipient[
'CONTACT_ID'] ||
241 (
$data[
'CONTACT_ID']?
$data[
'CONTACT_ID'] != $recipient[
'CONTACT_ID'] :
false)
246 $contactId = $recipient[
'CONTACT_ID'];
248 'select' =>
array(
'ID'),
250 '=ID' =>
$data[
'UNSUBSCRIBE_LIST'],
253 while($mailing = $mailingDb->fetch())
257 isset($recipient[
'POSTING_MAILING_ID'],$recipient[
'POSTING_ID'],$recipient[
'ID']) &&
258 $recipient[
'POSTING_MAILING_ID'] == $mailing[
'ID']
262 'POSTING_ID' => $recipient[
'POSTING_ID'],
263 'RECIPIENT_ID' => $recipient[
'ID'],
269 'select' =>
array(
'RECIPIENT_ID' =>
'ID',
'POSTING_ID'),
271 '=POSTING.MAILING_ID' => $mailing[
'ID'],
272 '=CONTACT_ID' => $contactId
275 if($mailingPosting = $mailingPostingDb->fetch())
277 $primary = $mailingPosting;
288 if($unsubResult->isSuccess())
291 'ABUSE' =>
$data[
'ABUSE'],
292 'ABUSE_TEXT' =>
$data[
'ABUSE_TEXT'],
293 'MAILING_ID' => $mailing[
'ID'],
294 'RECIPIENT_ID' => $primary[
'RECIPIENT_ID'],
295 'CONTACT_ID' => $contactId,
296 'EMAIL' =>
$data[
'EMAIL'],
303 AbuseTable::add(
array(
304 'TEXT' =>
$data[
'ABUSE_TEXT'],
305 'CONTACT_ID' => $contactId,
306 'CONTACT_CODE' => $recipient[
'CONTACT_CODE'],
307 'CONTACT_TYPE_ID' => $recipient[
'CONTACT_TYPE_ID'],
319 'MAILING_ID' => $mailing[
'ID'],
320 'CONTACT_ID' => $contactId
323 if ($contactId &&
$data[
'ABUSE'])
342 $resultMailingList =
array();
345 if(isset(
$data[
'TEST']) &&
$data[
'TEST'] ==
'Y')
347 $resultMailingList[] =
array(
348 'ID' => $mailing[
'ID'],
349 'NAME' => $mailing[
'NAME'],
350 'DESC' => $mailing[
'DESCRIPTION'],
354 return $resultMailingList;
357 $mailingUnsub =
array();
359 'select' =>
array(
'MAILING_ID'),
361 '=CONTACT.EMAIL' => trim(mb_strtolower(
$data[
'EMAIL'])),
362 '=MAILING.SITE_ID' => $mailing[
'SITE_ID']
365 while($unSub = $unSubDb->fetch())
366 $mailingUnsub[] = $unSub[
'MAILING_ID'];
368 $mailingList =
array();
371 'select' =>
array(
'MAILING_ID' =>
'POSTING.MAILING.ID'),
373 '=EMAIL' => trim(mb_strtolower(
$data[
'EMAIL'])),
374 '=POSTING.MAILING.ACTIVE' =>
'Y',
375 '=POSTING.MAILING.SITE_ID' => $mailing[
'SITE_ID']
377 'group' =>
array(
'MAILING_ID')
379 while ($receiveMailing = $receiveMailingDb->fetch())
381 $mailingList[] = $receiveMailing[
'MAILING_ID'];
386 'select' =>
array(
'MAILING_ID'),
388 '=CONTACT.EMAIL' => trim(mb_strtolower(
$data[
'EMAIL'])),
389 '=MAILING.ACTIVE' =>
'Y',
390 '=MAILING.SITE_ID' => $mailing[
'SITE_ID']
393 while ($subscribedMailing = $subscribedMailingDb->fetch())
395 $mailingList[] = $subscribedMailing[
'MAILING_ID'];
398 $mailingList = array_unique($mailingList);
399 foreach($mailingList as $mailingId)
401 if(!in_array($mailingId, $mailingUnsub))
406 $resultMailingList[] =
array(
407 'ID' => $mailingDesc[
'ID'],
408 'NAME' => $mailingDesc[
'NAME'],
409 'DESC' => $mailingDesc[
'DESCRIPTION'],
410 'SELECTED' => in_array($mailingDesc[
'ID'],
array(
$data[
'MAILING_ID'])),
416 return $resultMailingList;
427 $id = static::add(
$data[
'EMAIL'],
$data[
'SUBSCRIBE_LIST']);
448 if(isset(
$data[
'TEST']) &&
$data[
'TEST'] ==
'Y')
451 $data[
'ABUSE'] = isset(
$data[
'ABUSE']) ? (bool)
$data[
'ABUSE'] :
false;
452 $data[
'ABUSE_TEXT'] = isset(
$data[
'ABUSE_TEXT']) ?
$data[
'ABUSE_TEXT'] :
null;
455 if(
$data[
'RECIPIENT_ID'])
458 'select' =>
array(
'POSTING_ID',
'POSTING_MAILING_ID' =>
'POSTING.MAILING_ID'),
460 '=ID' =>
$data[
'RECIPIENT_ID'],
461 '=CONTACT.CODE' =>
$data[
'EMAIL'],
462 '=CONTACT.TYPE_ID' =>
Recipient\Type::EMAIL,
465 $posting = $postingDb->fetch();
469 'select' =>
array(
'ID'),
471 '=ID' =>
$data[
'UNSUBSCRIBE_LIST'],
474 while($mailing = $mailingDb->fetch())
478 if($posting && $posting[
'POSTING_MAILING_ID'] == $mailing[
'ID'])
481 'POSTING_ID' => $posting[
'POSTING_ID'],
482 'RECIPIENT_ID' =>
$data[
'RECIPIENT_ID'],
483 'CONTACT_ID' => isset(
$data[
'CONTACT_ID']) ? (
int)
$data[
'CONTACT_ID'] :
null,
489 'select' =>
array(
'RECIPIENT_ID' =>
'ID',
'CONTACT_ID',
'POSTING_ID'),
491 '=POSTING.MAILING_ID' => $mailing[
'ID'],
492 '=CONTACT.CODE' =>
$data[
'EMAIL'],
493 '=CONTACT.TYPE_ID' =>
Recipient\Type::EMAIL,
497 if($mailingPosting = $mailingPostingDb->fetch())
499 $unsub = $mailingPosting;
506 if ($unsub[
'CONTACT_ID'] &&
$data[
'ABUSE'])
515 if($unsubResult->isSuccess())
518 'ABUSE' =>
$data[
'ABUSE'],
519 'ABUSE_TEXT' =>
$data[
'ABUSE_TEXT'],
520 'CAMPAIGN_ID' => $mailing[
'ID'],
521 'MAILING_ID' => $mailing[
'ID'],
522 'RECIPIENT_ID' => $unsub[
'RECIPIENT_ID'],
523 'EMAIL' =>
$data[
'EMAIL'],
530 AbuseTable::add(
array(
531 'TEXT' =>
$data[
'ABUSE_TEXT'],
532 'CONTACT_ID' => $unsub[
'CONTACT_ID'],
533 'CONTACT_CODE' =>
$data[
'EMAIL'],
534 'CONTACT_TYPE_ID' =>
Recipient\Type::EMAIL,
574 '=TYPE_ID' => $typeId,
579 $contactId = $contact[
'ID'];
584 if($contactAddDb->isSuccess())
586 $contactId = $contactAddDb->getId();
590 if(!empty($contactId))
592 foreach ($mailingIdList as $mailingId)
595 'MAILING_ID' => $mailingId,
'CONTACT_ID' => $contactId
614 if(isset(
$params[
"IS_PUBLIC"]))
621 $mailingList =
array();
623 'select' =>
array(
'ID',
'NAME',
'DESCRIPTION',
'IS_PUBLIC'),
625 'order' =>
array(
'SORT' =>
'ASC',
'NAME' =>
'ASC'),
627 while($mailing = $mailingDb->fetch())
629 $mailingList[] = $mailing;
645 $mailingNameList =
array();
647 while($mailing = $mailingDb->fetch())
649 $mailingNameList[] = $mailing[
'NAME'];
652 $subscription =
array(
655 'MAILING_LIST' => $mailingIdList,
657 $confirmUrl = static::getLinkSub($subscription);
659 $eventSendFields =
array(
660 "EVENT_NAME" =>
"SENDER_SUBSCRIBE_CONFIRM",
663 "DATE" => $date->toString(),
664 "CONFIRM_URL" => $confirmUrl,
665 "MAILING_LIST" => implode(
"\r\n",$mailingNameList),
684 '=MAILING_ID' => $mailingId,
685 '=CONTACT.CODE' =>
$code,
686 '=CONTACT.TYPE_ID' => $typeId,
690 'select' =>
array(
'MAILING_ID'),
693 if($unSubDb->fetch())
static getRowById($id, array $parameters=[])
static getRow(array $parameters)
static getList(array $parameters=array())
static update($primary, array $data)
static onAfterPostingRecipientUnsubscribe(array $eventData)
static addUnSubscription(array $parameters=array())
static getSubscriptionList(array $parameters=array())
static addSubscription(array $parameters=array())
static getUnSubscriptionList(array $parameters=array())
static normalize($code, $typeId=Type::EMAIL)
static detect($recipientCode, $isNormalized=false)
static getLinkSub(array $fields)
static getLinkUnsub(array $fields)
static getMailingList($params)
static onMailEventSubscriptionEnable($data)
static onMailEventSubscriptionDisable($data)
static getSubscriptions($data)
static subscribe(array $data)
static sendEventConfirm($email, array $mailingIdList, $siteId)
static unsubscribe($data)
static onMailEventSubscriptionList($data)
static isUnsubscibed($mailingId, $code, $typeId=Recipient\Type::EMAIL)
static add($code, array $mailingIdList)
static unsubscribeRecipient($data)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']