public static function parseScreen($rules) { try { self::validate(dirname(__FILE__) . '/xmlschemas/screens.rng'); $importScreens = self::XMLtoArray(self::$xml); $importScreens = $importScreens['zabbix_export']['screens']; $result = true; $screens = array(); foreach ($importScreens as $mnum => &$screen) { unset($screen['screenid']); $exists = CScreen::exists(array('name' => $screen['name'])); if ($exists && isset($rules['screens']['exist'])) { $db_screens = CScreen::getObjects(array('name' => $screen['name'])); if (empty($db_screens)) { throw new Exception(S_NO_PERMISSIONS_FOR_SCREEN . ' "' . $screen['name'] . '" import'); } $db_screen = reset($db_screens); $screen['screenid'] = $db_screen['screenid']; } else { if ($exists || !isset($rules['screens']['missed'])) { info('Screen [' . $screen['name'] . '] skipped - user rule'); unset($importScreens[$mnum]); continue; // break if not update exist } } if (!isset($screen['screenitems'])) { $screen['screenitems'] = array(); } foreach ($screen['screenitems'] as $snum => &$screenitem) { $nodeCaption = isset($screenitem['resourceid']['node']) ? $screenitem['resourceid']['node'] . ':' : ''; if (!isset($screenitem['resourceid'])) { $screenitem['resourceid'] = 0; } if (is_array($screenitem['resourceid'])) { switch ($screenitem['resourcetype']) { case SCREEN_RESOURCE_HOSTS_INFO: case SCREEN_RESOURCE_TRIGGERS_INFO: case SCREEN_RESOURCE_TRIGGERS_OVERVIEW: case SCREEN_RESOURCE_DATA_OVERVIEW: case SCREEN_RESOURCE_HOSTGROUP_TRIGGERS: if (is_array($screenitem['resourceid'])) { $db_hostgroups = CHostgroup::getObjects($screenitem['resourceid']); if (empty($db_hostgroups)) { $error = S_CANNOT_FIND_HOSTGROUP . ' "' . $nodeCaption . $screenitem['resourceid']['name'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_hostgroups); $screenitem['resourceid'] = $tmp['groupid']; } break; case SCREEN_RESOURCE_HOST_TRIGGERS: $db_hosts = CHost::getObjects($screenitem['resourceid']); if (empty($db_hosts)) { $error = S_CANNOT_FIND_HOST . ' "' . $nodeCaption . $screenitem['resourceid']['host'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_hosts); $screenitem['resourceid'] = $tmp['hostid']; break; case SCREEN_RESOURCE_GRAPH: $db_graphs = CGraph::getObjects($screenitem['resourceid']); if (empty($db_graphs)) { $error = S_CANNOT_FIND_GRAPH . ' "' . $nodeCaption . $screenitem['resourceid']['host'] . ':' . $screenitem['resourceid']['name'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_graphs); $screenitem['resourceid'] = $tmp['graphid']; break; case SCREEN_RESOURCE_SIMPLE_GRAPH: case SCREEN_RESOURCE_PLAIN_TEXT: $db_items = CItem::getObjects($screenitem['resourceid']); if (empty($db_items)) { $error = S_CANNOT_FIND_ITEM . ' "' . $nodeCaption . $screenitem['resourceid']['host'] . ':' . $screenitem['resourceid']['key_'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_items); $screenitem['resourceid'] = $tmp['itemid']; break; case SCREEN_RESOURCE_MAP: $db_sysmaps = CMap::getObjects($screenitem['resourceid']); if (empty($db_sysmaps)) { $error = S_CANNOT_FIND_MAP . ' "' . $nodeCaption . $screenitem['resourceid']['name'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_sysmaps); $screenitem['resourceid'] = $tmp['sysmapid']; break; case SCREEN_RESOURCE_SCREEN: $db_screens = CScreen::getObjects($screenitem['resourceid']); if (empty($db_screens)) { $error = S_CANNOT_FIND_SCREEN . ' "' . $nodeCaption . $screenitem['resourceid']['name'] . '" ' . S_USED_IN_EXPORTED_SCREEN_SMALL . ' "' . $screen['name'] . '"'; throw new Exception($error); } $tmp = reset($db_screens); $screenitem['resourceid'] = $tmp['screenid']; break; default: $screenitem['resourceid'] = 0; break; } } } unset($screenitem); $screens[] = $screen; } unset($screen); $importScreens = $screens; foreach ($importScreens as $mnum => $screen) { if (isset($screen['screenid'])) { $result = CScreen::update($screen); } else { $result = CScreen::create($screen); } if (isset($screen['screenid'])) { info(S_SCREEN . ' [' . $screen['name'] . '] ' . S_UPDATED_SMALL); } else { info(S_SCREEN . ' [' . $screen['name'] . '] ' . S_ADDED_SMALL); } } } catch (Exception $e) { error($e->getMessage()); return false; } return $result; }
$result = zbxXML::import($_FILES['import_file']['tmp_name']); if ($result) { $result = zbxXML::parseScreen($rules); } $result = DBend($result); show_messages($result, S_IMPORTED . SPACE . S_SUCCESSEFULLY_SMALL, S_IMPORT . SPACE . S_FAILED_SMALL); } $_REQUEST['go'] = get_request('go', 'none'); if (isset($_REQUEST['clone']) && isset($_REQUEST['screenid'])) { unset($_REQUEST['screenid']); $_REQUEST['form'] = 'clone'; } else { if (isset($_REQUEST['save'])) { if (isset($_REQUEST['screenid'])) { $screen = array('screenid' => $_REQUEST['screenid'], 'name' => $_REQUEST['name'], 'hsize' => $_REQUEST['hsize'], 'vsize' => $_REQUEST['vsize']); $result = CScreen::update($screen); $audit_action = AUDIT_ACTION_UPDATE; show_messages($result, S_SCREEN_UPDATED, S_CANNOT_UPDATE_SCREEN); } else { if (!count(get_accessible_nodes_by_user($USER_DETAILS, PERM_READ_WRITE, PERM_RES_IDS_ARRAY))) { access_deny(); } $screen = array('name' => $_REQUEST['name'], 'hsize' => $_REQUEST['hsize'], 'vsize' => $_REQUEST['vsize']); $result = CScreen::create($screen); $audit_action = AUDIT_ACTION_ADD; show_messages($result, S_SCREEN_ADDED, S_CANNOT_ADD_SCREEN); } if ($result) { add_audit($audit_action, AUDIT_RESOURCE_SCREEN, ' Name [' . $_REQUEST['name'] . '] '); unset($_REQUEST['form']); unset($_REQUEST['screenid']);