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