- Модуль: 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;
}
}
}