/**
  * Checks that the user has write permissions to objects used in the map elements.
  *
  * @throws APIException if the user has no permissions to at least one of the objects
  *
  * @param array $selements
  */
 protected function checkSelementPermissions(array $selements)
 {
     if (CWebUser::getType() == USER_TYPE_SUPER_ADMIN) {
         return;
     }
     $hostIds = $groupIds = $triggerIds = $mapIds = array();
     foreach ($selements as $selement) {
         switch ($selement['elementtype']) {
             case SYSMAP_ELEMENT_TYPE_HOST:
                 $hostIds[$selement['elementid']] = $selement['elementid'];
                 break;
             case SYSMAP_ELEMENT_TYPE_HOST_GROUP:
                 $groupIds[$selement['elementid']] = $selement['elementid'];
                 break;
             case SYSMAP_ELEMENT_TYPE_TRIGGER:
                 $triggerIds[$selement['elementid']] = $selement['elementid'];
                 break;
             case SYSMAP_ELEMENT_TYPE_MAP:
                 $mapIds[$selement['elementid']] = $selement['elementid'];
                 break;
         }
     }
     if ($hostIds && !API::Host()->isWritable($hostIds) || $groupIds && !API::HostGroup()->isWritable($groupIds) || $triggerIds && !API::Trigger()->isWritable($triggerIds) || $mapIds && !API::Map()->isWritable($mapIds)) {
         self::exception(ZBX_API_ERROR_PERMISSIONS, _('No permissions to referred object or it does not exist!'));
     }
 }
 function bodyToString($destroy = true)
 {
     $setup_left = (new CDiv([(new CDiv())->addClass(ZBX_STYLE_SIGNIN_LOGO), $this->getList()]))->addClass(ZBX_STYLE_SETUP_LEFT);
     $setup_right = (new CDiv($this->getStage()))->addClass(ZBX_STYLE_SETUP_RIGHT);
     if (CWebUser::$data && CWebUser::getType() == USER_TYPE_SUPER_ADMIN) {
         $cancel_button = (new CSubmit('cancel', _('Cancel')))->addClass(ZBX_STYLE_BTN_ALT)->addClass(ZBX_STYLE_FLOAT_LEFT);
         if ($this->DISABLE_CANCEL_BUTTON) {
             $cancel_button->setEnabled(false);
         }
     } else {
         $cancel_button = null;
     }
     if (array_key_exists($this->getStep() + 1, $this->stage)) {
         $next_button = new CSubmit('next[' . $this->getStep() . ']', _('Next step'));
     } else {
         $next_button = new CSubmit($this->SHOW_RETRY_BUTTON ? 'retry' : 'finish', _('Finish'));
     }
     $back_button = (new CSubmit('back[' . $this->getStep() . ']', _('Back')))->addClass(ZBX_STYLE_BTN_ALT)->addClass(ZBX_STYLE_FLOAT_LEFT);
     if ($this->getStep() == 0 || $this->DISABLE_BACK_BUTTON) {
         $back_button->setEnabled(false);
     }
     $setup_footer = (new CDiv([new CDiv([$next_button, $back_button]), $cancel_button]))->addClass(ZBX_STYLE_SETUP_FOOTER);
     $setup_container = (new CDiv([$setup_left, $setup_right, $setup_footer]))->addClass(ZBX_STYLE_SETUP_CONTAINER);
     return parent::bodyToString($destroy) . $setup_container->ToString();
 }
    $data['hostScripts'] = API::Script()->getScriptsByHosts([$hostId]);
    // inventory info
    $data['tableTitles'] = getHostInventories();
    $data['tableTitles'] = zbx_toHash($data['tableTitles'], 'db_field');
    $inventoryFields = array_keys($data['tableTitles']);
    // overview tab
    $data['host'] = API::Host()->get(['output' => ['hostid', 'host', 'name', 'status', 'maintenance_status', 'maintenanceid', 'maintenance_type', 'description'], 'selectInterfaces' => API_OUTPUT_EXTEND, 'selectItems' => API_OUTPUT_COUNT, 'selectTriggers' => API_OUTPUT_COUNT, 'selectScreens' => API_OUTPUT_COUNT, 'selectInventory' => $inventoryFields, 'selectGraphs' => API_OUTPUT_COUNT, 'selectApplications' => API_OUTPUT_COUNT, 'selectDiscoveries' => API_OUTPUT_COUNT, 'selectHttpTests' => API_OUTPUT_COUNT, 'hostids' => $hostId, 'preservekeys' => true]);
    $data['host'] = reset($data['host']);
    unset($data['host']['inventory']['hostid']);
    // resolve macros
    $data['host']['interfaces'] = CMacrosResolverHelper::resolveHostInterfaces($data['host']['interfaces']);
    if ($data['host']['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON) {
        $data['maintenances'] = API::Maintenance()->get(['maintenanceids' => [$data['host']['maintenanceid']], 'output' => ['name', 'description'], 'preservekeys' => true]);
    }
    // get permissions
    $userType = CWebUser::getType();
    if ($userType == USER_TYPE_SUPER_ADMIN) {
        $data['rwHost'] = true;
    } elseif ($userType == USER_TYPE_ZABBIX_ADMIN) {
        $rwHost = API::Host()->get(['output' => ['hostid'], 'hostids' => $hostId, 'editable' => true]);
        $data['rwHost'] = (bool) $rwHost;
    } else {
        $data['rwHost'] = false;
    }
    // view generation
    $hostinventoriesView = new CView('inventory.host.view', $data);
    $hostinventoriesView->render();
    $hostinventoriesView->show();
} else {
    $data = ['config' => select_config(), 'hosts' => [], 'sort' => $sortField, 'sortorder' => $sortOrder];
    // filter
/**
 * Returns true if the user has the permissions to network discovery.
 *
 * @return bool
 */
function check_right_on_discovery()
{
    return CWebUser::getType() >= USER_TYPE_ZABBIX_ADMIN;
}
Exemple #5
0
 public function checkInput(array &$dRules)
 {
     $dRules = zbx_toArray($dRules);
     if (empty($dRules)) {
         self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty input.'));
     }
     if (CWebUser::getType() < USER_TYPE_ZABBIX_ADMIN) {
         self::exception(ZBX_API_ERROR_PARAMETERS, _('No permissions to referred object or it does not exist!'));
     }
     $proxies = array();
     $ipRangeValidator = new CIPRangeValidator(array('ipRangeLimit' => ZBX_DISCOVERER_IPRANGE_LIMIT));
     foreach ($dRules as $dRule) {
         if (!isset($dRule['iprange'])) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _('IP range cannot be empty.'));
         }
         if (!$ipRangeValidator->validate($dRule['iprange'])) {
             self::exception(ZBX_API_ERROR_PARAMETERS, $ipRangeValidator->getError());
         }
         if (isset($dRule['delay']) && $dRule['delay'] < 0) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect delay.'));
         }
         if (isset($dRule['status']) && ($dRule['status'] != DRULE_STATUS_DISABLED && $dRule['status'] != DRULE_STATUS_ACTIVE)) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect status.'));
         }
         if (empty($dRule['dchecks'])) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _('Cannot save discovery rule without checks.'));
         }
         $this->validateDChecks($dRule['dchecks']);
         if (isset($dRule['proxy_hostid']) && $dRule['proxy_hostid']) {
             $proxies[] = $dRule['proxy_hostid'];
         }
     }
     if (!empty($proxies)) {
         $proxiesDB = API::proxy()->get(array('proxyids' => $proxies, 'output' => array('proxyid'), 'preservekeys' => true));
         foreach ($proxies as $proxy) {
             if (!isset($proxiesDB[$proxy])) {
                 self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect proxyid.'));
             }
         }
     }
 }
 protected function applyQueryFilterOptions($tableName, $tableAlias, array $options, array $sqlParts)
 {
     $sqlParts = parent::applyQueryFilterOptions($tableName, $tableAlias, $options, $sqlParts);
     // do not return host prototypes from discovered hosts
     $sqlParts['from'][] = 'host_discovery hd';
     $sqlParts['from'][] = 'items i';
     $sqlParts['from'][] = 'hosts ph';
     $sqlParts['where'][] = $this->fieldId('hostid') . '=hd.hostid';
     $sqlParts['where'][] = 'hd.parent_itemid=i.itemid';
     $sqlParts['where'][] = 'i.hostid=ph.hostid';
     $sqlParts['where'][] = 'ph.flags=' . ZBX_FLAG_DISCOVERY_NORMAL;
     if (CWebUser::getType() != USER_TYPE_SUPER_ADMIN && !$options['nopermissions']) {
         $permission = $options['editable'] ? PERM_READ_WRITE : PERM_READ;
         $sqlParts['where'][] = 'EXISTS (' . 'SELECT NULL' . ' FROM ' . 'host_discovery hd,items i,hosts_groups hgg' . ' JOIN rights r' . ' ON r.id=hgg.groupid' . ' AND ' . dbConditionInt('r.groupid', getUserGroupsByUserId(self::$userData['userid'])) . ' WHERE h.hostid=hd.hostid' . ' AND hd.parent_itemid=i.itemid' . ' AND i.hostid=hgg.hostid' . ' GROUP BY hgg.hostid' . ' HAVING MIN(r.permission)>' . PERM_DENY . ' AND MAX(r.permission)>=' . zbx_dbstr($permission) . ')';
     }
     // discoveryids
     if ($options['discoveryids'] !== null) {
         $sqlParts['where'][] = dbConditionInt('hd.parent_itemid', (array) $options['discoveryids']);
         if ($options['groupCount'] !== null) {
             $sqlParts['group']['hd'] = 'hd.parent_itemid';
         }
     }
     // inherited
     if ($options['inherited'] !== null) {
         $sqlParts['where'][] = $options['inherited'] ? 'h.templateid IS NOT NULL' : 'h.templateid IS NULL';
     }
     return $sqlParts;
 }
Exemple #7
0
    $sortField = getRequest('sort', CProfile::get('web.' . $page['file'] . '.sort', 'name'));
    $sortOrder = getRequest('sortorder', CProfile::get('web.' . $page['file'] . '.sortorder', ZBX_SORT_UP));
    CProfile::update('web.' . $page['file'] . '.sort', $sortField, PROFILE_TYPE_STR);
    CProfile::update('web.' . $page['file'] . '.sortorder', $sortOrder, PROFILE_TYPE_STR);
    if (hasRequest('filter_set')) {
        CProfile::update('web.sysmapconf.filter_name', getRequest('filter_name', ''), PROFILE_TYPE_STR);
    } elseif (hasRequest('filter_rst')) {
        DBStart();
        CProfile::delete('web.sysmapconf.filter_name');
        DBend();
    }
    $config = select_config();
    $data = ['filter' => ['name' => CProfile::get('web.sysmapconf.filter_name', '')], 'sort' => $sortField, 'sortorder' => $sortOrder];
    // get maps
    $data['maps'] = API::Map()->get(['output' => ['sysmapid', 'name', 'width', 'height'], 'sortfield' => $sortField, 'limit' => $config['search_limit'] + 1, 'search' => ['name' => $data['filter']['name'] === '' ? null : $data['filter']['name']], 'preservekeys' => true]);
    $user_type = CWebUser::getType();
    if ($user_type != USER_TYPE_SUPER_ADMIN && $user_type != USER_TYPE_ZABBIX_ADMIN) {
        $editable_maps = API::Map()->get(['output' => [], 'sysmapids' => array_keys($data['maps']), 'editable' => true, 'preservekeys' => true]);
        foreach ($data['maps'] as &$map) {
            $map['editable'] = array_key_exists($map['sysmapid'], $editable_maps);
        }
        unset($map);
    }
    order_result($data['maps'], $sortField, $sortOrder);
    // paging
    $data['paging'] = getPagingLine($data['maps'], $sortOrder, new CUrl('sysmaps.php'));
    // render view
    $mapView = new CView('monitoring.sysmap.list', $data);
    $mapView->render();
    $mapView->show();
}
 protected function applyQueryFilterOptions($tableName, $tableAlias, array $options, array $sqlParts)
 {
     if (CWebUser::getType() != USER_TYPE_SUPER_ADMIN) {
         // if services with specific trigger IDs were requested, return only the ones accessible to the current user.
         if ($options['filter']['triggerid']) {
             $accessibleTriggers = API::Trigger()->get(array('triggerids' => $options['filter']['triggerid']));
             $options['filter']['triggerid'] = zbx_objectValues($accessibleTriggers, 'triggerid');
         } else {
             $sqlParts = $this->addPermissionFilter($sqlParts);
         }
     }
     $sqlParts = parent::applyQueryFilterOptions($tableName, $tableAlias, $options, $sqlParts);
     // parentids
     if ($options['parentids'] !== null) {
         $sqlParts['from'][] = 'services_links slp';
         $sqlParts['where'][] = $this->fieldId('serviceid') . '=slp.servicedownid AND slp.soft=0';
         $sqlParts['where'][] = dbConditionInt('slp.serviceupid', (array) $options['parentids']);
     }
     // childids
     if ($options['childids'] !== null) {
         $sqlParts['from'][] = 'services_links slc';
         $sqlParts['where'][] = $this->fieldId('serviceid') . '=slc.serviceupid AND slc.soft=0';
         $sqlParts['where'][] = dbConditionInt('slc.servicedownid', (array) $options['childids']);
     }
     return $sqlParts;
 }
** 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.
**/
require_once dirname(__FILE__) . '/include/config.inc.php';
require_once dirname(__FILE__) . '/include/triggers.inc.php';
require_once dirname(__FILE__) . '/include/forms.inc.php';
require_once dirname(__FILE__) . '/include/js.inc.php';
$page['title'] = _('Media');
$page['file'] = 'popup_media.php';
if (CWebUser::getType() < USER_TYPE_ZABBIX_ADMIN || CWebUser::isGuest() && CWebUser::getType() < USER_TYPE_SUPER_ADMIN) {
    access_deny(ACCESS_DENY_PAGE);
}
define('ZBX_PAGE_NO_MENU', 1);
require_once dirname(__FILE__) . '/include/page_header.php';
//		VAR			TYPE	OPTIONAL FLAGS	VALIDATION	EXCEPTION
$fields = ['dstfrm' => [T_ZBX_STR, O_MAND, P_SYS, NOT_EMPTY, null], 'media' => [T_ZBX_INT, O_OPT, P_SYS, null, null], 'mediatypeid' => [T_ZBX_INT, O_OPT, P_SYS, DB_ID, 'isset({add})'], 'sendto' => [T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({add})'], 'period' => [T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({add})'], 'active' => [T_ZBX_INT, O_OPT, null, IN([MEDIA_STATUS_ACTIVE, MEDIA_STATUS_DISABLED]), null], 'severity' => [T_ZBX_INT, O_OPT, null, NOT_EMPTY, null], 'add' => [T_ZBX_STR, O_OPT, P_SYS | P_ACT, null, null], 'form' => [T_ZBX_STR, O_OPT, P_SYS, null, null], 'form_refresh' => [T_ZBX_INT, O_OPT, null, null, null]];
check_fields($fields);
insert_js_function('add_media');
if (isset($_REQUEST['add'])) {
    $validator = new CTimePeriodValidator();
    if ($validator->validate($_REQUEST['period'])) {
        $severity = 0;
        $_REQUEST['severity'] = getRequest('severity', []);
        foreach ($_REQUEST['severity'] as $id) {
            $severity |= 1 << $id;
 /**
  * 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_RETRIES_LEFT_ASC:
             $sortfield = 'retries';
             $sortorder = ZBX_SORT_UP;
             $sorttitle = _('Retries left');
             break;
         case SCREEN_SORT_TRIGGERS_RETRIES_LEFT_DESC:
             $sortfield = 'retries';
             $sortorder = ZBX_SORT_DOWN;
             $sorttitle = _('Retries left');
             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,mt.description,a.sendto,a.subject,a.message,a.status,a.retries,a.error' . ' FROM events e,alerts a' . ' LEFT JOIN media_type mt ON mt.mediatypeid=a.mediatypeid ' . ' WHERE e.eventid=a.eventid' . ' AND alerttype IN (' . ALERT_TYPE_MESSAGE . ')';
     // editable + PERMISSION CHECK
     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_READ_ONLY . ')';
     }
     $sql .= ' AND ' . DBin_node('a.alertid') . ' ' . ' ORDER BY ' . $sortfield . ' ' . $sortorder;
     $alerts = DBfetchArray(DBselect($sql, $this->screenitem['elements']));
     order_result($alerts, $sortfield, $sortorder);
     // 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 actions found.'));
     $actionTable->setHeader(array(is_show_all_nodes() ? _('Nodes') : null, $sortfield == 'clock' ? array($sortfieldSpan, $sortorderSpan) : _('Time'), $sortfield == 'description' ? array($sortfieldSpan, $sortorderSpan) : _('Type'), $sortfield == 'status' ? array($sortfieldSpan, $sortorderSpan) : _('Status'), $sortfield == 'retries' ? array($sortfieldSpan, $sortorderSpan) : _('Retries left'), $sortfield == 'sendto' ? array($sortfieldSpan, $sortorderSpan) : _('Recipient(s)'), _('Message'), _('Error')));
     foreach ($alerts as $alert) {
         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');
         }
         $message = array(bold(_('Subject') . ': '), br(), $alert['subject'], br(), br(), bold(_('Message') . ': '), br(), $alert['message']);
         $error = empty($alert['error']) ? new CSpan(SPACE, 'off') : new CSpan($alert['error'], 'on');
         $actionTable->addRow(array(get_node_name_by_elid($alert['alertid']), new CCol(zbx_date2str(HISTORY_OF_ACTIONS_DATE_FORMAT, $alert['clock']), 'top'), new CCol(!empty($alert['description']) ? $alert['description'] : '-', 'top'), new CCol($status, 'top'), new CCol($retries, 'top'), new CCol($alert['sendto'], 'top'), new CCol($message, 'top pre'), new CCol($error, 'wraptext top')));
     }
     return $this->getOutput($actionTable);
 }
Exemple #11
0
     }
     $db_slideshow['userGroups'] = DBfetchArray(DBselect('SELECT s.usrgrpid,s.permission' . ' FROM slideshow_usrgrp s' . ' WHERE s.slideshowid=' . zbx_dbstr(getRequest('slideshowid'))));
     foreach ($db_slideshow['userGroups'] as $user_group) {
         $user_groupids[$user_group['usrgrpid']] = true;
     }
 }
 $data['users'] = API::User()->get(['output' => ['userid', 'alias', 'name', 'surname'], 'userids' => array_keys($userids), 'preservekeys' => true]);
 $data['user_groups'] = API::UserGroup()->get(['output' => ['usrgrpid', 'name'], 'usrgrpids' => array_keys($user_groupids), 'preservekeys' => true]);
 if (array_key_exists('slideshowid', $db_slideshow) && !isset($_REQUEST['form_refresh'])) {
     $data['slideshow'] = ['slideshowid' => $db_slideshow['slideshowid'], 'name' => $db_slideshow['name'], 'delay' => $db_slideshow['delay'], 'userid' => $db_slideshow['userid'], 'private' => $db_slideshow['private'], 'users' => $db_slideshow['users'], 'userGroups' => $db_slideshow['userGroups']];
     // Get slides.
     $data['slideshow']['slides'] = DBfetchArray(DBselect('SELECT s.slideid, s.screenid, s.delay' . ' FROM slides s' . ' WHERE s.slideshowid=' . zbx_dbstr($db_slideshow['slideshowid']) . ' ORDER BY s.step'));
 } else {
     $data['slideshow'] = ['slideshowid' => getRequest('slideshowid'), 'name' => getRequest('name', ''), 'delay' => getRequest('delay', ZBX_ITEM_DELAY_DEFAULT), 'slides' => getRequest('slides', []), 'private' => getRequest('private', PRIVATE_SHARING), 'users' => getRequest('users', []), 'userGroups' => getRequest('userGroups', [])];
     if (hasRequest('form_refresh')) {
         if (CWebUser::getType() == USER_TYPE_SUPER_ADMIN || CWebUser::getType() == USER_TYPE_ZABBIX_ADMIN) {
             $data['slideshow']['userid'] = getRequest('userid', '');
         } else {
             $data['slideshow']['userid'] = getRequest('userid');
         }
     } else {
         if ($db_slideshow) {
             $data['slideshow']['userid'] = $db_slideshow['userid'];
         } else {
             $data['slideshow']['userid'] = $current_userid;
         }
     }
 }
 $screenids = [];
 foreach ($data['slideshow']['slides'] as $slides) {
     $screenids[] = $slides['screenid'];
Exemple #12
0
    $warningView = new CView('general.warning', array('message' => 'Configuration file error: ' . $e->getMessage()));
    $warningView->render();
    exit;
}
require_once dirname(__FILE__) . '/include/setup.inc.php';
// VAR	TYPE	OPTIONAL	FLAGS	VALIDATION	EXCEPTION
$fields = array('type' => array(T_ZBX_STR, O_OPT, null, IN('"' . ZBX_DB_MYSQL . '","' . ZBX_DB_POSTGRESQL . '","' . ZBX_DB_ORACLE . '","' . ZBX_DB_DB2 . '","' . ZBX_DB_SQLITE3 . '"'), null), 'server' => array(T_ZBX_STR, O_OPT, null, NOT_EMPTY, null, _('Database host')), 'port' => array(T_ZBX_INT, O_OPT, null, BETWEEN(0, 65535), null, _('Database port')), 'database' => array(T_ZBX_STR, O_OPT, null, NOT_EMPTY, null, _('Database name')), 'user' => array(T_ZBX_STR, O_OPT, null, null, null), 'password' => array(T_ZBX_STR, O_OPT, null, null, null), 'schema' => array(T_ZBX_STR, O_OPT, null, null, null), 'zbx_server' => array(T_ZBX_STR, O_OPT, null, null, null), 'zbx_server_name' => array(T_ZBX_STR, O_OPT, null, null, null), 'zbx_server_port' => array(T_ZBX_INT, O_OPT, null, BETWEEN(0, 65535), null, _('Port')), 'message' => array(T_ZBX_STR, O_OPT, null, null, null), 'save_config' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'retry' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'cancel' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'finish' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'next' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'back' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'form' => array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'form_refresh' => array(T_ZBX_INT, O_OPT, null, null, null));
// config
$ZBX_CONFIG = get_cookie('ZBX_CONFIG', null);
$ZBX_CONFIG = isset($ZBX_CONFIG) ? unserialize($ZBX_CONFIG) : array();
$ZBX_CONFIG['check_fields_result'] = check_fields($fields, false);
if (!isset($ZBX_CONFIG['step'])) {
    $ZBX_CONFIG['step'] = 0;
}
// if a guest or a non-super admin user is logged in
if (CWebUser::$data && CWebUser::getType() < USER_TYPE_SUPER_ADMIN) {
    // on the last step of the setup we always have a guest user logged in;
    // when he presses the "Finish" button he must be redirected to the login screen
    if (CWebUser::isGuest() && $ZBX_CONFIG['step'] == 5 && hasRequest('finish')) {
        zbx_unsetcookie('ZBX_CONFIG');
        redirect('index.php');
    } elseif (!(CWebUser::isGuest() && $ZBX_CONFIG['step'] == 5)) {
        access_deny(ACCESS_DENY_PAGE);
    }
} elseif (hasRequest('cancel') || hasRequest('finish')) {
    zbx_unsetcookie('ZBX_CONFIG');
    redirect('index.php');
}
/*
 * Setup wizard
 */
 /**
  * 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')));
 }
Exemple #14
0
 function bodyToString($destroy = true)
 {
     $left = new CDiv(null, 'left');
     $left->addItem(new CDiv($this->getList(), 'left_menu'));
     $link1 = new CLink('www.zabbix.com', 'http://www.zabbix.com/', null, null, true);
     $link1->setAttribute('target', '_blank');
     $link2 = new CLink('GPL v2', 'http://www.zabbix.com/license.php', null, null, true);
     $link2->setAttribute('target', '_blank');
     $licence = new CDiv(array($link1, BR(), ' Licensed under ', $link2), 'setup_wizard_licence');
     $left->addItem($licence);
     $right = new CDiv(null, 'right');
     if ($this->getStep() == 0) {
         $right->addItem(new CDiv(null, 'blank_title'));
         $right->addItem(new CDiv($this->getState(), 'blank_under_title'));
         $container = new CDiv(array($left, $right), 'setup_wizard setup_wizard_welcome');
     } else {
         $right->addItem(new CDiv($this->stage[$this->getStep()]['title'], 'setup_title'));
         $right->addItem(new CDiv($this->getState(), 'under_title'));
         $container = new CDiv(array($left, $right), 'setup_wizard');
     }
     if (isset($this->stage[$this->getStep() + 1])) {
         $next = new CSubmit('next[' . $this->getStep() . ']', _('Next') . SPACE . '&raquo;');
     } else {
         $next = new CSubmit('finish', _('Finish'));
     }
     if (isset($this->HIDE_CANCEL_BUTTON) && $this->HIDE_CANCEL_BUTTON) {
         $cancel = null;
     } else {
         $cancel = new CDiv(new CSubmit('cancel', _('Cancel')), 'footer_left');
     }
     if ($this->DISABLE_NEXT_BUTTON) {
         $next->setEnabled(false);
     }
     // if the user is not logged in (first setup run) hide the "previous" button on the final step
     if ($this->getStep() && (CWebUser::$data && CWebUser::getType() == USER_TYPE_SUPER_ADMIN || $this->getStep() < 5)) {
         $back = new CSubmit('back[' . $this->getStep() . ']', '&laquo;' . SPACE . _('Previous'));
     } else {
         $back = null;
     }
     $footer = new CDiv(array($cancel, new CDiv(array($back, $next), 'footer_right')), 'footer');
     $container->addItem($footer);
     return parent::bodyToString($destroy) . $container->ToString();
 }
 /**
  * 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);
 }
Exemple #16
0
    case 'month':
        $time_dif = SEC_PER_MONTH;
        break;
    case 'year':
        $time_dif = SEC_PER_YEAR;
        break;
    case 'day':
    default:
        $time_dif = SEC_PER_DAY;
        break;
}
$triggersEventCount = array();
// get 100 triggerids with max event count
$sql = 'SELECT e.objectid,count(distinct e.eventid) AS cnt_event' . ' FROM triggers t,events e' . ' WHERE t.triggerid=e.objectid' . ' AND e.source=' . EVENT_SOURCE_TRIGGERS . ' AND e.object=' . EVENT_OBJECT_TRIGGER . ' AND e.clock>' . (time() - $time_dif);
// add permission filter
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 t.triggerid=f.triggerid' . ' AND f.itemid=i.itemid' . ' AND i.hostid=hgg.hostid' . ' GROUP BY f.triggerid' . ' HAVING MIN(r.permission)>' . PERM_DENY . ')';
}
$sql .= ' AND ' . dbConditionInt('t.flags', array(ZBX_FLAG_DISCOVERY_NORMAL, ZBX_FLAG_DISCOVERY_CREATED)) . ' GROUP BY e.objectid' . ' ORDER BY cnt_event desc';
$result = DBselect($sql, 100);
while ($row = DBfetch($result)) {
    $triggersEventCount[$row['objectid']] = $row['cnt_event'];
}
$triggers = API::Trigger()->get(array('triggerids' => array_keys($triggersEventCount), 'output' => array('triggerid', 'description', 'expression', 'priority', 'flags', 'url', 'lastchange'), 'selectHosts' => array('hostid', 'status', 'name'), 'selectItems' => array('itemid', 'hostid', 'name', 'key_', 'value_type'), 'expandDescription' => true, 'preservekeys' => true, 'nopermissions' => true));
$hostIds = array();
foreach ($triggers as $triggerId => $trigger) {
    $hostIds[$trigger['hosts'][0]['hostid']] = $trigger['hosts'][0]['hostid'];
    $triggers[$triggerId]['cnt_event'] = $triggersEventCount[$triggerId];
}
Exemple #17
0
 /**
  * Return user type.
  *
  * @return var
  */
 public function getUserType()
 {
     return CWebUser::getType();
 }