• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/bizprocdocument.php
  • Класс: BitrixDiskBizProcDocument
  • Вызов: BizProcDocument::getUserTypeFields
static function getUserTypeFields($storageId)
{
	$fields = array();
	/** @var CAllUserTypeManager */
	global $USER_FIELD_MANAGER;
	foreach($USER_FIELD_MANAGER->getUserFields('DISK_FILE_' . $storageId, 0, LANGUAGE_ID) as $fieldName => $userField)
	{
		$editable = array();

		if($userField['USER_TYPE']['USER_TYPE_ID'] == 'boolean')
		{
			$type = static::getPrefixForCustomType() . "boolean";
			$editable = $userField['SETTINGS'];
		}
		else
		{
			if(in_array($userField['USER_TYPE']['USER_TYPE_ID'], array(
					'string',
					'double',
					'boolean',
					'integer',
					'datetime',
					'file',
				)))
			{
				if($userField['USER_TYPE']['BASE_TYPE'] == 'enum')
				{
					$userField['USER_TYPE']['BASE_TYPE'] = 'select';
				}
				$type = $userField['USER_TYPE']['USER_TYPE_ID'];

				if($type === 'datetime')
				{
					$userField['SETTINGS']['EDIT_IN_LIST'] = $userField['EDIT_IN_LIST'];
					$editable = $userField['SETTINGS'];
				}
			}
			else
			{
				$userTypeId = $userField['USER_TYPE']['USER_TYPE_ID'];
				if($userTypeId == 'enumeration')
				{
					$type = 'select';
				}
				else
				{
					$type = static::getPrefixForCustomType() . $userTypeId;
				}
				$editable = array();
				if('iblock_element' == $userTypeId || 'iblock_section' == $userTypeId)
				{
					$editable = $userField['SETTINGS'];
				}
				elseif (is_callable(array($userField['USER_TYPE']['CLASS_NAME'], 'GetList')))
				{
					$enumQuery = call_user_func_array(array($userField['USER_TYPE']['CLASS_NAME'], 'GetList'), array($userField));
					while($enumRow = $enumQuery->getNext())
					{
						$editable[$enumRow['XML_ID']] = $enumRow['VALUE'];
					}
				}

			}
		}

		$fieldTitle = trim($userField['EDIT_FORM_LABEL']) !== '' ? $userField['EDIT_FORM_LABEL'] : $userField['FIELD_NAME'];

		if($userField['USER_TYPE']['USER_TYPE_ID'] === 'enumeration')
		{
			$fields[static::getFieldNameForUfField($userField)] = array(
				'Name' => $fieldTitle . ' (text)',
				'Options' => $editable,
				'Type' => $type,
				'Filterable' => $userField['MULTIPLE'] != 'Y',
				'Editable' => true,
				'Multiple' => $userField['MULTIPLE'] == 'Y',
				'Required' => false,
			);

			$fields[$userField['FIELD_NAME']] = array(
				'Name' => $fieldTitle,
				'Options' => $editable,
				'Type' => $type,
				'Filterable' => $userField['MULTIPLE'] != 'Y',
				'Editable' => true,
				'Multiple' => $userField['MULTIPLE'] == 'Y',
				'Required' => false,
			);
		}
		else
		{
			$fields[static::getFieldNameForUfField($userField)] = array(
				'Name' => $fieldTitle,
				'Options' => $editable,
				'Type' => $type,
				'Filterable' => $userField['MULTIPLE'] != 'Y',
				'Editable' => true,
				'Multiple' => $userField['MULTIPLE'] == 'Y',
				'Required' => $userField['MANDATORY'] == 'Y',
			);
		}
	}

	return $fields;
}