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