EntityFieldProvider::getFieldsInternal

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. EntityFieldProvider
  4. getFieldsInternal
  • Модуль: 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;
}

Добавить комментарий