- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskprovider.php
- Класс: BitrixTasksProviderTaskProvider
- Вызов: TaskProvider::getListOrm
private function getListOrm($arOrder = [], $arFilter = [], $arSelect = [], $arParams = [], array $arGroup = []): CDBResult
{
$userFields = [];
if (
in_array('UF_*', $arSelect, true)
|| in_array('*', $arSelect, true)
|| !empty(preg_grep('/^UF_/', $arSelect))
)
{
$userFields = TasksUFManager::getInstance()->getFields();
}
if (
empty($arSelect)
|| in_array('*', $arSelect)
)
{
$this->makeArFields();
$arSelect = array_diff(array_keys($this->arFields), ['MESSAGE_ID']);
}
if (!in_array('ID', $arSelect, true))
{
$arSelect[] = 'ID';
}
$arSelect = array_merge($arSelect, $userFields);
$query = new TaskQuery($this->executorId);
$query
->setBehalfUser($this->userId)
->setSelect($arSelect)
->setOrder($arOrder)
->setGroupBy($arGroup)
->setWhere($arFilter)
->setDistinct((bool)($arParams['DISTINCT'] ?? null))
;
if ($this->arParams['MAKE_ACCESS_FILTER'] ?? null)
{
$query->needMakeAccessFilter();
}
if (
(isset($arParams['CHECK_PERMISSIONS']) && $arParams['CHECK_PERMISSIONS'] === 'N')
|| (isset($arFilter['CHECK_PERMISSIONS']) && $arFilter['CHECK_PERMISSIONS'] === 'N')
)
{
$query->skipAccessCheck();
}
if (
isset($arParams['FILTER_PARAMS']['SEARCH_TASK_ONLY'])
&& $arParams['FILTER_PARAMS']['SEARCH_TASK_ONLY'] = 'Y'
)
{
$query->setParam('SEARCH_TASK_ONLY', true);
}
$nPlusOne = isset($arParams['NAV_PARAMS']['getPlusOne']) ? 1 : 0;
$pageSize = isset($arParams['NAV_PARAMS']['nPageSize']) ? (int) $arParams['NAV_PARAMS']['nPageSize'] : 0;
$page =
(isset($arParams['NAV_PARAMS']['iNumPage']) && $arParams['NAV_PARAMS']['iNumPage'] > 0)
? $arParams['NAV_PARAMS']['iNumPage']
: 1;
$navNum = null;
$cnt = null;
// this is a query for subtasks on the task view page
if ($this->isLimitQuery())
{
global $NavNum;
$navNum = (int)$NavNum;
$pageName = 'PAGEN_' . ($navNum + 1);
global ${$pageName};
$page = ${$pageName};
$page = $page > 0 ? (int)$page : (int)($this->arParams['NAV_PARAMS']['iNumPage'] ?? null);
$page = $page > 0 ? $page : 1;
$cnt = $this->getCountOrm($this->arFilter, $this->arParams, $this->arGroup)->Fetch()['CNT'];
$pageSize = $this->arParams['NAV_PARAMS']['nPageSize'] ?? 0;
}
// this is a query with limit which used in BitrixTasksIntegrationUIEntitySelectorTaskProvider etc
$nTopCount = (int)($this->arParams['NAV_PARAMS']['nTopCount'] ?? 0);
if ($nTopCount > 0)
{
$query->setLimit($nTopCount + $nPlusOne);
}
else
{
$query->setLimit($pageSize + $nPlusOne);
$query->setOffset(($page - 1) * $pageSize);
}
try
{
$list = new TaskList();
$tasks = $list->getList($query);
$dbResult = $list->getLastDbResult();
}
catch (Exception $e)
{
throw new TasksException($e->getMessage(), TasksException::TE_SQL_ERROR);
}
$tasks = $this->prepareOrmData($tasks);
$result = new CDBResult($dbResult);
$result->InitFromArray($tasks);
$result->NavPageNomer = $page;
$result->PAGEN = $page;
$result->NavRecordCount = $cnt;
$result->NavPageSize = $pageSize;
$result->NavPageCount = ($pageSize > 0 && !is_null($cnt)) ? ceil($cnt / $pageSize) : null;
$result->NavNum = is_null($navNum) ? null : $navNum + 1;
return $result;
}