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