/**
  * 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;
     }
 }
示例#2
0
        $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');
示例#3
0
 /**
  * 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);
 }
示例#4
0
        $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);
 }
示例#6
0
 /**
  * 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;
     }
 }
示例#7
0
 /**
  * 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'];
     }
 }
示例#8
0
        $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')) {
示例#9
0
 /**
  * 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);
     }
 }
示例#10
0
 /**
  * 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);
 }
示例#11
0
 /**
  * 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;
     }
 }
示例#12
0
 /**
  * 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'];
     }
 }