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 22abstract class CAbstractScreenImporter extends CImporter { 23 24 /** 25 * Prepare screen data for import. 26 * Each screen element has reference to resource it represents, reference structure may differ depending on type. 27 * Referenced database objects ids are stored to 'resourceid' field of screen items. 28 * 29 * @todo: api requests probably should be done in CReferencer class 30 * @throws Exception if referenced object is not found in database 31 * 32 * @param array $screen 33 * 34 * @return array 35 */ 36 protected function resolveScreenReferences(array $screen) { 37 if (!empty($screen['screenitems'])) { 38 foreach ($screen['screenitems'] as &$screenItem) { 39 $resource = $screenItem['resource']; 40 if (empty($resource)) { 41 $screenItem['resourceid'] = 0; 42 continue; 43 } 44 if ($screenItem['rowspan'] == 0) { 45 $screenItem['rowspan'] = 1; 46 } 47 if ($screenItem['colspan'] == 0) { 48 $screenItem['colspan'] = 1; 49 } 50 if (!isset($screenItem['max_columns'])) { 51 $screenItem['max_columns'] = SCREEN_SURROGATE_MAX_COLUMNS_DEFAULT; 52 } 53 switch ($screenItem['resourcetype']) { 54 case SCREEN_RESOURCE_HOSTS_INFO: 55 case SCREEN_RESOURCE_TRIGGERS_INFO: 56 case SCREEN_RESOURCE_TRIGGERS_OVERVIEW: 57 case SCREEN_RESOURCE_DATA_OVERVIEW: 58 case SCREEN_RESOURCE_HOSTGROUP_TRIGGERS: 59 $screenItem['resourceid'] = $this->referencer->resolveGroup($resource['name']); 60 if (!$screenItem['resourceid']) { 61 throw new Exception(_s('Cannot find group "%1$s" used in screen "%2$s".', 62 $resource['name'], $screen['name'])); 63 } 64 break; 65 66 case SCREEN_RESOURCE_HOST_TRIGGERS: 67 $screenItem['resourceid'] = $this->referencer->resolveHost($resource['host']); 68 if (!$screenItem['resourceid']) { 69 throw new Exception(_s('Cannot find host "%1$s" used in screen "%2$s".', 70 $resource['host'], $screen['name'])); 71 } 72 break; 73 74 case SCREEN_RESOURCE_GRAPH: 75 case SCREEN_RESOURCE_LLD_GRAPH: 76 $hostId = $this->referencer->resolveHostOrTemplate($resource['host']); 77 $graphId = $this->referencer->resolveGraph($hostId, $resource['name']); 78 79 if (!$graphId) { 80 throw new Exception(_s('Cannot find graph "%1$s" used in screen "%2$s".', 81 $resource['name'], $screen['name'])); 82 } 83 84 $screenItem['resourceid'] = $graphId; 85 break; 86 87 case SCREEN_RESOURCE_CLOCK: 88 if ($screenItem['style'] != TIME_TYPE_HOST) { 89 break; 90 } 91 // break; is not missing here 92 93 case SCREEN_RESOURCE_SIMPLE_GRAPH: 94 case SCREEN_RESOURCE_LLD_SIMPLE_GRAPH: 95 case SCREEN_RESOURCE_PLAIN_TEXT: 96 $hostId = $this->referencer->resolveHostOrTemplate($resource['host']); 97 $screenItem['resourceid'] = $this->referencer->resolveItem($hostId, $resource['key']); 98 if (!$screenItem['resourceid']) { 99 throw new Exception(_s('Cannot find item "%1$s" used in screen "%2$s".', 100 $resource['host'].':'.$resource['key'], $screen['name'])); 101 } 102 break; 103 104 case SCREEN_RESOURCE_MAP: 105 $screenItem['resourceid'] = $this->referencer->resolveMap($resource['name']); 106 if (!$screenItem['resourceid']) { 107 throw new Exception(_s('Cannot find map "%1$s" used in screen "%2$s".', 108 $resource['name'], $screen['name'])); 109 } 110 break; 111 112 case SCREEN_RESOURCE_SCREEN: 113 $screenItem['resourceid'] = $this->referencer->resolveScreen($resource['name']); 114 if (!$screenItem['resourceid']) { 115 throw new Exception(_s('Cannot find screen "%1$s" used in screen "%2$s".', 116 $resource['name'], $screen['name'])); 117 } 118 break; 119 120 default: 121 $screenItem['resourceid'] = 0; 122 break; 123 } 124 } 125 unset($screenItem); 126 } 127 128 return $screen; 129 } 130} 131