8namespace Bitrix\Sender;
10use Bitrix\Main\Entity;
11use Bitrix\Main\Localization\Loc;
12use Bitrix\Main\ORM\Query\Query;
13use Bitrix\Main\Type as MainType;
14use Bitrix\Sender\Internals\Model;
15use Bitrix\Sender\Posting\Builder as PostingBuilder;
17Loc::loadMessages(__FILE__);
33 return 'b_sender_posting';
43 'data_type' =>
'integer',
45 'autocomplete' =>
true,
47 'MAILING_ID' =>
array(
48 'data_type' =>
'integer',
52 'MAILING_CHAIN_ID' =>
array(
53 'data_type' =>
'integer',
57 'DATE_CREATE' =>
array(
58 'data_type' =>
'datetime',
60 'default_value' =>
new MainType\
DateTime(),
62 'DATE_UPDATE' =>
array(
63 'data_type' =>
'datetime',
65 'default_value' =>
new MainType\
DateTime(),
68 'data_type' =>
'string',
70 'default_value' => static::STATUS_NEW,
73 'data_type' =>
'datetime',
75 'DATE_PAUSE' =>
array(
76 'data_type' =>
'datetime',
79 'data_type' =>
'datetime',
81 'COUNT_READ' =>
array(
82 'data_type' =>
'integer',
85 'COUNT_CLICK' =>
array(
86 'data_type' =>
'integer',
89 'COUNT_UNSUB' =>
array(
90 'data_type' =>
'integer',
93 'COUNT_SEND_ALL' =>
array(
94 'data_type' =>
'integer',
97 'COUNT_SEND_NONE' =>
array(
98 'data_type' =>
'integer',
101 'COUNT_SEND_ERROR' =>
array(
102 'data_type' =>
'integer',
105 'COUNT_SEND_SUCCESS' =>
array(
106 'data_type' =>
'integer',
109 'COUNT_SEND_DENY' =>
array(
110 'data_type' =>
'integer',
113 'CONSENT_SUPPORT' =>
array(
114 'data_type' =>
'boolean',
115 'values' =>
array(
'N',
'Y'),
116 'default_value' =>
'N',
120 'data_type' =>
'Bitrix\Sender\Internals\Model\LetterTable',
121 'reference' =>
array(
'=this.MAILING_CHAIN_ID' =>
'ref.ID'),
124 'data_type' =>
'Bitrix\Sender\MailingTable',
125 'reference' =>
array(
'=this.MAILING_ID' =>
'ref.ID'),
127 'MAILING_CHAIN' =>
array(
128 'data_type' =>
'Bitrix\Sender\MailingChainTable',
129 'reference' =>
array(
'=this.MAILING_CHAIN_ID' =>
'ref.ID'),
131 'POSTING_RECIPIENT' =>
array(
132 'data_type' =>
'Bitrix\Sender\PostingRecipientTable',
133 'reference' =>
array(
'=this.ID' =>
'ref.POSTING_ID'),
135 'POSTING_READ' =>
array(
136 'data_type' =>
'Bitrix\Sender\PostingReadTable',
137 'reference' =>
array(
'=this.ID' =>
'ref.POSTING_ID'),
139 'POSTING_CLICK' =>
array(
140 'data_type' =>
'Bitrix\Sender\PostingClickTable',
141 'reference' =>
array(
'=this.ID' =>
'ref.POSTING_ID'),
143 'POSTING_UNSUB' =>
array(
144 'data_type' =>
'Bitrix\Sender\PostingUnsubTable',
145 'reference' =>
array(
'=this.ID' =>
'ref.POSTING_ID'),
162 if(array_key_exists(
'ID',
$data[
'primary']))
164 $listId[] =
$data[
'primary'][
'ID'];
169 foreach(
$data[
'primary'] as $primKey => $primVal)
172 $tableDataList = static::getList(
array(
173 'select' =>
array(
'ID'),
176 while($tableData = $tableDataList->fetch())
178 $listId[] = $tableData[
'ID'];
183 foreach($listId as $primaryId)
185 $primary =
array(
'POSTING_ID' => $primaryId);
209 'select' =>
array(
'ID'),
211 '=CONTACT_ID' =>
$ar[
'CONTACT_ID'],
212 '=POSTING_ID' =>
$ar[
'POSTING_ID']
240 return PostingBuilder::create()->run($postingId, $checkDuplicate);
256 $filter = !$customFilter?[
'POSTING_ID' => $id] : [
'LOGIC' =>
'AND',[
'POSTING_ID' => $id],$customFilter];
262 while($postingContact = $postingContactDb->fetch())
263 $statusList[$postingContact[
'STATUS']] = intval($postingContact[
'CNT']);
277 $ar = static::getRecipientCountByStatus($id);
294 $ar = static::getRecipientCountByStatus($id);
296 foreach (
$ar as
$k => $v)
307 if(
$count > 0 && $countNew > 0)
342 \CTimeZone::disable();
344 'DELETE FROM %s WHERE %s',
349 \CTimeZone::enable();
364 return 'b_sender_posting_read';
374 'data_type' =>
'integer',
376 'autocomplete' =>
true,
378 'POSTING_ID' =>
array(
380 'data_type' =>
'integer',
382 'RECIPIENT_ID' =>
array(
384 'data_type' =>
'integer',
386 'DATE_INSERT' =>
array(
387 'data_type' =>
'datetime',
388 'default_value' =>
new MainType\
DateTime(),
405 $isRead = Model\Posting\RecipientTable::getList([
407 '=ID' =>
$data[
'RECIPIENT_ID'],
414 Model\Posting\RecipientTable::update(
$data[
'RECIPIENT_ID'], [
'IS_READ' =>
'Y']);
417 Model\PostingTable::update(
$data[
'POSTING_ID'],
array(
437 \CTimeZone::disable();
439 'DELETE FROM %s WHERE %s',
444 \CTimeZone::enable();
458 return 'b_sender_posting_click';
468 'data_type' =>
'integer',
470 'autocomplete' =>
true,
472 'POSTING_ID' =>
array(
474 'data_type' =>
'integer',
476 'RECIPIENT_ID' =>
array(
478 'data_type' =>
'integer',
480 'DATE_INSERT' =>
array(
481 'data_type' =>
'datetime',
482 'default_value' =>
new MainType\
DateTime(),
485 'data_type' =>
'string',
488 'data_type' =>
'Bitrix\Sender\PostingTable',
489 'reference' =>
array(
'=this.POSTING_ID' =>
'ref.ID'),
506 $isClicked = Model\Posting\RecipientTable::getList([
508 '=ID' =>
$data[
'RECIPIENT_ID'],
515 Model\Posting\RecipientTable::update(
$data[
'RECIPIENT_ID'], [
'IS_CLICK' =>
'Y']);
518 Model\PostingTable::update(
$data[
'POSTING_ID'],
array(
539 \CTimeZone::disable();
541 'DELETE FROM %s WHERE %s',
546 \CTimeZone::enable();
559 return 'b_sender_posting_unsub';
569 'data_type' =>
'integer',
571 'autocomplete' =>
true,
573 'POSTING_ID' =>
array(
575 'data_type' =>
'integer',
577 'RECIPIENT_ID' =>
array(
579 'data_type' =>
'integer',
581 'DATE_INSERT' =>
array(
582 'data_type' =>
'datetime',
583 'default_value' =>
new MainType\
DateTime(),
586 'data_type' =>
'Bitrix\Sender\PostingTable',
587 'reference' =>
array(
'=this.POSTING_ID' =>
'ref.ID'),
589 'POSTING_RECIPIENT' =>
array(
590 'data_type' =>
'Bitrix\Sender\PostingRecipientTable',
591 'reference' =>
array(
'=this.RECIPIENT_ID' =>
'ref.ID'),
607 $isUnsub = Model\Posting\RecipientTable::getList([
609 '=ID' =>
$data[
'RECIPIENT_ID'],
616 Model\Posting\RecipientTable::update(
$data[
'RECIPIENT_ID'], [
'IS_UNSUB' =>
'Y']);
619 Model\PostingTable::update(
$data[
'POSTING_ID'],
array(
639 \CTimeZone::disable();
641 'DELETE FROM %s WHERE %s',
646 \CTimeZone::enable();
683 return 'b_sender_posting_recipient';
693 'data_type' =>
'integer',
695 'autocomplete' =>
true,
697 'POSTING_ID' =>
array(
699 'data_type' =>
'integer',
702 'data_type' =>
'string',
705 'default_value' => static::SEND_RESULT_NONE,
707 'DATE_SENT' =>
array(
708 'data_type' =>
'datetime',
710 'DATE_DENY' =>
array(
711 'data_type' =>
'datetime',
713 'DATE_UPDATE' =>
array(
714 'data_type' =>
'datetime',
716 'default_value' =>
new MainType\
DateTime(),
718 'CONTACT_ID' =>
array(
720 'data_type' =>
'integer',
723 'data_type' =>
'integer',
726 'data_type' =>
'text',
727 'serialized' =>
true,
730 'data_type' =>
'integer',
733 'data_type' =>
'string',
736 'data_type' =>
'string',
739 'data_type' =>
'string',
742 'data_type' =>
'Bitrix\Sender\ContactTable',
743 'reference' =>
array(
'=this.CONTACT_ID' =>
'ref.ID'),
746 'data_type' =>
'Bitrix\Sender\PostingTable',
747 'reference' =>
array(
'=this.POSTING_ID' =>
'ref.ID'),
749 'POSTING_READ' =>
array(
750 'data_type' =>
'Bitrix\Sender\PostingReadTable',
751 'reference' =>
array(
'=this.ID' =>
'ref.RECIPIENT_ID'),
753 'POSTING_CLICK' =>
array(
754 'data_type' =>
'Bitrix\Sender\PostingClickTable',
755 'reference' =>
array(
'=this.ID' =>
'ref.RECIPIENT_ID'),
757 'POSTING_UNSUB' =>
array(
758 'data_type' =>
'Bitrix\Sender\PostingUnsubTable',
759 'reference' =>
array(
'=this.ID' =>
'ref.RECIPIENT_ID'),
778 'NAME' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_NAME"),
779 'DESC' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_NAME_DESC"),
782 'CODE' =>
'EMAIL_TO',
783 'NAME' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_EMAIL"),
784 'DESC' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_EMAIL_DESC"),
791 'NAME' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_USER_ID"),
792 'DESC' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_USER_ID_DESC"),
795 'CODE' =>
'SITE_NAME',
796 'NAME' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_SITE_NAME"),
797 'DESC' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_SITE_NAME_DESC"),
800 'CODE' =>
'SENDER_CHAIN_CODE',
801 'NAME' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_SENDER_CHAIN_ID"),
802 'DESC' => Loc::getMessage(
"SENDER_POSTING_PERSONALIZE_FIELD_SENDER_CHAIN_ID_DESC"),
808 (static::$personalizeList ? static::$personalizeList :
array())
818 self::SEND_RESULT_NONE => Loc::getMessage(
'SENDER_POSTING_RECIPIENT_STATUS_N'),
819 self::SEND_RESULT_SUCCESS => Loc::getMessage(
'SENDER_POSTING_RECIPIENT_STATUS_S'),
820 self::SEND_RESULT_ERROR => Loc::getMessage(
'SENDER_POSTING_RECIPIENT_STATUS_E'),
821 self::SEND_RESULT_DENY => Loc::getMessage(
'SENDER_POSTING_RECIPIENT_STATUS_D'),
822 self::SEND_RESULT_WAIT_ACCEPT => Loc::getMessage(
'SENDER_POSTING_RECIPIENT_STATUS_A')
828 return (static::getCount([
'=POSTING_ID' => $postingId,
'=STATUS' => self::SEND_RESULT_NONE]) > 0);
844 \CTimeZone::disable();
846 'DELETE FROM %s WHERE %s',
851 \CTimeZone::enable();
static getRow(array $parameters)
static getList(array $parameters=array())
static deleteList(array $filter)
static onAfterAdd(Entity\Event $event)
static deleteList(array $filter)
static onAfterAdd(Entity\Event $event)
static getConflictFields()
static deleteList(array $filter)
const SEND_RESULT_WAIT_ACCEPT
const SEND_RESULT_SUCCESS
static getPersonalizeList()
static setPersonalizeList(array $personalizeList=null)
static hasUnprocessed($postingId, $threadId=null)
static onDelete(Entity\Event $event)
static deleteList(array $filter)
static getRecipientCountByStatus($id, ?array $customFilter=null)
static getSendPercent($id)
static getRecipientCount($id, $status='')
static addRecipient($ar, $checkDuplicate=false)
static initGroupRecipients($postingId, $checkDuplicate=true)
static getRecipientStatusToPostingFieldMap()
const STATUS_SENT_WITH_ERRORS
static deleteList(array $filter)
static onAfterAdd(Entity\Event $event)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if( $guestStatuses !=='') if(!is_array($guestStatuses)) $statusList