- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/main/eventhandler.php
- Класс: Bitrix\Crm\Integration\Main\EventHandler
- Вызов: EventHandler::onMailEventSendNotification
static function onMailEventSendNotification(Result $result) : void
{
if (
!$result->isError()
|| !$result->isPermanentError()
|| !$result->isBelongTo("crm","act")
|| !$result->isBlacklistable()
|| !Loader::includeModule("im")
)
{
return ;
}
if (0 === $id = \CCrmActivity::ParseUrn($result->getEntityId())["ID"])
{
return;
}
/**@var $notificationRegistry */
static $notificationRegistry;
if (!$notificationRegistry)
{
$notificationRegistry = [];
/*static array-registry and background job needs to deduplicate notification*/
Application::getInstance()->addBackgroundJob(
static function() use (&$notificationRegistry) : void {
/**@var string[] $results*/
foreach ($notificationRegistry as $id => $results)
{
$activity = ActivityTable::query()
->setSelect(["ID","SETTINGS","AUTHOR_ID","EDITOR_ID","SUBJECT"])
->setCacheTtl(self::ACTIVITY_QUERY_TTL)
->where('ID', $id)
->exec();
if (!$activity = $activity->fetch())
{
return;
}
$emails = implode(",", array_unique($results));
$users = array_unique(
array_filter([$activity["AUTHOR_ID"],$activity["EDITOR_ID"]])
);
$message = Loc::getMessage(
"CRM_EMAIL_ERROR_MESSAGE_NOTIFICATION",
array(
"%mail_link_start%" => "",
"%mail_link_end%" => "",
"%blacklist_link_start%" => "",
"%blacklist_link_end%" => "",
"%subject%" => $activity["SUBJECT"],
"%emails%" => $emails
)
);
foreach ($users as $userId)
{
\CIMNotify::Add([
"TO_USER_ID" => $userId,
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "crm",
"NOTIFY_MESSAGE" => $message
]);
}
}
}
);
}
$notificationRegistry[$id] = $notificationRegistry[$id] ?? [];
$notificationRegistry[$id][] = $result->getEmail();
}