• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
  • Класс: CTasks
  • Вызов: CTasks::parseLogicProblemFilter
static function parseLogicProblemFilter($problem)
{
	$filter = Query::filter();

	foreach ($problem as $key => $condition)
	{
		if (static::isSubFilterKey($key))
		{
			$filter->where(static::parseLogicProblemFilter($condition));
			continue;
		}

		if ($key === '::LOGIC')
		{
			$filter->logic($condition);
			continue;
		}

		$fieldKeyData = static::parseFieldKey($key);
		$fieldKeyName = ($fieldKeyData['FIELD_NAME'] === 'REAL_STATUS' ? 'STATUS' : $fieldKeyData['FIELD_NAME']);
		$fieldKeyOperator = $fieldKeyData['OPERATOR'];

		if (in_array($fieldKeyName, ['IS_MUTED', 'IS_PINNED', 'IS_PINNED_IN_GROUP', 'WITH_NEW_COMMENTS'], true))
		{
			continue;
		}

		if (mb_strpos($fieldKeyName, 'REFERENCE:') === 0)
		{
			$filter->whereColumn(mb_substr($fieldKeyName, 10), $fieldKeyOperator, $condition);
		}
		elseif ($fieldKeyOperator === '=')
		{
			if ($condition === null)
			{
				$filter->whereNull($fieldKeyName);
			}
			elseif (is_array($condition))
			{
				$filter->where($fieldKeyName, 'in', $condition);
			}
		}
		else
		{
			$filter->where($fieldKeyName, $fieldKeyOperator, $condition);
		}
	}

	return ($filter->hasConditions() ? $filter : []);
}