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