• Модуль: biconnector
  • Путь к файлу: ~/bitrix/modules/biconnector/lib/service.php
  • Класс: BitrixBIConnectorService
  • Вызов: Service::applyDimensionsFilters
protected function applyDimensionsFilters(&$sqlWhere, &$canBeFiltered, $tableFields, $dimensionsFilters)
{
	foreach ($dimensionsFilters as $topFilter)
	{
		$andFilter = [
			'LOGIC' => 'OR',
		];
		foreach ($topFilter as $subFilter)
		{
			if ($subFilter['fieldName'] && isset($tableFields[$subFilter['fieldName']]))
			{
				if ($tableFields[$subFilter['fieldName']]['FIELD_TYPE'] === 'datetime')
				{
					if (is_array($subFilter['values']))
					{
						foreach ($subFilter['values'] as $i => $value)
						{
							$subFilter['values'][$i] = ConvertTimeStamp(strtotime($value), 'FULL');
						}
					}
					else
					{
						$subFilter['values'] = ConvertTimeStamp(strtotime($subFilter['values']), 'FULL');
					}
				}
				elseif ($tableFields[$subFilter['fieldName']]['FIELD_TYPE'] === 'date')
				{
					if (is_array($subFilter['values']))
					{
						foreach ($subFilter['values'] as $i => $value)
						{
							$subFilter['values'][$i] = ConvertTimeStamp(strtotime($value), 'SHORT');
						}
					}
					else
					{
						$subFilter['values'] = ConvertTimeStamp(strtotime($subFilter['values']), 'SHORT');
					}
				}

				$negate = $subFilter['type'] === 'EXCLUDE' ? '!' : '';
				switch ($subFilter['operator'])
				{
					case 'EQUALS':
					case 'IN_LIST':
						$andFilter[$negate . '=' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'CONTAINS':
						$andFilter[$negate . '%' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'REGEXP_PARTIAL_MATCH':
					case 'REGEXP_EXACT_MATCH':
						$canBeFiltered = false;
						break;
					case 'IS_NULL':
						$andFilter[$negate . '=' . $subFilter['fieldName']] = false;
						break;
					case 'BETWEEN':
						$andFilter[$negate . '><' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'NUMERIC_GREATER_THAN':
						$andFilter[$negate . '>' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'NUMERIC_GREATER_THAN_OR_EQUAL':
						$andFilter[$negate . '>=' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'NUMERIC_LESS_THAN':
						$andFilter[$negate . '<' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					case 'NUMERIC_LESS_THAN_OR_EQUAL':
						$andFilter[$negate . '<=' . $subFilter['fieldName']] = $subFilter['values'];
						break;
					default:
						$canBeFiltered = false;
				}
			}
		}
		if (count($andFilter) > 1)
		{
			$sqlWhere[] = $andFilter;
		}
	}
}