|
@@ -1,6 +1,6 @@
|
|
|
<?php declare(strict_types = 0);
|
|
<?php declare(strict_types = 0);
|
|
|
/*
|
|
/*
|
|
|
-** WeCom Center - page view.
|
|
|
|
|
|
|
+** WeCom Center - page view (three tabs: Alert / Optimization / Maintenance).
|
|
|
** @var CView $this
|
|
** @var CView $this
|
|
|
** @var array $data
|
|
** @var array $data
|
|
|
*/
|
|
*/
|
|
@@ -10,38 +10,10 @@ use Modules\WecomCenter\Lib\I18n;
|
|
|
$this->addCssFile('modules/WecomCenter/assets/wecom.center.css');
|
|
$this->addCssFile('modules/WecomCenter/assets/wecom.center.css');
|
|
|
|
|
|
|
|
$save_url = (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.save')->getUrl();
|
|
$save_url = (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.save')->getUrl();
|
|
|
|
|
+$view_url = (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.view')->getUrl();
|
|
|
|
|
|
|
|
$html_page = (new CHtmlPage())->setTitle(I18n::t('page.title'));
|
|
$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']) {
|
|
if (!$data['mediatype']) {
|
|
|
$html_page->addItem((new CDiv())->addItem(
|
|
$html_page->addItem((new CDiv())->addItem(
|
|
|
(new CTag('p'))->addItem(I18n::t('msg.no_mediatype'))
|
|
(new CTag('p'))->addItem(I18n::t('msg.no_mediatype'))
|
|
@@ -53,177 +25,206 @@ if (!$data['mediatype']) {
|
|
|
$mask = (int) $data['severity'];
|
|
$mask = (int) $data['severity'];
|
|
|
$enabled = ((int) $data['active'] === 0);
|
|
$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)
|
|
|
|
|
|
|
+$tabs = new CTabView();
|
|
|
|
|
+
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+/* TAB 1 - ALERT (robot + strategy engine + manual threshold) */
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+$alert = new CDiv();
|
|
|
|
|
+
|
|
|
|
|
+// --- 1a. Robot key -----------------------------------------------------
|
|
|
|
|
+$robot_form = (new CForm())
|
|
|
|
|
+ ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
|
|
|
|
|
+ ->addItem(
|
|
|
|
|
+ (new CFormList())->addRow(I18n::t('lbl.key'),
|
|
|
|
|
+ (new CTextBox('webhook_url', $data['webhook_url']))
|
|
|
|
|
+ ->setWidth(ZBX_TEXTAREA_BIG_WIDTH)
|
|
|
|
|
+ ->setAttribute('style', 'font-family:monospace;')
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ ->addItem(
|
|
|
|
|
+ (new CDiv())
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.save'), 'op', 'save_robot')))
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.test'), 'op', 'test_robot'))->addClass(ZBX_STYLE_BTN_ALT))
|
|
|
|
|
+ )
|
|
|
|
|
+ ->setAction($save_url)
|
|
|
|
|
+ ->setId('wc-robot');
|
|
|
|
|
+
|
|
|
|
|
+$alert->addItem((new CTag('h4'))->addItem(I18n::t('sec.robot')));
|
|
|
|
|
+$alert->addItem($robot_form);
|
|
|
|
|
+
|
|
|
|
|
+// --- 1b. Strategy presets ---------------------------------------------
|
|
|
|
|
+$preset_tbl = new CTable();
|
|
|
|
|
+$preset_tbl->setHeader([I18n::t('preset.col.name'), I18n::t('preset.col.desc'), I18n::t('preset.col.action')]);
|
|
|
|
|
+foreach ($data['presets'] as $key => $p) {
|
|
|
|
|
+ $is_cur = ((string) $data['current_strategy'] === (string) $key);
|
|
|
|
|
+ $name_cell = new CDiv();
|
|
|
|
|
+ $name_cell->addItem(I18n::t($p['label']));
|
|
|
|
|
+ if ($is_cur) {
|
|
|
|
|
+ $name_cell->addItem((new CSpan(I18n::t('preset.current')))->addClass(ZBX_STYLE_GREEN));
|
|
|
|
|
+ }
|
|
|
|
|
+ $preview_link = new CLink(I18n::t('btn.preview'),
|
|
|
|
|
+ (new CUrl('zabbix.php'))
|
|
|
|
|
+ ->setArgument('action', 'wecom.center.view')
|
|
|
|
|
+ ->setArgument('mediatypeid', $data['mediatypeid'])
|
|
|
|
|
+ ->setArgument('preview_preset', $key)
|
|
|
|
|
+ ->getUrl()
|
|
|
);
|
|
);
|
|
|
|
|
+ $apply_btn = (new CSubmitButton(I18n::t('btn.apply'), 'apply_strategy', $key))
|
|
|
|
|
+ ->addClass(ZBX_STYLE_BTN_ALT);
|
|
|
|
|
+ $preset_tbl->addRow([
|
|
|
|
|
+ $name_cell,
|
|
|
|
|
+ I18n::t($p['desc']),
|
|
|
|
|
+ (new CDiv())->addItem($preview_link)->addItem($apply_btn)
|
|
|
|
|
+ ]);
|
|
|
}
|
|
}
|
|
|
|
|
+$strategy_form = (new CForm())
|
|
|
|
|
+ ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
|
|
|
|
|
+ ->addItem(new CDiv($preset_tbl))
|
|
|
|
|
+ ->setAction($save_url)
|
|
|
|
|
+ ->setId('wc-strategy');
|
|
|
|
|
|
|
|
-$enabled_box = (new CCheckBox('enabled'))
|
|
|
|
|
- ->setLabel(I18n::t('lbl.alerting_on'))
|
|
|
|
|
- ->setChecked($enabled);
|
|
|
|
|
|
|
+$alert->addItem((new CTag('h4'))->addItem(I18n::t('sec.strategy')));
|
|
|
|
|
+$alert->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.strategy_hint')));
|
|
|
|
|
+$alert->addItem($strategy_form);
|
|
|
|
|
|
|
|
-$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)
|
|
|
|
|
|
|
+// --- 1c. Preview result (dry-run) -------------------------------------
|
|
|
|
|
+if ($data['preview'] !== null) {
|
|
|
|
|
+ $pv = $data['preview'];
|
|
|
|
|
+ $pkey = $data['preview_key'];
|
|
|
|
|
+ $pt = new CTable();
|
|
|
|
|
+ $pt->setHeader([
|
|
|
|
|
+ I18n::t('cls.col.class'), I18n::t('cls.col.target'),
|
|
|
|
|
+ I18n::t('cls.col.count'), I18n::t('cls.col.changes')
|
|
|
|
|
+ ]);
|
|
|
|
|
+ foreach ($pv['classes'] as $ck => $c) {
|
|
|
|
|
+ $label = I18n::t($data['classes'][$ck]['label'] ?? $ck);
|
|
|
|
|
+ $pt->addRow([$label, I18n::t('sev.'.($c['target'] + 1)), $c['count'], $c['changes']]);
|
|
|
|
|
+ }
|
|
|
|
|
+ $pt->addRow([(new CTag('b'))->addItem(I18n::t('cls.total')), '', (new CTag('b'))->addItem((string) $pv['total']), (new CTag('b'))->addItem((string) $pv['changes'])]);
|
|
|
|
|
+ $alert->addItem(
|
|
|
|
|
+ (new CDiv())
|
|
|
|
|
+ ->addItem((new CTag('h4'))->addItem(
|
|
|
|
|
+ I18n::t('preview.title', [I18n::t($data['presets'][$pkey]['label'] ?? $pkey)])
|
|
|
|
|
+ ))
|
|
|
|
|
+ ->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('preview.hint')))
|
|
|
|
|
+ ->addItem($pt)
|
|
|
);
|
|
);
|
|
|
-
|
|
|
|
|
-$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())
|
|
|
|
|
|
|
+// --- 1d. Manual threshold override ------------------------------------
|
|
|
|
|
+$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)
|
|
|
|
|
+ );
|
|
|
|
|
+}
|
|
|
|
|
+$sev_form = (new CForm())
|
|
|
->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
|
|
->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
|
|
|
- ->addItem((new CVar('username', $data['robot_name']))->removeId())
|
|
|
|
|
->addItem(
|
|
->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'),
|
|
|
|
|
- []
|
|
|
|
|
- ))
|
|
|
|
|
|
|
+ (new CFormList())
|
|
|
|
|
+ ->addRow(I18n::t('lbl.alerting_on'),
|
|
|
|
|
+ (new CCheckBox('enabled'))->setLabel(I18n::t('lbl.alerting_on'))->setChecked($enabled))
|
|
|
|
|
+ ->addRow(I18n::t('lbl.severity'), $sev_items)
|
|
|
)
|
|
)
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.save'), 'op', 'save_alert')))
|
|
|
->setAction($save_url)
|
|
->setAction($save_url)
|
|
|
- ->setId('wecom-alert-form');
|
|
|
|
|
|
|
+ ->setId('wc-sev');
|
|
|
|
|
|
|
|
-// 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');
|
|
|
|
|
|
|
+$alert->addItem((new CTag('h4'))->addItem(I18n::t('sec.threshold')));
|
|
|
|
|
+$alert->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.threshold_hint')));
|
|
|
|
|
+$alert->addItem($sev_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)
|
|
|
|
|
-);
|
|
|
|
|
|
|
+$tabs->addTab('alert', I18n::t('tab.alert'), $alert);
|
|
|
|
|
|
|
|
-/* ------------------------------------------------------------------ */
|
|
|
|
|
-/* 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));
|
|
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+/* TAB 2 - OPTIMIZATION */
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+$opt = new CDiv();
|
|
|
|
|
|
|
|
-$robot_form = (new CForm())
|
|
|
|
|
- ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
|
|
|
|
|
|
|
+// --- 2a. Server tuning generator --------------------------------------
|
|
|
|
|
+$tune_sel = new CSelect('tuning_profile');
|
|
|
|
|
+foreach (['small', 'medium', 'large'] as $pk) {
|
|
|
|
|
+ $tune_sel->addOption(new CSelectOption($pk, I18n::t('tuning.'.$pk)));
|
|
|
|
|
+}
|
|
|
|
|
+$tune_sel->setValue($data['tuning_profile']);
|
|
|
|
|
+$tune_form = (new CForm('get', $view_url))
|
|
|
->addItem(
|
|
->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)]
|
|
|
|
|
- ))
|
|
|
|
|
|
|
+ (new CFormList())->addRow(I18n::t('tuning.choose'), $tune_sel)
|
|
|
)
|
|
)
|
|
|
- ->setAction($save_url)
|
|
|
|
|
- ->setId('wecom-robot-form');
|
|
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.generate'), 'generate', '1'))->addClass(ZBX_STYLE_BTN_ALT))
|
|
|
|
|
+ ->setId('wc-tune');
|
|
|
|
|
|
|
|
-$html_page->addItem(
|
|
|
|
|
- (new CDiv())
|
|
|
|
|
- ->addItem((new CTag('h3'))->addItem(I18n::t('tab.robot')))
|
|
|
|
|
- ->addItem($robot_form)
|
|
|
|
|
-);
|
|
|
|
|
|
|
+$env_pre = (new CTag('pre'))->addItem($data['tuning']['env'])
|
|
|
|
|
+ ->setAttribute('style', 'background:#f4f4f4;padding:8px;border:1px solid #ccc;font-family:monospace;');
|
|
|
|
|
+$cmd_pre = (new CTag('pre'))->addItem($data['tuning']['cmd'])
|
|
|
|
|
+ ->setAttribute('style', 'background:#f4f4f4;padding:8px;border:1px solid #ccc;font-family:monospace;');
|
|
|
|
|
|
|
|
-/* ------------------------------------------------------------------ */
|
|
|
|
|
-/* 3) One-click template import */
|
|
|
|
|
-/* ------------------------------------------------------------------ */
|
|
|
|
|
-$tpl_select = new CSelect('template_file');
|
|
|
|
|
|
|
+$opt->addItem((new CTag('h4'))->addItem(I18n::t('sec.tuning')));
|
|
|
|
|
+$opt->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.tuning_hint')));
|
|
|
|
|
+$opt->addItem($tune_form);
|
|
|
|
|
+$opt->addItem((new CDiv())->addItem((new CTag('strong'))->addItem(I18n::t('tuning.env')))->addItem($env_pre));
|
|
|
|
|
+$opt->addItem((new CDiv())->addItem((new CTag('strong'))->addItem(I18n::t('tuning.cmd')))->addItem($cmd_pre));
|
|
|
|
|
+
|
|
|
|
|
+// --- 2b. Template import ---------------------------------------------
|
|
|
|
|
+$tpl_sel = new CSelect('template_file');
|
|
|
if (!$data['templates']) {
|
|
if (!$data['templates']) {
|
|
|
- $tpl_select->addOption(new CSelectOption('', I18n::t('tpl.none')));
|
|
|
|
|
|
|
+ $tpl_sel->addOption(new CSelectOption('', I18n::t('tpl.none')));
|
|
|
}
|
|
}
|
|
|
foreach ($data['templates'] as $t) {
|
|
foreach ($data['templates'] as $t) {
|
|
|
- $tpl_select->addOption(new CSelectOption($t['file'], $t['name']));
|
|
|
|
|
|
|
+ $tpl_sel->addOption(new CSelectOption($t['file'], $t['name']));
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-$tpl_list = (new CFormList())->addRow(I18n::t('tpl.choose'), $tpl_select);
|
|
|
|
|
-
|
|
|
|
|
$tpl_form = (new CForm())
|
|
$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'),
|
|
|
|
|
- []
|
|
|
|
|
- ))
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ ->addItem((new CFormList())->addRow(I18n::t('tpl.choose'), $tpl_sel))
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.import'), 'op', 'import_template')))
|
|
|
->setAction($save_url)
|
|
->setAction($save_url)
|
|
|
- ->setId('wecom-tpl-form');
|
|
|
|
|
-
|
|
|
|
|
-$html_page->addItem(
|
|
|
|
|
- (new CDiv())
|
|
|
|
|
- ->addItem((new CTag('h3'))->addItem(I18n::t('tab.templates')))
|
|
|
|
|
- ->addItem($tpl_form)
|
|
|
|
|
-);
|
|
|
|
|
|
|
+ ->setId('wc-tpl');
|
|
|
|
|
+$opt->addItem((new CTag('h4'))->addItem(I18n::t('sec.template')));
|
|
|
|
|
+$opt->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']));
|
|
|
|
|
|
|
+// --- 2c. Map marker (single point = Zabbix server host) --------------
|
|
|
|
|
+if ($data['server_host']) {
|
|
|
|
|
+ $map_form = (new CForm())
|
|
|
|
|
+ ->addItem((new CVar('hostid', $data['server_host']['hostid']))->removeId())
|
|
|
|
|
+ ->addItem(
|
|
|
|
|
+ (new CFormList())
|
|
|
|
|
+ ->addRow(I18n::t('map.host'),
|
|
|
|
|
+ (new CSpan($data['server_host']['name'])))
|
|
|
|
|
+ ->addRow(I18n::t('map.lat'),
|
|
|
|
|
+ (new CTextBox('lat', $data['server_loc']['location_lat']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH))
|
|
|
|
|
+ ->addRow(I18n::t('map.lon'),
|
|
|
|
|
+ (new CTextBox('lon', $data['server_loc']['location_lon']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH))
|
|
|
|
|
+ )
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.save'), 'op', 'save_map')))
|
|
|
|
|
+ ->setAction($save_url)
|
|
|
|
|
+ ->setId('wc-map');
|
|
|
|
|
+ $opt->addItem((new CTag('h4'))->addItem(I18n::t('sec.map')));
|
|
|
|
|
+ $opt->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('map.hint')));
|
|
|
|
|
+ $opt->addItem($map_form);
|
|
|
}
|
|
}
|
|
|
-if ($data['selected_hostid'] !== '') {
|
|
|
|
|
- $host_select->setValue($data['selected_hostid']);
|
|
|
|
|
|
|
+else {
|
|
|
|
|
+ $opt->addItem((new CTag('h4'))->addItem(I18n::t('sec.map')));
|
|
|
|
|
+ $opt->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('msg.no_server_host')));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-$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');
|
|
|
|
|
|
|
+$tabs->addTab('opt', I18n::t('tab.opt'), $opt);
|
|
|
|
|
|
|
|
-$html_page->addItem(
|
|
|
|
|
- (new CDiv())
|
|
|
|
|
- ->addItem((new CTag('h3'))->addItem(I18n::t('tab.map')))
|
|
|
|
|
- ->addItem($map_form)
|
|
|
|
|
-);
|
|
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+/* TAB 3 - MAINTENANCE (per-trigger alerting switch) */
|
|
|
|
|
+/* ================================================================== */
|
|
|
|
|
+$maint = new CDiv();
|
|
|
|
|
|
|
|
-/* ------------------------------------------------------------------ */
|
|
|
|
|
-/* 5) Per-trigger alerting switch (search + checkboxes) */
|
|
|
|
|
-/* ------------------------------------------------------------------ */
|
|
|
|
|
-$trig_search_form = (new CForm('get',
|
|
|
|
|
- (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.view')->getUrl()))
|
|
|
|
|
|
|
+$trig_search_form = (new CForm('get', $view_url))
|
|
|
->addItem((new CTextBox('trig_search', $data['trig_search']))
|
|
->addItem((new CTextBox('trig_search', $data['trig_search']))
|
|
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
|
->setAttribute('placeholder', I18n::t('lbl.trig_search')))
|
|
->setAttribute('placeholder', I18n::t('lbl.trig_search')))
|
|
|
->addItem((new CSubmitButton(I18n::t('btn.search'), 'search', '1'))->addClass(ZBX_STYLE_BTN_ALT))
|
|
->addItem((new CSubmitButton(I18n::t('btn.search'), 'search', '1'))->addClass(ZBX_STYLE_BTN_ALT))
|
|
|
->setId('trig-search-form');
|
|
->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);
|
|
|
|
|
|
|
+$maint->addItem((new CTag('h4'))->addItem(I18n::t('sec.triggers')));
|
|
|
|
|
+$maint->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.trig_hint', [$data['trigger_count']])));
|
|
|
|
|
+$maint->addItem($trig_search_form);
|
|
|
|
|
|
|
|
if ($data['trig_search'] !== '') {
|
|
if ($data['trig_search'] !== '') {
|
|
|
if ($data['triggers']) {
|
|
if ($data['triggers']) {
|
|
@@ -235,30 +236,23 @@ if ($data['trig_search'] !== '') {
|
|
|
$sev_name = I18n::t('sev.'.(((int) $t['priority']) + 1));
|
|
$sev_name = I18n::t('sev.'.(((int) $t['priority']) + 1));
|
|
|
$label = '['.$sev_name.'] '.$host.' — '.$t['description'];
|
|
$label = '['.$sev_name.'] '.$host.' — '.$t['description'];
|
|
|
$trig_list->addItem(
|
|
$trig_list->addItem(
|
|
|
- (new CCheckBox('trig_'.$t['triggerid']))
|
|
|
|
|
- ->setLabel($label)
|
|
|
|
|
- ->setChecked(((int) $t['status']) === 0)
|
|
|
|
|
|
|
+ (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())
|
|
$trig_save_form = (new CForm())
|
|
|
->addItem((new CVar('trig_ids', implode(',', $ids)))->removeId())
|
|
->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'),
|
|
|
|
|
- []
|
|
|
|
|
- ))
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ ->addItem((new CFormList())->addRow(I18n::t('lbl.trig_list'), $trig_list))
|
|
|
|
|
+ ->addItem((new CSubmitButton(I18n::t('btn.save'), 'op', 'save_triggers')))
|
|
|
->setAction($save_url)
|
|
->setAction($save_url)
|
|
|
- ->setId('wecom-trig-form');
|
|
|
|
|
- $trig_div->addItem($trig_save_form);
|
|
|
|
|
|
|
+ ->setId('wc-trig');
|
|
|
|
|
+ $maint->addItem($trig_save_form);
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
- $trig_div->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('msg.no_trig_search')));
|
|
|
|
|
|
|
+ $maint->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('msg.no_trig_search')));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-$html_page->addItem($trig_div);
|
|
|
|
|
|
|
+$tabs->addTab('maint', I18n::t('tab.maint'), $maint);
|
|
|
|
|
|
|
|
|
|
+$html_page->addItem($tabs);
|
|
|
$html_page->show();
|
|
$html_page->show();
|