- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::GetRootSubQuery
static function GetRootSubQuery($filter = [], $aliasPrefix = '', $params = [])
{
$filter = ($params['SOURCE_FILTER'] ?? $filter);
$userId = ($params['USER_ID'] ?? User::getId());
$sqlSearch = ["(PT.ID = " . $aliasPrefix . "T.PARENT_ID)"];
if (
isset($filter['SAME_GROUP_PARENT'])
&& $filter['SAME_GROUP_PARENT'] === 'Y'
)
{
$sqlSearch[] = "(PT.GROUP_ID = " . $aliasPrefix . "T.GROUP_ID
OR (PT.GROUP_ID IS NULL AND " . $aliasPrefix . "T.GROUP_ID IS NULL)
OR (PT.GROUP_ID IS NULL AND " . $aliasPrefix . "T.GROUP_ID = 0)
OR (PT.GROUP_ID = 0 AND " . $aliasPrefix . "T.GROUP_ID IS NULL)
)";
}
unset($filter["ONLY_ROOT_TASKS"], $filter["SAME_GROUP_PARENT"]);
$searchParams = [];
if (array_key_exists('ENABLE_LEGACY_ACCESS', $params))
{
$searchParams['ENABLE_LEGACY_ACCESS'] = $params['ENABLE_LEGACY_ACCESS'];
}
$optimized = static::tryOptimizeFilter($filter, 'PT', 'PTM_SPEC');
$sqlSearch = array_merge($sqlSearch, CTasks::GetFilter($optimized['FILTER'], "P", $searchParams));
$relatedParams = [
'USER_ID' => $userId,
'JOIN_ALIAS' => 'P',
'SOURCE_ALIAS' => 'PT',
];
$relatedJoins = static::getRelatedJoins([], $filter, [], $relatedParams);
$relatedJoins = array_merge($relatedJoins, $optimized['JOINS']);
return "
SELECT PT.ID
FROM b_tasks PT
" . implode("n", $relatedJoins) . "
WHERE " . implode(" AND ", $sqlSearch) . "
";
}