addCssFile('modules/WecomCenter/assets/wecom.center.css'); $save_url = (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.save')->getUrl(); $html_page = (new CHtmlPage())->setTitle(I18n::t('page.title')); /* ------------------------------------------------------------------ */ /* Media-type switcher (only when several webhook media types exist) */ /* ------------------------------------------------------------------ */ if (count($data['mediatypes']) > 1) { $list = new CList(); foreach ($data['mediatypes'] as $mt) { $label = $mt['name']; if ((string) $mt['mediatypeid'] === (string) $data['mediatypeid']) { $list->addItem(new CSpan('['.$label.']')); } else { $list->addItem(new CLink($label, (new CUrl('zabbix.php')) ->setArgument('action', 'wecom.center.view') ->setArgument('mediatypeid', $mt['mediatypeid']) ->getUrl() )); } } $html_page->addItem((new CDiv())->addItem(new CTag('h3'))->addItem(I18n::t('lbl.mediatype'))->addItem($list)); } elseif ($data['mediatype']) { $html_page->addItem( (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('lbl.mediatype'))) ->addItem(new CSpan($data['mediatype']['name'])) ); } if (!$data['mediatype']) { $html_page->addItem((new CDiv())->addItem( (new CTag('p'))->addItem(I18n::t('msg.no_mediatype')) )); $html_page->show(); return; } $mask = (int) $data['severity']; $enabled = ((int) $data['active'] === 0); /* ------------------------------------------------------------------ */ /* 1) Alert optimization (the core: simple switches + presets) */ /* ------------------------------------------------------------------ */ $sev_items = new CList(); for ($i = 1; $i <= 6; $i++) { $bit = 1 << ($i - 1); $sev_items->addItem( (new CCheckBox('sev_'.$i)) ->setLabel(I18n::t('sev.'.$i)) ->setChecked(($mask & $bit) !== 0) ); } $enabled_box = (new CCheckBox('enabled')) ->setLabel(I18n::t('lbl.alerting_on')) ->setChecked($enabled); $alert_list = (new CFormList()) ->addRow(I18n::t('lbl.alerting_on'), $enabled_box) ->addRow(I18n::t('lbl.severity'), $sev_items) ->addRow(I18n::t('lbl.sendto'), (new CTextBox('sendto', $data['sendto']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ); $preset_buttons = []; foreach ($data['schemes'] as $key => $def) { $preset_buttons[] = (new CSubmitButton(I18n::t('scheme.'.$key), 'scheme_'.$key, '1')) ->addClass(ZBX_STYLE_BTN_ALT); } $alert_form = (new CForm()) ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId()) ->addItem((new CVar('username', $data['robot_name']))->removeId()) ->addItem( (new CTabView())->addTab('alert', I18n::t('tab.alert'), $alert_list) ->setFooter(makeFormFooter( (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_alert'))->setId('alert-save'), [] )) ) ->setAction($save_url) ->setId('wecom-alert-form'); // Preset form (separate buttons outside footer of alert form) $preset_form = (new CForm()) ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId()) ->addItem((new CVar('username', $data['robot_name']))->removeId()) ->addItem(new CDiv($preset_buttons)) ->setAction($save_url) ->setId('wecom-preset-form'); $html_page->addItem( (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('tab.alert'))) ->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.scheme_hint'))) ->addItem($preset_form) ->addItem($alert_form) ); /* ------------------------------------------------------------------ */ /* 2) Robot / account / key */ /* ------------------------------------------------------------------ */ $robot_list = (new CFormList()) ->addRow(I18n::t('lbl.key'), (new CTextBox('webhook_url', $data['webhook_url'])) ->setWidth(ZBX_TEXTAREA_BIG_WIDTH) ->setAttribute('style', 'font-family:monospace;')) ->addRow(I18n::t('lbl.account'), (new CTextBox('username', $data['robot_name']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)) ->addRow(I18n::t('lbl.sendto'), (new CTextBox('sendto', $data['sendto']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)); $robot_form = (new CForm()) ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId()) ->addItem( (new CTabView())->addTab('robot', I18n::t('tab.robot'), $robot_list) ->setFooter(makeFormFooter( (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_robot'))->setId('robot-save'), [(new CSubmitButton(I18n::t('btn.test'), 'op', 'test_robot'))->addClass(ZBX_STYLE_BTN_ALT)] )) ) ->setAction($save_url) ->setId('wecom-robot-form'); $html_page->addItem( (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('tab.robot'))) ->addItem($robot_form) ); /* ------------------------------------------------------------------ */ /* 3) One-click template import */ /* ------------------------------------------------------------------ */ $tpl_select = new CSelect('template_file'); if (!$data['templates']) { $tpl_select->addOption(new CSelectOption('', I18n::t('tpl.none'))); } foreach ($data['templates'] as $t) { $tpl_select->addOption(new CSelectOption($t['file'], $t['name'])); } $tpl_list = (new CFormList())->addRow(I18n::t('tpl.choose'), $tpl_select); $tpl_form = (new CForm()) ->addItem( (new CTabView())->addTab('tpl', I18n::t('tab.templates'), $tpl_list) ->setFooter(makeFormFooter( (new CSubmitButton(I18n::t('btn.import'), 'op', 'import_template'))->setId('tpl-import'), [] )) ) ->setAction($save_url) ->setId('wecom-tpl-form'); $html_page->addItem( (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('tab.templates'))) ->addItem($tpl_form) ); /* ------------------------------------------------------------------ */ /* 4) Map coordinates */ /* ------------------------------------------------------------------ */ $host_select = new CSelect('hostid'); $host_select->addOption(new CSelectOption('', I18n::t('map.choose_host'))); foreach ($data['hosts'] as $h) { $host_select->addOption(new CSelectOption($h['hostid'], $h['name'])); } if ($data['selected_hostid'] !== '') { $host_select->setValue($data['selected_hostid']); } $map_list = (new CFormList()) ->addRow(I18n::t('map.host'), $host_select) ->addRow(I18n::t('map.lat'), (new CTextBox('lat', $data['host_loc']['location_lat']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)) ->addRow(I18n::t('map.lon'), (new CTextBox('lon', $data['host_loc']['location_lon']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)); $map_form = (new CForm()) ->addItem( (new CTabView())->addTab('map', I18n::t('tab.map'), $map_list) ->setFooter(makeFormFooter( (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_map'))->setId('map-save'), [] )) ) ->setAction($save_url) ->setId('wecom-map-form'); $html_page->addItem( (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('tab.map'))) ->addItem($map_form) ); $html_page->show();