• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/integration/view/base.php
  • Класс: BitrixRestIntegrationViewBase
  • Вызов: Base::internalizeFilterFields
protected function internalizeFilterFields($fields, array $fieldsInfo): array
{
	$result = [];

	$fieldsInfo = empty($fieldsInfo)? $this->getFields():$fieldsInfo;

	if (is_array($fields) && !empty($fields))
	{
		$listFieldsInfo = $this->getListFieldInfo($fieldsInfo, ['filter'=>['ignoredAttributes'=>[Attributes::HIDDEN]]]);

		foreach ($fields as $rawName=>$value)
		{
			$field = CSqlUtil::GetFilterOperation($rawName);

			$info = isset($listFieldsInfo[$field['FIELD']]) ? $listFieldsInfo[$field['FIELD']]:null;
			if (!$info)
			{
				continue;
			}

			$r = $this->internalizeValue($value, $info);

			if ($r->isSuccess() === false)
			{
				continue;
			}

			$operation = mb_substr($rawName, 0, mb_strlen($rawName) - mb_strlen($field['FIELD']));
			if (isset($info['FORBIDDEN_FILTERS'])
				&& is_array($info['FORBIDDEN_FILTERS'])
				&& in_array($operation, $info['FORBIDDEN_FILTERS'], true))
			{
				continue;
			}

			$rawName = $operation.$this->canonicalizeField($field['FIELD'], $info);

			$result[$rawName] = $r->getData()[0];
		}
	}

	return $result;
}