1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
eventhandler.php
См. документацию.
1<?php
8
9namespace Bitrix\Sender\Integration;
10
11use Bitrix\Main;
12use Bitrix\Main\Entity as MainEntity;
13use Bitrix\Main\Event;
14use Bitrix\Main\Loader;
15use Bitrix\Main\Localization\Loc;
16use Bitrix\Main\ModuleManager;
17use Bitrix\Sender\ContactTable;
18use Bitrix\Sender\Dispatch;
19use Bitrix\Sender\Entity;
20use Bitrix\Sender\Internals\Model;
21use Bitrix\Sender\Internals\Model\LetterTable;
22use Bitrix\Sender\Message;
23use Bitrix\Sender\PostingRecipientTable;
24use Bitrix\Sender\Security\Agreement;
25use Bitrix\Sender\Security\User;
26use Bitrix\Sender\Templates;
27
28Loc::loadMessages(__FILE__);
29
35{
41 public static function onSenderPresetList()
42 {
43 $list = array();
44
45 if (ModuleManager::isModuleInstalled('crm'))
46 {
47 $list[] = 'Bitrix\Sender\Integration\Crm\Preset\Segment';
48 }
49
50 return $list;
51 }
52
58 public static function onSenderCompanyCard()
59 {
60 $list = array();
61
62 if (Loader::includeModule('crm'))
63 {
64 $list[] = Crm\CompanyCard::getArray();
65 }
66
67 return $list;
68 }
69
77 public static function onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
78 {
79 if (ModuleManager::isModuleInstalled('crm'))
80 {
82 }
83
84 if (Bitrix24\Service::isCloud() && $eventData['SEND_RESULT'] && $letter->getMessage()->getCode() === Message\iBase::CODE_MAIL)
85 {
87 }
88 }
89
97 public static function onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
98 {
99 if (ModuleManager::isModuleInstalled('crm'))
100 {
102 }
103
104 foreach ($eventDataArray as $eventData)
105 {
106 $event = new Event('sender', 'OnAfterPostingSendRecipient', [$eventData, $letter]);
107 $event->send();
108 }
109 }
110
117 public static function onAfterPostingRecipientUnsubscribe(array $eventData)
118 {
119 if (Bitrix24\Service::isCloud() && is_array($eventData))
120 {
122 }
123 }
124
131 public static function onConstantList($className)
132 {
133 // sale
134 if (Loader::includeModule('sale') && !Bitrix24\Service::isCloud())
135 {
136 if (Templates\Category::class === $className)
137 {
139 }
140 }
141
142 return [];
143 }
144
151 public static function onTemplateList($messageType)
152 {
153 $list = [
155 ];
156
157 // sale
158 if (Loader::includeModule('sale') && !Bitrix24\Service::isCloud())
159 {
160 foreach (Sale\Preset\TriggerCampaign::getAll() as $item)
161 {
162 foreach ($item['CHAIN'] as $letter)
163 {
165 'ID' => $letter['TEMPLATE_ID'],
166 'TYPE' => $letter['TEMPLATE_TYPE'],
167 'CATEGORY' => mb_strtoupper($item['CODE']),
168 'MESSAGE_CODE' => Message\iBase::CODE_MAIL,
169 'VERSION' => 2,
170 'IS_TRIGGER' => true,
171 'HOT' => false,
172 'ICON' => false,
173
174 'NAME' => $letter['SUBJECT'],
175 'DESC' => '',
176 'FIELDS' => array(
177 'SUBJECT' => array(
178 'CODE' => 'SUBJECT',
179 'VALUE' => $letter['SUBJECT'],
180 ),
181 'MESSAGE' => array(
182 'CODE' => 'MESSAGE',
183 'VALUE' => $letter['MESSAGE'],
184 'ON_DEMAND' => true
185 ),
186 ),
187 );
188 }
189 }
190 }
191
192 return isset($list[$messageType]) ? $list[$messageType] : [];
193 }
194
201 public static function onConnectorList(array $data = array())
202 {
203 // sender
204 $data['CONNECTOR'][] = 'Bitrix\Sender\Integration\Sender\Connectors\Recipient';
205 $data['CONNECTOR'][] = 'Bitrix\Sender\Integration\Sender\Connectors\Contact';
206 $data['CONNECTOR'][] = 'Bitrix\Sender\Integration\Sender\Connectors\UnSubscribers';
207
208 // crm
209 if (Loader::includeModule('crm'))
210 {
211 $data['CONNECTOR'][] = 'Bitrix\Sender\Integration\Crm\Connectors\Lead';
212 $data['CONNECTOR'][] = 'Bitrix\Sender\Integration\Crm\Connectors\Client';
213 }
214
215 return $data;
216 }
217
224 public static function onTriggerList(array $data = [])
225 {
226 $data['TRIGGER'] = [
227 'Bitrix\Sender\Integration\Main\Triggers\UserAuth',
228 'Bitrix\Sender\Integration\Main\Triggers\UserDontAuth',
229 ];
230
231 return $data;
232 }
233
239 public static function onSenderMessageList()
240 {
241 $list = array();
242
243 // mail
244 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\MessageMail';
245
246 // sms
247 if (MessageService\Sms\Service::canUse())
248 {
249 $list[] = 'Bitrix\Sender\Integration\MessageService\Sms\MessageSms';
250 }
251
252 // im
253 if (Im\Service::canUse())
254 {
255 $list[] = 'Bitrix\Sender\Integration\Im\MessageIm';
256 }
257
258 // call
259 if (VoxImplant\Service::canUse())
260 {
261 $list[] = 'Bitrix\Sender\Integration\VoxImplant\MessageCall';
262 $list[] = 'Bitrix\Sender\Integration\VoxImplant\MessageAudioCall';
263 }
264
265 // web_hook
266 //$list[] = 'Bitrix\Sender\Integration\Sender\WebHook\MessageWebHook';
267
268 // Ads
269 if (Seo\Ads\Service::canUse())
270 {
271 $adsList = array(
272 'Bitrix\Sender\Integration\Seo\Ads\MessageYa',
273 \Bitrix\Sender\Integration\Seo\Ads\MessageLookalikeYandex::class,
274 'Bitrix\Sender\Integration\Seo\Ads\MessageGa',
275 \Bitrix\Sender\Integration\Seo\Ads\MessageVk::class,
276 'Bitrix\Sender\Integration\Seo\Ads\MessageFb',
277 'Bitrix\Sender\Integration\Seo\Ads\MessageMarketingFb',
278 'Bitrix\Sender\Integration\Seo\Ads\MessageMarketingInstagram',
279 'Bitrix\Sender\Integration\Seo\Ads\MessageLookalikeFb',
280 );
281 foreach ($adsList as $adsClass)
282 {
283 if (!Bitrix24\Service::isAdVisibleInRegion($adsClass::CODE))
284 {
285 continue;
286 }
287
288 $list[] = $adsClass;
289 }
290 }
291
292 // Return Customer
293 if (Crm\ReturnCustomer\Service::canUse())
294 {
295 $list[] = 'Bitrix\Sender\Integration\Crm\ReturnCustomer\MessageLead';
296 $list[] = 'Bitrix\Sender\Integration\Crm\ReturnCustomer\MessageDeal';
297 }
298
299 if (Bitrix24\Service::isMasterYandexVisibleInRegion())
300 {
301 $list[] = \Bitrix\Sender\Integration\Yandex\Master\MessageMasterYandex::class;
302 }
303 if(Bitrix24\Service::isTolokaVisibleInRegion())
304 {
305 $list[] = 'Bitrix\Sender\Integration\Yandex\Toloka\MessageToloka';
306 }
307
308 return $list;
309 }
310
316 public static function onSenderTriggerCampaignPreset()
317 {
318 $list = [];
319
320 // sale
321 if (Loader::includeModule('sale') && !Bitrix24\Service::isCloud())
322 {
323 $list = array_merge($list, Sale\Preset\TriggerCampaign::getAll());
324 }
325
326
327 return $list;
328 }
330 {
331 $list = [];
332 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\ConsentBuilderMail';
333 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\TestConsentBuilderMail';
334 return $list;
335 }
336 public static function onSenderConsentResponseList(): array
337 {
338 $list = [];
339 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\ConsentResponseMail';
340 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\TestConsentResponseMail';
341 return $list;
342 }
343
348 public static function onSenderTransportList()
349 {
350 $list = array();
351
352 // mail
353 $list[] = 'Bitrix\Sender\Integration\Sender\Mail\TransportMail';
354
355 // sms
356 if (MessageService\Sms\Service::canUse())
357 {
358 $list[] = 'Bitrix\Sender\Integration\MessageService\Sms\TransportSms';
359 }
360
361 // im
362 if (Im\Service::canUse())
363 {
364 $list[] = 'Bitrix\Sender\Integration\Im\TransportIm';
365 }
366
367 // call
368 if (VoxImplant\Service::canUse())
369 {
370 $list[] = 'Bitrix\Sender\Integration\VoxImplant\TransportCall';
371 $list[] = 'Bitrix\Sender\Integration\VoxImplant\TransportAudioCall';
372 }
373
374 // web_hook
375 //$list[] = 'Bitrix\Sender\Integration\Sender\WebHook\TransportWebHook';
376
377 // Ads
378 if (Seo\Ads\Service::canUse())
379 {
380 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportYa';
381 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportGa';
382 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportVk';
383 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportFb';
384 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportMarketingFb';
385 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportMarketingInstagram';
386 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeVk';
387 $list[] = 'Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeFb';
388 $list[] = \Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeYandex::class;
389 }
390
391 // Return Customer
392 if (Crm\ReturnCustomer\Service::canUse())
393 {
394 $list[] = 'Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportLead';
395 $list[] = 'Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportDeal';
396 }
397
398 $list[] = 'Bitrix\Sender\Integration\Yandex\Toloka\TransportToloka';
399
400 return $list;
401 }
402
410 public static function onBeforeUpdateLetterTable(MainEntity\Event $event, MainEntity\EventResult $result)
411 {
412 $data = $event->getParameters();
413
414 if (Bitrix24\Service::isCloud() && isset($data['fields']['STATUS']))
415 {
416 $oldRow = LetterTable::getRowById($data['primary']['ID']);
417 $updatedBy = $data['fields']['UPDATED_BY'] ?? $oldRow['UPDATED_BY'];
418
419 if (in_array($data['fields']['STATUS'], Dispatch\Semantics::getWorkStates()))
420 {
421 $user = new User($updatedBy);
422 if (!$user->isAgreementAccepted())
423 {
424 $result->addError(
425 new MainEntity\EntityError(Agreement::getErrorText(), 'NEED_ACCEPT_AGREEMENT')
426 );
427 return;
428 }
429
430 $letter = Entity\Letter::createInstanceById($data['primary']['ID']);
431
432 if (is_null($letter))
433 {
434 $result->addError(
435 new MainEntity\EntityError(
436 Loc::getMessage("SENDER_LETTER_ONBEFOREUPDATE_ERROR_LETTER_NOT_AVAILABLE"), 'FEATURE_NOT_AVAILABLE'
437 )
438 );
439 return;
440 }
441
442 if (!$letter->getMessage()->isAvailable())
443 {
444 if ($letter->getState()->isWaiting() || $letter->getState()->isSending())
445 {
446 $letter->stop();
447 }
448
449 $result->addError(
450 new MainEntity\EntityError(
451 Loc::getMessage("SENDER_LETTER_ONBEFOREUPDATE_ERROR_FEATURE_NOT_AVAILABLE"), 'FEATURE_NOT_AVAILABLE'
452 )
453 );
454 return;
455 }
456
457 $isEmail = ($oldRow['MESSAGE_CODE'] === Message\iBase::CODE_MAIL);
458 $isEmailBlocked = Bitrix24\Limitation\Rating::isBlocked();
459 if ($isEmail && $isEmailBlocked)
460 {
461 $result->addError(
462 new MainEntity\EntityError(
463 Bitrix24\Limitation\Rating::getNotifyText('blocked')
464 )
465 );
466 }
467
468 if ($isEmail)
469 {
470 // check sender email:
471 $emailFrom = $letter->getMessage()->getConfiguration()->getOption('EMAIL_FROM')->getValue();
472 if (!Sender\AllowedSender::isAllowed($emailFrom, $updatedBy))
473 {
474 $result->addError(
475 new MainEntity\EntityError(
476 Loc::getMessage("SENDER_LETTER_ONBEFOREUPDATE_ERROR_INVALID_FROM_EMAIL"), 'WRONG_EMAIL_FROM'
477 )
478 );
479 }
480 }
481 }
482 }
483 }
484
491 public static function onMailEventMailChangeStatus($result)
492 {
493 if (!$result->isBelongTo('sender', 'rcpt'))
494 {
495 return;
496 }
497
498 // return if status already updated
500 'select' => [
501 'STATUS', 'POSTING_ID', 'CONTACT_ID',
502 'CONTACT_IS_SEND_SUCCESS' => 'CONTACT.IS_SEND_SUCCESS'
503 ],
504 'filter' => ['=ID' => $result->getEntityId()]
505 ]);
506 if (!$row)
507 {
508 return;
509 }
510
511 if (!$result->isError())
512 {
513 // update contact send_success flag
514 if ($row['CONTACT_IS_SEND_SUCCESS'] !== 'Y')
515 {
516 ContactTable::update($row['CONTACT_ID'], ['IS_SEND_SUCCESS' => 'Y']);
517 }
518 }
519 elseif ($result->isPermanentError())
520 {
521 // return if status already updated
522 if ($row['STATUS'] === PostingRecipientTable::SEND_RESULT_ERROR)
523 {
524 return;
525 }
526
527 // update recipient status
528 Model\Posting\RecipientTable::update(
529 $result->getEntityId(),
531 );
532
533 // update posting counters
534 Model\PostingTable::update(
535 $row['POSTING_ID'],
536 [
537 'COUNT_SEND_ERROR' => new Main\DB\SqlExpression('?# + 1', 'COUNT_SEND_ERROR'),
538 'COUNT_SEND_SUCCESS' => new Main\DB\SqlExpression('?# - 1', 'COUNT_SEND_SUCCESS')
539 ]
540 );
541
542 // update daily limit counters
543 if (Bitrix24\Service::isCloud())
544 {
546 }
547 }
548 }
549}
Определения event.php:5
static getRow(array $parameters)
Определения datamanager.php:398
static update($primary, array $data)
Определения datamanager.php:1256
static createInstanceById($id=null, array $messageCodes=[])
Определения letter.php:198
static onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
Определения eventhandler.php:38
static onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
Определения eventhandler.php:86
static onConnectorList(array $data=array())
Определения eventhandler.php:201
static onSenderConsentMessageBuildersList()
Определения eventhandler.php:329
static onMailEventMailChangeStatus($result)
Определения eventhandler.php:491
static onTriggerList(array $data=[])
Определения eventhandler.php:224
static onSenderConsentResponseList()
Определения eventhandler.php:336
static onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
Определения eventhandler.php:77
static onSenderTriggerCampaignPreset()
Определения eventhandler.php:316
static onTemplateList($messageType)
Определения eventhandler.php:151
static onConstantList($className)
Определения eventhandler.php:131
static onBeforeUpdateLetterTable(MainEntity\Event $event, MainEntity\EventResult $result)
Определения eventhandler.php:410
static onAfterPostingRecipientUnsubscribe(array $eventData)
Определения eventhandler.php:117
static onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
Определения eventhandler.php:97
const SEND_RESULT_ERROR
Определения posting.php:672
static getErrorText()
Определения agreement.php:98
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
const CODE_MAIL
Определения ibase.php:17
Определения arrayresult.php:2
Определения ufield.php:9
Определения event.php:8
$user
Определения mysql_to_pgsql.php:33
Определения adapter.php:9
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393