/** * Check graph data * * @param array $graphs * @param boolean $update * * @return void */ protected function checkInput($graphs, $update = false) { $itemids = array(); foreach ($graphs as $graph) { // no items if (!isset($graph['gitems']) || !is_array($graph['gitems']) || empty($graph['gitems'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Missing items for graph "%1$s".', $graph['name'])); } $fields = array('itemid' => null); foreach ($graph['gitems'] as $gitem) { if (!check_db_fields($fields, $gitem)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Missing "itemid" field for item.')); } // assigning with key preserves unique itemids $itemids[$gitem['itemid']] = $gitem['itemid']; } } $allowedItems = API::Item()->get(array('nodeids' => get_current_nodeid(true), 'itemids' => $itemids, 'webitems' => true, 'editable' => true, 'output' => array('flags'), 'selectItemDiscovery' => array('parent_itemid'), 'preservekeys' => true, 'filter' => array('flags' => array(ZBX_FLAG_DISCOVERY_NORMAL, ZBX_FLAG_DISCOVERY_CHILD, ZBX_FLAG_DISCOVERY_CREATED)))); foreach ($itemids as $itemid) { if (!isset($allowedItems[$itemid])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('No permissions to referred object or it does not exist!')); } } parent::checkInput($graphs, $update); $this->checkDiscoveryRuleCount($graphs, $allowedItems); }
/** * Check graph data * * @param array $graphs * @param boolean $update * * @return void */ protected function checkInput($graphs, $update = false) { $itemids = array(); foreach ($graphs as $graph) { // no items if (!isset($graph['gitems']) || !is_array($graph['gitems']) || empty($graph['gitems'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Missing items for graph "%1$s".', $graph['name'])); } $fields = array('itemid' => null); foreach ($graph['gitems'] as $gitem) { if (!check_db_fields($fields, $gitem)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Missing "itemid" field for item.')); } // assigning with key preserves unique itemids $itemids[$gitem['itemid']] = $gitem['itemid']; } } // check permissions only for non super admins if (CUser::$userData['type'] != USER_TYPE_SUPER_ADMIN) { $allowedItems = API::Item()->get(array('nodeids' => get_current_nodeid(true), 'itemids' => $itemids, 'webitems' => true, 'editable' => true, 'output' => API_OUTPUT_EXTEND, 'preservekeys' => true)); foreach ($itemids as $itemid) { if (!isset($allowedItems[$itemid])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('No permissions to referred object or it does not exist!')); } } } parent::checkInput($graphs, $update); }