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
22require_once dirname(__FILE__).'/include/config.inc.php';
23
24$page['file'] = 'screen.import.php';
25$page['title'] = _('Configuration import');
26$page['type'] = detect_page_type(PAGE_TYPE_HTML);
27
28ob_start();
29
30require_once dirname(__FILE__).'/include/page_header.php';
31
32$fields = [
33	'rules' => [T_ZBX_STR, O_OPT, null, null, null],
34	'import' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null],
35	'rules_preset' => [T_ZBX_STR, O_OPT, null, null, null],
36	'backurl' => [T_ZBX_STR, O_OPT, null, null, null],
37	'cancel' => [T_ZBX_STR, O_OPT, P_SYS, null, null]
38];
39check_fields($fields);
40
41
42if (isset($_REQUEST['cancel'])) {
43	ob_end_clean();
44	redirect(CWebUser::$data['last_page']['url']);
45}
46ob_end_flush();
47
48$data = [
49	'rules' => [
50		'groups' => ['createMissing' => false],
51		'hosts' => ['updateExisting' => false, 'createMissing' => false],
52		'templates' => ['updateExisting' => false, 'createMissing' => false],
53		'templateScreens' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
54		'templateLinkage' => ['createMissing' => false, 'deleteMissing' => false],
55		'applications' => ['createMissing' => false, 'deleteMissing' => false],
56		'items' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
57		'discoveryRules' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
58		'triggers' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
59		'graphs' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
60		'httptests' => ['updateExisting' => false, 'createMissing' => false, 'deleteMissing' => false],
61		'screens' => ['updateExisting' => false, 'createMissing' => false],
62		'maps' => ['updateExisting' => false, 'createMissing' => false],
63		'images' => ['updateExisting' => false, 'createMissing' => false],
64		'valueMaps' => ['updateExisting' => false, 'createMissing' => false]
65	],
66	'backurl' => getRequest('backurl', '')
67];
68
69if (!CHtmlUrlValidator::validate($data['backurl'], false, true)) {
70	$data['backurl'] = 'zabbix.php?action=dashboard.view';
71}
72
73// rules presets
74if (hasRequest('rules_preset') && !hasRequest('rules')) {
75	switch (getRequest('rules_preset')) {
76		case 'host':
77			$data['rules']['groups'] = ['createMissing' => true];
78			$data['rules']['hosts'] = ['updateExisting' => true, 'createMissing' => true];
79			$data['rules']['applications'] = ['createMissing' => true, 'deleteMissing' => false];
80			$data['rules']['items'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
81			$data['rules']['discoveryRules'] = ['updateExisting' => true, 'createMissing' => true,
82				'deleteMissing' => false
83			];
84			$data['rules']['triggers'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
85			$data['rules']['graphs'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
86			$data['rules']['httptests'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
87			$data['rules']['templateLinkage'] = ['createMissing' => true, 'deleteMissing' => false];
88			$data['rules']['valueMaps'] = ['updateExisting' => false, 'createMissing' => true];
89
90			$data['backurl'] = 'hosts.php';
91			break;
92
93		case 'template':
94			$data['rules']['groups'] = ['createMissing' => true];
95			$data['rules']['templates'] = ['updateExisting' => true, 'createMissing' => true];
96			$data['rules']['templateScreens'] = ['updateExisting' => true, 'createMissing' => true,
97				'deleteMissing' => false
98			];
99			$data['rules']['applications'] = ['createMissing' => true, 'deleteMissing' => false];
100			$data['rules']['items'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
101			$data['rules']['discoveryRules'] = ['updateExisting' => true, 'createMissing' => true,
102				'deleteMissing' => false
103			];
104			$data['rules']['triggers'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
105			$data['rules']['graphs'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
106			$data['rules']['httptests'] = ['updateExisting' => true, 'createMissing' => true, 'deleteMissing' => false];
107			$data['rules']['templateLinkage'] = ['createMissing' => true, 'deleteMissing' => false];
108			$data['rules']['valueMaps'] = ['updateExisting' => false, 'createMissing' => true];
109
110			$data['backurl'] = 'templates.php';
111			break;
112
113		case 'map':
114			$data['rules']['maps'] = ['updateExisting' => true, 'createMissing' => true];
115
116			$data['backurl'] = 'sysmaps.php';
117			break;
118
119		case 'screen':
120			$data['rules']['screens'] = ['updateExisting' => true, 'createMissing' => true];
121
122			$data['backurl'] = 'screenconf.php';
123			break;
124
125		case 'valuemap':
126			$data['rules']['valueMaps'] = ['updateExisting' => false, 'createMissing' => true];
127
128			$data['backurl'] = 'adm.valuemapping.php';
129			break;
130
131	}
132}
133
134if (hasRequest('rules')) {
135	$requestRules = getRequest('rules', []);
136	// if form was submitted with some checkboxes unchecked, those values are not submitted
137	// so that we set missing values to false, existing to true
138	foreach ($data['rules'] as $ruleName => $rule) {
139		if (!array_key_exists($ruleName, $requestRules)) {
140			$requestRules[$ruleName] = [];
141		}
142
143		foreach (['updateExisting', 'createMissing', 'deleteMissing'] as $option) {
144			if (array_key_exists($option, $requestRules[$ruleName])) {
145				$requestRules[$ruleName][$option] = true;
146			}
147			elseif (array_key_exists($option, $rule)) {
148				$requestRules[$ruleName][$option] = false;
149			}
150		}
151	}
152
153	$data['rules'] = $requestRules;
154}
155
156if (isset($_FILES['import_file'])) {
157	$result = false;
158
159	// CUploadFile throws exceptions, so we need to catch them
160	try {
161		$file = new CUploadFile($_FILES['import_file']);
162
163		$result = API::Configuration()->import([
164			'format' => CImportReaderFactory::fileExt2ImportFormat($file->getExtension()),
165			'source' => $file->getContent(),
166			'rules' => $data['rules']
167		]);
168	}
169	catch (Exception $e) {
170		error($e->getMessage());
171	}
172
173	show_messages($result, _('Imported successfully'), _('Import failed'));
174}
175
176$view = new CView('conf.import', $data);
177$view->render();
178$view->show();
179
180require_once dirname(__FILE__).'/include/page_footer.php';
181