• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasknotifications.php
  • Класс: CTaskNotifications
  • Вызов: CTaskNotifications::sendMessageEx
static function sendMessageEx(
	$taskId,
	$fromUser,
	array $toUsers,
	array $messages = [],
	array $parameters = []
): bool
{
	if (!isset($parameters['IS_ON_BACKGROUND_JOB']) || $parameters['IS_ON_BACKGROUND_JOB'] === 'Y')
	{
		BitrixTasksInternalsNotificationEventEventHandler::addEvent(
			'message',
			[
				'TASK_ID' => $taskId,
				'FROM_USER' => $fromUser,
				'TO_USERS' => $toUsers,
				'MESSAGES' => $messages,
				'PARAMETERS' => $parameters,
			]
		);
		return true;
	}

	if (!IsModuleInstalled('im') || !CModule::IncludeModule('im'))
	{
		return false;
	}

	if (!$fromUser || (string)$messages['INSTANT'] === '')
	{
		return false;
	}

	if (
		!isset($parameters['EXCLUDE_USERS_WITH_MUTE'])
		|| (isset($parameters['EXCLUDE_USERS_WITH_MUTE']) && $parameters['EXCLUDE_USERS_WITH_MUTE'] === 'Y')
	)
	{
		$toUsers = static::excludeUsersWithMute($toUsers, $taskId);
	}
	unset($parameters['EXCLUDE_USERS_WITH_MUTE']);

	if (empty($toUsers))
	{
		return false;
	}

	$entityCode = 'TASK';
	if ((string)($parameters['ENTITY_CODE'] ?? null) !== '')
	{
		$entityCode = $parameters['ENTITY_CODE'];
		unset($parameters['ENTITY_CODE']);
	}

//		$allowNotCommentNotifications = false;
//		if (
//			isset($parameters['ENTITY_OPERATION']) &&
//			$parameters['ENTITY_OPERATION'] == 'ADD' &&
//			$entityCode == 'TASK'
//		)
//		{
//			$allowNotCommentNotifications = true;
//		}
//
//		// disable all non comments notifications
//		if (!$allowNotCommentNotifications && $entityCode !== 'COMMENT')
//		{
//			return false;
//		}

	if (!isset($messages['EMAIL']))
	{
		$messages['EMAIL'] = $messages['INSTANT'];
	}

	$eventData = $parameters['EVENT_DATA'];
	$notifyEvent = ($parameters['NOTIFY_EVENT'] ?? null);
	$callbacks = ($parameters['CALLBACK'] ?? null);

	unset($parameters['EVENT_DATA'], $parameters['NOTIFY_EVENT'], $parameters['CALLBACK']);

	$notifyType = null;
	if (array_key_exists('NOTIFY_TYPE', $parameters))
	{
		$notifyType = $parameters['NOTIFY_TYPE'];
		unset($parameters['NOTIFY_TYPE']);
	}

	$pushParams = null;
	if (array_key_exists('PUSH_PARAMS', $parameters))
	{
		$pushParams = $parameters['PUSH_PARAMS'];
		unset($parameters['PUSH_PARAMS']);
	}

	$entityOperation = 'ADD';
	if ((string)($parameters['ENTITY_OPERATION'] ?? null) !== '')
	{
		$entityOperation = $parameters['ENTITY_OPERATION'];
		unset($parameters['ENTITY_OPERATION']);
	}

	$params = [
		'FROM_USER_ID' => $fromUser,
		'TO_USER_IDS' => $toUsers,
		'TASK_ID' => (int)$taskId,
		'MESSAGE' => $messages,
		'EVENT_DATA' => $eventData,
		'NOTIFY_EVENT' => $notifyEvent,
		'ENTITY_CODE' => $entityCode,
		'ENTITY_OPERATION' => $entityOperation,
		'CALLBACK' => $callbacks,
		'ADDITIONAL_DATA' => $parameters,
	];

	if ($notifyType)
	{
		$params['NOTIFY_TYPE'] = $notifyType;
	}
	if ($pushParams)
	{
		$params['PUSH_PARAMS'] = $pushParams;
	}

	self::addToNotificationBuffer($params);

	if (!self::$bufferize)
	{
		self::flushNotificationBuffer(false);
	}

	return true;
}