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