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['title'] = _('Configuration of value mapping'); 25$page['file'] = 'adm.valuemapping.php'; 26 27require_once dirname(__FILE__).'/include/page_header.php'; 28 29// VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION 30$fields = [ 31 'valuemapids' => [T_ZBX_INT, O_OPT, P_SYS, DB_ID, null], 32 'valuemapid' => [T_ZBX_INT, O_NO, P_SYS, DB_ID, 'isset({form}) && {form} == "update"'], 33 'name' => [T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({add}) || isset({update})'], 34 'mappings' => [T_ZBX_STR, O_OPT, null, null, null], 35 // actions 36 'add' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null], 37 'update' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null], 38 'form' => [T_ZBX_STR, O_OPT, P_SYS, null, null], 39 'form_refresh' => [T_ZBX_INT, O_OPT, null, null, null], 40 'action' => [T_ZBX_STR, O_OPT, P_SYS|P_ACT, IN('"valuemap.export","valuemap.delete"'), null], 41 // sort and sortorder 42 'sort' => [T_ZBX_STR, O_OPT, P_SYS, IN('"name"'), null], 43 'sortorder' => [T_ZBX_STR, O_OPT, P_SYS, IN('"'.ZBX_SORT_DOWN.'","'.ZBX_SORT_UP.'"'), null] 44]; 45check_fields($fields); 46 47/* 48 * Permissions 49 */ 50if (hasRequest('valuemapid')) { 51 $valuemaps = API::ValueMap()->get([ 52 'output' => [], 53 'valuemapids' => getRequest('valuemapid') 54 ]); 55 56 if (!$valuemaps) { 57 access_deny(); 58 } 59} 60 61/* 62 * Actions 63 */ 64if (hasRequest('add') || hasRequest('update')) { 65 $valuemap = [ 66 'name' => getRequest('name'), 67 'mappings' => getRequest('mappings') 68 ]; 69 70 if (hasRequest('update')) { 71 $valuemap['valuemapid'] = getRequest('valuemapid'); 72 73 $result = (bool) API::ValueMap()->update($valuemap); 74 75 show_messages($result, _('Value map updated'), _('Cannot update value map')); 76 } 77 else { 78 $result = (bool) API::ValueMap()->create($valuemap); 79 80 show_messages($result, _('Value map added'), _('Cannot add value map')); 81 } 82 83 if ($result) { 84 unset($_REQUEST['form']); 85 } 86} 87elseif (getRequest('action') === 'valuemap.delete' && hasRequest('valuemapids')) { 88 $valuemapids = getRequest('valuemapids', []); 89 90 $result = (bool) API::ValueMap()->delete($valuemapids); 91 92 if ($result) { 93 unset($_REQUEST['form']); 94 uncheckTableRows(); 95 } 96 else { 97 $valuemaps = API::ValueMap()->get([ 98 'output' => ['valuemapid'], 99 'valuemapids' => getRequest('valuemapids') 100 ]); 101 uncheckTableRows(null, zbx_objectValues($valuemaps, 'valuemapid')); 102 } 103 104 $deleted = count($valuemapids); 105 106 show_messages($result, 107 _n('Value map deleted', 'Value maps deleted', $deleted), 108 _n('Cannot delete value map', 'Cannot delete value maps', $deleted) 109 ); 110} 111 112/* 113 * Display 114 */ 115if (hasRequest('form')) { 116 $data = [ 117 'form' => getRequest('form', ''), 118 'valuemapid' => getRequest('valuemapid', 0), 119 'valuemap_count' => 0, 120 'sid' => substr(CWebUser::getSessionCookie(), 16, 16) 121 ]; 122 123 if ($data['valuemapid'] != 0 && !hasRequest('form_refresh')) { 124 $valuemaps = API::ValueMap()->get([ 125 'output' => ['valuemapid', 'name'], 126 'selectMappings' => ['value', 'newvalue'], 127 'valuemapids' => $data['valuemapid'] 128 ]); 129 $valuemap = reset($valuemaps); 130 131 $data = zbx_array_merge($data, $valuemap); 132 order_result($data['mappings'], 'value'); 133 } 134 else { 135 $data['name'] = getRequest('name', ''); 136 $data['mappings'] = array_values(getRequest('mappings', [])); 137 } 138 139 if ($data['valuemapid'] != 0) { 140 $data['valuemap_count'] += API::Item()->get([ 141 'countOutput' => true, 142 'webitems' => true, 143 'filter' => ['valuemapid' => $data['valuemapid']] 144 ]); 145 $data['valuemap_count'] += API::ItemPrototype()->get([ 146 'countOutput' => true, 147 'filter' => ['valuemapid' => $data['valuemapid']] 148 ]); 149 } 150 151 if (!$data['mappings']) { 152 $data['mappings'][] = ['value' => '', 'newvalue' => '']; 153 } 154 155 $view = new CView('administration.general.valuemapping.edit', $data); 156} 157else { 158 $sortfield = getRequest('sort', CProfile::get('web.'.$page['file'].'.sort', 'name')); 159 $sortorder = getRequest('sortorder', CProfile::get('web.'.$page['file'].'.sortorder', ZBX_SORT_UP)); 160 161 CProfile::update('web.'.$page['file'].'.sort', $sortfield, PROFILE_TYPE_STR); 162 CProfile::update('web.'.$page['file'].'.sortorder', $sortorder, PROFILE_TYPE_STR); 163 164 $data = [ 165 'sort' => $sortfield, 166 'sortorder' => $sortorder 167 ]; 168 169 $data['valuemaps'] = API::ValueMap()->get([ 170 'output' => ['valuemapid', 'name'], 171 'selectMappings' => ['value', 'newvalue'], 172 'sortfield' => $sortfield, 173 'limit' => $config['search_limit'] + 1 174 ]); 175 176 order_result($data['valuemaps'], $sortfield, $sortorder); 177 $data['paging'] = getPagingLine($data['valuemaps'], $sortorder, new CUrl('adm.valuemapping.php')); 178 179 foreach ($data['valuemaps'] as &$valuemap) { 180 order_result($valuemap['mappings'], 'value'); 181 182 $valuemap['used_in_items'] = 183 (bool) API::Item()->get([ 184 'output' => [], 185 'webitems' => true, 186 'filter' => ['valuemapid' => $valuemap['valuemapid']], 187 'limit' => 1 188 ]) 189 || (bool) API::ItemPrototype()->get([ 190 'output' => [], 191 'filter' => ['valuemapid' => $valuemap['valuemapid']], 192 'limit' => 1 193 ]); 194 } 195 unset($valuemap); 196 197 $view = new CView('administration.general.valuemapping.list', $data); 198} 199 200$view->render(); 201$view->show(); 202 203require_once dirname(__FILE__).'/include/page_footer.php'; 204