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) ); /* ------------------------------------------------------------------ */ /* 5) Per-trigger alerting switch (search + checkboxes) */ /* ------------------------------------------------------------------ */ $trig_search_form = (new CForm('get', (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.view')->getUrl())) ->addItem((new CTextBox('trig_search', $data['trig_search'])) ->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ->setAttribute('placeholder', I18n::t('lbl.trig_search'))) ->addItem((new CSubmitButton(I18n::t('btn.search'), 'search', '1'))->addClass(ZBX_STYLE_BTN_ALT)) ->setId('trig-search-form'); $trig_div = (new CDiv()) ->addItem((new CTag('h3'))->addItem(I18n::t('tab.triggers'))) ->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.trig_hint', [$data['trigger_count']]))) ->addItem($trig_search_form); if ($data['trig_search'] !== '') { if ($data['triggers']) { $trig_list = new CList(); $ids = []; foreach ($data['triggers'] as $t) { $ids[] = $t['triggerid']; $host = !empty($t['hosts']) ? $t['hosts'][0]['host'] : ''; $sev_name = I18n::t('sev.'.(((int) $t['priority']) + 1)); $label = '['.$sev_name.'] '.$host.' — '.$t['description']; $trig_list->addItem( (new CCheckBox('trig_'.$t['triggerid'])) ->setLabel($label) ->setChecked(((int) $t['status']) === 0) ); } $trig_list_wrap = (new CFormList())->addRow(I18n::t('lbl.trig_list'), $trig_list); $trig_save_form = (new CForm()) ->addItem((new CVar('trig_ids', implode(',', $ids)))->removeId()) ->addItem( (new CTabView())->addTab('trig', I18n::t('tab.triggers'), $trig_list_wrap) ->setFooter(makeFormFooter( (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_triggers'))->setId('trig-save'), [] )) ) ->setAction($save_url) ->setId('wecom-trig-form'); $trig_div->addItem($trig_save_form); } else { $trig_div->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('msg.no_trig_search'))); } } $html_page->addItem($trig_div); $html_page->show();