<?php declare(strict_types = 0); /* ** Copyright (C) 2001-2025 Zabbix SIA ** ** This program is free software: you can redistribute it and/or modify it under the terms of ** the GNU Affero General Public License as published by the Free Software Foundation, version 3. ** ** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU Affero General Public License for more details. ** ** You should have received a copy of the GNU Affero General Public License along with this program. ** If not, see <https://www.gnu.org/licenses/>. **/ /** * Honeycomb widget form view. * * @var CView $this * @var array $data */ use Zabbix\Widgets\Fields\CWidgetFieldColumnsList; $form = new CWidgetFormView($data); $groupids_field = array_key_exists('groupids', $data['fields']) ? new CWidgetFieldMultiSelectGroupView($data['fields']['groupids']) : null; $hostids_field = $data['templateid'] === null ? (new CWidgetFieldMultiSelectHostView($data['fields']['hostids'])) ->setFilterPreselect([ 'id' => $groupids_field->getId(), 'accept' => CMultiSelect::FILTER_PRESELECT_ACCEPT_ID, 'submit_as' => 'groupid' ]) : null; $form ->addField($groupids_field) ->addField($hostids_field) ->addField(array_key_exists('evaltype_host', $data['fields']) ? new CWidgetFieldRadioButtonListView($data['fields']['evaltype_host']) : null ) ->addField(array_key_exists('host_tags', $data['fields']) ? new CWidgetFieldTagsView($data['fields']['host_tags']) : null ) ->addField( (new CWidgetFieldPatternSelectItemView($data['fields']['items'])) ->setFilterPreselect($hostids_field !== null ? [ 'id' => $hostids_field->getId(), 'accept' => CMultiSelect::FILTER_PRESELECT_ACCEPT_ID, 'submit_as' => 'hostid' ] : [] ) ) ->addField( new CWidgetFieldRadioButtonListView($data['fields']['evaltype_item']) ) ->addField( new CWidgetFieldTagsView($data['fields']['item_tags']) ) ->addField( new CWidgetFieldCheckBoxView($data['fields']['maintenance']) ) ->addField( (new CWidgetFieldCheckBoxListView($data['fields']['show']))->setColumns(2) ) ->addFieldset( (new CWidgetFormFieldsetCollapsibleView(_('Advanced configuration'))) ->addFieldsGroup( getLabelFieldsGroupView($form, _('Primary label'), [ 'label' => $data['fields']['primary_label'], 'label_bold' => $data['fields']['primary_label_bold'], 'label_color' => $data['fields']['primary_label_color'], 'label_decimal_places' => $data['fields']['primary_label_decimal_places'], 'label_size' => $data['fields']['primary_label_size'], 'label_size_type' => $data['fields']['primary_label_size_type'], 'label_type' => $data['fields']['primary_label_type'], 'label_units' => $data['fields']['primary_label_units'], 'label_units_pos' => $data['fields']['primary_label_units_pos'], 'label_units_show' => $data['fields']['primary_label_units_show'] ])->addRowClass('fields-group-primary-label') ) ->addFieldsGroup( getLabelFieldsGroupView($form, _('Secondary label'), [ 'label' => $data['fields']['secondary_label'], 'label_bold' => $data['fields']['secondary_label_bold'], 'label_color' => $data['fields']['secondary_label_color'], 'label_decimal_places' => $data['fields']['secondary_label_decimal_places'], 'label_size' => $data['fields']['secondary_label_size'], 'label_size_type' => $data['fields']['secondary_label_size_type'], 'label_type' => $data['fields']['secondary_label_type'], 'label_units' => $data['fields']['secondary_label_units'], 'label_units_pos' => $data['fields']['secondary_label_units_pos'], 'label_units_show' => $data['fields']['secondary_label_units_show'] ])->addRowClass('fields-group-secondary-label') ) ->addField( new CWidgetFieldColorView($data['fields']['bg_color']) ) ->addFieldsGroup( getThresholdFieldsGroupView($form, $data['fields']) ) ) ->includeJsFile('widget.edit.js.php') ->addJavaScript('widget_honeycomb_form.init('.json_encode([ 'thresholds_colors' => CWidgetFieldColumnsList::THRESHOLDS_DEFAULT_COLOR_PALETTE ], JSON_THROW_ON_ERROR).');') ->show(); function getLabelFieldsGroupView(CWidgetFormView $form, string $group_label, array $fields): CWidgetFieldsGroupView { $label_size_field = $form->registerField(new CWidgetFieldIntegerBoxView($fields['label_size'])); $label_size_type_field = $form->registerField(new CWidgetFieldRadioButtonListView($fields['label_size_type'])); $label_units_show_field = $form->registerField(new CWidgetFieldCheckBoxView($fields['label_units_show'])); $label_units_field = $form->registerField( (new CWidgetFieldTextBoxView($fields['label_units']))->setAdaptiveWidth(ZBX_TEXTAREA_SMALL_WIDTH) ); return (new CWidgetFieldsGroupView($group_label)) ->addField( (new CWidgetFieldRadioButtonListView($fields['label_type'])) ->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID) ->addClass('js-label-type') ) ->addField( (new CWidgetFieldTextAreaView($fields['label'])) ->addLabelClass(ZBX_STYLE_FIELD_LABEL_ASTERISK) ->setFieldHint( makeHelpIcon([ _('Supported macros:'), (new CList([ '{HOST.*}', '{ITEM.*}', '{INVENTORY.*}', _('User macros') ]))->addClass(ZBX_STYLE_LIST_DASHED) ]) ) ->setAdaptiveWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID) ->addRowClass('js-label') ) ->addField( (new CWidgetFieldIntegerBoxView($fields['label_decimal_places'])) ->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID) ->addRowClass('js-label-decimal-places') ) ->addItem([ $label_size_field->getLabel(), new CFormField([ ($label_size_type_field->getView()) ->addClass('js-label-size-type') ->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), ($label_size_field->getView()) ->addClass('label-size') ->addClass('js-label-size'), '%' ]) ]) ->addField( new CWidgetFieldCheckBoxView($fields['label_bold']) ) ->addField( new CWidgetFieldColorView($fields['label_color']) ) ->addItem( (new CTag('hr'))->addClass('js-label-units-hr') ) ->addItem([ (new CDiv([$label_units_show_field->getView(), $label_units_field->getLabel()])) ->addClass('label-units-show') ->addClass('js-label-units-show'), (new CFormField($label_units_field->getView()))->addClass('js-label-units') ]) ->addField( (new CWidgetFieldSelectView($fields['label_units_pos']))->addRowClass('js-label-units-pos') ); } function getThresholdFieldsGroupView(CWidgetFormView $form, array $fields): CWidgetFieldsGroupView { $color_interpolation_field = $form->registerField(new CWidgetFieldCheckBoxView($fields['interpolation'])); return (new CWidgetFieldsGroupView(_('Thresholds'))) ->setFieldHint( makeWarningIcon(_('This setting applies only to numeric data.')) ) ->addItem([ (new CDiv([$color_interpolation_field->getView(), $color_interpolation_field->getLabel()])) ->addClass('form-row-interpolation') ]) ->addField( (new CWidgetFieldThresholdsView($fields['thresholds']))->removeLabel() ); }