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