| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?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)
- );
- $html_page->show();
|