$fields) { $values['columns'][$column_index]['thresholds'] = []; foreach ($fields as $field_key => $field_values) { foreach ($field_values as $value_index => $value) { $values['columns'][$column_index]['thresholds'][$value_index][$field_key] = $value; } } } } // Apply sortable changes to data. if (array_key_exists('sortorder', $values)) { if (array_key_exists('column', $values) && array_key_exists('columns', $values['sortorder'])) { // Fix selected column index when columns were sorted. $values['column'] = array_search($values['column'], $values['sortorder']['columns'], true); } foreach ($values['sortorder'] as $key => $sortorder) { if (!array_key_exists($key, $values)) { continue; } $sorted = []; foreach ($sortorder as $index) { $sorted[] = $values[$key][$index]; } $values[$key] = $sorted; } } if (array_key_exists('columns', $values)) { foreach ($values['columns'] as $key => $value) { if ($value['data'] == CWidgetFieldColumnsList::DATA_ITEM_VALUE) { $this->field_column_values[$key] = ($value['name'] === '') ? $value['item'] : $value['name']; } } } return $values; } public function addFields(): self { return $this ->addField($this->isTemplateDashboard() ? null : new CWidgetFieldMultiSelectGroup('groupids', _('Host groups')) ) ->addField($this->isTemplateDashboard() ? null : new CWidgetFieldMultiSelectHost('hostids', _('Hosts')) ) ->addField($this->isTemplateDashboard() ? null : (new CWidgetFieldRadioButtonList('evaltype', _('Host tags'), [ TAG_EVAL_TYPE_AND_OR => _('And/Or'), TAG_EVAL_TYPE_OR => _('Or') ]))->setDefault(TAG_EVAL_TYPE_AND_OR) ) ->addField($this->isTemplateDashboard() ? null : new CWidgetFieldTags('tags') ) ->addField( (new CWidgetFieldColumnsList('columns', _('Columns')))->setFlags(CWidgetField::FLAG_LABEL_ASTERISK) ) ->addField( (new CWidgetFieldRadioButtonList('order', _('Order'), [ Widget::ORDER_TOP_N => _('Top N'), Widget::ORDER_BOTTOM_N => _('Bottom N') ]))->setDefault(Widget::ORDER_TOP_N) ) ->addField( (new CWidgetFieldSelect('column', _('Order column'), $this->field_column_values)) ->setDefault($this->field_column_values ? self::DEFAULT_ORDER_COLUMN : CWidgetFieldSelect::DEFAULT_VALUE ) ->setFlags(CWidgetField::FLAG_LABEL_ASTERISK) ) ->addField($this->isTemplateDashboard() ? null : (new CWidgetFieldIntegerBox('show_lines', _('Host count'), ZBX_MIN_WIDGET_LINES, ZBX_MAX_WIDGET_LINES )) ->setDefault(self::DEFAULT_HOSTS_COUNT) ->setFlags(CWidgetField::FLAG_LABEL_ASTERISK) ); } }