- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/userfield/internal/userfieldhelper.php
- Класс: BitrixMainUserFieldInternalUserFieldHelper
- Вызов: UserFieldHelper::onAfterUserTypeAdd
static function onAfterUserTypeAdd($field)
{
$userFieldHelper = static::getInstance();
$parseResult = $userFieldHelper->parseUserFieldEntityId($field['ENTITY_ID']);
if($parseResult)
{
[$factory, $typeId] = $parseResult;
$userFieldManager = $userFieldHelper->getManager();
$application = $userFieldHelper->getApplication();
/** @var TypeFactory $factory */
/** @var TypeDataManager $dataClass */
$dataClass = $factory->getTypeDataClass();
$field['USER_TYPE'] = $userFieldManager->getUserType($field['USER_TYPE_ID']);
$typeData = $dataClass::getById($typeId)->fetch();
if (empty($typeData))
{
$application->throwException(sprintf(
'Entity "%s" wasn't found.', $factory->getUserFieldEntityId($typeId)
));
return false;
}
// get usertype info
$sql_column_type = $userFieldManager->getUtsDBColumnType($field);
// create field in db
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
try
{
$connection->query(sprintf(
'ALTER TABLE %s ADD %s %s',
$sqlHelper->quote($typeData['TABLE_NAME']), $sqlHelper->quote($field['FIELD_NAME']), $sql_column_type
));
if ($field['MULTIPLE'] == 'Y')
{
// create table for this relation
$typeEntity = $dataClass::compileEntity($typeData);
$utmEntity = Entity::getInstance($dataClass::getUtmEntityClassName($typeEntity, $field));
$utmEntity->createDbTable();
// add indexes
$connection->query(sprintf(
'CREATE INDEX %s ON %s (%s)',
$sqlHelper->quote('IX_UTM_HL'.$typeId.'_'.$field['ID'].'_ID'),
$sqlHelper->quote($utmEntity->getDBTableName()),
$sqlHelper->quote('ID')
));
$connection->query(sprintf(
'CREATE INDEX %s ON %s (%s)',
$sqlHelper->quote('IX_UTM_HL'.$typeId.'_'.$field['ID'].'_VALUE'),
$sqlHelper->quote($utmEntity->getDBTableName()),
$sqlHelper->quote('VALUE')
));
}
}
catch (SqlQueryException $sqlQueryException)
{
$userTypeEntity = new CUserTypeEntity;
$userTypeEntity->Delete($field['ID']);
throw new InvalidOperationException(
'Could not create new user field ' . $field['FIELD_NAME'],
$sqlQueryException
);
}
return [
'PROVIDE_STORAGE' => false
];
}
return true;
}