• Модуль: lists
  • Путь к файлу: ~/bitrix/modules/lists/lib/field.php
  • Класс: BitrixListsField
  • Вызов: Field::prepareFieldDataForFilter
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;
}