• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_usertype.php
  • Класс: \CCrmUserType
  • Вызов: CCrmUserType::AddBPFields
public function AddBPFields(&$arHeaders, $arOptions = array())
{
	if(!is_array($arOptions))
	{
		$arOptions = array();
	}

	$arUserFields = $this->GetAbstractFields(['skipUserFieldVisibilityCheck' => true]);
	foreach($arUserFields as $FIELD_NAME => $arUserField)
	{
		$beditable = true;
		$editable = array();
		$userTypeID =  $arUserField['USER_TYPE']['USER_TYPE_ID'];
		if ($userTypeID == 'boolean')
		{
			$sType = "UF:boolean";
			$editable = $arUserField['SETTINGS'];
		}
		else if ($arUserField['USER_TYPE']['BASE_TYPE'] == 'employee')
			$sType = 'user';
		else if (in_array($userTypeID, array('string', 'double', 'boolean', 'integer', 'datetime', 'file', 'employee'/*, 'enumeration'*/)))
		{
			if ($arUserField['USER_TYPE']['BASE_TYPE'] == 'enum')
			{
				$arUserField['USER_TYPE']['BASE_TYPE'] = 'select';
			}
			$sType = $userTypeID;
			if($sType === 'employee')
			{
				//Fix for #37173
				$sType = 'user';
			}
			if($sType === 'integer')
			{
				$sType = 'int';
			}

			if ($sType === 'datetime')
			{
				$arUserField['SETTINGS']['EDIT_IN_LIST'] = $arUserField['EDIT_IN_LIST'];
				$editable = $arUserField['SETTINGS'];
			}
		}
		else
		{
			if ($userTypeID == 'enumeration')
				$sType = 'select';
			else
				$sType = 'UF:'.$userTypeID;
			$editable = array();
			if ('iblock_element' == $userTypeID || 'iblock_section' == $userTypeID ||
				'crm_status' == $userTypeID || 'crm' == $userTypeID)
			{
				$editable = $arUserField['SETTINGS'];
			}
			elseif (is_callable(array($arUserField['USER_TYPE']['CLASS_NAME'], 'GetList')))
			{
				$fl = (COption::GetOptionString("crm", "bp_version", 2) == 2);
				$rsEnum = call_user_func_array(array($arUserField['USER_TYPE']['CLASS_NAME'], 'GetList'), array($arUserField));
				while($ar = $rsEnum->GetNext())
				{
					if (isset($ar[$fl ? 'XML_ID' : 'ID']))
					{
						$editable[$ar[$fl ? 'XML_ID' : 'ID']] = $ar['~VALUE'] ?? $ar['VALUE'];
					}
				}
			}
		}

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

		$arHeaders[$FIELD_NAME] = array(
			'Name' => $fieldTitle,
			'Options' => $editable,
			'Type' => $sType,
			'Filterable' => $arUserField['MULTIPLE'] != 'Y',
			'Editable' => $beditable,
			'Multiple' => $arUserField['MULTIPLE'] == 'Y',
			'Required' => $arUserField['MANDATORY'] == 'Y',
		);

		if($userTypeID === 'date')
		{
			$arHeaders[$FIELD_NAME]['BaseType'] = 'date';
		}

		if($userTypeID === 'boolean')
		{
			$arHeaders[$FIELD_NAME]['Type'] = $arHeaders[$FIELD_NAME]['BaseType'] = 'bool';
		}

		if($userTypeID === 'enumeration' || $userTypeID === 'crm')
		{
			$arHeaders[$FIELD_NAME.'_PRINTABLE'] = array(
				'Name' => $fieldTitle.' ('.(isset($arOptions['PRINTABLE_SUFFIX']) ? $arOptions['PRINTABLE_SUFFIX'] : 'text').')',
				'Options' => $editable,
				'Type' => 'string',
				'Filterable' => $arUserField['MULTIPLE'] != 'Y',
				'Editable' => false,
				'Multiple' => $arUserField['MULTIPLE'] == 'Y',
				'Required' => false,
			);
		}

		if ($userTypeID === 'resourcebooking')
		{
			$arHeaders[$FIELD_NAME]['Editable'] = false;

			$arHeaders[$FIELD_NAME.'.SERVICE_NAME'] = array(
				'Name' => $fieldTitle.': '.GetMessage("CRM_USERTYPE_RESOURCEBOOKING_SERVICE_NAME"),
				'Type' => 'string',
			);
			$arHeaders[$FIELD_NAME.'.DATE_FROM'] = array(
				'Name' => $fieldTitle.': '.GetMessage("CRM_USERTYPE_RESOURCEBOOKING_DATE_FROM"),
				'Type' => 'datetime',
			);
			$arHeaders[$FIELD_NAME.'.DATE_TO'] = array(
				'Name' => $fieldTitle.': '.GetMessage("CRM_USERTYPE_RESOURCEBOOKING_DATE_TO"),
				'Type' => 'datetime',
			);
			$arHeaders[$FIELD_NAME.'.USERS'] = array(
				'Name' => $fieldTitle.': '.GetMessage("CRM_USERTYPE_RESOURCEBOOKING_USERS"),
				'Type' => 'user',
				'Multiple' => true,
			);
		}
	}
}