- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/userfield.php
- Класс: BitrixMainUserFieldTable
- Вызов: UserFieldTable::createUtmEntity
static function createUtmEntity(ORMEntity $srcEntity, array $utmFields, $ufId = null)
{
global $USER_FIELD_MANAGER;
/** @var BitrixMainORMDataDataManager $utmClassFull */
$utmClassFull = static::getUtmEntityClassNameBySrcEntity($srcEntity);
$utmClassPath = explode('\', ltrim($utmClassFull, '\'));
$utmNamespace = join('\', array_slice($utmClassPath, 0, -1));
$utmClass = end($utmClassPath);
// get table name
$utmTable = static::getUtmEntityTableNameBySrcEntity($srcEntity, $ufId);
// collect fields
$fieldsMap = array(
'ID' => array(
'data_type' => 'integer',
'primary' => true,
'autocomplete' => true
),
'VALUE_ID' => array(
'data_type' => 'integer',
'primary' => true
),
'PARENT' => array(
'data_type' => $srcEntity->getDataClass(),
'reference' => array(
'=this.VALUE_ID' => 'ref.ID'
)
),
'FIELD_ID' => array(
'data_type' => 'integer'
),
// base values fields
'VALUE' => array(
'data_type' => 'text'
),
'VALUE_INT' => array(
'data_type' => 'integer'
),
'VALUE_DOUBLE' => array(
'data_type' => 'float'
),
'VALUE_DATE' => array(
'data_type' => 'datetime'
)
);
// initialize entity
if (class_exists($utmNamespace."\".$utmClass))
{
ORMEntity::destroy($utmNamespace."\".$utmClass);
$entity = ORMEntity::getInstance($utmNamespace."\".$utmClass);
foreach ($fieldsMap as $fieldName => $field)
{
$entity->addField($field, $fieldName);
}
}
else
{
$entity = ORMEntity::compileEntity($utmClass, $fieldsMap, array(
'namespace' => $utmNamespace, 'table_name' => $utmTable
));
}
// add utm fields being mapped on real column name
foreach ($utmFields as $utmField)
{
$field = $USER_FIELD_MANAGER->getEntityField($utmField);
if ($field instanceof ORMFieldsIntegerField)
{
$columnName = 'VALUE_INT';
}
elseif ($field instanceof ORMFieldsFloatField)
{
$columnName = 'VALUE_DOUBLE';
}
elseif ($field instanceof ORMFieldsDateField)
{
$columnName = 'VALUE_DATE';
}
else
{
$columnName = 'VALUE';
}
$field->setColumnName($columnName);
$entity->addField($field);
foreach ($USER_FIELD_MANAGER->getEntityReferences($utmField, $field) as $reference)
{
$entity->addField($reference);
}
// add back-reference
$refField = new ORMFieldsRelationsReference(
'PARENT_'.$utmField['FIELD_NAME'],
$srcEntity->getDataClass(),
array('=this.VALUE_ID' => 'ref.ID', '=this.FIELD_ID' => array('?i', $utmField['ID']))
);
$entity->addField($refField);
}
return $entity;
}