• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_rest.php
  • Класс: CVoxImplantRestService
  • Вызов: CVoxImplantRestService::checkStatisticFilter
static function checkStatisticFilter($arFilter)
{
	if (!is_array($arFilter))
	{
		return [];
	}

	$arFilter = array_change_key_case($arFilter, CASE_UPPER);

	foreach ($arFilter as $key => $value)
	{
		$splittedFilterDefinition = self::splitToOperationAndField($key);

		if (is_array($value))
		{
			// ticket 178188: error happens when trying to filter by ID field using non-plain array as a value
			// It should be temporary fix as it should be handled in the ORM module (I think so)
			$value = $splittedFilterDefinition['field'] === 'ID' ? array_values($value) : $value;

			if (empty($value))
			{
				unset($arFilter[$key]);
				continue;
			}

			$isPlainArray = true;
			foreach ($value as $subKey => $subValue)
			{
				if(!is_int($subKey))
				{
					$isPlainArray = false;
					break;
				}
			}

			if (!$isPlainArray)
			{
				$subFilter = static::checkStatisticFilter($value);
				if (!empty($subFilter) && is_array($subFilter))
				{
					$arFilter[$key] = $subFilter;
				}
				else
				{
					unset($arFilter[$key]);
				}
				continue;
			}
		}

		if (!is_null($splittedFilterDefinition))
		{
			$operation = $splittedFilterDefinition['operation'];
			$field = $splittedFilterDefinition['field'];

			if (!in_array($operation, self::$allowedFilterOperations))
			{
				unset($arFilter[$key]);
			}
			else
			{
				switch ($field)
				{
					case 'CALL_START_DATE':
						$value = CRestUtil::unConvertDateTime($value, true);
						break;
					case 'CALL_TYPE':
						$field = 'INCOMING';
						break;
					case 'CRM_BINDINGS.ENTITY_TYPE':
					case 'CRM_BINDINGS.ENTITY_ID':
						if ($operation == '')
						{
							$operation = '=';
						}
						break;
				}
				if ($operation == '' && StatisticTable::getEntity()->hasField($field))
				{
					$operation = '=';
				}

				$newKey = $operation . $field;
				if ($key != $newKey)
				{
					unset($arFilter[$key]);
				}
				$arFilter[$newKey] = $value;
			}
		}
		else
		{
			unset($arFilter[$key]);
		}
	}

	return $arFilter;
}