- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/lib/Controller/Property/Directory/Action/SaveSettingsAction.php
- Класс: BitrixIblockControllerPropertyDirectoryActionSaveSettingsAction
- Вызов: SaveSettingsAction::createHighload
private function createHighload(array $fields): AddResult
{
$result = new AddResult();
$title = trim($fields['DIRECTORY_NAME']);
if (empty($title))
{
$this->errorCollection->setError(
new Error(Loc::getMessage("IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_HIGHLOAD_ERROR_NAME_IS_ABSENT"))
);
return $result;
}
$name = mb_strtoupper(mb_substr($title, 0, 1)).mb_substr($title, 1);
if (!preg_match('/^[A-Z][A-Za-z0-9]*$/', $name))
{
$this->errorCollection->setError(
new Error(Loc::getMessage("IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_HIGHLOAD_ERROR_NAME_IS_INVALID"))
);
return $result;
}
$tableName = CIBlockPropertyDirectory::createHighloadTableName($title);
if ($tableName === false)
{
$this->errorCollection->setError(
new Error(Loc::getMessage("IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_HIGHLOAD_ERROR_NAME_IS_ABSENT"))
);
return $result;
}
$data = array(
'NAME' => $name,
'TABLE_NAME' => $tableName,
);
$result = HighloadBlockTable::add($data);
if (!$result->isSuccess())
{
return $result;
}
$highloadBlockId = $result->getId();
if (is_array($fields['DIRECTORY_ITEMS']))
{
$fieldsNames = reset($fields['DIRECTORY_ITEMS']);
$fieldsNames['UF_DEF'] = '';
$fieldsNames['UF_FILE'] = '';
$sort = 100;
$userTypeEntity = new CUserTypeEntity();
$userFieldEntityId = 'HLBLOCK_' . $highloadBlockId;
foreach($fieldsNames as $fieldName => $fieldValue)
{
if ('UF_DELETE' === $fieldName)
{
continue;
}
$fieldMandatory = 'N';
switch($fieldName)
{
case 'UF_NAME':
case 'UF_XML_ID':
$fieldType = 'string';
$fieldMandatory = 'Y';
break;
case 'UF_LINK':
case 'UF_DESCRIPTION':
case 'UF_FULL_DESCRIPTION':
$fieldType = 'string';
break;
case 'UF_SORT':
$fieldType = 'integer';
break;
case 'UF_FILE':
$fieldType = 'file';
break;
case 'UF_DEF':
$fieldType = 'boolean';
break;
default:
$fieldType = 'string';
}
$userFieldValues = [
'ENTITY_ID' => $userFieldEntityId,
'FIELD_NAME' => $fieldName,
'USER_TYPE_ID' => $fieldType,
'XML_ID' => '',
'SORT' => $sort,
'MULTIPLE' => 'N',
'MANDATORY' => $fieldMandatory,
'SHOW_FILTER' => 'N',
'SHOW_IN_LIST' => 'Y',
'EDIT_IN_LIST' => 'Y',
'IS_SEARCHABLE' => 'N',
'SETTINGS' => [],
];
$userTypeEntity->Add($userFieldValues);
$sort += 100;
}
}
return $result;
}