- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::getSelectSqlByFilter
static function getSelectSqlByFilter(array $filter = [], $alias = '', array $filterParams = [])
{
$userId = intval($filterParams['USER_ID']);
$obUserFieldsSql = new CUserTypeSQL();
$obUserFieldsSql->SetEntity("TASKS_TASK", $alias . "T.ID");
$obUserFieldsSql->SetFilter($filter);
if (isset($filter['::LOGIC']))
{
CTaskAssert::assert($filter['::LOGIC'] === 'AND');
}
$optimized = static::tryOptimizeFilter($filter, $alias . "T", $alias . "TM_SPEC");
$sqlSearch = CTasks::GetFilter($optimized['FILTER'], $alias, $filterParams);
$r = $obUserFieldsSql->GetFilter();
if ($r <> '')
{
$sqlSearch[] = "(" . $r . ")";
}
$params = [
'USER_ID' => $userId,
'JOIN_ALIAS' => $alias,
'SOURCE_ALIAS' => "{$alias}T",
];
$relatedJoins = static::getRelatedJoins([], $filter, [], $params);
$relatedJoins = array_merge($relatedJoins, $optimized['JOINS']);
return "
SELECT {$alias}T.ID
FROM b_tasks {$alias}T
INNER JOIN b_user {$alias}CU ON {$alias}CU.ID = {$alias}T.CREATED_BY
INNER JOIN b_user {$alias}RU ON {$alias}RU.ID = {$alias}T.RESPONSIBLE_ID
" . implode("n", $relatedJoins) . "
" . $obUserFieldsSql->GetJoin($alias . "T.ID") . "
" . (count($sqlSearch) ? " WHERE " . implode(" AND ", $sqlSearch) : "") . "
";
}