- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/order/matcher/fieldsynchronizer.php
- Класс: Bitrix\Crm\Order\Matcher\FieldSynchronizer
- Вызов: FieldSynchronizer::prepareOrderFormFields
static function prepareOrderFormFields($entityName, &$fieldsInfo)
{
$statusTypes = self::getStatusTypes();
$multiFieldTypes = \CCrmFieldMulti::GetEntityTypes();
$multiFieldTypeInfo = \CCrmFieldMulti::GetEntityTypeInfos();
$fieldList = [];
foreach ($fieldsInfo as $fieldId => $field)
{
$formFieldCaption = $field['isDynamic'] ? $field['formLabel'] : self::getFieldCaption($entityName, $fieldId);
if (empty($formFieldCaption) && $field['type'] !== 'crm_multifield' && $field['type'] !== 'tree')
{
continue;
}
$formField = [
'type' => $field['type'],
'entity_field_name' => $fieldId,
'entity_name' => $entityName,
'name' => $entityName.'_'.$fieldId,
'caption' => $formFieldCaption,
'original_caption' => $formFieldCaption,
'multiple' => (bool)$field['isMultiple'],
'required' => (bool)$field['isRequired'],
'hidden' => false,
];
switch ($formField['type'])
{
case 'crm':
case 'iblock_element':
case 'iblock_section':
case 'employee':
case 'address':
case 'resourcebooking':
continue 2;
break;
case 'tree':
$formField['tree'] = $field['tree'];
break;
case 'string':
$formField['multiple'] = false;
if (
(isset($field['settings']['ROWS']) && (int)$field['settings']['ROWS'] > 1)
|| $fieldId == 'COMMENTS'
)
{
$formField['type'] = 'text';
}
break;
case 'enumeration':
if ($field['settings']['DISPLAY'] === 'CHECKBOX')
{
$formField['type'] = $formField['multiple'] ? 'checkbox' : 'radio';
}
else
{
$formField['type'] = 'list';
}
$formField['items'] = $field['items']; // [['ID' => 1, 'VALUE' => 'Text']]
break;
case 'char':
case 'boolean':
$formField['type'] = 'checkbox';
$formField['multiple'] = false;
break;
case 'crm_status':
$formField['type'] = 'list';
if (is_array($field['statusType']))
{
if (isset($field['statusType']['ID']))
{
$field['statusType'] = $field['statusType']['ID'];
}
else
{
$countryId = static::getDefaultCountryId();
$countryCode = EntityPreset::getCountryCodeById($countryId);
$statusTypeId = "{$fieldId}_{$countryCode}";
if (in_array($statusTypeId, $field['statusType'], true))
{
$field['statusType'] = $statusTypeId;
}
}
}
if ($field['statusType'] && isset($statusTypes[$field['statusType']]))
{
$formField['items'] = $statusTypes[$field['statusType']];
}
break;
case 'crm_multifield':
$formField['type'] = 'typed_string';
$formField['multiple'] = false;
if (isset($multiFieldTypeInfo[$fieldId]))
{
$formField['caption'] = $multiFieldTypeInfo[$fieldId]['NAME'];
$formField['original_caption'] = $multiFieldTypeInfo[$fieldId]['NAME'];
}
if (isset($multiFieldTypes[$fieldId]))
{
$formField['value_type'] = [];
foreach ($multiFieldTypes[$fieldId] as $multiFieldCode => $multiField)
{
$formField['value_type'][] = [
'ID' => $multiFieldCode,
'VALUE' => $multiField['SHORT']
];
}
}
break;
}
$fieldList[] = $formField;
}
if ($entityName === \CCrmOwnerType::ContactName)
{
array_unshift($fieldList, [
'type' => 'string',
'entity_field_name' => 'FULL_NAME',
'name' => 'CONTACT_FULL_NAME',
'entity_name' => 'CONTACT',
'caption' => Loc::getMessage('CRM_ORDER_MATCHER_FULL_NAME'),
'original_caption' => Loc::getMessage('CRM_ORDER_MATCHER_FULL_NAME'),
'multiple' => false,
'required' => false,
'hidden' => false,
]);
}
return $fieldList;
}