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