• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/landingsource/dataloader.php
  • Класс: BitrixIblockLandingSourceDataLoader
  • Вызов: DataLoader::getFilterPropertiesDescription
static function getFilterPropertiesDescription(array $filter)
	{
		$result = [];

		$operators = [
			IblockPropertyTable::TYPE_STRING => [
				'default' => '?',
				'quickSearch' => '?'
			],
			IblockPropertyTable::TYPE_NUMBER => [
				'default' => '=',
				'exact' => '=',
				'range' => '><',
				'more' => '>',
				'less' => '<'
			],
			IblockPropertyTable::TYPE_LIST => [
				'default' => '='
			],
			IblockPropertyTable::TYPE_ELEMENT => [
				'default' => '='
			],
			IblockPropertyTable::TYPE_SECTION => [
				'default' => '='
			]
		];

		$iterator = IblockPropertyTable::getList([
			'select' => [
				'ID', 'IBLOCK_ID', 'NAME', 'SORT', 'PROPERTY_TYPE',
				'MULTIPLE', 'LINK_IBLOCK_ID', 'FILTRABLE', 'VERSION',
				'USER_TYPE', 'USER_TYPE_SETTINGS_LIST'
			],
			'filter' => $filter,
			'order' => ['SORT' => 'ASC', 'NAME' => 'ASC']
		]);
		while ($row = $iterator->fetch())
		{
			$row['USER_TYPE'] = (string)$row['USER_TYPE'];
			$row['PROPERTY_USER_TYPE'] = ($row['USER_TYPE'] !== '' ? CIBlockProperty::GetUserType($row['USER_TYPE']) : []);
			$row['USER_TYPE_SETTINGS'] = $row['USER_TYPE_SETTINGS_LIST'];
			unset($row['USER_TYPE_SETTINGS_LIST']);

			$field = null;
			$id = 'PROPERTY_'.$row['ID'];
			$row['USER_TYPE'] = (string)$row['USER_TYPE'];
			$type = $row['PROPERTY_TYPE'];
			$settings = $row['USER_TYPE_SETTINGS'];
			if (
				$row['USER_TYPE'] !== ''
				&& !empty($settings)
				&& is_array($settings)
			)
			{
				$row['PROPERTY_USER_TYPE'] = CIBlockProperty::GetUserType($row['USER_TYPE']);
				if (
					isset($row['PROPERTY_USER_TYPE']['GetUIFilterProperty'])
					&& is_callable($row['PROPERTY_USER_TYPE']['GetUIFilterProperty'])
				)
				{
					$type = 'USER_TYPE';
				}
			}
			switch ($type)
			{
				case 'USER_TYPE':
					$field = [
						'type' => 'custom',
						'value' => ''
					];
					if (isset($operators[$row['PROPERTY_TYPE']]))
						$field['operators'] = $operators[$row['PROPERTY_TYPE']];
					call_user_func_array(
						$row['PROPERTY_USER_TYPE']['GetUIFilterProperty'],
						[
							$row,
							['VALUE' => $id, 'FORM_NAME' => 'main-ui-filter'],
							&$field
						]
					);
					break;
				case IblockPropertyTable::TYPE_STRING:
					$field = [
						'type' => 'string',
						'operators' => $operators[IblockPropertyTable::TYPE_STRING],
					];
					break;
				case IblockPropertyTable::TYPE_NUMBER:
					$field = [
						'type' => 'number',
						'operators' => $operators[IblockPropertyTable::TYPE_NUMBER]
					];
					break;
				case IblockPropertyTable::TYPE_LIST:
					$field = [
						'type' => 'list',
						'operators' => $operators[IblockPropertyTable::TYPE_LIST]
					];
					break;
				case IblockPropertyTable::TYPE_ELEMENT:
					$field = [
						'type' => 'list',
						'operators' => $operators[IblockPropertyTable::TYPE_ELEMENT]
					];
					break;
				case IblockPropertyTable::TYPE_SECTION:
					$field = [
						'type' => 'list',
						'operators' => $operators[IblockPropertyTable::TYPE_SECTION]
					];
					break;
			}

			if (!empty($field))
			{
				$field['id'] = $id;
				$result[$id] = $field;
			}
		}
		unset($row, $iterator);

		return $result;
	}