• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
  • Класс: instead
  • Вызов: instead::GetByID
static function GetByID($ID, $bCheckPermissions = true, $arParams = [])
{
	$bReturnAsArray = false;
	$bSkipExtraData = false;
	$arGetListParams = [];

	if (isset($arParams['returnAsArray']))
	{
		$bReturnAsArray = ($arParams['returnAsArray'] === true);
	}
	if (isset($arParams['bSkipExtraData']))
	{
		$bSkipExtraData = ($arParams['bSkipExtraData'] === true);
	}

	if (isset($arParams['USER_ID']))
	{
		$arGetListParams['USER_ID'] = $arParams['USER_ID'];
	}

	$permissionUserId = isset($arParams['USER_ID']) ? $arParams['USER_ID'] : User::getId();
	if (
		$bCheckPermissions
		&& !BitrixTasksAccessTaskAccessController::can($permissionUserId, ActionDictionary::ACTION_TASK_READ,
			$ID)
	)
	{
		if ($bReturnAsArray)
		{
			return false;
		}

		$res = new CDBResult();
		$res->initFromArray([]);
		return $res;
	}

	$arFilter = ["ID" => (int)$ID];
	// no further access verification required
	$arFilter["CHECK_PERMISSIONS"] = "N";

	$select = ['*', 'UF_*'];
	if (array_key_exists('select', $arParams))
	{
		$select = $arParams['select'];
	}

	$select = array_unique(array_merge(['ID'], $select));

	$res = CTasks::GetList([], $arFilter, $select, $arGetListParams);
	if ($res && ($task = $res->Fetch()))
	{
		if (array_key_exists('TITLE', $task))
		{
			$task['TITLE'] = BitrixMainTextEmoji::decode($task['TITLE']);
		}

		if (array_key_exists('DESCRIPTION', $task) && $task['DESCRIPTION'] !== '')
		{
			$task['DESCRIPTION'] = BitrixMainTextEmoji::decode($task['DESCRIPTION']);
		}

		if (in_array('AUDITORS', $select) || in_array('ACCOMPLICES', $select) || in_array('*', $select))
		{
			$task["ACCOMPLICES"] = $task["AUDITORS"] = [];
			$rsMembers = CTaskMembers::GetList([], ["TASK_ID" => $ID]);
			while ($arMember = $rsMembers->Fetch())
			{
				if ($arMember["TYPE"] == "A" && (in_array('ACCOMPLICES', $select) || in_array('*', $select)))
				{
					$task["ACCOMPLICES"][] = $arMember["USER_ID"];
				}
				elseif ($arMember["TYPE"] == "U" && (in_array('AUDITORS', $select) || in_array('*', $select)))
				{
					$task["AUDITORS"][] = $arMember["USER_ID"];
				}
			}
		}

		if (!$bSkipExtraData)
		{
			if (in_array('SCENARIO_NAME', $select) || in_array('*', $select))
			{
				$task['SCENARIO_NAME'] = [];
				$scenarios = BitrixTasksInternalsTaskScenarioTable::getList([
					'select' => ['SCENARIO'],
					'filter' => [
						'=TASK_ID' => $ID,
					],
				])->fetchAll();

				foreach ($scenarios as $row)
				{
					$task['SCENARIO_NAME'][] = $row['SCENARIO'];
				}
			}

			if (in_array('TAGS', $select) || in_array('*', $select))
			{
				$arTagsFilter = ["TASK_ID" => $ID];
				$rsTags = CTaskTags::GetList([], $arTagsFilter);
				$task["TAGS"] = [];
				while ($arTag = $rsTags->Fetch())
				{
					$task["TAGS"][] = $arTag["NAME"];
				}
			}

			if (in_array('CHECKLIST', $select) || in_array('*', $select))
			{
				$task["CHECKLIST"] = TaskCheckListFacade::getByEntityId($ID);
			}

			if (in_array('FILES', $select) || in_array('*', $select))
			{
				$rsFiles = CTaskFiles::GetList([], ["TASK_ID" => $ID]);
				$task["FILES"] = [];
				while ($arFile = $rsFiles->Fetch())
				{
					$task["FILES"][] = $arFile["FILE_ID"];
				}
			}

			if (in_array('DEPENDS_ON', $select) || in_array('*', $select))
			{
				$rsDependsOn = CTaskDependence::GetList([], ["TASK_ID" => $ID]);
				$task["DEPENDS_ON"] = [];
				while ($arDependsOn = $rsDependsOn->Fetch())
				{
					$task["DEPENDS_ON"][] = $arDependsOn["DEPENDS_ON_ID"];
				}
			}
		}

		if ($bReturnAsArray)
		{
			return ($task);
		}
		else
		{
			$rsTask = new CDBResult;
			$rsTask->InitFromarray([$task]);

			return $rsTask;
		}
	}
	else
	{
		if ($bReturnAsArray)
		{
			return (false);
		}
		else
		{
			return $res;
		}
	}
}