- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/entityfieldprovider.php
- Класс: Bitrix\Crm\WebForm\EntityFieldProvider
- Вызов: EntityFieldProvider::getFieldsInternal
static function getFieldsInternal($entityName, $entity, array $options = []): array
{
$fieldInfoMethodName = $entity['GET_FIELDS_CALL'] ?? Entity::getDefaultFieldsInfoMethod();
if (is_array($fieldInfoMethodName) || is_callable($fieldInfoMethodName))
{
$fieldsFunction = $fieldInfoMethodName;
$isAlreadyPreparedFields = true;
$ufEntityId = null;
}
else
{
$className = $entity['CLASS_NAME'];
$ufEntityId = $className::$sUFEntityID;
$fieldsFunction = [$className, $fieldInfoMethodName];
$isAlreadyPreparedFields = false;
}
if (!is_callable($fieldsFunction))
{
throw new SystemException('Provider fields method not found in "' . $entity['CLASS_NAME'] . '".');
}
$fieldsInfo = call_user_func_array($fieldsFunction, []);
if ($isAlreadyPreparedFields)
{
$commonExcludedFields = Entity::getEntityMapCommonExcludedFields();
foreach ($fieldsInfo as $fieldId => $fieldData)
{
if (!in_array($fieldId, $commonExcludedFields))
{
continue;
}
unset($fieldsInfo[$fieldId]);
}
}
else
{
$userFieldsInfo = [];
self::prepareUserFieldsInfo($userFieldsInfo, $ufEntityId);
$fieldsInfo = $fieldsInfo + $userFieldsInfo;
}
if (!empty($entity['HAS_MULTI_FIELDS']))
{
self::prepareMultiFieldsInfo($fieldsInfo);
}
$fieldsInfo = self::prepareFields($fieldsInfo);
$fieldsMap = self::prepareWebFormFields($entityName, $fieldsInfo);
//Add delivery address to company/contact/lead fields
if (in_array($entityName, [\CCrmOwnerType::CompanyName, \CCrmOwnerType::ContactName], true))
{
if (empty($options['hideVirtual']))
{
$fieldsMap[] = [
'type' => 'string',
'entity_field_name' => "DELIVERY_ADDRESS",
'entity_name' => $entityName,
'name' => "{$entityName}_DELIVERY_ADDRESS",
'caption' => Loc::getMessage("CRM_WEBFORM_FIELD_PROVIDER_DELIVERY_ADDRESS_CAPTION"),
'multiple' => false,
'required' => false,
];
}
/*
$fieldsMap[] = [
'type' => 'rq',
'entity_field_name' => "RQ",
'entity_name' => $entityName,
'name' => "{$entityName}_RQ",
'caption' => Loc::getMessage("CRM_WEBFORM_FIELD_PROVIDER_RQ_CAPTION"),
'multiple' => false,
'required' => false,
'ui' => [
'setup' => 'crm.field.requisite.setup',
],
];
*/
if (empty($options['hideRequisites']))
{
$entityTypeId = \CCrmOwnerType::Company; //\CCrmOwnerType::resolveID($entityName);
$preset = !is_null($options['presetId'])
? Requisite::instance()->getPreset($options['presetId'])
: Requisite::instance()->getDefaultPreset($entityTypeId);
foreach (($preset['fields'] ?? []) as $field)
{
if (mb_strpos($field['name'], 'RQ_') !== 0)
{
$field['name'] = 'RQ_' . $field['name'];
}
$fieldName = $field['name'] ?? '';
$fieldsMap[] = [
'type' => $field['type'],
'entity_field_name' => $fieldName,
'entity_name' => $entityName,
'name' => "{$entityName}_$fieldName",
'caption' => $field['label'] ?? '',
'multiple' => $field['multiple'] ?? false,
'required' => $field['required'] ?? false,
'size' => $field['size'] ?? null,
];
}
}
}
return $fieldsMap;
}