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