- Модуль: 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;
}
}
}