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__).'/js/monitoring.screen.edit.js.php'; 23 24$widget = (new CWidget())->setTitle(_('Screens')); 25 26$tabs = new CTabView(); 27 28if (!$data['form_refresh']) { 29 $tabs->setSelected(0); 30} 31 32if ($data['screen']['templateid']) { 33 $widget->addItem(get_header_host_table('screens', $data['screen']['templateid'])); 34} 35 36// create form 37$form = (new CForm()) 38 ->setName('screenForm') 39 ->addVar('form', $data['form']); 40 41if ($data['screen']['templateid'] != 0) { 42 $form->addVar('templateid', $data['screen']['templateid']); 43} 44else { 45 $form->addVar('current_user_userid', $data['current_user_userid']) 46 ->addVar('current_user_fullname', getUserFullname($data['users'][$data['current_user_userid']])); 47} 48 49if ($data['screen']['screenid']) { 50 $form->addVar('screenid', $data['screen']['screenid']); 51} 52 53$user_type = CWebUser::getType(); 54 55// Create screen form list. 56$screen_tab = (new CFormList()); 57 58if (!$data['screen']['templateid']) { 59 // Screen owner multiselect. 60 $multiselect_data = [ 61 'name' => 'userid', 62 'selectedLimit' => 1, 63 'objectName' => 'users', 64 'disabled' => ($user_type != USER_TYPE_SUPER_ADMIN && $user_type != USER_TYPE_ZABBIX_ADMIN), 65 'popup' => [ 66 'parameters' => 'srctbl=users&dstfrm='.$form->getName().'&dstfld1=userid&srcfld1=userid&srcfld2=fullname' 67 ] 68 ]; 69 70 $screen_ownerid = $data['screen']['userid']; 71 72 // If screen owner does not exist or is not allowed to display. 73 if ($screen_ownerid === '' || $screen_ownerid && array_key_exists($screen_ownerid, $data['users'])) { 74 // Screen owner data. 75 if ($screen_ownerid) { 76 $owner_data = [[ 77 'id' => $screen_ownerid, 78 'name' => getUserFullname($data['users'][$screen_ownerid]) 79 ]]; 80 } 81 else { 82 $owner_data = []; 83 } 84 85 $multiselect_data['data'] = $owner_data; 86 87 // Append multiselect to screen tab. 88 $screen_tab->addRow(_('Owner'), 89 (new CMultiSelect($multiselect_data))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) 90 ); 91 } 92 else { 93 $multiselect_userid = (new CMultiSelect($multiselect_data))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH); 94 95 // Administrators can change screen owner, but cannot see users from other groups. 96 if ($user_type == USER_TYPE_ZABBIX_ADMIN) { 97 $screen_tab->addRow(_('Owner'), $multiselect_userid) 98 ->addRow('', _('Inaccessible user'), 'inaccessible_user'); 99 } 100 else { 101 // For regular users and guests, only information message is displayed without multiselect. 102 $screen_tab->addRow(_('Owner'), [ 103 (new CSpan(_('Inaccessible user')))->setId('inaccessible_user'), 104 (new CSpan($multiselect_userid)) 105 ->addStyle('display: none;') 106 ->setId('multiselect_userid_wrapper') 107 ]); 108 } 109 } 110} 111 112$screen_tab->addRow(_('Name'), 113 (new CTextBox('name', $data['screen']['name'])) 114 ->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) 115 ->setAttribute('autofocus', 'autofocus') 116 ) 117 ->addRow(_('Columns'), 118 (new CNumericBox('hsize', $data['screen']['hsize'], 3))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH) 119 ) 120 ->addRow(_('Rows'), 121 (new CNumericBox('vsize', $data['screen']['vsize'], 3))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH) 122 ); 123 124// append tab to form 125$tabs->addTab('screen_tab', _('Screen'), $screen_tab); 126if (!$data['screen']['templateid']) { 127 // User group sharing table. 128 $user_group_shares_table = (new CTable()) 129 ->setHeader([_('User groups'), _('Permissions'), _('Action')]) 130 ->setAttribute('style', 'width: 100%;'); 131 132 $add_user_group_btn = ([(new CButton(null, _('Add'))) 133 ->onClick('return PopUp("popup.php?dstfrm='.$form->getName(). 134 '&srctbl=usrgrp&srcfld1=usrgrpid&srcfld2=name&multiselect=1")' 135 ) 136 ->addClass(ZBX_STYLE_BTN_LINK)]); 137 138 $user_group_shares_table->addRow( 139 (new CRow( 140 (new CCol($add_user_group_btn))->setColSpan(3) 141 ))->setId('user_group_list_footer') 142 ); 143 144 $user_groups = []; 145 146 foreach ($data['screen']['userGroups'] as $user_group) { 147 $user_groupid = $user_group['usrgrpid']; 148 $user_groups[$user_groupid] = [ 149 'usrgrpid' => $user_groupid, 150 'name' => $data['user_groups'][$user_groupid]['name'], 151 'permission' => $user_group['permission'] 152 ]; 153 } 154 155 $js_insert = 'addPopupValues('.zbx_jsvalue(['object' => 'usrgrpid', 'values' => $user_groups]).');'; 156 157 // User sharing table. 158 $user_shares_table = (new CTable()) 159 ->setHeader([_('Users'), _('Permissions'), _('Action')]) 160 ->setAttribute('style', 'width: 100%;'); 161 162 $add_user_btn = ([(new CButton(null, _('Add'))) 163 ->onClick('return PopUp("popup.php?dstfrm='.$form->getName(). 164 '&srctbl=users&srcfld1=userid&srcfld2=fullname&multiselect=1")' 165 ) 166 ->addClass(ZBX_STYLE_BTN_LINK)]); 167 168 $user_shares_table->addRow( 169 (new CRow( 170 (new CCol($add_user_btn))->setColSpan(3) 171 ))->setId('user_list_footer') 172 ); 173 174 $users = []; 175 176 foreach ($data['screen']['users'] as $user) { 177 $userid = $user['userid']; 178 $users[$userid] = [ 179 'id' => $userid, 180 'name' => getUserFullname($data['users'][$userid]), 181 'permission' => $user['permission'] 182 ]; 183 } 184 185 $js_insert .= 'addPopupValues('.zbx_jsvalue(['object' => 'userid', 'values' => $users]).');'; 186 187 zbx_add_post_js($js_insert); 188 189 $sharing_tab = (new CFormList('sharing_form')) 190 ->addRow(_('Type'), 191 (new CRadioButtonList('private', (int) $data['screen']['private'])) 192 ->addValue(_('Private'), PRIVATE_SHARING) 193 ->addValue(_('Public'), PUBLIC_SHARING) 194 ->setModern(true) 195 ) 196 ->addRow(_('List of user group shares'), 197 (new CDiv($user_group_shares_table)) 198 ->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR) 199 ->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;') 200 ) 201 ->addRow(_('List of user shares'), 202 (new CDiv($user_shares_table)) 203 ->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR) 204 ->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;') 205 ); 206 207 // Append data to form. 208 $tabs->addTab('sharing_tab', _('Sharing'), $sharing_tab); 209} 210 211// append buttons to form 212if ($data['screen']['screenid']) { 213 $tabs->setFooter(makeFormFooter( 214 new CSubmit('update', _('Update')), 215 [ 216 (new CSimpleButton(_('Clone')))->setId('clone'), 217 new CButtonDelete(_('Delete screen?'), url_params(['form', 'screenid', 'templateid'])), 218 new CButtonCancel(url_param('templateid')) 219 ] 220 )); 221} 222else { 223 $tabs->setFooter(makeFormFooter( 224 new CSubmit('add', _('Add')), 225 [new CButtonCancel(url_param('templateid'))] 226 )); 227} 228 229$form->addItem($tabs); 230 231$widget->addItem($form); 232 233return $widget; 234