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