wecom.center.view.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php declare(strict_types = 0);
  2. /*
  3. ** WeCom Center - page view.
  4. ** @var CView $this
  5. ** @var array $data
  6. */
  7. use Modules\WecomCenter\Lib\I18n;
  8. $this->addCssFile('modules/WecomCenter/assets/wecom.center.css');
  9. $save_url = (new CUrl('zabbix.php'))->setArgument('action', 'wecom.center.save')->getUrl();
  10. $html_page = (new CHtmlPage())->setTitle(I18n::t('page.title'));
  11. /* ------------------------------------------------------------------ */
  12. /* Media-type switcher (only when several webhook media types exist) */
  13. /* ------------------------------------------------------------------ */
  14. if (count($data['mediatypes']) > 1) {
  15. $list = new CList();
  16. foreach ($data['mediatypes'] as $mt) {
  17. $label = $mt['name'];
  18. if ((string) $mt['mediatypeid'] === (string) $data['mediatypeid']) {
  19. $list->addItem(new CSpan('['.$label.']'));
  20. }
  21. else {
  22. $list->addItem(new CLink($label,
  23. (new CUrl('zabbix.php'))
  24. ->setArgument('action', 'wecom.center.view')
  25. ->setArgument('mediatypeid', $mt['mediatypeid'])
  26. ->getUrl()
  27. ));
  28. }
  29. }
  30. $html_page->addItem((new CDiv())->addItem(new CTag('h3'))->addItem(I18n::t('lbl.mediatype'))->addItem($list));
  31. }
  32. elseif ($data['mediatype']) {
  33. $html_page->addItem(
  34. (new CDiv())
  35. ->addItem((new CTag('h3'))->addItem(I18n::t('lbl.mediatype')))
  36. ->addItem(new CSpan($data['mediatype']['name']))
  37. );
  38. }
  39. if (!$data['mediatype']) {
  40. $html_page->addItem((new CDiv())->addItem(
  41. (new CTag('p'))->addItem(I18n::t('msg.no_mediatype'))
  42. ));
  43. $html_page->show();
  44. return;
  45. }
  46. $mask = (int) $data['severity'];
  47. $enabled = ((int) $data['active'] === 0);
  48. /* ------------------------------------------------------------------ */
  49. /* 1) Alert optimization (the core: simple switches + presets) */
  50. /* ------------------------------------------------------------------ */
  51. $sev_items = new CList();
  52. for ($i = 1; $i <= 6; $i++) {
  53. $bit = 1 << ($i - 1);
  54. $sev_items->addItem(
  55. (new CCheckBox('sev_'.$i))
  56. ->setLabel(I18n::t('sev.'.$i))
  57. ->setChecked(($mask & $bit) !== 0)
  58. );
  59. }
  60. $enabled_box = (new CCheckBox('enabled'))
  61. ->setLabel(I18n::t('lbl.alerting_on'))
  62. ->setChecked($enabled);
  63. $alert_list = (new CFormList())
  64. ->addRow(I18n::t('lbl.alerting_on'), $enabled_box)
  65. ->addRow(I18n::t('lbl.severity'), $sev_items)
  66. ->addRow(I18n::t('lbl.sendto'),
  67. (new CTextBox('sendto', $data['sendto']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
  68. );
  69. $preset_buttons = [];
  70. foreach ($data['schemes'] as $key => $def) {
  71. $preset_buttons[] = (new CSubmitButton(I18n::t('scheme.'.$key), 'scheme_'.$key, '1'))
  72. ->addClass(ZBX_STYLE_BTN_ALT);
  73. }
  74. $alert_form = (new CForm())
  75. ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
  76. ->addItem((new CVar('username', $data['robot_name']))->removeId())
  77. ->addItem(
  78. (new CTabView())->addTab('alert', I18n::t('tab.alert'), $alert_list)
  79. ->setFooter(makeFormFooter(
  80. (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_alert'))->setId('alert-save'),
  81. []
  82. ))
  83. )
  84. ->setAction($save_url)
  85. ->setId('wecom-alert-form');
  86. // Preset form (separate buttons outside footer of alert form)
  87. $preset_form = (new CForm())
  88. ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
  89. ->addItem((new CVar('username', $data['robot_name']))->removeId())
  90. ->addItem(new CDiv($preset_buttons))
  91. ->setAction($save_url)
  92. ->setId('wecom-preset-form');
  93. $html_page->addItem(
  94. (new CDiv())
  95. ->addItem((new CTag('h3'))->addItem(I18n::t('tab.alert')))
  96. ->addItem(new CDiv(new CTag('p'))->addItem(I18n::t('lbl.scheme_hint')))
  97. ->addItem($preset_form)
  98. ->addItem($alert_form)
  99. );
  100. /* ------------------------------------------------------------------ */
  101. /* 2) Robot / account / key */
  102. /* ------------------------------------------------------------------ */
  103. $robot_list = (new CFormList())
  104. ->addRow(I18n::t('lbl.key'),
  105. (new CTextBox('webhook_url', $data['webhook_url']))
  106. ->setWidth(ZBX_TEXTAREA_BIG_WIDTH)
  107. ->setAttribute('style', 'font-family:monospace;'))
  108. ->addRow(I18n::t('lbl.account'),
  109. (new CTextBox('username', $data['robot_name']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH))
  110. ->addRow(I18n::t('lbl.sendto'),
  111. (new CTextBox('sendto', $data['sendto']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH));
  112. $robot_form = (new CForm())
  113. ->addItem((new CVar('mediatypeid', $data['mediatypeid']))->removeId())
  114. ->addItem(
  115. (new CTabView())->addTab('robot', I18n::t('tab.robot'), $robot_list)
  116. ->setFooter(makeFormFooter(
  117. (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_robot'))->setId('robot-save'),
  118. [(new CSubmitButton(I18n::t('btn.test'), 'op', 'test_robot'))->addClass(ZBX_STYLE_BTN_ALT)]
  119. ))
  120. )
  121. ->setAction($save_url)
  122. ->setId('wecom-robot-form');
  123. $html_page->addItem(
  124. (new CDiv())
  125. ->addItem((new CTag('h3'))->addItem(I18n::t('tab.robot')))
  126. ->addItem($robot_form)
  127. );
  128. /* ------------------------------------------------------------------ */
  129. /* 3) One-click template import */
  130. /* ------------------------------------------------------------------ */
  131. $tpl_select = new CSelect('template_file');
  132. if (!$data['templates']) {
  133. $tpl_select->addOption(new CSelectOption('', I18n::t('tpl.none')));
  134. }
  135. foreach ($data['templates'] as $t) {
  136. $tpl_select->addOption(new CSelectOption($t['file'], $t['name']));
  137. }
  138. $tpl_list = (new CFormList())->addRow(I18n::t('tpl.choose'), $tpl_select);
  139. $tpl_form = (new CForm())
  140. ->addItem(
  141. (new CTabView())->addTab('tpl', I18n::t('tab.templates'), $tpl_list)
  142. ->setFooter(makeFormFooter(
  143. (new CSubmitButton(I18n::t('btn.import'), 'op', 'import_template'))->setId('tpl-import'),
  144. []
  145. ))
  146. )
  147. ->setAction($save_url)
  148. ->setId('wecom-tpl-form');
  149. $html_page->addItem(
  150. (new CDiv())
  151. ->addItem((new CTag('h3'))->addItem(I18n::t('tab.templates')))
  152. ->addItem($tpl_form)
  153. );
  154. /* ------------------------------------------------------------------ */
  155. /* 4) Map coordinates */
  156. /* ------------------------------------------------------------------ */
  157. $host_select = new CSelect('hostid');
  158. $host_select->addOption(new CSelectOption('', I18n::t('map.choose_host')));
  159. foreach ($data['hosts'] as $h) {
  160. $host_select->addOption(new CSelectOption($h['hostid'], $h['name']));
  161. }
  162. if ($data['selected_hostid'] !== '') {
  163. $host_select->setValue($data['selected_hostid']);
  164. }
  165. $map_list = (new CFormList())
  166. ->addRow(I18n::t('map.host'), $host_select)
  167. ->addRow(I18n::t('map.lat'),
  168. (new CTextBox('lat', $data['host_loc']['location_lat']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH))
  169. ->addRow(I18n::t('map.lon'),
  170. (new CTextBox('lon', $data['host_loc']['location_lon']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH));
  171. $map_form = (new CForm())
  172. ->addItem(
  173. (new CTabView())->addTab('map', I18n::t('tab.map'), $map_list)
  174. ->setFooter(makeFormFooter(
  175. (new CSubmitButton(I18n::t('btn.save'), 'op', 'save_map'))->setId('map-save'),
  176. []
  177. ))
  178. )
  179. ->setAction($save_url)
  180. ->setId('wecom-map-form');
  181. $html_page->addItem(
  182. (new CDiv())
  183. ->addItem((new CTag('h3'))->addItem(I18n::t('tab.map')))
  184. ->addItem($map_form)
  185. );
  186. $html_page->show();