• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/interactivemessage/connectors/imessage/output.php
  • Класс: BitrixImConnectorInteractiveMessageConnectorsIMessageOutput
  • Вызов: Output::getConfigForm
static function getConfigForm($idForm): Result
{
	$result = new Result();

	$descriptionForm = [];
	$items = [];
	$isFormNative = true;
	$isTypeListPicker = false;
	$isTypeTimePicker = false;
	$alternativeTitle = '';

	if(Loader::includeModule('crm'))
	{
		$formConfig = WebFormEmbedConfig::createById($idForm)->toArray();
		$descriptionForm = [
			'id' => $formConfig['id'],
			'lang' => $formConfig['lang'],
			'title' => $formConfig['data']['title'],
			'desc' => $formConfig['data']['desc'],
			'titleReply' => Loc::getMessage('IMCONNECTOR_INTERACTIVE_MESSAGE_IMESSAGE_REPLY_MESSAGE_FORM_TITLE'),
			'fields' => [],
			'type' => false,
			'native' => false
		];

		if(!empty($formConfig['data']['fields']))
		{
			foreach ($formConfig['data']['fields'] as $fieldOrder => $field)
			{
				if(
					!empty($field) &&
					is_array($field) &&
					!empty($field['name']) &&
					!empty($field['type']) &&
					$field['visible'] == true
				)
				{
					if(in_array($field['type'], self::getNativeFields(), true))
					{
						//List picker
						if(
							!empty($field['items']) &&
							in_array($field['type'], self::LIST_NATIVE_LIST_FIELDS_ID, true)
						)
						{
							$isTypeListPicker = true;

							if(Library::isEmpty($field['label']))
							{
								$field['label'] = 'Field';
							}

							$items[$field['name']]['id'] = $field['name'];
							$items[$field['name']]['title'] = $field['label'];
							$items[$field['name']]['order'] = $fieldOrder;

							foreach ($field['items'] as $order => $item)
							{
								if (is_array($item['pics']))
								{
									foreach ($item['pics'] as $num => $pic)
									{
										$listItem['pictures'][] = $pic;
										$listItem['imageIdentifier'] = $num;
									}
								}

								if (
									isset($item['price']) &&
									is_array($formConfig['data']['currency']) &&
									Loader::includeModule('currency')
								)
								{
									$listItem['subtitle'] = html_entity_decode(CCurrencyLang::CurrencyFormat($item['price'], $formConfig['data']['currency']['code']));
								}

								$listItem['identifier'] = $item['value'];
								$listItem['order'] = $order;
								$listItem['style'] = 'default';
								$listItem['title'] = $item['label'];

								$items[$field['name']]['items'][] = $listItem;
								unset($listItem);
							}
						}
						//Time Picker
						elseif(
							!empty($field['booking']) &&
							!empty($field['booking']['entity_field_name']) &&
							!empty($field['booking']['settings_data']) &&
							in_array($field['type'], self::LIST_NATIVE_TIME_FIELDS_ID, true) &&
							Loader::includeModule('calendar')
						)
						{
							if($isTypeTimePicker === false)
							{
								$isTypeTimePicker = true;
							}
							else
							{
								$isFormNative = false;
							}

							$items[$field['name']]['id'] = $field['name'];
							if(!Library::isEmpty($field['label']))
							{
								$items[$field['name']]['title'] = $field['label'];
							}

							$listTime = ResourceBooking::getFormDateTimeSlots($field['booking']['entity_field_name'], [
								'settingsData' => $field['booking']['settings_data']
							]);

							if(empty($listTime))
							{
								$isFormNative = false;
							}
							else
							{
								$items[$field['name']]['data']['timezoneOffset'] = '0';

								foreach ($listTime as $time)
								{
									$items[$field['name']]['data']['timeslots'][] = [
										'startTime' => $time->format('Y-m-dTH:iO'),
										'identifier' => serialize($time),
										'duration' => 60 //TODO: Modify in the future to support the transfer of duration
									];
								}
							}
						}
					}
					else
					{
						if(in_array($field['type'], self::LIST_IGNORE_FIELDS_ID, false))
						{
							if(!Library::isEmpty($field['label']) && Library::isEmpty($alternativeTitle))
							{
								$alternativeTitle = $field['label'];
							}
						}
						else
						{
							$isFormNative = false;
						}
					}
				}
			}

			if(Library::isEmpty($descriptionForm['title']))
			{
				if(!empty($alternativeTitle))
				{
					$descriptionForm['title'] = $alternativeTitle;
				}
				else
				{
					if($isTypeTimePicker === true)
					{
						$descriptionForm['title'] = Loc::getMessage('IMCONNECTOR_INTERACTIVE_MESSAGE_IMESSAGE_TIME_FORM_TITLE');
					}
					else
					{
						$descriptionForm['title'] = 'Form';
					}
				}
			}

			if($isTypeListPicker === true && $isTypeTimePicker === true)
			{
				$isFormNative = false;
				$isTypeListPicker = false;
				$isTypeTimePicker = false;
			}

			if($isTypeListPicker === true)
			{
				$descriptionForm['type'] = self::NATIVE_FORM_TYPE_LIST;
			}
			elseif ($isTypeTimePicker === true)
			{
				$descriptionForm['type'] = self::NATIVE_FORM_TYPE_TIME;
			}
			$descriptionForm['native'] = $isFormNative;
		}
	}

	if(empty($descriptionForm) || empty($items))
	{
		$result->addError(new Error(
			'Failed to upload information about the CRM form'
		));
	}
	else
	{
		$descriptionForm['fields'] = $items;

		$result->setData($descriptionForm);
	}

	return $result;
}