• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/entityfieldprovider.php
  • Класс: Bitrix\Crm\WebForm\EntityFieldProvider
  • Вызов: EntityFieldProvider::prepareWebFormFields
static function prepareWebFormFields($entityName, &$fieldsInfo)
{
	$statusTypes = self::getStatusTypes();
	$multiFieldTypes = \CCrmFieldMulti::GetEntityTypes();
	$multiFieldTypeInfos = \CCrmFieldMulti::GetEntityTypeInfos();


	$commonExcludedFieldCodes = Entity::getCommonExcludedFieldCodes();
	$fieldList = array();
	foreach($fieldsInfo as $fieldId => $field)
	{
		$formFieldCaption = $field['isDynamic'] ? $field['formLabel'] : Entity::getFieldCaption($entityName, $fieldId);
		if(!$formFieldCaption && $field['type'] != 'crm_multifield')
		{
			continue;
		}

		$formField = array(
			'type' => $field['type'],
			'entity_field_name' => $fieldId,
			'entity_name' => $entityName,
			'name' => $entityName . '_' . $fieldId,
			'caption' => $formFieldCaption,
			'multiple' => (bool) $field['isMultiple'],
			'required' => (bool) $field['isRequired'],
			'hidden' => false,
		);


		if(in_array($formField['name'], $commonExcludedFieldCodes))
		{
			continue;
		}

		switch($formField['type'])
		{
			case 'crm':
			case 'iblock_element':
			case 'employee':
			case 'iblock_section':
				continue 2;
				break;

			case 'string':
				if (
					(isset($field['settings']['ROWS']) && intval($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']; // array(array('ID' => 1, 'VALUE' => 'Text'))
				break;

			case 'char':
			case 'boolean':
				$formField['type'] = 'checkbox';
				/*
				$formField['items'] = array(
					array('ID' => 'N', 'VALUE' => Loc::getMessage('CRM_WEBFORM_FIELD_PROVIDER_NO')),
					array('ID' => 'Y', 'VALUE' => Loc::getMessage('CRM_WEBFORM_FIELD_PROVIDER_YES')),
				);
				*/

				break;

			case 'double':
				$formField['type'] = Internals\FieldTable::TYPE_ENUM_FLOAT;
				break;

			case 'integer':
				$formField['type'] = Internals\FieldTable::TYPE_ENUM_INT;
				break;

			case 'crm_status':
				$formField['type'] = 'list';
				if(is_array($field['statusType']))
				{
					$field['statusType'] = $field['statusType']['ID'];
				}
				if($field['statusType'] && isset($statusTypes[$field['statusType']]))
				{
					$formField['items'] = $statusTypes[$field['statusType']];
				}
				break;

			case 'crm_multifield':
				$formField['type'] = 'typed_string';
				if(isset($multiFieldTypeInfos[$fieldId]))
				{
					$formField['caption'] = $multiFieldTypeInfos[$fieldId]['NAME'];
				}
				if(isset($multiFieldTypes[$fieldId]))
				{
					$formField['value_type'] = array();
					foreach($multiFieldTypes[$fieldId] as $multiFieldCode => $multiField)
					{
						$formField['value_type'][] = array(
							'ID' => $multiFieldCode,
							'VALUE' => $multiField['SHORT']
						);
					}
				}
				break;
		}

		if ($formField['name'] == 'DEAL_STAGE_ID')
		{
			$formField['itemsByCategory'] = array();
			$categoryList = DealCategory::getAll();
			foreach($categoryList as $category)
			{
				$dealStages = DealCategory::getStageInfos($category['ID']);
				foreach ($dealStages as $dealStageId => $dealStage)
				{
					$formField['itemsByCategory'][$category['ID']][] = array(
						'ID' => $dealStageId,
						'VALUE' => $dealStage['NAME']
					);
				}
			}
		}

		$fieldList[] = $formField;
	}

	return $fieldList;
}