- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/userfield.php
- Класс: BitrixMainUserFieldTable
- Вызов: UserFieldTable::createUtsEntity
static function createUtsEntity(ORMEntity $srcEntity, array $utsFields, array $utmFields, $ufId = null)
{
global $USER_FIELD_MANAGER;
// get namespace & class
/** @var BitrixMainORMDataDataManager $utsClassFull */
$utsClassFull = static::getUtsEntityClassNameBySrcEntity($srcEntity);
$utsClassPath = explode('\', ltrim($utsClassFull, '\'));
$utsNamespace = join('\', array_slice($utsClassPath, 0, -1));
$utsClass = end($utsClassPath);
// get table name
$utsTable = static::getUtsEntityTableNameBySrcEntity($srcEntity, $ufId);
// base fields
$fieldsMap = array(
'VALUE_ID' => array(
'data_type' => 'integer',
'primary' => true
),
'PARENT' => array(
'data_type' => $srcEntity->getDataClass(),
'reference' => array(
'=this.VALUE_ID' => 'ref.ID'
)
)
);
// initialize entity
if (class_exists($utsNamespace."\".$utsClass))
{
ORMEntity::destroy($utsNamespace."\".$utsClass);
$entity = ORMEntity::getInstance($utsNamespace."\".$utsClass);
foreach ($fieldsMap as $fieldName => $field)
{
$entity->addField($field, $fieldName);
}
}
else
{
$entity = ORMEntity::compileEntity($utsClass, $fieldsMap, array(
'namespace' => $utsNamespace, 'table_name' => $utsTable
));
}
foreach ($utsFields as $utsField)
{
$field = $USER_FIELD_MANAGER->getEntityField($utsField);
$entity->addField($field);
foreach ($USER_FIELD_MANAGER->getEntityReferences($utsField, $field) as $reference)
{
$entity->addField($reference);
}
}
foreach ($utmFields as $utmFieldMeta)
{
// better to get field from UtmEntity
$utmField = $USER_FIELD_MANAGER->getEntityField($utmFieldMeta);
// add serialized utm cache-fields
$cacheField = (new ORMFieldsUserTypeUtsMultipleField($utmField->getName()))
->configureUtmField($utmField);
static::setMultipleFieldSerialization($cacheField, $utmField);
$entity->addField($cacheField);
}
return $entity;
}