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