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