| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php declare(strict_types = 0);
- /*
- ** WeCom Center - page view.
- ** @var CView $this
- ** @var array $data
- */
- use Modules\WecomCenter\Lib\I18n;
- $this->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();
|