- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/userfield.php
- Класс: BitrixMainUserFieldTable
- Вызов: UserFieldTable::attachFields
static function attachFields(ORMEntity $entity, $ufId)
{
global $USER_FIELD_MANAGER;
$utsFields = array();
$utsFieldNames = array();
$utmFields = array();
$utmFieldNames = array();
$fields = $USER_FIELD_MANAGER->getUserFields($ufId);
foreach ($fields as $field)
{
if ($field['MULTIPLE'] === 'Y')
{
$utmFields[] = $field;
$utmFieldNames[$field['FIELD_NAME']] = true;
}
else
{
$utsFields[] = $field;
$utsFieldNames[$field['FIELD_NAME']] = true;
}
}
if (!empty($utsFields) || !empty($utmFields))
{
// create uts entity & put fields into it
$utsEntity = static::createUtsEntity($entity, $utsFields, $utmFields, $ufId);
// create reference to uts entity
$utsReference = new ORMFieldsRelationsReference('UTS_OBJECT', $utsEntity->getDataClass(), array(
'=this.ID' => 'ref.VALUE_ID'
));
$entity->addField($utsReference);
// add UF_* aliases
foreach ($fields as $userfield)
{
$utsFieldName = $userfield['FIELD_NAME'];
/** @var BitrixMainORMFieldsScalarField $utsField */
$utsField = $utsEntity->getField($utsFieldName);
$aliasField = new ORMFieldsUserTypeField(
$utsFieldName,
'%s',
'UTS_OBJECT.'.$utsFieldName,
array('data_type' => get_class($utsField))
);
$aliasField->configureValueField($utsField);
if ($userfield['MULTIPLE'] == 'Y')
{
$aliasField->configureMultiple();
}
$entity->addField($aliasField);
}
if (!empty($utsFields))
{
foreach ($utsFields as $utsField)
{
/** @var BitrixMainORMFieldsScalarField $utsEntityField */
$utsEntityField = $utsEntity->getField($utsField['FIELD_NAME']);
foreach ($USER_FIELD_MANAGER->getEntityReferences($utsField, $utsEntityField) as $reference)
{
// rewrite reference from this.field to this.uts_object.field
$referenceDesc = static::rewriteUtsReference($reference->getReference());
$aliasReference = new ORMFieldsRelationsReference(
$reference->getName(),
$reference->getRefEntityName(),
$referenceDesc
);
$entity->addField($aliasReference);
}
}
}
if (!empty($utmFields))
{
// create utm entity & put base fields into it
$utmEntity = static::createUtmEntity($entity, $utmFields, $ufId);
// add UF_* aliases
foreach ($utmFieldNames as $utmFieldName => $true)
{
/** @var BitrixMainORMFieldsScalarField $utmField */
$utmField = $utmEntity->getField($utmFieldName);
$aliasField = new ORMFieldsExpressionField(
$utmFieldName.'_SINGLE',
'%s',
$utmEntity->getFullName().':PARENT_'.$utmFieldName.'.'.$utmField->getColumnName(),
array('data_type' => get_class($utmField))
);
$entity->addField($aliasField);
}
}
}
}