- Модуль: highloadblock
- Путь к файлу: ~/bitrix/modules/highloadblock/lib/highloadblocktable.php
- Класс: BitrixHighloadblockHighloadBlockTable
- Вызов: HighloadBlockTable::onAfterUserTypeAdd
static function onAfterUserTypeAdd($field)
{
global $APPLICATION, $USER_FIELD_MANAGER;
if (preg_match(self::ENTITY_ID_MASK, $field['ENTITY_ID'], $matches))
{
$field['USER_TYPE'] = $USER_FIELD_MANAGER->getUserType($field['USER_TYPE_ID']);
// get entity info
$hlblock_id = $matches[1];
$hlblock = HighloadBlockTable::getById($hlblock_id)->fetch();
if (empty($hlblock))
{
$APPLICATION->throwException(sprintf(
'Entity "'.static::compileEntityId('%s').'" wasn't found.', $hlblock_id
));
return false;
}
// get usertype info
$sql_column_type = $USER_FIELD_MANAGER->getUtsDBColumnType($field);
// create field in db
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$connection->query(sprintf(
'ALTER TABLE %s ADD %s %s',
$sqlHelper->quote($hlblock['TABLE_NAME']), $sqlHelper->quote($field['FIELD_NAME']), $sql_column_type
));
if ($field['MULTIPLE'] == 'Y')
{
// create table for this relation
$hlentity = static::compileEntity($hlblock);
$utmEntity = EntityBase::getInstance(HighloadBlockTable::getUtmEntityClassName($hlentity, $field));
$utmEntity->createDbTable();
// add indexes
$connection->query(sprintf(
'CREATE INDEX %s ON %s (%s)',
$sqlHelper->quote('IX_UTM_HL'.$hlblock['ID'].'_'.$field['ID'].'_ID'),
$sqlHelper->quote($utmEntity->getDBTableName()),
$sqlHelper->quote('ID')
));
$connection->query(sprintf(
'CREATE INDEX %s ON %s (%s)',
$sqlHelper->quote('IX_UTM_HL'.$hlblock['ID'].'_'.$field['ID'].'_VALUE'),
$sqlHelper->quote($utmEntity->getDBTableName()),
$sqlHelper->quote('VALUE')
));
}
return array('PROVIDE_STORAGE' => false);
}
return true;
}