• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasktools.php
  • Класс: CTasksTools
  • Вызов: CTasksTools::FixForumCommentURL
static function FixForumCommentURL($arData)
{
	if (
		($arData['MODULE_ID'] !== 'FORUM')
		&& ($arData['MODULE_ID'] !== 'forum')
	)
	{
		return (null);
	}

	if ($arData['ENTITY_TYPE_ID'] !== 'FORUM_POST')
		return (null);

	// $arData['PARAM1'] is FORUM_ID
	// Check that forum is of tasks
	$arTasksForums = self::ListTasksForumsAsArray();
	if ( ! in_array( (int) $arData['PARAM1'], $arTasksForums, true) )
		return (null);

	// Get tasks data
	$rsTask = CTasks::GetList(
		array(),
		array('FORUM_TOPIC_ID' => $arData['PARAM2'])
		);
	$arTask = $rsTask->Fetch();
	if ( ! $arTask )
		return (null);

	// Prepare path

	$defSiteId = CSite::GetDefSite();
	$extranetSiteId = false;
	if (CModule::IncludeModule('extranet')
		&& method_exists('CExtranet', 'GetExtranetSiteID')
	)
	{

		$extranetSiteId = CExtranet::GetExtranetSiteID();
	}

	$arFilter = array(
		'UF_DEPARTMENT' => false,
		'ID'            => $arData['USER_ID']
		);

	$rsUser = CUser::GetList(
		'last_name',
		'asc',
		$arFilter,
		array('SELECT' => array('UF_DEPARTMENT'))
		);

	$isExtranetUser = false;

	if ($arUser = $rsUser->Fetch())
		$isExtranetUser = true;

	if ($isExtranetUser && ($extranetSiteId !== false))
	{
		if ($arTask["GROUP_ID"])
		{
			$pathTemplate = str_replace(
				"#group_id#",
				$arTask["GROUP_ID"],
				COption::GetOptionString(
					"tasks",
					"paths_task_group_entry",
					"/extranet/workgroups/group/#group_id#/tasks/task/view/#task_id#/",
					$extranetSiteId
					)
				);

			$pathTemplate = str_replace(
				"#GROUP_ID#",
				$arTask["GROUP_ID"],
				$pathTemplate
				);
		}
		else
		{
			$pathTemplate = COption::GetOptionString(
				"tasks",
				"paths_task_user_entry",
				"/extranet/contacts/personal/user/#user_id#/tasks/task/view/#task_id#/",
				$extranetSiteId
				);
		}
	}
	else
	{
		if ($arTask["GROUP_ID"])
		{
			$pathTemplate = str_replace(
				"#group_id#",
				$arTask["GROUP_ID"],
				COption::GetOptionString(
					"tasks",
					"paths_task_group_entry",
					"/workgroups/group/#group_id#/tasks/task/view/#task_id#/",
					$defSiteId
					)
				);

			$pathTemplate = str_replace(
				"#GROUP_ID#",
				$arTask["GROUP_ID"],
				$pathTemplate
				);
		}
		else
		{
			$pathTemplate = COption::GetOptionString(
				"tasks",
				"paths_task_user_entry",
				"/company/personal/user/#user_id#/tasks/task/view/#task_id#/",
				$defSiteId
				);
		}
	}

	$messageUrl = CComponentEngine::MakePathFromTemplate(
		$pathTemplate,
		array(
			"user_id" => $arData['USER_ID'],
			"task_id" => $arTask["ID"],
			"action"  => "view"
			)
		);

	if($arData['ENTITY_ID'] <> '')
	{
		$messageUrl = BitrixTasksIntegrationForumComment::makeUrl($messageUrl, $arData['ENTITY_ID']);
	}

	// Replace path to correct in URL
	$arData['URL'] = $messageUrl;

	// For extranet users address taken from default site by "like/dislike" feature
	// I don't know why. So replace all links.
	foreach ($arData['LID'] as $siteId => $value)
		$arData['LID'][$siteId] = $messageUrl;

	return ($arData);
}