• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/options/fields.php
  • Класс: Bitrix\Crm\WebForm\Options\Fields
  • Вызов: Fields::getTabletFormattedField
private function getTabletFormattedField(array $options)
{
	$options = self::filterFieldOptions($options);
	$field = self::$fields[$options['name']];

	$type = $this->getTabletFieldType($options, $field);
	$data = array(
		'ID' => $options['editing']['id'] ?? null,
		'CODE' => $options['name'],
		'TYPE' => $type,
		'CAPTION' => self::isTypeHasLabel($type)
			? $options['label']
			: '',
		'SORT' => (int) $options['sort'],
		'ITEMS' => $this->getTabletFormattedFieldItems($options),
		'SETTINGS_DATA' => [],
		'VALUE_TYPE' => $options['editing']['editable']['valueType'],
		'VALUE' => $options['value']
	);

	$multipleOriginal = $field['MULTIPLE_ORIGINAL'] ?? false;
	if($data['TYPE'] == 'product')
	{
		$data['SETTINGS_DATA']['BIG_PIC'] = ($options['bigPic'] ?? false) ? 'Y' : 'N';
		$multipleOriginal = true;
	}

	if($data['TYPE'] == 'file')
	{
		if (!self::isFieldFileImage($options['name']))
		{
			$data['SETTINGS_DATA']['CONTENT_TYPES'] = is_array($options['contentTypes'] ?? null)
				? $options['contentTypes']
				: []
			;
		}
		$data['SETTINGS_DATA']['MAX_SIZE_MB'] = is_numeric($options['maxSizeMb'] ?? null)
			? max(intval($options['maxSizeMb']), 0)
			: null
		;
		if ($options['maxSizeMb'] === '')
		{
			$data['SETTINGS_DATA']['MAX_SIZE_MB'] = -1;
		}
	}
	if($data['TYPE'] === 'rq')
	{
		$data['SETTINGS_DATA']['REQUISITE'] = WebForm\Requisite::instance()
			->convertOptionsToSettings($options['requisite'] ?? [])
		;
	}

	if (isset($options['autocomplete']))
	{
		$data['SETTINGS_DATA']['AUTOCOMPLETE'] =  ($options['autocomplete'] ?? false) ? 'Y' : 'N';
	}

	if (isset($options['hint']))
	{
		$data['SETTINGS_DATA']['HINT'] = $options['hint'];
	}

	if (isset($options['hintOnFocus']))
	{
		$data['SETTINGS_DATA']['HINT_ON_FOCUS'] = ($options['hintOnFocus'] ?? false) ? 'Y' : 'N';
	}

	if (isset($options['size']) && is_array($options['size']))
	{
		$data['SETTINGS_DATA']['SIZE'] = [
			'min' => (int)($options['size']['min'] ?? 0),
			'max' => (int)($options['size']['max'] ?? 0),
		];
	}

	$data['REQUIRED'] = $options['required'] ? 'Y' : 'N';
	$data['MULTIPLE'] = $options['multiple'] && $multipleOriginal ? 'Y' : 'N';

	if($data['TYPE'] == 'section' || $data['TYPE'] == 'page')
	{
		$data['REQUIRED'] = 'N';
		$data['MULTIPLE'] = 'N';
	}
	else
	{
		$data['PLACEHOLDER'] = $options['PLACEHOLDER'];
	}

	if(isset($data['VALUE_TYPE']) && isset($field['VALUE_TYPE_ORIGINAL']))
	{
		$isValueTypeExisted = false;
		foreach($field['VALUE_TYPE_ORIGINAL'] as $valueTypeItem)
		{
			if($valueTypeItem['ID'] == $field['VALUE_TYPE'])
			{
				$isValueTypeExisted = true;
				break;
			}
		}

		if($isValueTypeExisted)
		{
			$data['VALUE_TYPE'] = $field['VALUE_TYPE'];
		}
	}

	if(is_array($data['ITEMS']))
	{
		foreach($data['ITEMS'] as $itemId => $item)
		{
			$unknownItemKeys = array_diff(
				array_keys($item),
				array('ID', 'VALUE', 'PRICE', 'CUSTOM_PRICE', 'DISCOUNT', 'NAME', 'SELECTED', 'DISABLED')
			);
			if(count($unknownItemKeys) == 0)
			{
				continue;
			}

			foreach($unknownItemKeys as $unknownItemKey)
			{
				unset($data['ITEMS'][$itemId][$unknownItemKey]);
			}
		}

		$data['ITEMS'] = array_values($data['ITEMS']);
	}

	if($data['CAPTION'] === ($field['ENTITY_FIELD_CAPTION'] ?? null))
	{
		$data['CAPTION'] = '';
	}

	if(is_array($field['SETTINGS_DATA']))
	{
		$data['SETTINGS_DATA'] = $field['SETTINGS_DATA'];
	}

	if($data['TYPE'] === WebForm\Internals\FieldTable::TYPE_ENUM_RESOURCEBOOKING)
	{
		$settingsData = $options['booking']['settings_data'] ?? [];
		$data['SETTINGS_DATA'] = $settingsData;
	}

	if($data['TYPE'] === WebForm\Internals\FieldTable::TYPE_ENUM_RQ)
	{
		$data['SETTINGS_DATA'] = WebForm\Requisite::instance()
			->convertSettingsToOptions($options['requisite'] ?? [])
		;
	}

	return $data;
}