- Модуль: 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 : []);
}