• Модуль: highloadblock
  • Путь к файлу: ~/bitrix/modules/highloadblock/lib/highloadblocktable.php
  • Класс: BitrixHighloadblockHighloadBlockTable
  • Вызов: HighloadBlockTable::compileEntity
static function compileEntity($hlblock)
{
	global $USER_FIELD_MANAGER;

	$rawBlock = $hlblock;
	$hlblock = static::resolveHighloadblock($hlblock);
	if (empty($hlblock))
	{
		throw new MainSystemException(sprintf(
			'Invalid highloadblock description `%s`.', mydump($rawBlock)
		));
	}
	unset($rawBlock);

	// generate entity & data manager
	$fieldsMap = array();

	// add ID
	$fieldsMap['ID'] = array(
		'data_type' => 'integer',
		'primary' => true,
		'autocomplete' => true
	);

	// build datamanager class
	$entity_name = $hlblock['NAME'];
	$entity_data_class = $hlblock['NAME'].'Table';

	if (class_exists($entity_data_class))
	{
		// rebuild if it's already exists
		EntityBase::destroy($entity_data_class);
	}
	else
	{
		$entity_table_name = $hlblock['TABLE_NAME'];

		// make with an empty map
		$eval = '
			class '.$entity_data_class.' extends '.__NAMESPACE__.'DataManager
			{
				public static function getTableName()
				{
					return '.var_export($entity_table_name, true).';
				}

				public static function getMap()
				{
					return '.var_export($fieldsMap, true).';
				}

				public static function getHighloadBlock()
				{
					return '.var_export($hlblock, true).';
				}
			}
		';

		eval($eval);
	}

	// then configure and attach fields
	/** @var BitrixMainEntityDataManager $entity_data_class */
	$entity = $entity_data_class::getEntity();

	/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
	$uFields = $USER_FIELD_MANAGER->getUserFields(static::compileEntityId($hlblock['ID']));

	foreach ($uFields as $uField)
	{
		if ($uField['MULTIPLE'] == 'N')
		{
			// just add single field
			$params = array(
				'required' => $uField['MANDATORY'] == 'Y'
			);
			$field = $USER_FIELD_MANAGER->getEntityField($uField, $uField['FIELD_NAME'], $params);
			$entity->addField($field);
			foreach ($USER_FIELD_MANAGER->getEntityReferences($uField, $field) as $reference)
			{
				$entity->addField($reference);
			}
		}
		else
		{
			// build utm entity
			static::compileUtmEntity($entity, $uField);
		}
	}

	return EntityBase::getInstance($entity_name);
}