static function prepareFieldDataForFilter(array $field)
{
$customEntityType = array('employee');
if($field['TYPE'] == 'SORT' || $field['TYPE'] == 'N')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'number',
'filterable' => ''
);
}
elseif($field['TYPE'] == 'ACTIVE_FROM' || $field['TYPE'] == 'ACTIVE_TO')
{
$result = array(
'id' => 'DATE_'.$field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'date',
'filterable' => '',
'dateFilter' => true
);
}
elseif($field['TYPE'] == 'DATE_CREATE' || $field['TYPE'] == 'TIMESTAMP_X')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'date',
'filterable' => '',
'dateFilter' => true
);
}
elseif($field['TYPE'] == 'CREATED_BY' || $field['TYPE'] == 'MODIFIED_BY')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'custom_entity',
'filterable' => '',
);
}
elseif($field['TYPE'] == 'L')
{
$items = array();
$queryObject = CIBlockProperty::getPropertyEnum($field['ID'], array('SORT' => 'ASC', 'NAME' => 'ASC'));
while($queryResult = $queryObject->fetch())
$items[$queryResult['ID']] = $queryResult['VALUE'];
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'list',
'items' => $items,
'params' => array('multiple' => 'Y'),
'filterable' => ''
);
}
elseif($field['TYPE'] == 'E')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'custom_entity',
'filterable' => '',
'customFilter' => array('BitrixIblockHelpersFilterProperty', 'addFilter')
);
}
elseif($field['TYPE'] == 'E:EList')
{
$items = array();
$queryObject = CIBlockElement::getList(
array('SORT' => 'ASC'),
array('IBLOCK_ID' => $field['LINK_IBLOCK_ID']),
false,
false,
array('ID', 'NAME', 'SORT')
);
while($queryResult = $queryObject->fetch())
$items[$queryResult['ID']] = $queryResult['NAME'];
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'list',
'items' => $items,
'params' => array('multiple' => 'Y'),
'filterable' => ''
);
}
elseif($field['TYPE'] == 'G')
{
$items = array();
$queryObject = CIBlockSection::getList(
array('LEFT_MARGIN' => 'ASC'),
array('IBLOCK_ID' => $field['LINK_IBLOCK_ID']),
false,
array('ID', 'IBLOCK_ID', 'NAME', 'DEPTH_LEVEL', 'LEFT_MARGIN')
);
while($queryResult = $queryObject->fetch())
$items[$queryResult['ID']] = str_repeat('. ', $queryResult['DEPTH_LEVEL'] - 1).$queryResult['NAME'];
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'list',
'items' => $items,
'params' => array('multiple' => 'Y'),
'filterable' => ''
);
}
elseif(is_array($field['PROPERTY_USER_TYPE']) && !empty($field['PROPERTY_USER_TYPE']['USER_TYPE']))
{
$type = $field['PROPERTY_USER_TYPE']['USER_TYPE'];
if($type == 'Date')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'date',
'filterable' => '',
'dateFilter' => true
);
}
elseif($type == 'DateTime')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'date',
'time' => true,
'filterable' => '',
'dateFilter' => true
);
}
elseif($type == 'Sequence')
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'number',
'filterable' => ''
);
}
elseif($type === 'ECrm')
{
$result = [
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'dest_selector',
'params' => ElementType::getDestSelectorParametersForFilter(
$field['USER_TYPE_SETTINGS'],
$isMultiple = (isset($field['MULTIPLE']) && $field['MULTIPLE'] === 'Y')
),
'filterable' => '',
];
}
elseif(in_array($type, $customEntityType))
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'custom_entity',
'filterable' => '',
);
}
else
{
if(array_key_exists('GetPublicFilterHTML', $field['PROPERTY_USER_TYPE']))
{
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'type' => 'custom',
'enable_settings' => false,
'value' => call_user_func_array(
$field['PROPERTY_USER_TYPE']['GetPublicFilterHTML'],
array(
$field,
array(
'VALUE' => $field['FIELD_ID'],
'FORM_NAME'=>'filter_'.$field['GRID_ID'],
'GRID_ID' => $field['GRID_ID']
)
)
),
'filterable' => ''
);
}
else
{
$listLikeProperty = array('S:HTML');
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'filterable' => in_array($field['TYPE'], $listLikeProperty) ? '?' : ''
);
}
}
if(array_key_exists('AddFilterFields', $field['PROPERTY_USER_TYPE']))
$result['customFilter'] = $field['PROPERTY_USER_TYPE']['AddFilterFields'];
}
else
{
$listLikeField = array('NAME', 'DETAIL_TEXT', 'PREVIEW_TEXT', 'S');
$result = array(
'id' => $field['FIELD_ID'],
'name' => $field['NAME'],
'filterable' => in_array($field['TYPE'], $listLikeField) ? '?' : ''
);
if($field['FIELD_ID'] == 'NAME')
{
$result['default'] = true;
}
}
return $result;
}