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 22class CControllerProfileUpdate extends CController { 23 24 protected function checkInput() { 25 $fields = [ 26 'idx' => 'required|string', 27 'value_int' => 'required|int32', 28 'idx2' => 'array_id' 29 ]; 30 31 $ret = $this->validateInput($fields); 32 33 if ($ret) { 34 switch ($this->getInput('idx')) { 35 case 'web.actionconf.filter.active': 36 case 'web.applications.filter.active': 37 case 'web.auditacts.filter.active': 38 case 'web.auditlog.filter.active': 39 case 'web.avail_report.filter.active': 40 case 'web.charts.filter.active': 41 case 'web.correlation.filter.active': 42 case 'web.dashbrd.filter.active': 43 case 'web.discovery.filter.active': 44 case 'web.discoveryconf.filter.active': 45 case 'web.graphs.filter.active': 46 case 'web.groups.filter.active': 47 case 'web.host_discovery.filter.active': 48 case 'web.hostinventories.filter.active': 49 case 'web.hostinventoriesoverview.filter.active': 50 case 'web.hosts.filter.active': 51 case 'web.hostsmon.filter.active': 52 case 'web.httpconf.filter.active': 53 case 'web.httpdetails.filter.active': 54 case 'web.item.graph.filter.active': 55 case 'web.items.filter.active': 56 case 'web.latest.filter.active': 57 case 'web.layout.mode': 58 case 'web.maintenance.filter.active': 59 case 'web.media_types.filter.active': 60 case 'web.modules.filter.active': 61 case 'web.overview.filter.active': 62 case 'web.problem.filter.active': 63 case 'web.proxies.filter.active': 64 case 'web.screenconf.filter.active': 65 case 'web.screens.filter.active': 66 case 'web.scripts.filter.active': 67 case 'web.search.hats.'.WIDGET_SEARCH_HOSTS.'.state': 68 case 'web.search.hats.'.WIDGET_SEARCH_TEMPLATES.'.state': 69 case 'web.search.hats.'.WIDGET_SEARCH_HOSTGROUP.'.state': 70 case 'web.sidebar.mode': 71 case 'web.slideconf.filter.active': 72 case 'web.slides.filter.active': 73 case 'web.sysmapconf.filter.active': 74 case 'web.templates.filter.active': 75 case 'web.toptriggers.filter.active': 76 case 'web.tr_events.hats.'.WIDGET_HAT_EVENTACTIONS.'.state': 77 case 'web.tr_events.hats.'.WIDGET_HAT_EVENTLIST.'.state': 78 case 'web.triggers.filter.active': 79 case 'web.user.filter.active': 80 case 'web.usergroup.filter.active': 81 case 'web.web.filter.active': 82 case CControllerDashboardView::DYNAMIC_ITEM_HOST_PROFILE_KEY: 83 $ret = true; 84 break; 85 86 case !!preg_match('/web.dashbrd.navtree-\d+.toggle/', $this->getInput('idx')): 87 case 'web.dashbrd.navtree.item.selected': 88 case 'web.latest.toggle': 89 case 'web.latest.toggle_other': 90 $ret = $this->hasInput('idx2'); 91 break; 92 93 default: 94 $ret = false; 95 } 96 } 97 98 if (!$ret) { 99 $this->setResponse(new CControllerResponseData(['main_block' => ''])); 100 } 101 102 return $ret; 103 } 104 105 protected function checkPermissions() { 106 return ($this->getUserType() >= USER_TYPE_ZABBIX_USER); 107 } 108 109 protected function doAction() { 110 $idx = $this->getInput('idx'); 111 $value_int = $this->getInput('value_int'); 112 113 DBstart(); 114 switch ($idx) { 115 case 'web.latest.toggle': 116 case 'web.latest.toggle_other': 117 case !!preg_match('/web.dashbrd.navtree-\d+.toggle/', $this->getInput('idx')): 118 if ($value_int == 1) { // default value 119 CProfile::delete($idx, $this->getInput('idx2')); 120 } 121 else { 122 foreach ($this->getInput('idx2') as $idx2) { 123 CProfile::update($idx, $value_int, PROFILE_TYPE_INT, $idx2); 124 } 125 } 126 break; 127 128 case 'web.dashbrd.navtree.item.selected': 129 foreach ($this->getInput('idx2') as $idx2) { 130 CProfile::update($idx, $value_int, PROFILE_TYPE_INT, $idx2); 131 } 132 break; 133 134 case 'web.layout.mode': 135 CViewHelper::saveLayoutMode($value_int); 136 break; 137 138 case 'web.sidebar.mode': 139 CViewHelper::saveSidebarMode($value_int); 140 break; 141 142 default: 143 if ($value_int == 1) { // default value 144 CProfile::delete($idx); 145 } 146 else { 147 CProfile::update($idx, $value_int, PROFILE_TYPE_INT); 148 } 149 } 150 DBend(); 151 152 $this->setResponse(new CControllerResponseData(['main_block' => ''])); 153 } 154} 155