/** * Get particular screen object. * * @static * * @param array $options * @param int $options['resourcetype'] * @param int $options['screenitemid'] * @param int $options['hostid'] * * @return CScreenBase */ public static function getScreen(array $options = array()) { // get resourcetype from screenitem if (empty($options['screenitem']) && !empty($options['screenitemid'])) { if (!empty($options['hostid'])) { $options['screenitem'] = API::TemplateScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'hostids' => $options['hostid'], 'output' => API_OUTPUT_EXTEND)); } else { $options['screenitem'] = API::ScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'output' => API_OUTPUT_EXTEND)); } $options['screenitem'] = reset($options['screenitem']); } if (zbx_empty($options['resourcetype']) && !zbx_empty($options['screenitem']['resourcetype'])) { $options['resourcetype'] = $options['screenitem']['resourcetype']; } if (zbx_empty($options['resourcetype'])) { return null; } // get screen switch ($options['resourcetype']) { case SCREEN_RESOURCE_GRAPH: return new CScreenGraph($options); case SCREEN_RESOURCE_SIMPLE_GRAPH: return new CScreenSimpleGraph($options); case SCREEN_RESOURCE_MAP: return new CScreenMap($options); case SCREEN_RESOURCE_PLAIN_TEXT: return new CScreenPlainText($options); case SCREEN_RESOURCE_HOSTS_INFO: return new CScreenHostsInfo($options); case SCREEN_RESOURCE_TRIGGERS_INFO: return new CScreenTriggersInfo($options); case SCREEN_RESOURCE_SERVER_INFO: return new CScreenServerInfo($options); case SCREEN_RESOURCE_CLOCK: return new CScreenClock($options); case SCREEN_RESOURCE_SCREEN: return new CScreenScreen($options); case SCREEN_RESOURCE_TRIGGERS_OVERVIEW: return new CScreenTriggersOverview($options); case SCREEN_RESOURCE_DATA_OVERVIEW: return new CScreenDataOverview($options); case SCREEN_RESOURCE_URL: return new CScreenUrl($options); case SCREEN_RESOURCE_ACTIONS: return new CScreenActions($options); case SCREEN_RESOURCE_EVENTS: return new CScreenEvents($options); case SCREEN_RESOURCE_HOSTGROUP_TRIGGERS: return new CScreenHostgroupTriggers($options); case SCREEN_RESOURCE_SYSTEM_STATUS: return new CScreenSystemStatus($options); case SCREEN_RESOURCE_HOST_TRIGGERS: return new CScreenHostTriggers($options); case SCREEN_RESOURCE_HISTORY: return new CScreenHistory($options); case SCREEN_RESOURCE_CHART: return new CScreenChart($options); default: return null; } }
$result = API::ScreenItem()->update($screenItem); show_messages($result, _('Item updated'), _('Cannot update item')); } else { $screenItem['x'] = get_request('x'); $screenItem['y'] = get_request('y'); $result = API::ScreenItem()->create($screenItem); show_messages($result, _('Item added'), _('Cannot add item')); } DBend($result); if ($result) { add_audit_details(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Cell changed ' . (isset($_REQUEST['screenitemid']) ? 'screen itemid "' . $_REQUEST['screenitemid'] . '"' : '') . (isset($_REQUEST['x']) && isset($_REQUEST['y']) ? ' coordinates "' . $_REQUEST['x'] . ',' . $_REQUEST['y'] . '"' : '') . (isset($_REQUEST['resourcetype']) ? ' resource type "' . $_REQUEST['resourcetype'] . '"' : '')); unset($_REQUEST['form']); } } elseif (isset($_REQUEST['delete'])) { DBstart(); $screenitemid = API::ScreenItem()->delete($_REQUEST['screenitemid']); $result = DBend($screenitemid); show_messages($result, _('Item deleted'), _('Cannot delete item')); if ($result && !empty($screenitemid)) { $screenitemid = reset($screenitemid); $screenitemid = reset($screenitemid); add_audit_details(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Screen itemid "' . $screenitemid . '"'); } unset($_REQUEST['x']); } elseif (isset($_REQUEST['add_row'])) { DBexecute('UPDATE screens SET vsize=(vsize+1) WHERE screenid=' . zbx_dbstr($screen['screenid'])); $add_row = get_request('add_row', 0); if ($screen['vsize'] > $add_row) { DBexecute('UPDATE screens_items SET y=(y+1) WHERE screenid=' . zbx_dbstr($screen['screenid']) . ' AND y>=' . zbx_dbstr($add_row)); } add_audit_details(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Row added');
/** * Update screen items using the given 'x' and 'y' parameters. * If the given cell is free, a new screen item will be created. * * @param array $screenItems An array of screen items with the given X and Y coordinates * * @return array */ public function updateByPosition(array $screenItems) { $screenItemDBfields = array('screenid' => null, 'x' => null, 'y' => null); foreach ($screenItems as $screenItem) { if (!check_db_fields($screenItemDBfields, $screenItem)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Invalid method parameters.')); } } $dbScreenItems = $this->get(array('screenids' => zbx_objectValues($screenItems, 'screenid'), 'output' => array('screenitemid', 'screenid', 'x', 'y'), 'editable' => true, 'preservekeys' => true)); $create = $update = $affectedIds = array(); foreach ($screenItems as $screenItem) { foreach ($dbScreenItems as $dbScreenItem) { if ($screenItem['screenid'] == $dbScreenItem['screenid'] && $screenItem['x'] == $dbScreenItem['x'] && $screenItem['y'] == $dbScreenItem['y']) { $screenItem['screenitemid'] = $dbScreenItem['screenitemid']; $update[$dbScreenItem['screenitemid']] = $screenItem; continue 2; } } $create[] = $screenItem; } if ($update) { $screenItems = API::ScreenItem()->update($update); $affectedIds = $screenItems['screenitemids']; } if ($create) { $screenItems = API::ScreenItem()->create($create); $affectedIds = array_merge($affectedIds, $screenItems['screenitemids']); } return array('screenitemids' => $affectedIds); }
$screenItem['screenitemid'] = getRequest('screenitemid'); $result = API::ScreenItem()->update($screenItem); } else { $screenItem['x'] = getRequest('x'); $screenItem['y'] = getRequest('y'); $result = API::ScreenItem()->create($screenItem); } if ($result) { add_audit_details(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Cell changed ' . (hasRequest('screenitemid') ? 'screen itemid "' . getRequest('screenitemid') . '"' : '') . (hasRequest('x') && hasRequest('y') ? ' coordinates "' . getRequest('x') . ',' . getRequest('y') . '"' : '') . (hasRequest('resourcetype') ? ' resource type "' . getRequest('resourcetype') . '"' : '')); unset($_REQUEST['form']); } $result = DBend($result); show_messages($result, _('Screen updated'), _('Cannot update screen')); } elseif (hasRequest('delete')) { DBstart(); $screenitemid = API::ScreenItem()->delete(array(getRequest('screenitemid'))); if ($screenitemid) { $screenitemid = reset($screenitemid); $screenitemid = reset($screenitemid); add_audit_details(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Screen itemid "' . $screenitemid . '"'); } unset($_REQUEST['x']); $result = DBend($screenitemid); show_messages($result, _('Screen updated'), _('Cannot update screen')); } elseif (isset($_REQUEST['add_row'])) { DBstart(); $result = DBexecute('UPDATE screens SET vsize=(vsize+1) WHERE screenid=' . zbx_dbstr($screen['screenid'])); $add_row = getRequest('add_row', 0); if ($screen['vsize'] > $add_row) { $result &= DBexecute('UPDATE screens_items' . ' SET y=(y+1)' . ' WHERE screenid=' . zbx_dbstr($screen['screenid']) . ' AND y>=' . zbx_dbstr($add_row)); }
/** * Create Screen * * @param array $screens * @param string $screens['name'] * @param array $screens['hsize'] * @param int $screens['vsize'] * @return array */ public function create(array $screens) { $screens = zbx_toArray($screens); $this->validateCreate($screens); $insertScreenItems = array(); $screenids = DB::insert('screens', $screens); foreach ($screens as $snum => $screen) { if (isset($screen['screenitems'])) { foreach ($screen['screenitems'] as $screenitem) { $screenitem['screenid'] = $screenids[$snum]; $insertScreenItems[] = $screenitem; } } } API::ScreenItem()->create($insertScreenItems); return array('screenids' => $screenids); }
/** * Get particular screen object. * * @static * * @param array $options * @param int $options['resourcetype'] * @param int $options['screenitemid'] * @param int $options['hostid'] * @param array $options['screen'] * @param int $options['screenid'] * * @return CScreenBase */ public static function getScreen(array $options = []) { if (!array_key_exists('resourcetype', $options)) { $options['resourcetype'] = null; // get resourcetype from screenitem if (!array_key_exists('screenitem', $options) && array_key_exists('screenitemid', $options)) { if (array_key_exists('hostid', $options) && $options['hostid'] > 0) { $options['screenitem'] = API::TemplateScreenItem()->get(['screenitemids' => $options['screenitemid'], 'hostids' => $options['hostid'], 'output' => API_OUTPUT_EXTEND]); } else { $options['screenitem'] = API::ScreenItem()->get(['screenitemids' => $options['screenitemid'], 'output' => API_OUTPUT_EXTEND]); } $options['screenitem'] = reset($options['screenitem']); } if (array_key_exists('screenitem', $options) && array_key_exists('resourcetype', $options['screenitem'])) { $options['resourcetype'] = $options['screenitem']['resourcetype']; } } if ($options['resourcetype'] === null) { return null; } // get screen switch ($options['resourcetype']) { case SCREEN_RESOURCE_GRAPH: return new CScreenGraph($options); case SCREEN_RESOURCE_SIMPLE_GRAPH: return new CScreenSimpleGraph($options); case SCREEN_RESOURCE_MAP: return new CScreenMap($options); case SCREEN_RESOURCE_PLAIN_TEXT: return new CScreenPlainText($options); case SCREEN_RESOURCE_HOSTS_INFO: return new CScreenHostsInfo($options); case SCREEN_RESOURCE_TRIGGERS_INFO: return new CScreenTriggersInfo($options); case SCREEN_RESOURCE_SERVER_INFO: return new CScreenServerInfo($options); case SCREEN_RESOURCE_CLOCK: return new CScreenClock($options); case SCREEN_RESOURCE_SCREEN: return new CScreenScreen($options); case SCREEN_RESOURCE_TRIGGERS_OVERVIEW: return new CScreenTriggersOverview($options); case SCREEN_RESOURCE_DATA_OVERVIEW: return new CScreenDataOverview($options); case SCREEN_RESOURCE_URL: $options = self::appendTemplatedScreenOption($options); return new CScreenUrl($options); case SCREEN_RESOURCE_ACTIONS: return new CScreenActions($options); case SCREEN_RESOURCE_EVENTS: return new CScreenEvents($options); case SCREEN_RESOURCE_HOSTGROUP_TRIGGERS: return new CScreenHostgroupTriggers($options); case SCREEN_RESOURCE_SYSTEM_STATUS: return new CScreenSystemStatus($options); case SCREEN_RESOURCE_HOST_TRIGGERS: return new CScreenHostTriggers($options); case SCREEN_RESOURCE_HISTORY: return new CScreenHistory($options); case SCREEN_RESOURCE_CHART: return new CScreenChart($options); case SCREEN_RESOURCE_LLD_GRAPH: $options = self::appendTemplatedScreenOption($options); return new CScreenLldGraph($options); case SCREEN_RESOURCE_LLD_SIMPLE_GRAPH: $options = self::appendTemplatedScreenOption($options); return new CScreenLldSimpleGraph($options); case SCREEN_RESOURCE_HTTPTEST_DETAILS: return new CScreenHttpTestDetails($options); case SCREEN_RESOURCE_DISCOVERY: return new CScreenDiscovery($options); case SCREEN_RESOURCE_HTTPTEST: return new CScreenHttpTest($options); default: return null; } }
/** * Init screen data. * * @param array $options * @param boolean $options['isFlickerfree'] * @param string $options['pageFile'] * @param int $options['mode'] * @param int $options['timestamp'] * @param int $options['resourcetype'] * @param int $options['screenid'] * @param array $options['screenitem'] * @param string $options['action'] * @param int $options['groupid'] * @param int $options['hostid'] * @param int $options['period'] * @param int $options['stime'] * @param string $options['profileIdx'] * @param int $options['profileIdx2'] * @param boolean $options['updateProfile'] * @param array $options['timeline'] * @param string $options['dataId'] */ public function __construct(array $options = array()) { $this->isFlickerfree = isset($options['isFlickerfree']) ? $options['isFlickerfree'] : true; $this->mode = isset($options['mode']) ? $options['mode'] : SCREEN_MODE_SLIDESHOW; $this->timestamp = !empty($options['timestamp']) ? $options['timestamp'] : time(); $this->resourcetype = isset($options['resourcetype']) ? $options['resourcetype'] : null; $this->screenid = !empty($options['screenid']) ? $options['screenid'] : null; $this->action = !empty($options['action']) ? $options['action'] : null; $this->groupid = !empty($options['groupid']) ? $options['groupid'] : null; $this->hostid = !empty($options['hostid']) ? $options['hostid'] : null; $this->dataId = !empty($options['dataId']) ? $options['dataId'] : null; // get page file if (!empty($options['pageFile'])) { $this->pageFile = $options['pageFile']; } else { global $page; $this->pageFile = $page['file']; } // calculate timeline $this->profileIdx = !empty($options['profileIdx']) ? $options['profileIdx'] : ''; $this->profileIdx2 = !empty($options['profileIdx2']) ? $options['profileIdx2'] : null; $this->updateProfile = isset($options['updateProfile']) ? $options['updateProfile'] : true; $this->timeline = !empty($options['timeline']) ? $options['timeline'] : null; if (empty($this->timeline)) { $this->timeline = $this->calculateTime(array('profileIdx' => $this->profileIdx, 'profileIdx2' => $this->profileIdx2, 'updateProfile' => $this->updateProfile, 'period' => !empty($options['period']) ? $options['period'] : null, 'stime' => !empty($options['stime']) ? $options['stime'] : null)); } // get screenitem if (!empty($options['screenitem'])) { $this->screenitem = $options['screenitem']; } elseif (!empty($options['screenitemid'])) { if (!empty($this->hostid)) { $this->screenitem = API::TemplateScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'hostids' => $this->hostid, 'output' => API_OUTPUT_EXTEND)); } else { $this->screenitem = API::ScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'output' => API_OUTPUT_EXTEND)); } $this->screenitem = reset($this->screenitem); } // get screenid if (empty($this->screenid) && !empty($this->screenitem)) { $this->screenid = $this->screenitem['screenid']; } // get resourcetype if (is_null($this->resourcetype) && !empty($this->screenitem['resourcetype'])) { $this->resourcetype = $this->screenitem['resourcetype']; } // create action url if (empty($this->action)) { $this->action = 'screenedit.php?form=update&screenid=' . $this->screenid . '&screenitemid=' . $this->screenitem['screenitemid']; } }
$screenItem['screenitemid'] = getRequest('screenitemid'); $result = API::ScreenItem()->update($screenItem); } else { $screenItem['x'] = getRequest('x'); $screenItem['y'] = getRequest('y'); $result = API::ScreenItem()->create($screenItem); } if ($result) { add_audit_details(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Cell changed ' . (hasRequest('screenitemid') ? 'screen itemid "' . getRequest('screenitemid') . '"' : '') . (hasRequest('x') && hasRequest('y') ? ' coordinates "' . getRequest('x') . ',' . getRequest('y') . '"' : '') . (hasRequest('resourcetype') ? ' resource type "' . getRequest('resourcetype') . '"' : '')); unset($_REQUEST['form']); } $result = DBend($result); show_messages($result, _('Screen updated'), _('Cannot update screen')); } elseif (hasRequest('delete')) { DBstart(); $screenitemid = API::ScreenItem()->delete([getRequest('screenitemid')]); if ($screenitemid) { $screenitemid = reset($screenitemid); $screenitemid = reset($screenitemid); add_audit_details(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_SCREEN, $screen['screenid'], $screen['name'], 'Screen itemid "' . $screenitemid . '"'); } unset($_REQUEST['x']); $result = DBend($screenitemid); show_messages($result, _('Screen updated'), _('Cannot update screen')); } elseif (hasRequest('add_row')) { addScreenRow($screen, getRequest('add_row')); } elseif (hasRequest('add_col')) { addScreenColumn($screen, getRequest('add_col')); } elseif (hasRequest('rmv_row')) { delScreenRow($screen, getRequest('rmv_row')); } elseif (hasRequest('rmv_col')) {
/** * Replaces all of the screen items of the given screen. * * @param int $screenId The ID of the target screen * @param array $screenItems An array of screen items */ protected function replaceItems($screenId, $screenItems) { foreach ($screenItems as &$screenItem) { $screenItem['screenid'] = $screenId; } unset($screenItem); $createScreenItems = $deleteScreenItems = $updateScreenItems = array(); $deleteScreenItemsIds = array(); $dbScreenItems = API::ScreenItem()->get(array('screenids' => $screenId, 'preservekeys' => true)); foreach ($screenItems as $screenItem) { if (isset($screenItem['screenitemid']) && isset($dbScreenItems[$screenItem['screenitemid']])) { $updateScreenItems[$screenItem['screenitemid']] = $screenItem; } else { $createScreenItems[] = $screenItem; } } foreach ($dbScreenItems as $dbScreenItem) { if (!isset($updateScreenItems[$dbScreenItem['screenitemid']])) { $deleteScreenItemsIds[$dbScreenItem['screenitemid']] = $dbScreenItem['screenitemid']; } } if ($deleteScreenItemsIds) { API::ScreenItem()->delete($deleteScreenItemsIds); } if ($updateScreenItems) { API::ScreenItem()->update($updateScreenItems); } if ($createScreenItems) { API::ScreenItem()->create($createScreenItems); } }
/** * Replaces all of the screen items of the given screen with the new ones. * * @param int $screenid The ID of the target screen * @param array $screenItems An array of screen items */ protected function replaceItems($screenid, $screenItems) { $dbScreenItems = API::ScreenItem()->get(array('screenids' => $screenid, 'preservekeys' => true)); foreach ($screenItems as &$screenItem) { $screenItem['screenid'] = $screenid; } $result = API::ScreenItem()->updateByPosition($screenItems); // deleted the old items $deleteItemids = array_diff(array_keys($dbScreenItems), $result['screenitemids']); API::ScreenItem()->delete($deleteItemids); }
/** * Get particular screen object. * * @static * * @param array $options * @param int $options['resourcetype'] * @param int $options['screenitemid'] * @param int $options['hostid'] * @param array $options['screen'] * @param int $options['screenid'] * * @return CScreenBase */ public static function getScreen(array $options = array()) { // get resourcetype from screenitem if (empty($options['screenitem']) && !empty($options['screenitemid'])) { if (!empty($options['hostid'])) { $options['screenitem'] = API::TemplateScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'hostids' => $options['hostid'], 'output' => API_OUTPUT_EXTEND)); } else { $options['screenitem'] = API::ScreenItem()->get(array('screenitemids' => $options['screenitemid'], 'output' => API_OUTPUT_EXTEND)); } $options['screenitem'] = reset($options['screenitem']); } if (zbx_empty($options['resourcetype']) && !zbx_empty($options['screenitem']['resourcetype'])) { $options['resourcetype'] = $options['screenitem']['resourcetype']; } if (zbx_empty($options['resourcetype'])) { return null; } // get screen switch ($options['resourcetype']) { case SCREEN_RESOURCE_GRAPH: return new CScreenGraph($options); case SCREEN_RESOURCE_SIMPLE_GRAPH: return new CScreenSimpleGraph($options); case SCREEN_RESOURCE_MAP: return new CScreenMap($options); case SCREEN_RESOURCE_PLAIN_TEXT: return new CScreenPlainText($options); case SCREEN_RESOURCE_HOSTS_INFO: return new CScreenHostsInfo($options); case SCREEN_RESOURCE_TRIGGERS_INFO: return new CScreenTriggersInfo($options); case SCREEN_RESOURCE_SERVER_INFO: return new CScreenServerInfo($options); case SCREEN_RESOURCE_CLOCK: return new CScreenClock($options); case SCREEN_RESOURCE_SCREEN: return new CScreenScreen($options); case SCREEN_RESOURCE_TRIGGERS_OVERVIEW: return new CScreenTriggersOverview($options); case SCREEN_RESOURCE_DATA_OVERVIEW: return new CScreenDataOverview($options); case SCREEN_RESOURCE_URL: $options = self::appendTemplatedScreenOption($options); return new CScreenUrl($options); case SCREEN_RESOURCE_ACTIONS: return new CScreenActions($options); case SCREEN_RESOURCE_EVENTS: return new CScreenEvents($options); case SCREEN_RESOURCE_HOSTGROUP_TRIGGERS: return new CScreenHostgroupTriggers($options); case SCREEN_RESOURCE_SYSTEM_STATUS: return new CScreenSystemStatus($options); case SCREEN_RESOURCE_HOST_TRIGGERS: return new CScreenHostTriggers($options); case SCREEN_RESOURCE_HISTORY: // TODO: pass the items from the outside instead of retrieving them by ids if (isset($options['itemids'])) { $items = API::Item()->get(array('itemids' => $options['itemids'], 'webitems' => true, 'selectHosts' => array('name'), 'output' => array('itemid', 'hostid', 'name', 'key_', 'value_type', 'valuemapid'), 'preservekeys' => true)); $items = CMacrosResolverHelper::resolveItemNames($items); $options['items'] = $items; unset($options['itemids']); } return new CScreenHistory($options); case SCREEN_RESOURCE_CHART: return new CScreenChart($options); case SCREEN_RESOURCE_LLD_GRAPH: $options = self::appendTemplatedScreenOption($options); return new CScreenLldGraph($options); case SCREEN_RESOURCE_LLD_SIMPLE_GRAPH: $options = self::appendTemplatedScreenOption($options); return new CScreenLldSimpleGraph($options); default: return null; } }
/** * Init screen data. * * @param array $options * @param boolean $options['isFlickerfree'] * @param string $options['pageFile'] * @param int $options['mode'] * @param int $options['timestamp'] * @param int $options['resourcetype'] * @param bool $options['isTemplatedScreen'] * @param int $options['screenid'] * @param array $options['screenitem'] * @param string $options['action'] * @param int $options['groupid'] * @param int $options['hostid'] * @param int $options['period'] * @param int $options['stime'] * @param string $options['profileIdx'] * @param int $options['profileIdx2'] * @param boolean $options['updateProfile'] * @param array $options['timeline'] * @param string $options['dataId'] */ public function __construct(array $options = []) { $this->parameters = ['isFlickerfree' => true, 'mode' => SCREEN_MODE_SLIDESHOW, 'timestamp' => time(), 'resourcetype' => null, 'isTemplatedScreen' => false, 'screenid' => null, 'action' => null, 'groupid' => null, 'hostid' => 0, 'pageFile' => null, 'profileIdx' => '', 'profileIdx2' => null, 'updateProfile' => true, 'timeline' => null, 'dataId' => null, 'page' => 1]; $this->resourcetype = array_key_exists('resourcetype', $options) ? $options['resourcetype'] : null; $this->required_parameters = ['isFlickerfree' => true, 'mode' => true, 'timestamp' => true, 'resourcetype' => true, 'dataId' => true]; switch ($this->resourcetype) { case SCREEN_RESOURCE_HTTPTEST_DETAILS: $this->required_parameters += ['isTemplatedScreen' => false, 'screenid' => false, 'action' => false, 'groupid' => false, 'hostid' => false, 'pageFile' => false, 'profileIdx' => false, 'profileIdx2' => true, 'updateProfile' => false, 'timeline' => false, 'page' => false]; break; case SCREEN_RESOURCE_DISCOVERY: $this->required_parameters += ['isTemplatedScreen' => false, 'screenid' => false, 'action' => false, 'groupid' => false, 'hostid' => false, 'pageFile' => false, 'profileIdx' => false, 'profileIdx2' => false, 'updateProfile' => false, 'timeline' => false, 'page' => false]; break; case SCREEN_RESOURCE_HTTPTEST: $this->required_parameters += ['isTemplatedScreen' => false, 'screenid' => false, 'action' => false, 'groupid' => true, 'hostid' => true, 'pageFile' => false, 'profileIdx' => false, 'profileIdx2' => false, 'updateProfile' => false, 'timeline' => false, 'page' => true]; break; default: $this->required_parameters += ['isTemplatedScreen' => true, 'screenid' => true, 'action' => true, 'groupid' => true, 'hostid' => true, 'pageFile' => true, 'profileIdx' => true, 'profileIdx2' => true, 'updateProfile' => true, 'timeline' => true, 'page' => false]; } // Get screenitem if its required or resource type is null. $this->screenitem = []; if (array_key_exists('screenitem', $options) && is_array($options['screenitem'])) { $this->screenitem = $options['screenitem']; } elseif (array_key_exists('screenitemid', $options) && $options['screenitemid'] > 0) { $screenitem_output = ['screenitemid', 'screenid', 'resourcetype', 'resourceid', 'width', 'height', 'elements', 'halign', 'valign', 'style', 'url', 'dynamic', 'sort_triggers', 'application', 'max_columns']; if ($this->hostid != 0) { $this->screenitem = API::TemplateScreenItem()->get(['output' => $screenitem_output, 'screenitemids' => $options['screenitemid'], 'hostids' => $this->hostid]); } else { $this->screenitem = API::ScreenItem()->get(['output' => $screenitem_output, 'screenitemids' => $options['screenitemid']]); } if ($this->screenitem) { $this->screenitem = reset($this->screenitem); } } // Get resourcetype. if ($this->resourcetype === null && array_key_exists('resourcetype', $this->screenitem)) { $this->resourcetype = $this->screenitem['resourcetype']; } foreach ($this->parameters as $pname => $default_value) { if ($this->required_parameters[$pname]) { $this->{$pname} = array_key_exists($pname, $options) ? $options[$pname] : $default_value; } } // Get page file. if ($this->required_parameters['pageFile'] && $this->pageFile === null) { global $page; $this->pageFile = $page['file']; } // Calculate timeline. if ($this->required_parameters['timeline'] && $this->timeline === null) { $this->timeline = $this->calculateTime(['profileIdx' => $this->profileIdx, 'profileIdx2' => $this->profileIdx2, 'updateProfile' => $this->updateProfile, 'period' => array_key_exists('period', $options) ? $options['period'] : null, 'stime' => array_key_exists('stime', $options) ? $options['stime'] : null]); } // Get screenid. if ($this->required_parameters['screenid'] && $this->screenid === null && $this->screenitem) { $this->screenid = $this->screenitem['screenid']; } // Create action URL. if ($this->required_parameters['action'] && $this->action === null && $this->screenitem) { $this->action = 'screenedit.php?form=update&screenid=' . $this->screenid . '&screenitemid=' . $this->screenitem['screenitemid']; } }