/** * Get acknowledgement table. * * @param array $acknowledges * @param array $acknowledges['clock'] * @param array $acknowledges['alias'] * @param array $acknowledges['name'] * @param array $acknowledges['surname'] * @param array $acknowledges['message'] * * @return CTableInfo */ function makeAckTab($acknowledges) { $table = (new CTableInfo())->setHeader([_('Time'), _('User'), _('Message')]); foreach ($acknowledges as $acknowledge) { $table->addRow([zbx_date2str(DATE_TIME_FORMAT_SECONDS, $acknowledge['clock']), getUserFullname($acknowledge), zbx_nl2br($acknowledge['message'])]); } return $table; }
/** * Get acknowledgement table. * * @param array $event * @param array $event['acknowledges'] * @param array $event['acknowledges']['clock'] * @param array $event['acknowledges']['alias'] * @param array $event['acknowledges']['message'] * * @return CTableInfo */ function makeAckTab($event) { $acknowledgeTable = new CTableInfo(_('No acknowledges found.')); $acknowledgeTable->setHeader(array(_('Time'), _('User'), _('Comments'))); if (!empty($event['acknowledges']) && is_array($event['acknowledges'])) { foreach ($event['acknowledges'] as $acknowledge) { $acknowledgeTable->addRow(array(zbx_date2str(DATE_TIME_FORMAT_SECONDS, $acknowledge['clock']), getUserFullname($acknowledge), new CCol(zbx_nl2br($acknowledge['message']), 'wraptext'))); } } return $acknowledgeTable; }
foreach ($userGroupUsers as $user) { $userTypeStyle = 'enabled'; if ($user['type'] == USER_TYPE_ZABBIX_ADMIN) { $userTypeStyle = 'orange'; } if ($user['type'] == USER_TYPE_SUPER_ADMIN) { $userTypeStyle = 'disabled'; } $userStatusStyle = 'enabled'; if ($user['gui_access'] == GROUP_GUI_ACCESS_DISABLED) { $userStatusStyle = 'disabled'; } if ($user['users_status'] == GROUP_STATUS_DISABLED) { $userStatusStyle = 'disabled'; } $users[] = new CLink(getUserFullname($user), 'users.php?form=update&userid=' . $user['userid'], $userStatusStyle); $users[] = ', '; } array_pop($users); } $userGroupTable->addRow(array(new CCheckBox('group_groupid[' . $userGroupId . ']', null, null, $userGroupId), $this->data['displayNodes'] ? $usrgrp['nodename'] : null, new CLink($usrgrp['name'], 'usergrps.php?form=update&usrgrpid=' . $userGroupId), array(new CLink(_('Users'), 'users.php?&filter_usrgrpid=' . $userGroupId), ' (', count($usrgrp['users']), ')'), new CCol($users, 'wraptext'), $usersStatus, $guiAccess, $debugMode)); } // append GO buttons $goComboBox = new CComboBox('go'); $goOption = new CComboItem('enable_status', _('Enable selected')); $goOption->setAttribute('confirm', _('Enable selected groups?')); $goComboBox->addItem($goOption); $goOption = new CComboItem('disable_status', _('Disable selected')); $goOption->setAttribute('confirm', _('Disable selected groups?')); $goComboBox->addItem($goOption); $goOption = new CComboItem('enable_debug', _('Enable DEBUG'));
} if (isset($usrgrp['users'])) { $userGroupUsers = $usrgrp['users']; order_result($userGroupUsers, 'alias'); $users = array(); $i = 0; foreach ($userGroupUsers as $user) { $i++; if ($i > $this->data['config']['max_in_table']) { $users[] = ' …'; break; } if ($users) { $users[] = ', '; } $users[] = new CLink(getUserFullname($user), 'users.php?form=update&userid=' . $user['userid'], $user['gui_access'] == GROUP_GUI_ACCESS_DISABLED || $user['users_status'] == GROUP_STATUS_DISABLED ? 'disabled' : 'enabled'); } } $userGroupTable->addRow(array(new CCheckBox('group_groupid[' . $userGroupId . ']', null, null, $userGroupId), new CLink($usrgrp['name'], 'usergrps.php?form=update&usrgrpid=' . $userGroupId), array(new CLink(_('Users'), 'users.php?filter_usrgrpid=' . $userGroupId), ' (', count($usrgrp['users']), ')'), new CCol($users, 'wraptext'), $guiAccess, $debugMode, $usersStatus)); } // append GO buttons $goComboBox = new CComboBox('action'); $goOption = new CComboItem('usergroup.massenable', _('Enable selected')); $goOption->setAttribute('confirm', _('Enable selected groups?')); $goComboBox->addItem($goOption); $goOption = new CComboItem('usergroup.massdisable', _('Disable selected')); $goOption->setAttribute('confirm', _('Disable selected groups?')); $goComboBox->addItem($goOption); $goOption = new CComboItem('usergroup.massenabledebug', _('Enable debug mode')); $goOption->setAttribute('confirm', _('Enable debug mode in selected groups?')); $goComboBox->addItem($goOption);
$acknowledgesTable->addRow(array(new CCol(getUserFullname($acknowledge), 'user'), new CCol(zbx_date2str(_('d M Y H:i:s'), $acknowledge['clock']), 'time')), 'title'); $acknowledgesTable->addRow(new CCol(zbx_nl2br($acknowledge['message']), null, 2), 'msg'); } $acknowledgesTable->show(); } if ($eventAcknowledged) { $title = _('Add comment by'); $saveLabel = _('Save'); $saveAndReturnLabel = _('Save and return'); } else { $title = _('Acknowledge alarm by'); $saveLabel = _('Acknowledge'); $saveAndReturnLabel = _('Acknowledge and return'); } } $messageTable = new CFormTable($title . ' "' . getUserFullname(CWebUser::$data) . '"'); $messageTable->addVar('backurl', $_REQUEST['backurl']); if (in_array($_REQUEST['backurl'], array('tr_events.php', 'events.php'))) { $messageTable->addVar('eventid', $_REQUEST['eventid']); $messageTable->addVar('triggerid', $_REQUEST['triggerid']); } elseif (in_array($_REQUEST['backurl'], array('screenedit.php', 'screens.php'))) { $messageTable->addVar('screenid', $_REQUEST['screenid']); } if (isset($_REQUEST['eventid'])) { $messageTable->addVar('eventid', $_REQUEST['eventid']); } elseif (isset($_REQUEST['triggers'])) { foreach ($_REQUEST['triggers'] as $triggerId) { $messageTable->addVar('triggers[' . $triggerId . ']', $triggerId); } } elseif (isset($_REQUEST['events'])) { foreach ($_REQUEST['events'] as $eventId) {
/** * Get action messages. * * @param array $alerts * @param string $alerts[n]['alertid'] * @param string $alerts[n]['userid'] * @param int $alerts[n]['alerttype'] * @param array $alerts[n]['mediatypes'] * @param string $alerts[n]['clock'] * @param int $alerts[n]['esc_step'] * @param int $alerts[n]['status'] * @param int $alerts[n]['retries'] * @param string $alerts[n]['subject'] * @param string $alerts[n]['sendto'] * @param string $alerts[n]['message'] * @param string $alerts[n]['error'] * * @return CTableInfo */ function getActionMessages(array $alerts) { $dbUsers = API::User()->get(array('output' => array('userid', 'alias', 'name', 'surname'), 'userids' => zbx_objectValues($alerts, 'userid'), 'preservekeys' => true)); $table = new CTableInfo(_('No actions found.')); $table->setHeader(array(_('Time'), _('Type'), _('Status'), _('Retries left'), _('Recipient(s)'), _('Message'), _('Info'))); foreach ($alerts as $alert) { if ($alert['alerttype'] != ALERT_TYPE_MESSAGE) { continue; } $mediaType = array_pop($alert['mediatypes']); $time = zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']); if ($alert['esc_step'] > 0) { $time = array(bold(_('Step') . NAME_DELIMITER), $alert['esc_step'], br(), bold(_('Time') . NAME_DELIMITER), br(), $time); } if ($alert['status'] == ALERT_STATUS_SENT) { $status = new CSpan(_('sent'), 'green'); $retries = new CSpan(SPACE, 'green'); } elseif ($alert['status'] == ALERT_STATUS_NOT_SENT) { $status = new CSpan(_('In progress'), 'orange'); $retries = new CSpan(ALERT_MAX_RETRIES - $alert['retries'], 'orange'); } else { $status = new CSpan(_('not sent'), 'red'); $retries = new CSpan(0, 'red'); } $recipient = $alert['userid'] ? array(bold(getUserFullname($dbUsers[$alert['userid']])), BR(), $alert['sendto']) : $alert['sendto']; $message = array(bold(_('Subject') . NAME_DELIMITER), br(), $alert['subject'], br(), br(), bold(_('Message') . NAME_DELIMITER)); array_push($message, BR(), zbx_nl2br($alert['message'])); if (zbx_empty($alert['error'])) { $info = ''; } else { $info = new CDiv(SPACE, 'status_icon iconerror'); $info->setHint($alert['error'], 'on'); } $table->addRow(array(new CCol($time, 'top'), new CCol(isset($mediaType['description']) ? $mediaType['description'] : '', 'top'), new CCol($status, 'top'), new CCol($retries, 'top'), new CCol($recipient, 'top'), new CCol($message, 'wraptext top'), new CCol($info, 'wraptext top'))); } return $table; }
foreach ($users as &$user) { if ($multiselect) { $checkBox = new CCheckBox('users[' . $user['userid'] . ']', $user['userid']); } $js_action = 'javascript: addValue(' . zbx_jsvalue($reference) . ', ' . zbx_jsvalue($user['userid']) . ', ' . $parentid . '); jQuery(this).removeAttr("onclick");'; $alias = (new CLink($user['alias'], 'javascript:void(0);'))->setId('spanid' . $user['userid'])->onClick($js_action); if (isset($srcfld1)) { if ($srcfld1 === 'userid') { $data[$user['userid']]['id'] = $user['userid']; } elseif ($srcfld1 === 'alias') { $data[$user['userid']]['name'] = $user['alias']; } } if (isset($srcfld2)) { if ($srcfld2 === 'fullname') { $data[$user['userid']]['name'] = getUserFullname($user); } elseif (array_key_exists($srcfld2, $user)) { $data[$user['userid']][$srcfld2] = $user[$srcfld2]; } } $table->addRow([$multiselect ? $checkBox : null, $alias, $user['name'], $user['surname']]); } unset($user); if ($multiselect) { $table->setFooter(new CCol((new CButton('select', _('Select')))->onClick("javascript: addSelectedValues('users', " . zbx_jsvalue($reference) . ', ' . $parentid . ');'))); } insert_js('var popupReference = ' . zbx_jsvalue($data, true) . ';'); $form->addItem($table); $widget->addItem($form)->show(); } elseif ($srctbl == 'templates') { $form = (new CForm())->setName('templateform')->setId('templates');
/* ** Zabbix ** Copyright (C) 2001-2016 Zabbix SIA ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ $this->includeJSfile('app/views/monitoring.acknowledge.edit.js.php'); $form_list = (new CFormList())->addRow(_('Message'), (new CTextArea('message'))->setWidth(ZBX_TEXTAREA_BIG_WIDTH)->setMaxLength(255)->setAttribute('autofocus', 'autofocus')); if (array_key_exists('event', $data)) { $acknowledgesTable = (new CTable())->setAttribute('style', 'width: 100%;')->setHeader([_('Time'), _('User'), _('Message')]); foreach ($data['event']['acknowledges'] as $acknowledge) { $acknowledgesTable->addRow([(new CCol(zbx_date2str(DATE_TIME_FORMAT_SECONDS, $acknowledge['clock'])))->addClass(ZBX_STYLE_NOWRAP), (new CCol(getUserFullname($acknowledge)))->addClass(ZBX_STYLE_NOWRAP), zbx_nl2br($acknowledge['message'])]); } $form_list->addRow(_('History'), (new CDiv($acknowledgesTable))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)->setAttribute('style', 'min-width: ' . ZBX_TEXTAREA_BIG_WIDTH . 'px;')); } $selected_events = count($data['eventids']); $form_list->addRow(_('Acknowledge'), (new CDiv((new CRadioButtonList('acknowledge_type', (int) $data['acknowledge_type']))->makeVertical()->addValue([_n('Only selected event', 'Only selected events', $selected_events), $selected_events > 1 ? (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN) : null, $selected_events > 1 ? new CSup(_n('%1$s event', '%1$s events', $selected_events)) : null], ZBX_ACKNOWLEDGE_SELECTED)->addValue([_('Selected and all unacknowledged PROBLEM events'), (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), new CSup(_n('%1$s event', '%1$s events', $data['unack_problem_events_count']))], ZBX_ACKNOWLEDGE_PROBLEM)->addValue([_('Selected and all unacknowledged events'), (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), new CSup(_n('%1$s event', '%1$s events', $data['unack_events_count']))], ZBX_ACKNOWLEDGE_ALL)))->setAttribute('style', 'min-width: ' . ZBX_TEXTAREA_BIG_WIDTH . 'px;')->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)); $footer_buttons = makeFormFooter(new CSubmitButton(_('Acknowledge'), 'action', 'acknowledge.create'), [new CRedirectButton(_('Cancel'), $data['backurl'])]); (new CWidget())->setTitle(_('Alarm acknowledgements'))->addItem((new CForm())->setId('acknowledge_form')->addVar('eventids', $data['eventids'])->addVar('backurl', $data['backurl'])->addItem((new CTabView())->addTab('ackTab', null, $form_list)->setFooter($footer_buttons)))->show();
/** * Generates array with HTML items representing operation with description * * @param int $type short or long description, use const. SHORT_DESCRIPTION and LONG_DESCRIPTION * @param array $data * @param int $data['operationtype'] type of operation: OPERATION_TYPE_MESSAGE, OPERATION_TYPE_COMMAND, ... * @param int $data['opmessage']['mediatypeid'] type id of message media * @param bool $data['opmessage']['default_msg'] should default message be used * @param bool $data['opmessage']['operationid'] if true $data['operationid'] will be used to retrieve default messages from DB * @param string $data['opmessage']['subject'] subject of message * @param string $data['opmessage']['message'] message it self * @param array $data['opmessage_usr'] list of user ids if OPERATION_TYPE_MESSAGE * @param array $data['opmessage_grp'] list of group ids if OPERATION_TYPE_MESSAGE * @param array $data['opcommand_grp'] list of group ids if OPERATION_TYPE_COMMAND * @param array $data['opcommand_hst'] list of host ids if OPERATION_TYPE_COMMAND * @param array $data['opgroup'] list of group ids if OPERATION_TYPE_GROUP_ADD or OPERATION_TYPE_GROUP_REMOVE * @param array $data['optemplate'] list of template ids if OPERATION_TYPE_TEMPLATE_ADD or OPERATION_TYPE_TEMPLATE_REMOVE * @param int $data['operationid'] id of operation * @param int $data['opcommand']['type'] type of command: ZBX_SCRIPT_TYPE_IPMI, ZBX_SCRIPT_TYPE_SSH, ... * @param string $data['opcommand']['command'] actual command * @param int $data['opcommand']['scriptid'] script id used if $data['opcommand']['type'] is ZBX_SCRIPT_TYPE_GLOBAL_SCRIPT * * @return array */ function get_operation_descr($type, $data) { $result = array(); if ($type == SHORT_DESCRIPTION) { switch ($data['operationtype']) { case OPERATION_TYPE_MESSAGE: $mediaTypes = API::Mediatype()->get(array('mediatypeids' => $data['opmessage']['mediatypeid'], 'output' => array('description'))); if (empty($mediaTypes)) { $mediatype = _('all media'); } else { $mediatype = reset($mediaTypes); $mediatype = $mediatype['description']; } if (!empty($data['opmessage_usr'])) { $users = API::User()->get(array('userids' => zbx_objectValues($data['opmessage_usr'], 'userid'), 'output' => array('userid', 'alias', 'name', 'surname'))); order_result($users, 'alias'); foreach ($users as $user) { $fullnames[] = getUserFullname($user); } $result[] = bold(_('Send message to users') . NAME_DELIMITER); $result[] = array(implode(', ', $fullnames), SPACE, _('via'), SPACE, $mediatype); $result[] = BR(); } if (!empty($data['opmessage_grp'])) { $usrgrps = API::UserGroup()->get(array('usrgrpids' => zbx_objectValues($data['opmessage_grp'], 'usrgrpid'), 'output' => API_OUTPUT_EXTEND)); order_result($usrgrps, 'name'); $result[] = bold(_('Send message to user groups') . NAME_DELIMITER); $result[] = array(implode(', ', zbx_objectValues($usrgrps, 'name')), SPACE, _('via'), SPACE, $mediatype); $result[] = BR(); } break; case OPERATION_TYPE_COMMAND: if (!isset($data['opcommand_grp'])) { $data['opcommand_grp'] = array(); } if (!isset($data['opcommand_hst'])) { $data['opcommand_hst'] = array(); } $hosts = API::Host()->get(array('hostids' => zbx_objectValues($data['opcommand_hst'], 'hostid'), 'output' => array('hostid', 'name'))); foreach ($data['opcommand_hst'] as $cmd) { if ($cmd['hostid'] != 0) { continue; } $result[] = array(bold(_('Run remote commands on current host')), BR()); break; } if (!empty($hosts)) { order_result($hosts, 'name'); $result[] = bold(_('Run remote commands on hosts') . NAME_DELIMITER); $result[] = array(implode(', ', zbx_objectValues($hosts, 'name')), BR()); } $groups = API::HostGroup()->get(array('groupids' => zbx_objectValues($data['opcommand_grp'], 'groupid'), 'output' => array('groupid', 'name'))); if (!empty($groups)) { order_result($groups, 'name'); $result[] = bold(_('Run remote commands on host groups') . NAME_DELIMITER); $result[] = array(implode(', ', zbx_objectValues($groups, 'name')), BR()); } break; case OPERATION_TYPE_HOST_ADD: $result[] = array(bold(_('Add host')), BR()); break; case OPERATION_TYPE_HOST_REMOVE: $result[] = array(bold(_('Remove host')), BR()); break; case OPERATION_TYPE_HOST_ENABLE: $result[] = array(bold(_('Enable host')), BR()); break; case OPERATION_TYPE_HOST_DISABLE: $result[] = array(bold(_('Disable host')), BR()); break; case OPERATION_TYPE_GROUP_ADD: case OPERATION_TYPE_GROUP_REMOVE: if (!isset($data['opgroup'])) { $data['opgroup'] = array(); } $groups = API::HostGroup()->get(array('groupids' => zbx_objectValues($data['opgroup'], 'groupid'), 'output' => array('groupid', 'name'))); if (!empty($groups)) { order_result($groups, 'name'); if (OPERATION_TYPE_GROUP_ADD == $data['operationtype']) { $result[] = bold(_('Add to host groups') . NAME_DELIMITER); } else { $result[] = bold(_('Remove from host groups') . NAME_DELIMITER); } $result[] = array(implode(', ', zbx_objectValues($groups, 'name')), BR()); } break; case OPERATION_TYPE_TEMPLATE_ADD: case OPERATION_TYPE_TEMPLATE_REMOVE: if (!isset($data['optemplate'])) { $data['optemplate'] = array(); } $templates = API::Template()->get(array('templateids' => zbx_objectValues($data['optemplate'], 'templateid'), 'output' => array('hostid', 'name'))); if (!empty($templates)) { order_result($templates, 'name'); if (OPERATION_TYPE_TEMPLATE_ADD == $data['operationtype']) { $result[] = bold(_('Link to templates') . NAME_DELIMITER); } else { $result[] = bold(_('Unlink from templates') . NAME_DELIMITER); } $result[] = array(implode(', ', zbx_objectValues($templates, 'name')), BR()); } break; default: } } else { switch ($data['operationtype']) { case OPERATION_TYPE_MESSAGE: if (isset($data['opmessage']['default_msg']) && !empty($data['opmessage']['default_msg'])) { if (isset($_REQUEST['def_shortdata']) && isset($_REQUEST['def_longdata'])) { $result[] = array(bold(_('Subject') . NAME_DELIMITER), BR(), zbx_nl2br($_REQUEST['def_shortdata'])); $result[] = array(bold(_('Message') . NAME_DELIMITER), BR(), zbx_nl2br($_REQUEST['def_longdata'])); } elseif (isset($data['opmessage']['operationid'])) { $sql = 'SELECT a.def_shortdata,a.def_longdata ' . ' FROM actions a,operations o ' . ' WHERE a.actionid=o.actionid ' . ' AND o.operationid=' . zbx_dbstr($data['operationid']); if ($rows = DBfetch(DBselect($sql, 1))) { $result[] = array(bold(_('Subject') . NAME_DELIMITER), BR(), zbx_nl2br($rows['def_shortdata'])); $result[] = array(bold(_('Message') . NAME_DELIMITER), BR(), zbx_nl2br($rows['def_longdata'])); } } } else { $result[] = array(bold(_('Subject') . NAME_DELIMITER), BR(), zbx_nl2br($data['opmessage']['subject'])); $result[] = array(bold(_('Message') . NAME_DELIMITER), BR(), zbx_nl2br($data['opmessage']['message'])); } break; case OPERATION_TYPE_COMMAND: switch ($data['opcommand']['type']) { case ZBX_SCRIPT_TYPE_IPMI: $result[] = array(bold(_('Run IPMI command') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); break; case ZBX_SCRIPT_TYPE_SSH: $result[] = array(bold(_('Run SSH commands') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); break; case ZBX_SCRIPT_TYPE_TELNET: $result[] = array(bold(_('Run TELNET commands') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); break; case ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT: if ($data['opcommand']['execute_on'] == ZBX_SCRIPT_EXECUTE_ON_AGENT) { $result[] = array(bold(_('Run custom commands on Zabbix agent') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); } else { $result[] = array(bold(_('Run custom commands on Zabbix server') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); } break; case ZBX_SCRIPT_TYPE_GLOBAL_SCRIPT: $userScripts = API::Script()->get(array('scriptids' => $data['opcommand']['scriptid'], 'output' => API_OUTPUT_EXTEND)); $userScript = reset($userScripts); $result[] = array(bold(_('Run global script') . NAME_DELIMITER), italic($userScript['name'])); break; default: $result[] = array(bold(_('Run commands') . NAME_DELIMITER), BR(), italic(zbx_nl2br($data['opcommand']['command']))); } break; default: } } return $result; }
function makeActionHints($alerts, $mediatypes, $users, $status) { $table = (new CTableInfo())->setHeader([_('Time'), _('User'), _('Details'), _('Status'), _('Info')]); $popup_rows = 0; foreach ($alerts as $alert) { switch ($status) { case ALERT_STATUS_NOT_SENT: $status_str = (new CSpan(_('In progress')))->addClass(ZBX_STYLE_YELLOW); break; case ALERT_STATUS_SENT: $status_str = (new CSpan($alert['alerttype'] == ALERT_TYPE_COMMAND ? _('Executed') : _('Sent')))->addClass(ZBX_STYLE_GREEN); break; default: $status_str = (new CSpan(_('Not sent')))->addClass(ZBX_STYLE_RED); } switch ($alert['alerttype']) { case ALERT_TYPE_MESSAGE: $user = array_key_exists($alert['userid'], $users) ? getUserFullname($users[$alert['userid']]) : ''; $message = array_key_exists($alert['mediatypeid'], $mediatypes) ? $mediatypes[$alert['mediatypeid']]['description'] : ''; break; case ALERT_TYPE_COMMAND: $user = ''; $message = [bold(_('Command') . NAME_DELIMITER), BR(), zbx_nl2br($alert['message'])]; break; default: $user = ''; $message = ''; } $table->addRow([zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']), $user, $message, $status_str, $alert['error'] === '' ? '' : makeErrorIcon($alert['error'])]); if (++$popup_rows == ZBX_WIDGET_ROWS) { break; } } return $table; }
$form = new CForm(); $form->setName('userform'); $form->setAttribute('id', 'users'); $table = new CTableInfo(_('No users found.')); $table->setHeader(array($multiselect ? new CCheckBox('all_users', null, "javascript: checkAll('" . $form->getName() . "', 'all_users', 'users');") : null, _('Alias'), _('Name'), _('Surname'))); $options = array('nodeids' => $nodeId, 'output' => array('alias', 'name', 'surname', 'type', 'theme', 'lang'), 'preservekeys' => true); if (!is_null($writeonly)) { $options['editable'] = true; } $users = API::User()->get($options); order_result($users, 'alias'); foreach ($users as &$user) { $alias = new CSpan($user['alias'], 'link'); $alias->attr('id', 'spanid' . $user['userid']); if (isset($srcfld2) && $srcfld2 == 'fullname') { $user[$srcfld2] = getUserFullname($user); } if ($multiselect) { $js_action = 'javascript: addValue(' . zbx_jsvalue($reference) . ', ' . zbx_jsvalue($user['userid']) . ');'; } else { $values = array($dstfld1 => $user[$srcfld1]); if (isset($srcfld2)) { $values[$dstfld2] = $user[$srcfld2]; } $js_action = 'javascript: addValues(' . zbx_jsvalue($dstfrm) . ', ' . zbx_jsvalue($values) . '); close_window(); return false;'; } $alias->setAttribute('onclick', $js_action . ' jQuery(this).removeAttr("onclick");'); $table->addRow(array($multiselect ? new CCheckBox('users[' . zbx_jsValue($user[$srcfld1]) . ']', null, null, $user['userid']) : null, $alias, $user['name'], $user['surname'])); } unset($user); if ($multiselect) {
$guiAccess = (new CLink($guiAccess, 'usergrps.php?action=usergroup.set_gui_access&set_gui_access=' . $nextGuiAuth . '&usrgrpid=' . $userGroupId))->addClass($guiAccessStyle)->addSID(); $usersStatus = $usrgrp['users_status'] == GROUP_STATUS_ENABLED ? (new CLink(_('Enabled'), 'usergrps.php?action=usergroup.massdisable&usrgrpid=' . $userGroupId))->addClass(ZBX_STYLE_LINK_ACTION)->addClass(ZBX_STYLE_GREEN)->addSID() : (new CLink(_('Disabled'), 'usergrps.php?action=usergroup.massenable&usrgrpid=' . $userGroupId))->addClass(ZBX_STYLE_LINK_ACTION)->addClass(ZBX_STYLE_RED)->addSID(); } else { $guiAccess = (new CSpan($guiAccess))->addClass($guiAccessStyle); $usersStatus = $usrgrp['users_status'] == GROUP_STATUS_ENABLED ? (new CSpan(_('Enabled')))->addClass(ZBX_STYLE_GREEN) : (new CSpan(_('Disabled')))->addClass(ZBX_STYLE_RED); } if (isset($usrgrp['users'])) { $userGroupUsers = $usrgrp['users']; order_result($userGroupUsers, 'alias'); $users = []; $i = 0; foreach ($userGroupUsers as $user) { $i++; if ($i > $this->data['config']['max_in_table']) { $users[] = ' …'; break; } if ($users) { $users[] = ', '; } $users[] = (new CLink(getUserFullname($user), 'users.php?form=update&userid=' . $user['userid']))->addClass(ZBX_STYLE_LINK_ALT)->addClass($user['gui_access'] == GROUP_GUI_ACCESS_DISABLED || $user['users_status'] == GROUP_STATUS_DISABLED ? ZBX_STYLE_RED : ZBX_STYLE_GREEN); } } $name = new CLink($usrgrp['name'], 'usergrps.php?form=update&usrgrpid=' . $userGroupId); $userGroupTable->addRow([new CCheckBox('group_groupid[' . $userGroupId . ']', $userGroupId), (new CCol($name))->addClass(ZBX_STYLE_NOWRAP), [new CLink(_('Users'), 'users.php?filter_usrgrpid=' . $userGroupId), CViewHelper::showNum(count($usrgrp['users']))], $users, $guiAccess, $debugMode, $usersStatus]); } // append table to form $userGroupsForm->addItem([$userGroupTable, $this->data['paging'], new CActionButtonList('action', 'group_groupid', ['usergroup.massenable' => ['name' => _('Enable'), 'confirm' => _('Enable selected groups?')], 'usergroup.massdisable' => ['name' => _('Disable'), 'confirm' => _('Disable selected groups?')], 'usergroup.massenabledebug' => ['name' => _('Enable debug mode'), 'confirm' => _('Enable debug mode in selected groups?')], 'usergroup.massdisabledebug' => ['name' => _('Disable debug mode'), 'confirm' => _('Disable debug mode in selected groups?')], 'usergroup.massdelete' => ['name' => _('Delete'), 'confirm' => _('Delete selected groups?')]])]); // append form to widget $widget->addItem($userGroupsForm); return $widget;
** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ $icons = (new CList())->addClass(ZBX_STYLE_TOP_NAV_ICONS)->addItem((new CForm('get', 'search.php'))->addItem([(new CTextBox('search', '', false, 255))->setAttribute('autocomplete', 'off')->addClass(ZBX_STYLE_SEARCH), (new CSubmitButton(SPACE))->addClass(ZBX_STYLE_BTN_SEARCH)]))->addItem((new CLink('Share', 'https://share.zabbix.com/'))->addClass(ZBX_STYLE_TOP_NAV_ZBBSHARE)->setAttribute('target', '_blank')->setAttribute('title', _('Zabbix Share')))->addItem((new CLink(SPACE, 'http://www.zabbix.com/documentation/3.0/'))->addClass(ZBX_STYLE_TOP_NAV_HELP)->setAttribute('target', '_blank')->setAttribute('title', _('Help'))); if (!$data['user']['is_guest']) { $icons->addItem((new CLink(SPACE, 'profile.php'))->addClass(ZBX_STYLE_TOP_NAV_PROFILE)->setAttribute('title', getUserFullname($data['user']))); } $icons->addItem((new CLink(SPACE, 'index.php?reconnect=1'))->addClass(ZBX_STYLE_TOP_NAV_SIGNOUT)->setAttribute('title', _('Sign out'))->addSID()); // 1st level menu $top_menu = (new CDiv())->addItem(new CLink((new CDiv())->addClass(ZBX_STYLE_LOGO), 'zabbix.php?action=dashboard.view'))->addItem((new CList($data['menu']['main_menu']))->addClass(ZBX_STYLE_TOP_NAV))->addItem($icons)->addClass(ZBX_STYLE_TOP_NAV_CONTAINER)->setId('mmenu'); $sub_menu_div = (new CDiv())->addClass(ZBX_STYLE_TOP_SUBNAV_CONTAINER)->onMouseover('javascript: MMenu.submenu_mouseOver();')->onMouseout('javascript: MMenu.mouseOut();'); // 2nd level menu foreach ($data['menu']['sub_menus'] as $label => $sub_menu) { $sub_menu_row = (new CList())->addClass(ZBX_STYLE_TOP_SUBNAV)->setId('sub_' . $label); foreach ($sub_menu as $id => $sub_page) { $url = new CUrl($sub_page['menu_url']); if ($sub_page['menu_action'] !== null) { $url->setArgument('action', $sub_page['menu_action']); } $url->setArgument('ddreset', 1)->removeArgument('sid'); $sub_menu_item = new CLink($sub_page['menu_text'], $url->getUrl());
// create form $auditForm = (new CForm('get'))->setName('auditForm'); // create table $auditTable = (new CTableInfo())->setHeader([_('Time'), _('Action'), _('Type'), _('Recipient(s)'), _('Message'), _('Status'), _('Info')]); foreach ($this->data['alerts'] as $alert) { $mediatype = array_pop($alert['mediatypes']); if ($alert['status'] == ALERT_STATUS_SENT) { $status = $alert['alerttype'] == ALERT_TYPE_MESSAGE ? (new CSpan(_('Sent')))->addClass(ZBX_STYLE_GREEN) : (new CSpan(_('Executed')))->addClass(ZBX_STYLE_GREEN); } elseif ($alert['status'] == ALERT_STATUS_NOT_SENT) { $status = (new CSpan([_('In progress') . ':', BR(), _n('%1$s retry left', '%1$s retries left', ALERT_MAX_RETRIES - $alert['retries'])]))->addClass(ZBX_STYLE_YELLOW); } else { $status = (new CSpan(_('Not sent')))->addClass(ZBX_STYLE_RED); } $message = $alert['alerttype'] == ALERT_TYPE_MESSAGE ? [bold(_('Subject') . ':'), BR(), $alert['subject'], BR(), BR(), bold(_('Message') . ':'), BR(), zbx_nl2br($alert['message'])] : [bold(_('Command') . ':'), BR(), zbx_nl2br($alert['message'])]; if (zbx_empty($alert['error'])) { $info = ''; } else { $info = makeErrorIcon($alert['error']); } $recipient = isset($alert['userid']) && $alert['userid'] ? [bold(getUserFullname($this->data['users'][$alert['userid']])), BR(), $alert['sendto']] : $alert['sendto']; $auditTable->addRow([zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']), $this->data['actions'][$alert['actionid']]['name'], $mediatype ? $mediatype['description'] : '', $recipient, $message, $status, $info]); } // append table to form $auditForm->addItem([$auditTable, $this->data['paging']]); // append navigation bar js $objData = ['id' => 'timeline_1', 'domid' => 'events', 'loadSBox' => 0, 'loadImage' => 0, 'loadScroll' => 1, 'dynamic' => 0, 'mainObject' => 1, 'periodFixed' => CProfile::get('web.auditacts.timelinefixed', 1), 'sliderMaximumTimePeriod' => ZBX_MAX_PERIOD]; zbx_add_post_js('timeControl.addObject("events", ' . zbx_jsvalue($data['timeline']) . ', ' . zbx_jsvalue($objData) . ');'); zbx_add_post_js('timeControl.processObjects();'); // append form to widget $auditWidget->addItem($auditForm); return $auditWidget;
/** * Process screen. * * @return CDiv (screen inside container) */ public function get() { $sortfield = 'clock'; $sortorder = ZBX_SORT_DOWN; switch ($this->screenitem['sort_triggers']) { case SCREEN_SORT_TRIGGERS_TIME_ASC: $sortfield = 'clock'; $sortorder = ZBX_SORT_UP; break; case SCREEN_SORT_TRIGGERS_TIME_DESC: $sortfield = 'clock'; $sortorder = ZBX_SORT_DOWN; break; case SCREEN_SORT_TRIGGERS_TYPE_ASC: $sortfield = 'description'; $sortorder = ZBX_SORT_UP; break; case SCREEN_SORT_TRIGGERS_TYPE_DESC: $sortfield = 'description'; $sortorder = ZBX_SORT_DOWN; break; case SCREEN_SORT_TRIGGERS_STATUS_ASC: $sortfield = 'status'; $sortorder = ZBX_SORT_UP; break; case SCREEN_SORT_TRIGGERS_STATUS_DESC: $sortfield = 'status'; $sortorder = ZBX_SORT_DOWN; break; case SCREEN_SORT_TRIGGERS_RECIPIENT_ASC: $sortfield = 'sendto'; $sortorder = ZBX_SORT_UP; break; case SCREEN_SORT_TRIGGERS_RECIPIENT_DESC: $sortfield = 'sendto'; $sortorder = ZBX_SORT_DOWN; break; } $sql = 'SELECT a.alertid,a.clock,a.sendto,a.subject,a.message,a.status,a.retries,a.error,' . 'a.userid,a.actionid,a.mediatypeid,mt.description' . ' FROM events e,alerts a' . ' LEFT JOIN media_type mt ON mt.mediatypeid=a.mediatypeid' . ' WHERE e.eventid=a.eventid' . ' AND alerttype=' . ALERT_TYPE_MESSAGE; if (CWebUser::getType() != USER_TYPE_SUPER_ADMIN) { $userid = CWebUser::$data['userid']; $userGroups = getUserGroupsByUserId($userid); $sql .= ' AND EXISTS (' . 'SELECT NULL' . ' FROM functions f,items i,hosts_groups hgg' . ' JOIN rights r' . ' ON r.id=hgg.groupid' . ' AND ' . dbConditionInt('r.groupid', $userGroups) . ' WHERE e.objectid=f.triggerid' . ' AND f.itemid=i.itemid' . ' AND i.hostid=hgg.hostid' . ' GROUP BY f.triggerid' . ' HAVING MIN(r.permission)>' . PERM_DENY . ')'; } $sql .= ' ORDER BY ' . $sortfield . ' ' . $sortorder; $alerts = DBfetchArray(DBselect($sql, $this->screenitem['elements'])); order_result($alerts, $sortfield, $sortorder); $userids = []; foreach ($alerts as $alert) { if ($alert['userid'] != 0) { $userids[$alert['userid']] = true; } } if ($userids) { $dbUsers = API::User()->get(['output' => ['userid', 'alias', 'name', 'surname'], 'userids' => array_keys($userids), 'preservekeys' => true]); } // indicator of sort field $sort_div = (new CSpan())->addClass($sortorder === ZBX_SORT_DOWN ? ZBX_STYLE_ARROW_DOWN : ZBX_STYLE_ARROW_UP); // create alert table $table = (new CTableInfo())->setHeader([$sortfield === 'clock' ? ['Time', $sort_div] : _('Time'), _('Action'), $sortfield === 'description' ? [_('Type'), $sort_div] : _('Type'), $sortfield === 'sendto' ? [_('Recipient(s)'), $sort_div] : _('Recipient(s)'), _('Message'), $sortfield === 'status' ? [_('Status'), $sort_div] : _('Status'), _('Info')]); $actions = API::Action()->get(['output' => ['actionid', 'name'], 'actionids' => array_unique(zbx_objectValues($alerts, 'actionid')), 'preservekeys' => true]); foreach ($alerts as $alert) { if ($alert['status'] == ALERT_STATUS_SENT) { $status = (new CSpan(_('Sent')))->addClass(ZBX_STYLE_GREEN); } elseif ($alert['status'] == ALERT_STATUS_NOT_SENT) { $status = (new CSpan([_('In progress') . ':', BR(), _n('%1$s retry left', '%1$s retries left', ALERT_MAX_RETRIES - $alert['retries'])]))->addClass(ZBX_STYLE_YELLOW); } else { $status = (new CSpan(_('Not sent')))->addClass(ZBX_STYLE_RED); } $recipient = $alert['userid'] != 0 ? [bold(getUserFullname($dbUsers[$alert['userid']])), BR(), $alert['sendto']] : $alert['sendto']; $table->addRow([zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']), $actions[$alert['actionid']]['name'], $alert['mediatypeid'] == 0 ? '' : $alert['description'], $recipient, [bold($alert['subject']), BR(), BR(), zbx_nl2br($alert['message'])], $status, $alert['error'] === '' ? '' : makeErrorIcon($alert['error'])]); } $footer = (new CList())->addItem(_s('Updated: %s', zbx_date2str(TIME_FORMAT_SECONDS)))->addClass(ZBX_STYLE_DASHBRD_WIDGET_FOOT); return $this->getOutput((new CUiWidget(uniqid(), [$table, $footer]))->setHeader(_('Action log'))); }
function accountInfo() { ?> <fieldset><legend><?php echo getUserFullname($_SESSION['userid']); ?> </legend> <div class="center"><a href="?action=password" title="">Change Password</a> | <a href="actions/logout.php" title="Logout">Logout</a></div> </fieldset> <?php }
$controls->addItem([_('Media type'), SPACE, $cmbMedia]); $controls->addItem([_('Period'), SPACE, new CComboBox('period', $period, 'submit()', ['daily' => _('Daily'), 'weekly' => _('Weekly'), 'monthly' => _('Monthly'), 'yearly' => _('Yearly')])]); if ($period != 'yearly') { $cmbYear = new CComboBox('year', $year, 'submit();'); for ($y = $minYear; $y <= date('Y'); $y++) { $cmbYear->addItem($y, $y); } $controls->addItem([_('Year'), SPACE, $cmbYear]); } $form->addItem($controls); $widget->setControls($form); $header = []; $users = []; $db_users = DBselect('SELECT u.userid,u.alias,u.name,u.surname FROM users u ORDER BY u.alias,u.userid'); while ($user_data = DBfetch($db_users)) { $header[] = (new CColHeader(getUserFullname($user_data)))->addClass('vertical_rotation'); $users[] = $user_data['userid']; } $intervals = []; switch ($period) { case 'yearly': $minTime = mktime(0, 0, 0, 1, 1, $minYear); $dateFormat = _x('Y', DATE_FORMAT_CONTEXT); array_unshift($header, _('Year')); for ($i = $minYear; $i <= date('Y'); $i++) { $intervals[mktime(0, 0, 0, 1, 1, $i)] = mktime(0, 0, 0, 1, 1, $i + 1); } break; case 'monthly': $minTime = mktime(0, 0, 0, 1, 1, $year); $dateFormat = _x('F', DATE_FORMAT_CONTEXT);
/** * Process screen. * * @return CDiv (screen inside container) */ public function get() { $sortfield = 'clock'; $sortorder = ZBX_SORT_DOWN; $sorttitle = _('Time'); switch ($this->screenitem['sort_triggers']) { case SCREEN_SORT_TRIGGERS_TIME_ASC: $sortfield = 'clock'; $sortorder = ZBX_SORT_UP; $sorttitle = _('Time'); break; case SCREEN_SORT_TRIGGERS_TIME_DESC: $sortfield = 'clock'; $sortorder = ZBX_SORT_DOWN; $sorttitle = _('Time'); break; case SCREEN_SORT_TRIGGERS_TYPE_ASC: $sortfield = 'description'; $sortorder = ZBX_SORT_UP; $sorttitle = _('Type'); break; case SCREEN_SORT_TRIGGERS_TYPE_DESC: $sortfield = 'description'; $sortorder = ZBX_SORT_DOWN; $sorttitle = _('Type'); break; case SCREEN_SORT_TRIGGERS_STATUS_ASC: $sortfield = 'status'; $sortorder = ZBX_SORT_UP; $sorttitle = _('Status'); break; case SCREEN_SORT_TRIGGERS_STATUS_DESC: $sortfield = 'status'; $sortorder = ZBX_SORT_DOWN; $sorttitle = _('Status'); break; case SCREEN_SORT_TRIGGERS_RECIPIENT_ASC: $sortfield = 'sendto'; $sortorder = ZBX_SORT_UP; $sorttitle = _('Recipient(s)'); break; case SCREEN_SORT_TRIGGERS_RECIPIENT_DESC: $sortfield = 'sendto'; $sortorder = ZBX_SORT_DOWN; $sorttitle = _('Recipient(s)'); break; } $sql = 'SELECT a.alertid,a.clock,a.sendto,a.subject,a.message,a.status,a.retries,a.error,' . 'a.userid,a.actionid,a.mediatypeid,mt.description' . ' FROM events e,alerts a' . ' LEFT JOIN media_type mt ON mt.mediatypeid=a.mediatypeid' . ' WHERE e.eventid=a.eventid' . ' AND alerttype=' . ALERT_TYPE_MESSAGE; if (CWebUser::getType() != USER_TYPE_SUPER_ADMIN) { $userid = CWebUser::$data['userid']; $userGroups = getUserGroupsByUserId($userid); $sql .= ' AND EXISTS (' . 'SELECT NULL' . ' FROM functions f,items i,hosts_groups hgg' . ' JOIN rights r' . ' ON r.id=hgg.groupid' . ' AND ' . dbConditionInt('r.groupid', $userGroups) . ' WHERE e.objectid=f.triggerid' . ' AND f.itemid=i.itemid' . ' AND i.hostid=hgg.hostid' . ' GROUP BY f.triggerid' . ' HAVING MIN(r.permission)>' . PERM_DENY . ')'; } $sql .= ' ORDER BY ' . $sortfield . ' ' . $sortorder; $alerts = DBfetchArray(DBselect($sql, $this->screenitem['elements'])); order_result($alerts, $sortfield, $sortorder); if ($alerts) { $dbUsers = API::User()->get(array('output' => array('userid', 'alias', 'name', 'surname'), 'userids' => zbx_objectValues($alerts, 'userid'), 'preservekeys' => true)); } // indicator of sort field $sortfieldSpan = new CSpan(array($sorttitle, SPACE)); $sortorderSpan = new CSpan(SPACE, $sortorder === ZBX_SORT_DOWN ? 'icon_sortdown default_cursor' : 'icon_sortup default_cursor'); // create alert table $actionTable = new CTableInfo(_('No action log entries found.')); $actionTable->setHeader(array($sortfield === 'clock' ? array($sortfieldSpan, $sortorderSpan) : _('Time'), _('Action'), $sortfield === 'description' ? array($sortfieldSpan, $sortorderSpan) : _('Type'), $sortfield === 'sendto' ? array($sortfieldSpan, $sortorderSpan) : _('Recipient(s)'), _('Message'), $sortfield === 'status' ? array($sortfieldSpan, $sortorderSpan) : _('Status'), _('Info'))); $actions = API::Action()->get(array('output' => array('actionid', 'name'), 'actionids' => array_unique(zbx_objectValues($alerts, 'actionid')), 'preservekeys' => true)); foreach ($alerts as $alert) { if ($alert['status'] == ALERT_STATUS_SENT) { $status = new CSpan(_('Sent'), 'green'); } elseif ($alert['status'] == ALERT_STATUS_NOT_SENT) { $status = new CSpan(array(_('In progress') . ':', BR(), _n('%1$s retry left', '%1$s retries left', ALERT_MAX_RETRIES - $alert['retries'])), 'orange'); } else { $status = new CSpan(_('Not sent'), 'red'); } $recipient = $alert['userid'] ? array(bold(getUserFullname($dbUsers[$alert['userid']])), BR(), $alert['sendto']) : $alert['sendto']; $message = array(bold(_('Subject') . ':'), br(), $alert['subject'], br(), br(), bold(_('Message') . ':'), br(), $alert['message']); if (zbx_empty($alert['error'])) { $info = ''; } else { $info = new CDiv(SPACE, 'status_icon iconerror'); $info->setHint($alert['error'], 'on'); } $actionTable->addRow(array(new CCol(zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']), 'top'), new CCol($actions[$alert['actionid']]['name'], 'top'), new CCol($alert['mediatypeid'] == 0 ? '-' : $alert['description'], 'top'), new CCol($recipient, 'top'), new CCol($message, 'top pre'), new CCol($status, 'top'), new CCol($info, 'wraptext top'))); } return $this->getOutput($actionTable); }
* User group tab */ $userGroupFormList = new CFormList('userGroupFormList'); $nameTextBox = new CTextBox('gname', $this->data['name'], ZBX_TEXTBOX_STANDARD_SIZE); $nameTextBox->attr('autofocus', 'autofocus'); $userGroupFormList->addRow(_('Group name'), $nameTextBox); // append groups to form list $groupsComboBox = new CComboBox('selusrgrp', $this->data['selected_usrgrp'], 'submit()'); $groupsComboBox->addItem(0, _('All')); foreach ($this->data['usergroups'] as $group) { $groupsComboBox->addItem($group['usrgrpid'], $group['name']); } // append user tweenbox to form list $usersTweenBox = new CTweenBox($userGroupForm, 'group_users', $this->data['group_users'], 10); foreach ($this->data['users'] as $user) { $usersTweenBox->addItem($user['userid'], getUserFullname($user)); } $userGroupFormList->addRow(_('Users'), $usersTweenBox->get(_('In group'), array(_('Other groups'), SPACE, $groupsComboBox))); // append frontend and user status to from list $isGranted = isset($data['usrgrpid']) ? granted2update_group($data['usrgrpid']) : true; if ($isGranted) { $frontendComboBox = new CComboBox('gui_access', $this->data['gui_access']); $frontendComboBox->addItem(GROUP_GUI_ACCESS_SYSTEM, user_auth_type2str(GROUP_GUI_ACCESS_SYSTEM)); $frontendComboBox->addItem(GROUP_GUI_ACCESS_INTERNAL, user_auth_type2str(GROUP_GUI_ACCESS_INTERNAL)); $frontendComboBox->addItem(GROUP_GUI_ACCESS_DISABLED, user_auth_type2str(GROUP_GUI_ACCESS_DISABLED)); $userGroupFormList->addRow(_('Frontend access'), $frontendComboBox); $userGroupFormList->addRow(_('Enabled'), new CCheckBox('users_status', $this->data['users_status'] ? isset($data['usrgrpid']) ? 0 : 1 : 1, null, 1)); // invert user status 0 - enable, 1 - disable } else { $userGroupForm->addVar('gui_access', $this->data['gui_access']); $userGroupForm->addVar('users_status', GROUP_STATUS_ENABLED);
$add_user_group_btn = [(new CButton(null, _('Add')))->onClick('return PopUp("popup.php?dstfrm=' . $form->getName() . '&srctbl=usrgrp&srcfld1=usrgrpid&srcfld2=name&multiselect=1")')->addClass(ZBX_STYLE_BTN_LINK)]; $user_group_shares_table->addRow((new CRow((new CCol($add_user_group_btn))->setColSpan(3)))->setId('user_group_list_footer')); $user_groups = []; foreach ($data['sysmap']['userGroups'] as $user_group) { $user_groupid = $user_group['usrgrpid']; $user_groups[$user_groupid] = ['usrgrpid' => $user_groupid, 'name' => $data['user_groups'][$user_groupid]['name'], 'permission' => $user_group['permission']]; } $js_insert = 'addPopupValues(' . zbx_jsvalue(['object' => 'usrgrpid', 'values' => $user_groups]) . ');'; // User sharing table. $user_shares_table = (new CTable())->setHeader([_('Users'), _('Permissions'), _('Action')])->setAttribute('style', 'width: 100%;'); $add_user_btn = [(new CButton(null, _('Add')))->onClick('return PopUp("popup.php?dstfrm=' . $form->getName() . '&srctbl=users&srcfld1=userid&srcfld2=fullname&multiselect=1")')->addClass(ZBX_STYLE_BTN_LINK)]; $user_shares_table->addRow((new CRow((new CCol($add_user_btn))->setColSpan(3)))->setId('user_list_footer')); $users = []; foreach ($data['sysmap']['users'] as $user) { $userid = $user['userid']; $users[$userid] = ['id' => $userid, 'name' => getUserFullname($data['users'][$userid]), 'permission' => $user['permission']]; } $js_insert .= 'addPopupValues(' . zbx_jsvalue(['object' => 'userid', 'values' => $users]) . ');'; zbx_add_post_js($js_insert); $sharing_tab = (new CFormList('sharing_form'))->addRow(_('Type'), (new CRadioButtonList('private', (int) $data['sysmap']['private']))->addValue(_('Private'), PRIVATE_SHARING)->addValue(_('Public'), PUBLIC_SHARING)->setModern(true))->addRow(_('List of user group shares'), (new CDiv($user_group_shares_table))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)->setAttribute('style', 'min-width: ' . ZBX_TEXTAREA_STANDARD_WIDTH . 'px;'))->addRow(_('List of user shares'), (new CDiv($user_shares_table))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)->setAttribute('style', 'min-width: ' . ZBX_TEXTAREA_STANDARD_WIDTH . 'px;')); // Append data to form. $tabs->addTab('sharing_tab', _('Sharing'), $sharing_tab); // Append buttons to form. if (hasRequest('sysmapid') && getRequest('sysmapid') > 0) { $tabs->setFooter(makeFormFooter(new CSubmit('update', _('Update')), [new CButton('clone', _('Clone')), new CButtonDelete(_('Delete selected map?'), url_param('form') . url_param('sysmapid')), new CButtonCancel()])); } else { $tabs->setFooter(makeFormFooter(new CSubmit('add', _('Add')), [new CButtonCancel()])); } $form->addItem($tabs); // Append form to widget. $widget->addItem($form);
$userList = new CTable(null, 'formElementTable'); $userList->setHeader(array(_('User'), _('Action'))); $userList->attr('style', 'min-width: 310px;'); $userList->setAttribute('id', 'opmsgUserList'); $addUserBtn = new CButton('add', _('Add'), 'return PopUp("popup.php?dstfrm=action.edit&srctbl=users&srcfld1=userid&srcfld2=fullname&multiselect=1", 450, 450)', 'link_menu'); $addUserBtn->attr('id', 'adduserbtn'); $userList->addRow(new CRow(new CCol($addUserBtn, null, 2), null, 'opmsgUserListFooter')); // add participations $usrgrpids = isset($this->data['new_operation']['opmessage_grp']) ? zbx_objectValues($this->data['new_operation']['opmessage_grp'], 'usrgrpid') : array(); $userids = isset($this->data['new_operation']['opmessage_usr']) ? zbx_objectValues($this->data['new_operation']['opmessage_usr'], 'userid') : array(); $usrgrps = API::UserGroup()->get(array('usrgrpids' => $usrgrpids, 'output' => array('name'))); order_result($usrgrps, 'name'); $users = API::User()->get(array('userids' => $userids, 'output' => array('alias', 'name', 'surname'))); order_result($users, 'alias'); foreach ($users as &$user) { $user['fullname'] = getUserFullname($user); } unset($user); $jsInsert = 'addPopupValues(' . zbx_jsvalue(array('object' => 'usrgrpid', 'values' => $usrgrps)) . ');'; $jsInsert .= 'addPopupValues(' . zbx_jsvalue(array('object' => 'userid', 'values' => $users)) . ');'; zbx_add_post_js($jsInsert); $newOperationsTable->addRow(array(_('Send to User groups'), new CDiv($usrgrpList, 'objectgroup inlineblock border_dotted ui-corner-all'))); $newOperationsTable->addRow(array(_('Send to Users'), new CDiv($userList, 'objectgroup inlineblock border_dotted ui-corner-all'))); $mediaTypeComboBox = new CComboBox('new_operation[opmessage][mediatypeid]', $this->data['new_operation']['opmessage']['mediatypeid']); $mediaTypeComboBox->addItem(0, '- ' . _('All') . ' -'); $dbMediaTypes = DBfetchArray(DBselect('SELECT mt.mediatypeid,mt.description' . ' FROM media_type mt' . whereDbNode('mt.mediatypeid'))); order_result($dbMediaTypes, 'description'); foreach ($dbMediaTypes as $dbMediaType) { $mediaTypeComboBox->addItem($dbMediaType['mediatypeid'], $dbMediaType['description']); } $newOperationsTable->addRow(array(_('Send only to'), $mediaTypeComboBox));
$trigger['hosts'] = reset($trigger['hosts']); $hostName = $trigger['hosts']['name'] . NAME_DELIMITER; } $result[] = ['id' => $trigger['triggerid'], 'name' => $trigger['description'], 'prefix' => $hostName]; } } break; case 'users': $users = API::User()->get(['editable' => array_key_exists('editable', $data) ? $data['editable'] : null, 'output' => ['userid', 'alias', 'name', 'surname'], 'search' => array_key_exists('search', $data) ? ['alias' => $data['search'], 'name' => $data['search'], 'surname' => $data['search']] : null, 'searchByAny' => true, 'limit' => $config['search_limit']]); if ($users) { CArrayHelper::sort($users, [['field' => 'alias', 'order' => ZBX_SORT_UP]]); if (array_key_exists('limit', $data)) { $users = array_slice($users, 0, $data['limit']); } foreach ($users as $user) { $result[] = ['id' => $user['userid'], 'name' => getUserFullname($user)]; } } break; } break; default: fatal_error('Wrong RPC call to JS RPC!'); } if ($requestType == PAGE_TYPE_JSON) { if (isset($data['id'])) { echo $json->encode(['jsonrpc' => '2.0', 'result' => $result, 'id' => $data['id']]); } } elseif ($requestType == PAGE_TYPE_TEXT_RETURN_JSON) { $json = new CJson(); echo $json->encode(['jsonrpc' => '2.0', 'result' => $result]);