1<?php 2/* 3** Zabbix 4** Copyright (C) 2001-2021 Zabbix SIA 5** 6** This program is free software; you can redistribute it and/or modify 7** it under the terms of the GNU General Public License as published by 8** the Free Software Foundation; either version 2 of the License, or 9** (at your option) any later version. 10** 11** This program is distributed in the hope that it will be useful, 12** but WITHOUT ANY WARRANTY; without even the implied warranty of 13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14** GNU General Public License for more details. 15** 16** You should have received a copy of the GNU General Public License 17** along with this program; if not, write to the Free Software 18** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19**/ 20 21 22/** 23 * @var CView $this 24 */ 25?> 26 27<script type="text/x-jquery-tmpl" id="delayFlexRow"> 28 <tr class="form_row"> 29 <td> 30 <ul class="<?= CRadioButtonList::ZBX_STYLE_CLASS ?>" id="delay_flex_#{rowNum}_type"> 31 <li> 32 <input type="radio" id="delay_flex_#{rowNum}_type_0" name="delay_flex[#{rowNum}][type]" value="0" checked="checked"> 33 <label for="delay_flex_#{rowNum}_type_0"><?= _('Flexible') ?></label> 34 </li><li> 35 <input type="radio" id="delay_flex_#{rowNum}_type_1" name="delay_flex[#{rowNum}][type]" value="1"> 36 <label for="delay_flex_#{rowNum}_type_1"><?= _('Scheduling') ?></label> 37 </li> 38 </ul> 39 </td> 40 <td> 41 <input type="text" id="delay_flex_#{rowNum}_delay" name="delay_flex[#{rowNum}][delay]" maxlength="255" placeholder="<?= ZBX_ITEM_FLEXIBLE_DELAY_DEFAULT ?>"> 42 <input type="text" id="delay_flex_#{rowNum}_schedule" name="delay_flex[#{rowNum}][schedule]" maxlength="255" placeholder="<?= ZBX_ITEM_SCHEDULING_DEFAULT ?>" style="display: none;"> 43 </td> 44 <td> 45 <input type="text" id="delay_flex_#{rowNum}_period" name="delay_flex[#{rowNum}][period]" maxlength="255" placeholder="<?= ZBX_DEFAULT_INTERVAL ?>"> 46 </td> 47 <td> 48 <button type="button" id="delay_flex_#{rowNum}_remove" name="delay_flex[#{rowNum}][remove]" class="<?= ZBX_STYLE_BTN_LINK ?> element-table-remove"><?= _('Remove') ?></button> 49 </td> 50 </tr> 51</script> 52<script type="text/javascript"> 53 jQuery(function($) { 54 $('#delayFlexTable').on('click', 'input[type="radio"]', function() { 55 var rowNum = $(this).attr('id').split('_')[2]; 56 57 if ($(this).val() == <?= ITEM_DELAY_FLEXIBLE; ?>) { 58 $('#delay_flex_' + rowNum + '_schedule').hide(); 59 $('#delay_flex_' + rowNum + '_delay').show(); 60 $('#delay_flex_' + rowNum + '_period').show(); 61 } 62 else { 63 $('#delay_flex_' + rowNum + '_delay').hide(); 64 $('#delay_flex_' + rowNum + '_period').hide(); 65 $('#delay_flex_' + rowNum + '_schedule').show(); 66 } 67 }); 68 69 $('#delayFlexTable').dynamicRows({ 70 template: '#delayFlexRow' 71 }); 72 }); 73</script> 74<?php 75 76/* 77 * Visibility 78 */ 79$this->data['typeVisibility'] = []; 80 81if (!empty($this->data['interfaces'])) { 82 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_ZABBIX, 'interface_row'); 83 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_ZABBIX, 'interfaceid'); 84 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'interface_row'); 85 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'interfaceid'); 86 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMP, 'interface_row'); 87 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMP, 'interfaceid'); 88 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_EXTERNAL, 'interface_row'); 89 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_EXTERNAL, 'interfaceid'); 90 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_IPMI, 'interface_row'); 91 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_IPMI, 'interfaceid'); 92 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'interface_row'); 93 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'interfaceid'); 94 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'interface_row'); 95 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'interfaceid'); 96 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'interface_row'); 97 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'interfaceid'); 98 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMPTRAP, 'interface_row'); 99 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMPTRAP, 'interfaceid'); 100 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_HTTPAGENT, 'interface_row'); 101 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_HTTPAGENT, 'interfaceid'); 102} 103zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'row_username'); 104zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'username'); 105zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'row_password'); 106zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SIMPLE, 'password'); 107zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMP, 'snmp_oid'); 108zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SNMP, 'row_snmp_oid'); 109zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_IPMI, 'ipmi_sensor'); 110zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_IPMI, 'row_ipmi_sensor'); 111zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'authtype'); 112zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'row_authtype'); 113zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'username'); 114zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'row_username'); 115zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'username'); 116zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'row_username'); 117zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'username'); 118zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'row_username'); 119zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'username'); 120zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'row_username'); 121zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'jmx_endpoint'); 122zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'row_jmx_endpoint'); 123zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'password'); 124zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'row_password'); 125zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'password'); 126zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'row_password'); 127zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'password'); 128zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'row_password'); 129zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'password'); 130zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_JMX, 'row_password'); 131zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'label_executed_script'); 132zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'label_executed_script'); 133zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'label_params'); 134zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_CALCULATED, 'label_formula'); 135zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'params_script'); 136zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_SSH, 'row_params'); 137zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'params_script'); 138zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TELNET, 'row_params'); 139zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'params_dbmonitor'); 140zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DB_MONITOR, 'row_params'); 141zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_CALCULATED, 'params_calculted'); 142zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_CALCULATED, 'row_params'); 143zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TRAPPER, 'trapper_hosts'); 144zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_TRAPPER, 'row_trapper_hosts'); 145zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_DEPENDENT, 'row_master_item'); 146$ui_rows = [ 147 ITEM_TYPE_HTTPAGENT => [ 148 'url_row', 'query_fields_row', 'request_method_row', 'timeout_row', 'post_type_row', 'posts_row', 'headers_row', 149 'status_codes_row', 'follow_redirects_row', 'retrieve_mode_row', 'output_format_row', 'allow_traps_row', 150 'request_method', 'http_proxy_row', 'http_authtype_row', 'http_authtype', 'verify_peer_row', 'verify_host_row', 151 'ssl_key_file_row', 'ssl_cert_file_row', 'ssl_key_password_row', 'trapper_hosts', 'allow_traps' 152 ] 153]; 154foreach ($ui_rows[ITEM_TYPE_HTTPAGENT] as $row) { 155 zbx_subarray_push($this->data['typeVisibility'], ITEM_TYPE_HTTPAGENT, $row); 156} 157 158foreach ($this->data['types'] as $type => $label) { 159 switch ($type) { 160 case ITEM_TYPE_DB_MONITOR: 161 $defaultKey = $this->data['is_discovery_rule'] 162 ? ZBX_DEFAULT_KEY_DB_MONITOR_DISCOVERY 163 : ZBX_DEFAULT_KEY_DB_MONITOR; 164 zbx_subarray_push($this->data['typeVisibility'], $type, 165 ['id' => 'key', 'defaultValue' => $defaultKey] 166 ); 167 break; 168 case ITEM_TYPE_SSH: 169 zbx_subarray_push($this->data['typeVisibility'], $type, 170 ['id' => 'key', 'defaultValue' => ZBX_DEFAULT_KEY_SSH] 171 ); 172 break; 173 case ITEM_TYPE_TELNET: 174 zbx_subarray_push($this->data['typeVisibility'], $type, 175 ['id' => 'key', 'defaultValue' => ZBX_DEFAULT_KEY_TELNET] 176 ); 177 break; 178 default: 179 zbx_subarray_push($this->data['typeVisibility'], $type, ['id' => 'key', 'defaultValue' => '']); 180 } 181} 182foreach ($this->data['types'] as $type => $label) { 183 if ($type == ITEM_TYPE_TRAPPER || $type == ITEM_TYPE_SNMPTRAP || $type == ITEM_TYPE_DEPENDENT) { 184 continue; 185 } 186 187 zbx_subarray_push($this->data['typeVisibility'], $type, 'row_flex_intervals'); 188} 189foreach ($this->data['types'] as $type => $label) { 190 if ($type == ITEM_TYPE_TRAPPER || $type == ITEM_TYPE_SNMPTRAP || $type == ITEM_TYPE_DEPENDENT) { 191 continue; 192 } 193 zbx_subarray_push($this->data['typeVisibility'], $type, 'delay'); 194 zbx_subarray_push($this->data['typeVisibility'], $type, 'row_delay'); 195} 196 197// disable dropdown items for calculated and aggregate items 198foreach ([ITEM_TYPE_CALCULATED, ITEM_TYPE_AGGREGATE] as $type) { 199 // set to disable character, log and text items in value type 200 zbx_subarray_push($this->data['typeDisable'], $type, [ITEM_VALUE_TYPE_STR, ITEM_VALUE_TYPE_LOG, ITEM_VALUE_TYPE_TEXT], 'value_type'); 201} 202 203$this->data['authTypeVisibility'] = []; 204zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'publickey'); 205zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_publickey'); 206zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'privatekey'); 207zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_privatekey'); 208 209?> 210<script type="text/javascript"> 211 function setAuthTypeLabel() { 212 if (jQuery('#authtype').val() == <?= json_encode(ITEM_AUTHTYPE_PUBLICKEY) ?> 213 && jQuery('#type').val() == <?= json_encode(ITEM_TYPE_SSH) ?>) { 214 jQuery('#row_password label').html(<?= json_encode(_('Key passphrase')) ?>); 215 } 216 else { 217 jQuery('#row_password label').html(<?= json_encode(_('Password')) ?>); 218 } 219 } 220 221 function updateItemTestBtn() { 222 var testable_item_types = <?= json_encode(CControllerPopupItemTest::getTestableItemTypes($this->data['hostid'])) ?>, 223 type = parseInt(jQuery('#type').val()), 224 key = jQuery('#key').val(); 225 226 if (type == <?= ITEM_TYPE_SIMPLE ?> && (key.substr(0, 7) === 'vmware.' || key.substr(0, 8) === 'icmpping')) { 227 jQuery('#test_item').prop('disabled', true); 228 } 229 else { 230 jQuery('#test_item').prop('disabled', (testable_item_types.indexOf(type) == -1)); 231 } 232 } 233 234 jQuery(document).ready(function($) { 235 <?php 236 if (!empty($this->data['authTypeVisibility'])) { ?> 237 var authTypeSwitcher = new CViewSwitcher('authtype', 'change', 238 <?php echo zbx_jsvalue($this->data['authTypeVisibility'], true); ?>); 239 <?php } 240 if (!empty($this->data['typeVisibility'])) { ?> 241 var typeSwitcher = new CViewSwitcher('type', 'change', 242 <?php echo zbx_jsvalue($this->data['typeVisibility'], true); ?>, 243 <?php echo zbx_jsvalue($this->data['typeDisable'], true); ?>); 244 <?php } ?> 245 if ($('#http_authtype').length) { 246 new CViewSwitcher('http_authtype', 'change', <?= zbx_jsvalue([ 247 HTTPTEST_AUTH_BASIC => ['http_username_row', 'http_password_row'], 248 HTTPTEST_AUTH_NTLM => ['http_username_row', 'http_password_row'], 249 HTTPTEST_AUTH_KERBEROS => ['http_username_row', 'http_password_row'] 250 ], true) ?>); 251 } 252 253 if ($('#allow_traps').length) { 254 new CViewSwitcher('allow_traps', 'change', <?= zbx_jsvalue([ 255 HTTPCHECK_ALLOW_TRAPS_ON => ['row_trapper_hosts'] 256 ], true) ?>); 257 } 258 259 $("#key").on('keyup change', updateItemTestBtn); 260 261 $('#type') 262 .change(function() { 263 // update the interface select with each item type change 264 var item_interface_types = <?= json_encode(itemTypeInterface()) ?>, 265 interface_ids_by_types = <?= json_encode($interface_ids_by_types) ?>; 266 267 updateItemTestBtn(); 268 organizeInterfaces(interface_ids_by_types, item_interface_types, parseInt($(this).val())); 269 270 setAuthTypeLabel(); 271 }) 272 .trigger('change'); 273 274 $('#test_item').on('click', function() { 275 var step_nums = []; 276 $('z-select[name^="preprocessing"][name$="[type]"]', $('#preprocessing')).each(function() { 277 var str = $(this).attr('name'); 278 step_nums.push(str.substr(14, str.length - 21)); 279 }); 280 281 openItemTestDialog(step_nums, true, true, this, -2); 282 }); 283 284 $('#authtype').bind('change', function() { 285 setAuthTypeLabel(); 286 }); 287 288 $('[data-action="parse_url"]').click(function(e) { 289 var url_node = $(this).siblings('[name="url"]'), 290 table = $('#query_fields_pairs').data('editableTable'), 291 url = parseUrlString(url_node.val()) 292 293 if (typeof url === 'object') { 294 if (url.pairs.length > 0) { 295 table.addRows(url.pairs); 296 table.getTableRows().map(function() { 297 var empty = $(this).find('input[type="text"]').map(function() { 298 return $(this).val() == '' ? this : null; 299 }); 300 301 return empty.length == 2 ? this : null; 302 }).map(function() { 303 table.removeRow(this); 304 }); 305 } 306 307 url_node.val(url.url); 308 } 309 else { 310 overlayDialogue({ 311 'title': <?= json_encode(_('Error')); ?>, 312 'content': $('<span>').html(<?= 313 json_encode(_('Failed to parse URL.').'<br><br>'._('URL is not properly encoded.')); 314 ?>), 315 'buttons': [ 316 { 317 title: <?= json_encode(_('Ok')); ?>, 318 class: 'btn-alt', 319 focused: true, 320 action: function() {} 321 } 322 ] 323 }, e.target); 324 } 325 }); 326 327 $('#request_method').change(function() { 328 if ($(this).val() == <?= HTTPCHECK_REQUEST_HEAD ?>) { 329 $(':radio', '#retrieve_mode') 330 .filter('[value=<?= HTTPTEST_STEP_RETRIEVE_MODE_HEADERS ?>]').click() 331 .end() 332 .prop('disabled', true); 333 } 334 else { 335 $(':radio', '#retrieve_mode').prop('disabled', false); 336 } 337 }); 338 }); 339</script> 340