• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/filter/entityufdataprovider.php
  • Класс: BitrixMainFilterEntityUFDataProvider
  • Вызов: EntityUFDataProvider::prepareFields
public function prepareFields()
{
	$result = array();
	foreach($this->getUserFields() as $fieldName => $userField)
	{
		if (
			$userField['SHOW_FILTER'] === 'N'
			|| $userField['USER_TYPE']['BASE_TYPE'] === 'file'
		)
		{
			continue;
		}

		$typeID = $userField['USER_TYPE']['USER_TYPE_ID'];
		//$isMultiple = isset($userField['MULTIPLE']) && $userField['MULTIPLE'] === 'Y';

		$fieldLabel = $userField['LIST_FILTER_LABEL'] ?? '';
		if($fieldLabel === '')
		{
			if(isset($userField['LIST_COLUMN_LABEL']))
			{
				$fieldLabel = $userField['LIST_COLUMN_LABEL'];
			}
			elseif(isset($userField['EDIT_FORM_LABEL']))
			{
				$fieldLabel = $userField['EDIT_FORM_LABEL'];
			}
		}
		if ($fieldLabel == '')
		{
			$fieldLabel = $fieldName;
		}

		if($typeID === 'employee')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'entity_selector',
					'name' => $fieldLabel,
					'partial' => true,
				]
			);
		}
		elseif($typeID === 'string' || $typeID === 'url' || $typeID === 'address' || $typeID === 'money')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'text',
					'name' => $fieldLabel,
					'data' => [
						'additionalFilter' => [
							'isEmpty',
							'hasAnyValue',
						],
					],
				]
			);
			continue;
		}
		elseif($typeID === 'integer' || $typeID === 'double')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'number',
					'name' => $fieldLabel,
					'data' => [
						'additionalFilter' => [
							'isEmpty',
							'hasAnyValue',
						],
					],
				]
			);
			continue;
		}
		elseif($typeID === 'boolean')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				array(
					'type' => 'checkbox',
					'name' => $fieldLabel,
					'data' => array('valueType' => 'numeric')
				)
			);
		}
		elseif($typeID === 'datetime' || $typeID === 'date')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'date',
					'name' => $fieldLabel,
					'data' =>
					[
						'time' => $typeID === 'datetime',
						'additionalFilter' => [
							'isEmpty',
							'hasAnyValue',
						],
					],
				]
			);
		}
		elseif(
			($typeID === 'enumeration' || $typeID === 'crm_status')
			&& isset($userField['SETTINGS']['DISPLAY'])
			&& $userField['SETTINGS']['DISPLAY'] === EnumType::DISPLAY_DIALOG
		)
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'entity_selector',
					'name' => $fieldLabel,
					'partial' => true,
				]
			);
		}
		elseif(
			$typeID === 'enumeration'
			|| $typeID === 'crm_status'
			|| $typeID === 'iblock_element'
			|| $typeID === 'iblock_section'
		)
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				[
					'type' => 'list',
					'name' => $fieldLabel,
					'partial' => true,
				]
			);
		}
		elseif($typeID === 'crm')
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				array(
					'type' => 'dest_selector',
					'name' => $fieldLabel,
					'partial' => true
				)
			);
		}
		else
		{
			$result[$fieldName] = $this->createField(
				$fieldName,
				array(
					'type' => 'custom',
					'name' => $fieldLabel,
					'data' => array('value' => '')
				)
			);
		}
	}

	return $result;
}