• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/classes/general/report.php
  • Класс: CReport
  • Вызов: CReport::sqlizeFilter
static function sqlizeFilter($filter)
{
	$newFilter = [];

	foreach ($filter as $fId => $filterInfo)
	{
		$iFilterItems = [];

		foreach ($filterInfo as $key => $subFilter)
		{
			// collect only fields and subfilters
			if ($key === 'LOGIC')
			{
				continue;
			}

			if ($subFilter['type'] == 'field')
			{

				$compare = self::$iBlockCompareVariations[$subFilter['compare']];
				$name = $subFilter['name'];
				$value = $subFilter['value'];

				switch ($compare)
				{
					case '!':
					case '!%':
						$iFilterItems[] = [
							'LOGIC' => 'OR',
							$compare.$name => $value,
							'='.$name => false
						];
						break;
					/** @noinspection PhpMissingBreakStatementInspection */
					case '>%':
						$compare = '';
						$value = $value.'%';
					default:
						$iFilterItems[] = [$compare.$name => $value];
				}
			}
			else if ($subFilter['type'] == 'filter')
			{
				// hold link to another filter
				$iFilterItems[] = 'FILTER_'.$subFilter['name'];
			}
		}

		if (!empty($iFilterItems))
		{
			$iFilterItems['LOGIC'] = $filterInfo['LOGIC'];
			$newFilter[$fId] = $iFilterItems;
		}
	}

	return $newFilter;
}