function ripeTab($id) { $ripe_db = "http://rest.db.ripe.net/search.xml?source=ripe&query-string="; assertUIntArg('id'); $net = spotEntity('ipv4net', $id); loadIPAddrList($net); $startip = ip4_bin2int($net['ip_bin']); $endip = ip4_bin2int(ip_last($net)); // Get Data from RIPE $ripe_inetnum_str = ip4_format(ip4_int2bin($startip)) . ' - ' . ip4_format(ip4_int2bin($endip)); $ripe_query = $ripe_db . ip4_format(ip4_int2bin($startip)); $ripe_result_str = file_get_contents($ripe_query, false, NULL); $ripe_result = simplexml_load_string($ripe_result_str); // Check inetnum object $ripe_inetnum_check = "/whois-resources/objects/object[@type='inetnum']/attributes/attribute[@name='inetnum'][@value='{$ripe_inetnum_str}']"; $ripe_inetnum = $ripe_result->xpath($ripe_inetnum_check); if (empty($ripe_inetnum)) { echo "<div class=trerror><center><h1>{$net['ip']}/{$net['mask']}</h1><h2>{$net['name']}</h2></center></div>\n"; } else { $ripe_netname_check = "/whois-resources/objects/object[@type='inetnum']/attributes/attribute[@name='netname']"; $ripe_netname = $ripe_result->xpath($ripe_netname_check); $netname = trim($ripe_netname[0]['value']); if (strcmp($netname, $net['name']) != 0) { echo "<div class=trwarning><center><h1>{$net['ip']}/{$net['mask']}</h1><h2>{$net['name']}</h2></center></div><div><center>"; } else { echo "<div class=trok><center><h1>{$net['ip']}/{$net['mask']}</h1><h2>{$net['name']}</h2></center></div><div><center>"; } printOpFormIntro('importRipeData', array('ripe_query' => $ripe_query, 'net_id' => $id, 'net_name' => $netname)); echo "<input type=submit value='Import RIPE records in to comments'></center></div>"; echo "</form>"; } // echo '<em>'.$ripe_query.'</em>'; echo "<table border=0 width='100%'><tr><td class=pcleft>"; $filedir = realpath(dirname(__FILE__)); $ripe_xsl = simplexml_load_file($filedir . '/ripe_html.xsl'); startPortlet("RIPE Information Datatbase<br>{$ripe_inetnum_str}"); $proc = new XSLTProcessor(); $proc->importStyleSheet($ripe_xsl); echo '<div class=commentblock>' . trim($proc->transformToXML($ripe_result)) . '</div>'; finishPortlet(); echo "</td></tr></table>\n"; }
/** * * Fing tab handler * */ function FingTab($id) { $can_import = permitted(NULL, NULL, 'importFingData'); // // allocation settings // // address allocation code, IPv4 networks view $aac_left = array('regular' => '', 'virtual' => '<span class="aac-left" title="Loopback">L:</span>', 'shared' => '<span class="aac-left" title="Shared">S:</span>', 'router' => '<span class="aac-left" title="Router">R:</span>', 'point2point' => '<span class="aac-left" title="Point-to-point">P:</span>'); // // header // global $pageno, $tabno; $maxperpage = getConfigVar('IPV4_ADDRS_PER_PAGE'); $range = spotEntity('ipv4net', $id); loadIPAddrList($range); echo "<center><h1>{$range['ip']}/{$range['mask']}</h1><h2>{$range['name']}</h2></center>\n"; // // execute fing // try { $known_ips = get_fing_scan($range['ip'], $range['mask']); $fing_cfg = get_fing_settings($range['ip'], $range['mask']); $fing_gw = $fing_cfg["gateway"]; } catch (FingException $e) { render_fing_error("Could not get network scan via fing:", $e->getMessage()); return FALSE; } echo "<table class=objview border=0 width='100%'><tr><td class=pcleft>"; startPortlet('overlook fing (via: ' . $fing_gw . ')'); // // pagination // if (isset($_REQUEST['pg'])) { $page = $_REQUEST['pg']; } else { $page = 0; } $startip = ip4_bin2int($range['ip_bin']); $endip = ip4_bin2int(ip_last($range)); $numpages = 0; if ($endip - $startip > $maxperpage) { $numpages = ($endip - $startip) / $maxperpage; $startip = $startip + $page * $maxperpage; $endip = $startip + $maxperpage - 1; } echo "<center>"; if ($numpages) { echo '<h3>' . ip4_format(ip4_int2bin($startip)) . ' ~ ' . ip4_format(ip4_int2bin($endip)) . '</h3>'; } for ($i = 0; $i < $numpages; $i++) { if ($i == $page) { echo "<b>{$i}</b> "; } else { echo "<a href='" . makeHref(array('page' => $pageno, 'tab' => $tabno, 'id' => $id, 'pg' => $i)) . "'>{$i}</a> "; } } echo "</center>"; if ($can_import) { printOpFormIntro('importFingData', array('addrcount' => $endip - $startip + 1)); $box_counter = 1; } echo "<table class='widetable' border=0 cellspacing=0 cellpadding=5 align='center'>\n"; echo "<tr><th class='tdleft'>address</th><th class='tdleft'>state</th><th class='tdleft'>current name</th><th class='tdleft'>DNS name</th><th class='tdleft'>MAC</th><th class='tdleft'>Allocation</th>"; if ($can_import) { echo '<th>import</th>'; } echo "</tr>\n"; // // Loop through all IPs // $cnt_match = $cnt_missing = $cnt_mismatch = $cnt_total = 0; for ($ip = $startip; $ip <= $endip; $ip++) { $cnt_total++; $print_cbox = FALSE; $ip_bin = ip4_int2bin($ip); $addr = isset($range['addrlist'][$ip_bin]) ? $range['addrlist'][$ip_bin] : array('name' => '', 'reserved' => 'no'); $straddr = ip4_format($ip_bin); list($fing_hostname, $fing_state, $fing_mac_vendor) = get_fing_info($straddr, $known_ips); $ip_is_up = strtoupper($fing_state) == "UP" ? TRUE : FALSE; if ($can_import) { echo "<input type=hidden name=addr_{$cnt_total} value={$straddr}>\n"; echo "<input type=hidden name=descr_{$cnt_total} value={$fing_hostname}>\n"; echo "<input type=hidden name=rsvd_{$cnt_total} value={$addr['reserved']}>\n"; } $skip_dns_check = FALSE; echo "<tr"; // Ignore network and broadcast addresses if ($ip == $startip && $addr['name'] == 'network' || $ip == $endip && $addr['name'] == 'broadcast') { echo " class='trbusy'"; $skip_dns_check = TRUE; } elseif (!$ip_is_up) { echo " class='trnull'"; } // set line color depending if we have the name already in the DB if (!$skip_dns_check) { if ($addr['name'] == $fing_hostname) { if (strlen($fing_hostname)) { echo ' class=trok'; $cnt_match++; } } elseif (!strlen($addr['name']) or !strlen($fing_hostname)) { echo ' class=trwarning'; $print_cbox = TRUE; $cnt_missing++; } else { echo ' class=trerror'; $print_cbox = TRUE; $cnt_mismatch++; } } //IP echo "><td class='tdleft"; if (isset($range['addrlist'][$ip_bin]['class']) and strlen($range['addrlist'][$ip_bin]['class'])) { echo ' ' . $range['addrlist'][$ip_bin]['class']; } echo "'><a href='" . makeHref(array('page' => 'ipaddress', 'ip' => $straddr)) . "'>{$straddr}</a></td>"; //other columns if ($skip_dns_check) { echo "<td class='tdleft'> </td>"; } else { if (!$ip_is_up) { echo "<td class='tdleft'>" . $fing_state . "</td>"; } else { echo "<td class='tdleft'><div class='strong'>" . $fing_state . "</div></td>"; } } echo "<td class=tdleft>{$addr['name']}</td>"; echo "<td class='tdleft'>" . $fing_hostname . "</td>"; echo "<td class='tdleft'>" . $fing_mac_vendor . "</td>"; //allocation echo "<td>"; $delim = ''; if ($addr['reserved'] == 'yes') { echo "<strong>RESERVED</strong> "; $delim = '; '; } foreach ($addr['allocs'] as $ref) { echo $delim . $aac_left[$ref['type']]; echo makeIPAllocLink($ip_bin, $ref, TRUE); $delim = '; '; } if ($delim != '') { $delim = '<br>'; } foreach ($addr['vslist'] as $vs_id) { $vs = spotEntity('ipv4vs', $vs_id); echo $delim . mkA("{$vs['name']}:{$vs['vport']}/{$vs['proto']}", 'ipv4vs', $vs['id']) . '→'; $delim = '<br>'; } foreach ($addr['vsglist'] as $vs_id) { $vs = spotEntity('ipvs', $vs_id); echo $delim . mkA($vs['name'], 'ipvs', $vs['id']) . '→'; $delim = '<br>'; } foreach ($addr['rsplist'] as $rsp_id) { $rsp = spotEntity('ipv4rspool', $rsp_id); echo "{$delim}→" . mkA($rsp['name'], 'ipv4rspool', $rsp['id']); $delim = '<br>'; } echo "</td>"; // import column if ($can_import) { echo '<td>'; if ($print_cbox) { echo "<input type=checkbox name=import_{$cnt_total} id=atom_1_" . $box_counter++ . "_1>"; } else { echo ' '; } echo '</td>'; } echo "</tr>"; } if ($can_import && $box_counter > 1) { echo '<tr><td colspan=4 align=center><input type=submit value="Import selected records"></td><td colspan=2 align=right>'; addJS('js/racktables.js'); echo --$box_counter ? "<a href='javascript:;' onclick=\"toggleColumnOfAtoms(1, 1, {$box_counter})\">(toggle selection)</a>" : ' '; echo '</td></tr>'; } echo "</table>"; if ($can_import) { echo '</form>'; } finishPortlet(); echo "</td><td class=pcright>"; // // PING Statistics // startPortlet('ping stats'); $cnt_ping_up = get_fing_up_count($known_ips); echo "<table border=0 width='100%' cellspacing=0 cellpadding=2>"; echo "<tr class=trok><th class=tdright>Replied to Ping</th><td class=tdleft>{$cnt_ping_up}</td></tr>\n"; echo "<tr class=trwarning><th class=tdright>No Response</th><td class=tdleft>" . ($cnt_total - $cnt_ping_up) . "</td></tr>\n"; echo "</table>\n"; finishPortlet(); // // DNS Statistics // startPortlet('dns stats'); echo "<table border=0 width='100%' cellspacing=0 cellpadding=2>"; echo "<tr class=trok><th class=tdright>Exact matches:</th><td class=tdleft>{$cnt_match}</td></tr>\n"; echo "<tr class=trwarning><th class=tdright>Missing from DB/DNS:</th><td class=tdleft>{$cnt_missing}</td></tr>\n"; if ($cnt_mismatch) { echo "<tr class=trerror><th class=tdright>Mismatches:</th><td class=tdleft>{$cnt_mismatch}</td></tr>\n"; } echo "</table>\n"; finishPortlet(); }
function renderLivePTR($id) { if (isset($_REQUEST['pg'])) { $page = $_REQUEST['pg']; } else { $page = 0; } global $pageno, $tabno; $maxperpage = getConfigVar('IPV4_ADDRS_PER_PAGE'); $range = spotEntity('ipv4net', $id); loadIPAddrList($range); $can_import = permitted(NULL, NULL, 'importPTRData'); echo "<center><h1>{$range['ip']}/{$range['mask']}</h1><h2>{$range['name']}</h2></center>\n"; echo "<table class=objview border=0 width='100%'><tr><td class=pcleft>"; startPortlet('current records'); $startip = ip4_bin2int($range['ip_bin']); $endip = ip4_bin2int(ip_last($range)); $numpages = 0; if ($endip - $startip > $maxperpage) { $numpages = ($endip - $startip) / $maxperpage; $startip = $startip + $page * $maxperpage; $endip = $startip + $maxperpage - 1; } echo "<center>"; if ($numpages) { echo '<h3>' . ip4_format(ip4_int2bin($startip)) . ' ~ ' . ip4_format(ip4_int2bin($endip)) . '</h3>'; } for ($i = 0; $i < $numpages; $i++) { if ($i == $page) { echo "<b>{$i}</b> "; } else { echo "<a href='" . makeHref(array('page' => $pageno, 'tab' => $tabno, 'id' => $id, 'pg' => $i)) . "'>{$i}</a> "; } } echo "</center>"; // FIXME: address counter could be calculated incorrectly in some cases if ($can_import) { printOpFormIntro('importPTRData', array('addrcount' => $endip - $startip + 1)); $idx = 1; $box_counter = 1; } echo "<table class='widetable' border=0 cellspacing=0 cellpadding=5 align='center'>\n"; echo '<tr><th>address</th><th>current name</th><th>DNS data</th>'; if ($can_import) { echo '<th>import</th>'; } echo '</tr>'; $cnt_match = $cnt_mismatch = $cnt_missing = 0; for ($ip = $startip; $ip <= $endip; $ip++) { // Find the (optional) DB name and the (optional) DNS record, then // compare values and produce a table row depending on the result. $ip_bin = ip4_int2bin($ip); $addr = isset($range['addrlist'][$ip_bin]) ? $range['addrlist'][$ip_bin] : array('name' => '', 'reserved' => 'no'); $straddr = ip4_format($ip_bin); $ptrname = gethostbyaddr($straddr); if ($ptrname == $straddr) { $ptrname = ''; } if ($can_import) { echo "<input type=hidden name=addr_{$idx} value={$straddr}>\n"; echo "<input type=hidden name=descr_{$idx} value={$ptrname}>\n"; echo "<input type=hidden name=rsvd_{$idx} value={$addr['reserved']}>\n"; } echo '<tr'; $print_cbox = FALSE; // Ignore network and broadcast addresses if ($ip == $startip && $addr['name'] == 'network' || $ip == $endip && $addr['name'] == 'broadcast') { echo ' class=trbusy'; } if ($addr['name'] == $ptrname) { if (strlen($ptrname)) { echo ' class=trok'; $cnt_match++; } } elseif (!strlen($addr['name']) or !strlen($ptrname)) { echo ' class=trwarning'; $print_cbox = TRUE; $cnt_missing++; } else { echo ' class=trerror'; $print_cbox = TRUE; $cnt_mismatch++; } echo "><td class='tdleft"; if (isset($range['addrlist'][$ip_bin]['class']) and strlen($range['addrlist'][$ip_bin]['class'])) { echo ' ' . $range['addrlist'][$ip_bin]['class']; } echo "'>" . mkA($straddr, 'ipaddress', $straddr) . '</td>'; echo "<td class=tdleft>{$addr['name']}</td><td class=tdleft>{$ptrname}</td>"; if ($can_import) { echo '<td>'; if ($print_cbox) { echo "<input type=checkbox name=import_{$idx} tabindex={$idx} id=atom_1_" . $box_counter++ . "_1>"; } else { echo ' '; } echo '</td>'; $idx++; } echo "</tr>\n"; } if ($can_import && $box_counter > 1) { echo '<tr><td colspan=3 align=center><input type=submit value="Import selected records"></td><td>'; addJS('js/racktables.js'); echo --$box_counter ? "<a href='javascript:;' onclick=\"toggleColumnOfAtoms(1, 1, {$box_counter})\">(toggle selection)</a>" : ' '; echo '</td></tr>'; } echo "</table>"; if ($can_import) { echo '</form>'; } finishPortlet(); echo "</td><td class=pcright>"; startPortlet('stats'); echo "<table border=0 width='100%' cellspacing=0 cellpadding=2>"; echo "<tr class=trok><th class=tdright>Exact matches:</th><td class=tdleft>{$cnt_match}</td></tr>\n"; echo "<tr class=trwarning><th class=tdright>Missing from DB/DNS:</th><td class=tdleft>{$cnt_missing}</td></tr>\n"; if ($cnt_mismatch) { echo "<tr class=trerror><th class=tdright>Mismatches:</th><td class=tdleft>{$cnt_mismatch}</td></tr>\n"; } echo "</table>\n"; finishPortlet(); echo "</td></tr></table>\n"; }
function renderVMReport() { $aResult = array(); $iTotal = 0; $sFilter = '{$typeid_1504}'; # typeid_1504 = Virtual machines foreach (scanRealmByText('object', $sFilter) as $Result) { $aResult[$Result['id']] = array(); $aResult[$Result['id']]['sName'] = $Result['name']; // Create active links in comment $aResult[$Result['id']]['sComment'] = makeLinksInText($Result['comment']); // Load additional attributes: $attributes = getAttrValues($Result['id']); $aResult[$Result['id']]['sContact'] = ''; if (isset($attributes['14']['a_value'])) { $aResult[$Result['id']]['sContact'] = $attributes['14']['a_value']; } $aResult[$Result['id']]['OEMSN'] = ''; if (isset($attributes['1']['a_value'])) { $aResult[$Result['id']]['OEMSN'] = $attributes['1']['a_value']; } $aResult[$Result['id']]['sOS'] = ''; if (isset($attributes['4']['a_value'])) { $aResult[$Result['id']]['sOS'] = $attributes['4']['a_value']; } // IP Informations $aResult[$Result['id']]['ipV4List'] = getObjectIPv4AllocationList($Result['id']); $aResult[$Result['id']]['ipV6List'] = getObjectIPv6AllocationList($Result['id']); // Port (MAC) Informations $aResult[$Result['id']]['ports'] = getObjectPortsAndLinks($Result['id']); // Container $aResult[$Result['id']]['container'] = getObjectContainerList($Result['id']); $iTotal++; } if (isset($_GET['csv'])) { header('Content-type: text/csv'); header('Content-Disposition: attachment; filename=export_' . date("Ymdhis") . '.csv'); header('Pragma: no-cache'); header('Expires: 0'); $outstream = fopen("php://output", "w"); $aCSVRow = array('Name', 'MAC', 'IP(s)', 'Comment', 'Contact', 'OS', 'Hypervisor'); fputcsv($outstream, $aCSVRow); foreach ($aResult as $id => $aRow) { $aCSVRow = array(); $aCSVRow[0] = $aRow['sName']; $aCSVRow[1] = ''; foreach ($aRow['ports'] as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { $aCSVRow[1] .= $aPortDetails['l2address'] . ' '; } } $aCSVRow[1] = trim($aCSVRow[1]); $aCSVRow[2] = ''; foreach ($aRow['ipV4List'] as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { $aCSVRow[2] .= $key . ' '; } } foreach ($aRow['ipV6List'] as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } if (trim($key) != '') { $aCSVRow[2] .= $key . ' '; } } $aCSVRow[2] = trim($aCSVRow[2]); $aCSVRow[3] = str_replace('"', "'", $aRow['sComment']); $aCSVRow[4] = $aRow['sContact']; $aCSVRow[5] = $aRow['sOS']; $aCSVRow[6] = ''; foreach ($aRow['container'] as $key => $aDetails) { $aCSVRow[6] .= trim($aDetails['container_name']) . ' '; } $aCSVRow[6] = trim($aCSVRow[6]); fputcsv($outstream, $aCSVRow); } fclose($outstream); exit(0); # Exit normally after send CSV to browser } // Load stylesheet and jquery scripts addCSS('css/extensions/style.css'); addJS('js/extensions/jquery-latest.js'); addJS('js/extensions/jquery.tablesorter.js'); addJS('js/extensions/picnet.table.filter.min.js'); // Display the stat array echo "<h2>Virtual machines report ({$iTotal})</h2><ul>"; echo '<a href="index.php?page=reports&tab=vm&csv">CSV Export</a>'; echo '<table id="reportTable" class="tablesorter"> <thead> <tr> <th>Name</th> <th>MAC</th> <th>IP(s)</th> <th>Comment</th> <th>Contact</th> <th>OS</th> <th>Hypervisor</th> </tr> </thead> <tbody>'; foreach ($aResult as $id => $aRow) { echo '<tr> <td><a href="' . makeHref(array('page' => 'object', 'object_id' => $id)) . '">' . $aRow['sName'] . '</a></td> <td>'; foreach ($aRow['ports'] as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { echo $aPortDetails['l2address'] . '<br/>'; } } echo ' </td>' . ' <td>'; foreach ($aRow['ipV4List'] as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { echo $key . '<br/>'; } } foreach ($aRow['ipV6List'] as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } else { $key = new IPv6Address($key); } if (trim($key) != '') { echo $key . '<br/>'; } } echo ' </td> <td>' . $aRow['sComment'] . '</td> <td>' . $aRow['sContact'] . '</td> <td>' . $aRow['sOS'] . '</td> <td>'; foreach ($aRow['container'] as $key => $aDetails) { echo '<a href="' . makeHref(array('page' => 'object', 'object_id' => $key)) . '">' . $aDetails['container_name'] . '</a><br/>'; } echo '</td> </tr>'; } echo ' </tbody> </table>'; echo '<script type="text/javascript"> $(document).ready(function() { $.tablesorter.defaults.widgets = ["zebra"]; $("#reportTable").tablesorter( { headers: { 2: { sorter: "ipAddress" } }, sortList: [[0,0]] } ); $("#reportTable").tableFilter(); } ); </script>'; }
function renderCustomReport() { # Get object list $phys_typelist = readChapter(CHAP_OBJTYPE, 'o'); $attibutes = getAttrMap(); $aTagList = getTagList(); if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['csv'])) { header('Content-type: text/csv'); header('Content-Disposition: attachment; filename=export_' . date("Ymdhis") . '.csv'); header('Pragma: no-cache'); header('Expires: 0'); $outstream = fopen("php://output", "w"); $aResult = getResult($_POST); // Get Result $_POST['name'] = validateColums($_POST); // Fix empty colums $csvDelimiter = isset($_POST['csvDelimiter']) ? $_POST['csvDelimiter'] : ','; /* Create Header */ $aCSVRow = array(); if (isset($_POST['sName']) && $_POST['sName']) { array_push($aCSVRow, "Name"); } if (isset($_POST['label'])) { array_push($aCSVRow, "Label"); } if (isset($_POST['type'])) { array_push($aCSVRow, "Type"); } if (isset($_POST['asset_no'])) { array_push($aCSVRow, "Asset Tag"); } if (isset($_POST['has_problems'])) { array_push($aCSVRow, "Has Problems"); } if (isset($_POST['comment'])) { array_push($aCSVRow, "Comment"); } if (isset($_POST['runs8021Q'])) { array_push($aCSVRow, "Runs 8021Q"); } if (isset($_POST['location'])) { array_push($aCSVRow, "Location"); } if (isset($_POST['MACs'])) { array_push($aCSVRow, "MACs"); } if (isset($_POST['IPs'])) { array_push($aCSVRow, "IPs"); } if (isset($_POST['attributeIDs'])) { foreach ($_POST['attributeIDs'] as $attributeID) { array_push($aCSVRow, $attibutes[$attributeID]['name']); } } if (isset($_POST['Tags'])) { array_push($aCSVRow, "Tags"); } if (isset($_POST['Ports'])) { array_push($aCSVRow, "Ports"); } if (isset($_POST['Containers'])) { array_push($aCSVRow, "Containers"); } if (isset($_POST['Childs'])) { array_push($aCSVRow, "Child objects"); } fputcsv($outstream, $aCSVRow, $csvDelimiter); /* Create data rows */ foreach ($aResult as $Result) { $aCSVRow = array(); if (isset($_POST['sName'])) { array_push($aCSVRow, $Result['name']); } if (isset($_POST['label'])) { array_push($aCSVRow, $Result['label']); } if (isset($_POST['type'])) { array_push($aCSVRow, $phys_typelist[$Result['objtype_id']]); } if (isset($_POST['asset_no'])) { array_push($aCSVRow, $Result['asset_no']); } if (isset($_POST['has_problems'])) { array_push($aCSVRow, $Result['has_problems']); } if (isset($_POST['comment'])) { array_push($aCSVRow, str_replace('"', "'", $Result['comment'])); } if (isset($_POST['runs8021Q'])) { array_push($aCSVRow, $Result['runs8021Q']); } if (isset($_POST['location'])) { array_push($aCSVRow, preg_replace('/<a[^>]*>(.*)<\\/a>/iU', '$1', getLocation($Result))); } if (isset($_POST['MACs'])) { $sTemp = ''; foreach (getObjectPortsAndLinks($Result['id']) as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { $sTemp .= $aPortDetails['l2address'] . ' '; } } array_push($aCSVRow, $sTemp); } if (isset($_POST['IPs'])) { $sTemp = ''; foreach (getObjectIPv4AllocationList($Result['id']) as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { $sTemp .= $key . ' '; } } foreach (getObjectIPv6AllocationList($Result['id']) as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } else { $key = new IPv6Address($key); } if (trim($key) != '') { $sTemp .= $key . ' '; } } array_push($aCSVRow, $sTemp); } if (isset($_POST['attributeIDs'])) { $attributes = getAttrValues($Result['id']); foreach ($_POST['attributeIDs'] as $attributeID) { if (isset($attributes[$attributeID]['a_value'])) { array_push($aCSVRow, $attributes[$attributeID]['a_value']); } elseif ($attributes[$attributeID]['value'] != '' && $attributes[$attributeID]['type'] == 'date') { array_push($aCSVRow, date("Y-m-d", $attributes[$attributeID]['value'])); } else { array_push($aCSVRow, ''); } } } if (isset($_POST['Tags'])) { $sTemp = ''; foreach ($Result['tags'] as $aTag) { $sTemp .= $aTag['tag'] . ' '; } if (count($Result['itags']) > 0) { $sTemp .= '('; foreach ($Result['itags'] as $aTag) { $sTemp .= $aTag['tag'] . ' '; } $sTemp .= ')'; } array_push($aCSVRow, $sTemp); } if (isset($_POST['Ports'])) { $sTemp = ''; foreach ($Result['portsLinks'] as $port) { $sTemp .= $port['name'] . ': ' . $port['remote_object_name']; if (trim($port['cableid']) != '') { $sTemp .= ' Cable ID: ' . $port['cableid']; } $sTemp .= ' '; } $sTemp = trim($sTemp); array_push($aCSVRow, $sTemp); } if (isset($_POST['Containers'])) { $sTemp = ''; foreach (getObjectContainerList($Result['id']) as $key => $aDetails) { $sTemp .= trim($aDetails['container_name']) . ' '; } $sTemp = trim($sTemp); array_push($aCSVRow, $sTemp); } if (isset($_POST['Childs'])) { $sTemp = ''; foreach (getObjectChildObjectList($Result['id']) as $key => $aDetails) { $sTemp .= trim($aDetails['object_name']) . ' '; } $sTemp = trim($sTemp); array_push($aCSVRow, $sTemp); } fputcsv($outstream, $aCSVRow, $csvDelimiter); } fclose($outstream); exit(0); # Exit normally after send CSV to browser } echo '<h2>Custom report</h2><ul>'; // Load stylesheet and jquery scripts addCSS('css/extensions/style.css'); addJS('js/extensions/saveFormValues.js'); addJS('js/extensions/jquery-latest.js'); addJS('js/extensions/jquery.tablesorter.js'); addJS('js/extensions/picnet.table.filter.min.js'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { echo '<a href="#" class="show_hide">Show/hide search form</a><br/><br/>'; } echo '<div class="searchForm">'; echo '<form method="post" name="searchForm">'; echo '<table class="searchTable"> <tr> <th>Object Type</th> <th>Common Values</th> <th>Attributes</th> <th>Tags</th> <th>Misc</th> </tr> <tr>'; echo '<td valign="top"> <table class="searchTable">'; $i = 0; foreach ($phys_typelist as $objectTypeID => $sName) { if ($i % 2) { echo '<tr class="odd">'; } else { echo '<tr>'; } echo ' <td> <input type="checkbox" name="objectIDs[]" value="' . $objectTypeID . '"'; if (isset($_POST['objectIDs']) && in_array($objectTypeID, $_POST['objectIDs'])) { echo ' checked="checked"'; } echo ' > ' . $sName . ' </td> </tr>'; $i++; } echo ' </table> </td>'; echo '<td valign="top"> <table class="searchTable"> <tr><td><input type="checkbox" name="sName" value="1" '; if (isset($_POST['sName'])) { echo ' checked="checked"'; } echo '> Name</td></tr> <tr class="odd"><td><input type="checkbox" name="label" value="1" '; if (isset($_POST['label'])) { echo ' checked="checked"'; } echo '> Label</td></tr> <tr><td><input type="checkbox" name="type" value="1" '; if (isset($_POST['type'])) { echo ' checked="checked"'; } echo '> Type</td></tr> <tr class="odd"><td><input type="checkbox" name="asset_no" value="1" '; if (isset($_POST['asset_no'])) { echo ' checked="checked"'; } echo '> Asset Tag</td></tr> <tr><td><input type="checkbox" name="location" value="1" '; if (isset($_POST['location'])) { echo ' checked="checked"'; } echo '> Location</td></tr> <tr class="odd"><td><input type="checkbox" name="has_problems" value="1" '; if (isset($_POST['has_problems'])) { echo ' checked="checked"'; } echo '> Has Problems</td></tr> <tr><td><input type="checkbox" name="comment" value="1" '; if (isset($_POST['comment'])) { echo ' checked="checked"'; } echo '> Comment</td></tr> <tr class="odd"><td><input type="checkbox" name="runs8021Q" value="1" '; if (isset($_POST['runs8021Q'])) { echo ' checked="checked"'; } echo '> Runs 8021Q</td></tr> <tr><td><input type="checkbox" name="MACs" value="1" '; if (isset($_POST['MACs'])) { echo ' checked="checked"'; } echo '> MACs</td></tr> <tr class="odd"><td><input type="checkbox" name="IPs" value="1" '; if (isset($_POST['IPs'])) { echo ' checked="checked"'; } echo '> IPs</td></tr> <tr><td><input type="checkbox" name="Tags" value="1" '; if (isset($_POST['Tags'])) { echo ' checked="checked"'; } echo '> Tags</td></tr> <tr class="odd"><td><input type="checkbox" name="Ports" value="1" '; if (isset($_POST['Ports'])) { echo ' checked="checked"'; } echo '> Ports</td></tr> <tr><td><input type="checkbox" name="Containers" value="1" '; if (isset($_POST['Containers'])) { echo ' checked="checked"'; } echo '> Containers</td></tr> <tr class="odd"><td><input type="checkbox" name="Childs" value="1" '; if (isset($_POST['Childs'])) { echo ' checked="checked"'; } echo '> Child objects</td></tr> </table> </td>'; echo '<td valign="top"> <table class="searchTable">'; $i = 0; foreach ($attibutes as $attributeID => $aRow) { if ($i % 2) { echo '<tr class="odd">'; } else { echo '<tr>'; } echo ' <td> <input type="checkbox" name="attributeIDs[]" value="' . $attributeID . '"'; if (isset($_POST['attributeIDs']) && in_array($attributeID, $_POST['attributeIDs'])) { echo ' checked="checked"'; } echo '> ' . $aRow['name'] . ' </td> </tr>'; $i++; } echo ' </table> </td>'; echo '<td valign="top"> <table class="searchTable">'; $i = 0; foreach ($aTagList as $aTag) { echo '<tr ' . ($i % 2 ? 'class="odd"' : '') . '> <td> <input type="checkbox" name="tag[' . $aTag['id'] . ']" value="1" ' . (isset($_POST['tag'][$aTag['id']]) ? 'checked="checked" ' : '') . '> ' . $aTag['tag'] . ' </td> </tr>'; $i++; } if (count($aTagList) < 1) { echo '<tr><td><i>No Tags available</i></td></tr>'; } echo ' </table> </td>'; echo '<td valign="top"> <table class="searchTable"> <tr><td><input type="checkbox" name="csv" value="1"> CSV Export</td></tr> <tr><td><input type="text" name="csvDelimiter" value="," size="1"> CSV Delimiter</td></tr> <tr class="odd"><td>Name Filter: <i>(Regular Expression)</i></td></tr> <tr><td><input type="text" name="name_preg" value="'; if (isset($_POST['name_preg'])) { echo $_POST['name_preg']; } echo '" style="height: 11pt;"></td></tr> <tr class="odd"><td>Asset Tag Filter: <i>(Regular Expression)</i></td></tr> <tr><td><input type="text" name="tag_preg" value="'; if (isset($_POST['tag_preg'])) { echo $_POST['tag_preg']; } echo '" style="height: 11pt;"></td></tr> <tr class="odd"><td>Comment Filter: <i>(Regular Expression)</i></td></tr> <tr><td><input type="text" name="comment_preg" value="'; if (isset($_POST['comment_preg'])) { echo $_POST['comment_preg']; } echo '" style="height: 11pt;"></td></tr> <tr class="odd"><td> </td></tr> <tr> <td> Save: <input id="nameQuery" type="text" name="nameQuery" value="" style="height: 11pt; width:155px"/> <input type="button" value=" Ok " onclick="saveQuery();"> <br/> Load:<br/> <span id="loadButtons"></span> <script type="text/javascript"> loadButtons(); </script> </td> </tr> <tr class="odd"><td> </td></tr> <tr><td align="right"><input type="submit" value=" Search "></td></tr> </table> </td> </tr> </table>'; echo '</form>'; echo '</div>'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $aResult = getResult($_POST); // Get Result $_POST['sName'] = validateColums($_POST); // Fix empty colums if (count($aResult) > 0) { echo '<table id="customTable" class="tablesorter"> <thead> <tr>'; if (isset($_POST['sName']) && $_POST['sName']) { echo '<th>Name</th>'; } if (isset($_POST['label'])) { echo '<th>Label</th>'; } if (isset($_POST['type'])) { echo '<th>Type</th>'; } if (isset($_POST['asset_no'])) { echo '<th>Asset Tag</th>'; } if (isset($_POST['has_problems'])) { echo '<th>Has Problems</th>'; } if (isset($_POST['comment'])) { echo '<th>Comment</th>'; } if (isset($_POST['runs8021Q'])) { echo '<th>Runs 8021Q</th>'; } if (isset($_POST['location'])) { echo '<th>Location</th>'; } if (isset($_POST['MACs'])) { echo '<th>MACs</th>'; } if (isset($_POST['IPs'])) { echo '<th>IPs</th>'; } if (isset($_POST['attributeIDs'])) { foreach ($_POST['attributeIDs'] as $attributeID) { echo '<th>' . $attibutes[$attributeID]['name'] . '</th>'; } } if (isset($_POST['Tags'])) { echo '<th>Tags</th>'; } if (isset($_POST['Ports'])) { echo '<th>Ports</th>'; } if (isset($_POST['Containers'])) { echo '<th>Containers</th>'; } if (isset($_POST['Childs'])) { echo '<th>Child objects</th>'; } echo ' </tr> </thead> <tbody>'; foreach ($aResult as $Result) { echo '<tr>'; if (isset($_POST['sName'])) { echo '<td> <span class="object_' . str_replace('$', '', $Result['atags'][1]['tag']) . '">'; if (isset($Result['name'])) { echo '<a href="' . makeHref(array('page' => 'object', 'object_id' => $Result['id'])) . '">' . $Result['name'] . '</a>'; } else { echo ' '; } echo ' </span> </td>'; } if (isset($_POST['label'])) { echo '<td>'; if (isset($Result['label'])) { echo $Result['label']; } else { echo ' '; } echo '</td>'; } if (isset($_POST['type'])) { echo '<td>'; if (isset($Result['objtype_id'])) { echo $phys_typelist[$Result['objtype_id']]; } else { echo ' '; } echo '</td>'; } if (isset($_POST['asset_no'])) { echo '<td>'; if (isset($Result['asset_no'])) { echo $Result['asset_no']; } else { echo ' '; } echo '</td>'; } if (isset($_POST['has_problems'])) { echo '<td>'; if (isset($Result['has_problems'])) { echo $Result['has_problems']; } else { echo ' '; } echo '</td>'; } if (isset($_POST['comment'])) { echo '<td>'; if (isset($Result['comment'])) { echo makeLinksInText($Result['comment']); } else { echo ' '; } echo '</td>'; } if (isset($_POST['runs8021Q'])) { echo '<td>'; if (isset($Result['runs8021Q'])) { echo $Result['runs8021Q']; } else { echo ' '; } echo '</td>'; } if (isset($_POST['location'])) { echo '<td>'; echo getLocation($Result); echo '</td>'; } if (isset($_POST['MACs'])) { echo '<td>'; foreach (getObjectPortsAndLinks($Result['id']) as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { echo $aPortDetails['l2address'] . '<br/>'; } } echo '</td>'; } if (isset($_POST['IPs'])) { echo '<td>'; foreach (getObjectIPv4AllocationList($Result['id']) as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { echo $key . '<br/>'; } } foreach (getObjectIPv6AllocationList($Result['id']) as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } else { $key = new IPv6Address($key); } if (trim($key) != '') { echo $key . '<br/>'; } } echo '</td>'; } if (isset($_POST['attributeIDs'])) { $attributes = getAttrValues($Result['id']); foreach ($_POST['attributeIDs'] as $attributeID) { echo '<td>'; if (isset($attributes[$attributeID]['a_value']) && $attributes[$attributeID]['a_value'] != '') { echo $attributes[$attributeID]['a_value']; } elseif ($attributes[$attributeID]['value'] != '' && $attributes[$attributeID]['type'] == 'date') { echo date("Y-m-d", $attributes[$attributeID]['value']); } else { echo ' '; } } } if (isset($_POST['Tags'])) { echo '<td>'; foreach ($Result['tags'] as $aTag) { echo '<a href="' . makeHref(array('page' => 'depot', 'tab' => 'default', 'andor' => 'and', 'cft[]' => $aTag['id'])) . '">' . $aTag['tag'] . '</a> '; } if (count($Result['itags']) > 0) { echo '('; foreach ($Result['itags'] as $aTag) { echo '<a href="' . makeHref(array('page' => 'depot', 'tab' => 'default', 'andor' => 'and', 'cft[]' => $aTag['id'])) . '">' . $aTag['tag'] . '</a> '; } echo ')'; } echo '</td>'; } if (isset($_POST['Ports'])) { echo '<td>'; foreach ($Result['portsLinks'] as $port) { echo $port['name'] . ': '; if ($port['remote_object_name'] != 'unknown') { echo formatPortLink($port['remote_object_id'], $port['remote_object_name'], $port['remote_id'], NULL); } else { echo $port['remote_object_name']; } if (trim($port['cableid']) != '') { echo ' Cable ID: ' . $port['cableid']; } echo '<br/>'; } echo '</td>'; } if (isset($_POST['Containers'])) { echo '<td>'; foreach (getObjectContainerList($Result['id']) as $key => $aDetails) { echo '<a href="' . makeHref(array('page' => 'object', 'object_id' => $key)) . '">' . $aDetails['container_name'] . '</a><br/>'; } echo '</td>'; } if (isset($_POST['Childs'])) { echo '<td>'; foreach (getObjectChildObjectList($Result['id']) as $key => $aDetails) { echo '<a href="' . makeHref(array('page' => 'object', 'object_id' => $key)) . '">' . $aDetails['object_name'] . '</a><br/>'; } echo '</td>'; } echo '</tr>'; } echo ' </tbody> </table> <script type="text/javascript">$(".searchForm").hide();</script>'; } else { echo '<br/><br/><div align="center" style="font-size:10pt;"><i>No items found !!!</i></div><br/>'; } echo '<script type="text/javascript"> $(document).ready(function() { $.tablesorter.defaults.widgets = ["zebra"]; $("#customTable").tablesorter( { headers: { }, sortList: [[0,0]] } ); $("#customTable").tableFilter(); $(".show_hide").show(); $(".show_hide").click(function(){ $(".searchForm").slideToggle(\'slow\'); }); } ); </script>'; } }
function PingTab($id) { $pingtimeout = "50"; if (isset($_REQUEST['pg'])) { $page = $_REQUEST['pg']; } else { $page = 0; } global $pageno, $tabno; $maxperpage = getConfigVar('IPV4_ADDRS_PER_PAGE'); $range = spotEntity('ipv4net', $id); loadIPAddrList($range); echo "<center><h1>{$range['ip']}/{$range['mask']}</h1><h2>{$range['name']}</h2></center>\n"; echo "<table class=objview border=0 width='100%'><tr><td class=pcleft>"; startPortlet('icmp ping comparrison:'); $startip = ip4_bin2int($range['ip_bin']); $endip = ip4_bin2int(ip_last($range)); $realstartip = $startip; $realendip = $endip; $numpages = 0; if ($endip - $startip > $maxperpage) { $numpages = ($endip - $startip) / $maxperpage; $startip = $startip + $page * $maxperpage; $endip = $startip + $maxperpage - 1; } echo "<center>"; if ($numpages) { echo '<h3>' . ip4_format(ip4_int2bin($startip)) . ' ~ ' . ip4_format(ip4_int2bin($endip)) . '</h3>'; } for ($i = 0; $i < $numpages; $i++) { if ($i == $page) { echo "<b>{$i}</b> "; } else { echo "<a href='" . makeHref(array('page' => $pageno, 'tab' => $tabno, 'id' => $id, 'pg' => $i)) . "'>{$i}</a> "; } } echo "</center>"; echo "<table class='widetable' border=0 cellspacing=0 cellpadding=5 align='center'>\n"; echo "<tr><th>address</th><th>name</th><th>response</th></tr>\n"; $idx = 1; $box_counter = 1; $cnt_ok = $cnt_noreply = $cnt_mismatch = 0; for ($ip = $startip; $ip <= $endip; $ip++) { $ip_bin = ip4_int2bin($ip); $addr = isset($range['addrlist'][$ip_bin]) ? $range['addrlist'][$ip_bin] : array('name' => '', 'reserved' => 'no'); $straddr = ip4_format($ip_bin); system("/usr/sbin/fping -q -c 1 -t {$pingtimeout} {$straddr}", $pingreply); // FIXME: This is a huge and ugly IF/ELSE block. Prettify anyone? if (!$pingreply) { if (!empty($addr['name']) and $addr['reserved'] == 'no' or !empty($addr['allocs'])) { echo '<tr class=trok'; $cnt_ok++; } else { echo $addr['reserved'] == 'yes' ? '<tr class=trwarning' : '<tr class=trerror'; $cnt_mismatch++; } } else { if (!empty($addr['name']) and $addr['reserved'] == 'no' or !empty($addr['allocs'])) { echo '<tr class=trwarning'; $cnt_noreply++; } else { echo '<tr'; } } echo "><td class='tdleft"; if (isset($range['addrlist'][$ip_bin]['class']) and strlen($range['addrlist'][$ip_bin]['class'])) { echo ' ' . $range['addrlist'][$ip_bin]['class']; } echo "'><a href='" . makeHref(array('page' => 'ipaddress', 'ip' => $straddr)) . "'>{$straddr}</a></td>"; echo "<td class=tdleft>{$addr['name']}</td><td class=tderror>"; if (!$pingreply) { echo "Yes"; } else { echo "No"; } echo "</td></tr>\n"; $idx++; } echo "</td></tr>"; echo "</table>"; echo "</form>"; finishPortlet(); echo "</td><td class=pcright>"; startPortlet('stats'); echo "<table border=0 width='100%' cellspacing=0 cellpadding=2>"; echo "<tr class=trok><th class=tdright>OKs:</th><td class=tdleft>{$cnt_ok}</td></tr>\n"; echo "<tr class=trwarning><th class=tdright>Did not reply:</th><td class=tdleft>{$cnt_noreply}</td></tr>\n"; if ($cnt_mismatch) { echo "<tr class=trerror><th class=tdright>Unallocated answer:</th><td class=tdleft>{$cnt_mismatch}</td></tr>\n"; } echo "</table>\n"; finishPortlet(); echo "</td></tr></table>\n"; }
function constructIPRange($ip_bin, $mask) { $node = array(); switch (strlen($ip_bin)) { case 4: // IPv4 if ($mask < 0 || $mask > 32) { throw new InvalidArgException('mask', $mask, "Invalid v4 prefix length"); } $node['mask_bin'] = ip4_mask($mask); $node['mask'] = $mask; $node['ip_bin'] = $ip_bin & $node['mask_bin']; $node['ip'] = ip4_format($node['ip_bin']); break; case 16: // IPv6 if ($mask < 0 || $mask > 128) { throw new InvalidArgException('mask', $mask, "Invalid v6 prefix length"); } $node['mask_bin'] = ip6_mask($mask); $node['mask'] = $mask; $node['ip_bin'] = $ip_bin & $node['mask_bin']; $node['ip'] = ip6_format($node['ip_bin']); break; default: throw new InvalidArgException('ip_bin', $ip_bin, "Invalid binary IP"); } return $node; }
function renderServerReport() { $aResult = array(); $iTotal = 0; $sFilter = '{$typeid_4}'; # typeid_4 = Server foreach (scanRealmByText('object', $sFilter) as $Result) { $aResult[$Result['id']] = array(); $aResult[$Result['id']]['sName'] = $Result['name']; // Create active links in comment $aResult[$Result['id']]['sComment'] = $Result['comment']; // Load additional attributes: $attributes = getAttrValues($Result['id']); $aResult[$Result['id']]['sContact'] = ''; if (isset($attributes['14']['a_value'])) { $aResult[$Result['id']]['sContact'] = $attributes['14']['a_value']; } $aResult[$Result['id']]['HWtype'] = ''; if (isset($attributes['2']['a_value'])) { $aResult[$Result['id']]['HWtype'] = $attributes['2']['a_value']; } $aResult[$Result['id']]['OEMSN'] = ''; if (isset($attributes['1']['a_value'])) { $aResult[$Result['id']]['OEMSN'] = $attributes['1']['a_value']; } $aResult[$Result['id']]['HWExpDate'] = ''; if (isset($attributes['22']['value'])) { $aResult[$Result['id']]['HWExpDate'] = date("Y-m-d", $attributes['22']['value']); } $aResult[$Result['id']]['sOS'] = ''; if (isset($attributes['4']['a_value'])) { $aResult[$Result['id']]['sOS'] = $attributes['4']['a_value']; } $aResult[$Result['id']]['sSlotNumber'] = 'unknown'; if (isset($attributes['28']['a_value']) && $attributes['28']['a_value'] != '') { $aResult[$Result['id']]['sSlotNumber'] = $attributes['28']['a_value']; } // Location $aResult[$Result['id']]['sLocation'] = getLocation($Result); // IP Informations $aResult[$Result['id']]['ipV4List'] = getObjectIPv4AllocationList($Result['id']); $aResult[$Result['id']]['ipV6List'] = getObjectIPv6AllocationList($Result['id']); // Port (MAC) Informations $aResult[$Result['id']]['ports'] = getObjectPortsAndLinks($Result['id']); $iTotal++; } if (isset($_GET['csv'])) { header('Content-type: text/csv'); header('Content-Disposition: attachment; filename=export_' . date("Ymdhis") . '.csv'); header('Pragma: no-cache'); header('Expires: 0'); $outstream = fopen("php://output", "w"); $aCSVRow = array('Name', 'MAC', 'IP(s)', 'Comment', 'Contact', 'Type', 'OEM', 'HW Expire Date', 'OS', 'Location'); fputcsv($outstream, $aCSVRow); foreach ($aResult as $id => $aRow) { $aCSVRow = array(); $aCSVRow[0] = $aRow['sName']; $aCSVRow[1] = ''; foreach ($aRow['ports'] as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { $aCSVRow[1] .= $aPortDetails['l2address'] . ' '; } } $aCSVRow[1] = trim($aCSVRow[1]); $aCSVRow[2] = ''; foreach ($aRow['ipV4List'] as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { $aCSVRow[2] .= $key . ' '; } } foreach ($aRow['ipV6List'] as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } if (trim($key) != '') { $aCSVRow[2] .= $key . ' '; } } $aCSVRow[2] = trim($aCSVRow[2]); $aCSVRow[3] = str_replace('"', "'", $aRow['sComment']); $aCSVRow[4] = $aRow['sContact']; $aCSVRow[5] = $aRow['HWtype']; $aCSVRow[6] = $aRow['OEMSN']; $aCSVRow[7] = $aRow['HWExpDate']; $aCSVRow[8] = $aRow['sOS']; $aCSVRow[9] = preg_replace('/<a[^>]*>(.*)<\\/a>/iU', '$1', $aRow['sLocation']); fputcsv($outstream, $aCSVRow); } fclose($outstream); exit(0); # Exit normally after send CSV to browser } // Load stylesheet and jquery scripts echo '<link rel="stylesheet" href="extensions/jquery/themes/racktables/style.css" type="text/css"/>'; echo '<script type="text/javascript" src="extensions/jquery/jquery-latest.js"></script>'; echo '<script type="text/javascript" src="extensions/jquery/jquery.tablesorter.js"></script>'; echo '<script type="text/javascript" src="extensions/jquery/picnet.table.filter.min.js"></script>'; // Display the stat array echo '<h2>Server report (' . $iTotal . ')</h2><ul>'; echo '<a href="index.php?page=reports&tab=server&csv">CSV Export</a>'; echo '<table id="reportTable" class="tablesorter"> <thead> <tr> <th>Name</th> <th>MAC</th> <th>IP(s)</th> <th>Comment</th> <th>Contact</th> <th>Type</th> <th>OEM S/N</th> <th>HW Expire Date</th> <th>OS</th> <th>Location</th> </tr> </thead> <tbody>'; foreach ($aResult as $id => $aRow) { echo '<tr> <td><a href="' . makeHref(array('page' => 'object', 'object_id' => $id)) . '">' . $aRow['sName'] . '</a></td> <td>'; foreach ($aRow['ports'] as $portNumber => $aPortDetails) { if (trim($aPortDetails['l2address']) != '') { echo $aPortDetails['l2address'] . '<br/>'; } } echo ' </td> <td>'; foreach ($aRow['ipV4List'] as $key => $aDetails) { if (function_exists('ip4_format')) { $key = ip4_format($key); } if (trim($key) != '') { echo $key . '<br/>'; } } foreach ($aRow['ipV6List'] as $key => $aDetails) { if (function_exists('ip6_format')) { $key = ip6_format($key); } if (trim($key) != '') { echo $key . '<br/>'; } } echo '</td> <td>' . makeLinksInText($aRow['sComment']) . '</td> <td>' . $aRow['sContact'] . '</td> <td>' . $aRow['HWtype'] . '</td> <td>' . $aRow['OEMSN'] . '</td> <td>' . $aRow['HWExpDate'] . '</td> <td>' . $aRow['sOS'] . '</td> <td>' . $aRow['sLocation'] . '</td> </tr>'; } echo ' </tbody> </table>'; echo '<script type="text/javascript"> $(document).ready(function() { $.tablesorter.defaults.widgets = ["zebra"]; $("#reportTable").tablesorter( { headers: { 2: { sorter: "ipAddress" }, }, sortList: [[0,0]] } ) $("#reportTable").tableFilter(); }); </script>'; }