• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/controller/controlbutton.php
  • Класс: BitrixIntranetControllerControlButton
  • Вызов: ControlButton::getTaskChat
private function getTaskChat($entityId)
{
	$chatId = '';

	global $USER;
	$userId = $USER->GetID();

	if (
		!Loader::includeModule('tasks')
		|| !Loader::includeModule('im')
		|| !BitrixTasksAccessTaskAccessController::can(
			$userId,
			BitrixTasksAccessActionDictionary::ACTION_TASK_READ,
			$entityId
		)
	)
	{
		return $chatId;
	}

	$taskData = $this->getTaskData($entityId);

	$res = BitrixImModelChatTable::getList(array(
		'select' => ['ID'],
		'filter' => [
			'=ENTITY_TYPE' => 'TASKS',
			'=ENTITY_ID' => $entityId,
		],
		'limit' => 1
	));

	if ($chat = $res->fetch())
	{
		$chatId = $chat['ID'];
		IntranetControlButton::addUserToChat($chatId, $userId);
	}
	else
	{
		$lockName = "chat_create_task_{$entityId}";
		if (!Application::getConnection()->lock($lockName))
		{
			$this->addError(new Error(
					Loc::getMessage('INTRANET_CONTROL_BUTTON_CREATE_CHAT_LOCK_ERROR'), 'lock_error')
			);
			return null;
		}

		$chatId = IntranetControlButton::createTaskChat($taskData, $userId);

		Application::getConnection()->unlock($lockName);
	}

	return $chatId;
}