• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
  • Класс: CTasks
  • Вызов: CTasks::CanCurrentUserViewTopic
static function CanCurrentUserViewTopic($topicID)
{
	$isSocNetModuleIncluded = CModule::IncludeModule("socialnetwork");

	if (($topicID = intval($topicID)) && User::getId())
	{
		if (User::isSuper())
		{
			return true;
		}

		$rsTask = $res = CTasks::GetList([], ["FORUM_TOPIC_ID" => $topicID]);
		if ($arTask = $rsTask->Fetch())
		{
			if (((int)$arTask['GROUP_ID']) > 0)
			{
				if (
					in_array(CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"],
						"tasks", "view_all"), ["G2", "AU"])
				)
				{
					return true;
				}
				elseif (
					$isSocNetModuleIncluded
					&& (false !== CSocNetFeaturesPerms::CurrentUserCanPerformOperation(SONET_ENTITY_GROUP,
							$arTask['GROUP_ID'], 'tasks', 'view_all'))
				)
				{
					return (true);
				}
			}

			$members = self::getMembers($arTask['ID']);
			$arTask['ACCOMPLICES'] = $members[MemberTable::MEMBER_TYPE_ACCOMPLICE];
			$arTask['AUDITORS'] = $members[MemberTable::MEMBER_TYPE_AUDITOR];

			if (
				in_array(User::getId(), array_unique(array_merge([$arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]],
					$arTask["ACCOMPLICES"], $arTask["AUDITORS"])))
			)
			{
				return true;
			}

			$dbRes = CUser::GetList('ID', 'ASC', ['ID' => $arTask["RESPONSIBLE_ID"]],
				['SELECT' => ['UF_DEPARTMENT']]);

			if (
				($arRes = $dbRes->Fetch()) && is_array($arRes['UF_DEPARTMENT'])
				&& count($arRes['UF_DEPARTMENT'])
				> 0
			)
			{
				if (
					in_array(User::getId(), array_keys(CTasks::GetDepartmentManagers($arRes['UF_DEPARTMENT'],
						$arTask["RESPONSIBLE_ID"])))
				)
				{
					return true;
				}
			}
		}
	}

	return false;
}