- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::makePossibleForwardedFilter
static function makePossibleForwardedFilter($filter)
{
$result = [];
$allowedFields = [
'ID' => true, // number_wo_nulls
'TITLE' => true, // string
'STATUS_CHANGED_BY' => true, // number
'SITE_ID' => true, // string_equal
'PRIORITY' => true, // number_wo_nulls
'STAGE_ID' => true, // number_wo_nulls
'RESPONSIBLE_ID' => true, // number_wo_nulls
'TIME_ESTIMATE' => true, // number_wo_nulls
'CREATED_BY' => true, // number_wo_nulls
'GUID' => true, // string
'XML_ID' => true, // string_equal
'MARK' => true, // string_equal
'ALLOW_CHANGE_DEADLINE' => true, // string_equal
'ALLOW_TIME_TRACKING' => true, // string_equal
'ADD_IN_REPORT' => true, // string_equal
'GROUP_ID' => true, // number
'PARENT_ID' => true, // number
'FORUM_TOPIC_ID' => true, // number
'MATCH_WORK_TIME' => true, // string_equal
//dates
/*
'DATE_START' => true,
'DEADLINE' => true,
'START_DATE_PLAN' => true,
'END_DATE_PLAN' => true,
'CREATED_DATE' => true,
'STATUS_CHANGED_DATE' => true,
*/
];
$stringEqual = [
'SITE_ID' => true, // string_equal
'XML_ID' => true, // string_equal
'MARK' => true, // string_equal
'ALLOW_CHANGE_DEADLINE' => true, // string_equal
'ALLOW_TIME_TRACKING' => true, // string_equal
'ADD_IN_REPORT' => true, // string_equal
'MATCH_WORK_TIME' => true, // string_equal
];
if (is_array($filter) && !empty($filter))
{
// cannot forward filer with LOGIC OR or LOGIC NOT
if (array_key_exists('LOGIC', $filter) && $filter['LOGIC'] != 'AND')
{
return $result;
}
if (array_key_exists('::LOGIC', $filter) && $filter['::LOGIC'] != 'AND')
{
return $result;
}
$filter = BitrixTasksInternalsDataBaseHelperCommon::parseFilter($filter);
foreach ($filter as $k => $condition)
{
$field = $condition['FIELD'];
if (!array_key_exists($field, $allowedFields))
{
continue;
}
// convert like into strict check
if (array_key_exists($field, $stringEqual))
{
// '' => '='
if ($condition['OPERATION'] == 'E')
{
$condition['OPERATION'] = 'I';
unset($condition['ORIG_KEY']);
}
// '!' => '!='
if ($condition['OPERATION'] == 'N')
{
$condition['OPERATION'] = 'NI';
unset($condition['ORIG_KEY']);
}
}
// actually, allow only "equal" and "not equal"
$op = $condition['OPERATION'];
if ($op != 'E' && $op != 'I' && $op != 'N' && $op != 'NI')
{
continue;
}
$result[] = $condition;
}
$result = BitrixTasksInternalsDataBaseHelperCommon::makeFilter($result);
}
return $result;
}