public static function onAfterUserTypeAdd($field) { global $APPLICATION, $USER_FIELD_MANAGER; if (preg_match('/^HLBLOCK_(\\d+)$/', $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 "HLBLOCK_%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 = Entity\Base::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; }