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