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