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/**
28 * Send media type test data to server and get a response.
29 *
30 * @param {Overlay} overlay
31 */
32function mediatypeTestSend(overlay) {
33	var $form = overlay.$dialogue.find('form'),
34		$form_fields = $form.find('#sendto, #subject, #message'),
35		data = $form.serialize(),
36		url = new Curl($form.attr('action'));
37
38	$form.trimValues(['#sendto', '#subject', '#message']);
39	$form_fields.prop('disabled', true);
40	$('#mediatypetest_log').addClass('<?= ZBX_STYLE_DISABLED ?>');
41
42	overlay.setLoading();
43	overlay.xhr = jQuery.ajax({
44		url: url.getUrl(),
45		data: data,
46		success: function(ret) {
47			overlay.$dialogue.find('.msg-bad, .msg-good').remove();
48
49			if (typeof ret.messages !== 'undefined') {
50				jQuery(ret.messages).insertBefore($form);
51			}
52
53			if ('response' in ret) {
54				jQuery('#webhook_response_value', $form).val(ret.response.value);
55				jQuery('#webhook_response_type', $form).text(ret.response.type);
56			}
57
58			if ('debug' in ret) {
59				$('#mediatypetest_log').removeClass('disabled');
60				sessionStorage.setItem('mediatypetest', JSON.stringify(ret.debug));
61			}
62
63			overlay.unsetLoading();
64			$form_fields.prop('disabled', false);
65		},
66		error: function(request, status, error) {
67			if (request.status == 200) {
68				overlay.unsetLoading();
69				$form_fields.prop('disabled', false);
70				alert(error);
71			}
72			else if (window.document.forms['mediatypetest_form']) {
73				var request = this,
74					retry = function() {
75						if (window.document.forms['mediatypetest_form']) {
76							overlay.xhr = jQuery.ajax(request);
77						}
78					};
79
80				// Retry with 2s interval.
81				setTimeout(retry, 2000);
82			}
83		},
84		dataType: 'json',
85		type: 'post'
86	});
87}
88
89function openLogPopup(opener) {
90	if ($(opener).hasClass('<?= ZBX_STYLE_DISABLED ?>')) {
91		return;
92	}
93
94	var debug = JSON.parse(sessionStorage.getItem('mediatypetest')||'null'),
95		$content = $('<div>'),
96		$logitems = $('<div>', {class: 'logitems'}),
97		$footer = $('<div>', {class: 'logtotalms'});
98
99	if (debug) {
100		debug.log.forEach(function (entry) {
101			$('<pre>').text(entry.ms + ' ' + entry.level + ' ' + entry.message).appendTo($logitems);
102		});
103		$footer.text(<?= json_encode(_('Time elapsed:')) ?> + " " + debug.ms + 'ms');
104		$content.append($logitems);
105	}
106
107	overlayDialogue({
108		'title': <?= json_encode(_('Media type test log')) ?>,
109		'content': $content,
110		'class': 'modal-popup modal-popup-generic debug-modal',
111		'footer': $footer,
112		'buttons': [
113			{
114				'title': <?= json_encode(_('Ok')) ?>,
115				'cancel': true,
116				'focused': true,
117				'action': () => {}
118			}
119		]
120	}, opener);
121}
122
123sessionStorage.removeItem('mediatypetest');
124