function renderCell($cell) { switch ($cell['realm']) { case 'user': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; printImageHREF('USER'); echo '</td><td>' . mkA($cell['user_name'], 'user', $cell['user_id']) . '</td></tr>'; if (strlen($cell['user_realname'])) { echo "<tr><td><strong>" . niftyString($cell['user_realname']) . "</strong></td></tr>"; } else { echo "<tr><td class=sparenetwork>no name</td></tr>"; } echo '<td>'; if (!isset($cell['etags'])) { $cell['etags'] = getExplicitTagsOnly(loadEntityTags('user', $cell['user_id'])); } echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; case 'file': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; switch ($cell['type']) { case 'text/plain': printImageHREF('text file'); break; case 'image/jpeg': case 'image/png': case 'image/gif': printImageHREF('image file'); break; default: printImageHREF('empty file'); break; } echo "</td><td>"; echo mkA('<strong>' . niftyString($cell['name']) . '</strong>', 'file', $cell['id']); echo "</td><td rowspan=3 valign=top>"; if (isset($cell['links']) and count($cell['links'])) { printf("<small>%s</small>", serializeFileLinks($cell['links'])); } echo "</td></tr><tr><td>"; echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo '</td></tr><tr><td>'; if (isolatedPermission('file', 'download', $cell)) { // FIXME: reuse renderFileDownloader() echo "<a href='?module=download&file_id={$cell['id']}'>"; printImageHREF('download', 'Download file'); echo '</a> '; } echo formatFileSize($cell['size']); echo "</td></tr></table>"; break; case 'ipv4vs': case 'ipvs': case 'ipv4rspool': renderSLBEntityCell($cell); break; case 'ipv4net': case 'ipv6net': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; printImageHREF('NET'); echo '</td><td>' . mkA("{$cell['ip']}/{$cell['mask']}", $cell['realm'], $cell['id']); echo getRenderedIPNetCapacity($cell); echo '</td></tr>'; echo "<tr><td>"; if (strlen($cell['name'])) { echo "<strong>" . niftyString($cell['name']) . "</strong>"; } else { echo "<span class=sparenetwork>no name</span>"; } // render VLAN renderNetVLAN($cell); echo "</td></tr>"; echo '<tr><td>'; echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; case 'rack': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; $thumbwidth = getRackImageWidth(); $thumbheight = getRackImageHeight($cell['height']); echo "<img border=0 width={$thumbwidth} height={$thumbheight} title='{$cell['height']} units' "; echo "src='?module=image&img=minirack&rack_id={$cell['id']}'>"; echo "</td><td>"; echo mkA('<strong>' . niftyString($cell['name']) . '</strong>', 'rack', $cell['id']); echo "</td></tr><tr><td>"; echo niftyString($cell['comment']); echo "</td></tr><tr><td>"; echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; case 'location': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; printImageHREF('LOCATION'); echo "</td><td>"; echo mkA('<strong>' . niftyString($cell['name']) . '</strong>', 'location', $cell['id']); echo "</td></tr><tr><td>"; echo niftyString($cell['comment']); echo "</td></tr><tr><td>"; echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; case 'object': echo "<table class='slbcell vscell'><tr><td rowspan=2 width='5%'>"; printImageHREF('OBJECT'); echo '</td><td>'; echo mkA('<strong>' . niftyString($cell['dname']) . '</strong>', 'object', $cell['id']); echo '</td></tr><tr><td>'; echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; default: throw new InvalidArgException('realm', $cell['realm']); } }
function searchEntitiesByText($terms) { $summary = array(); if (preg_match(RE_IP4_ADDR, $terms)) { if ($net_id = getIPv4AddressNetworkId(ip4_parse($terms))) { $summary['ipv4addressbydq'][$terms] = array('net_id' => $net_id, 'ip' => $terms); } } elseif (FALSE !== ($ip_bin = ip6_checkparse($terms))) { if ($net_id = getIPv6AddressNetworkId($ip_bin)) { $summary['ipv6addressbydq'][$net_id] = array('net_id' => $net_id, 'ip' => $ip_bin); } } elseif (preg_match(RE_IP4_NET, $terms)) { list($base, $len) = explode('/', $terms); if (NULL !== ($net_id = getIPv4AddressNetworkId(ip4_parse($base), $len + 1))) { $summary['ipv4network'][$net_id] = spotEntity('ipv4net', $net_id); } } elseif (preg_match('@(.*)/(\\d+)$@', $terms, $matches) && FALSE !== ($ip_bin = ip6_checkparse($matches[1]))) { if (NULL !== ($net_id = getIPv6AddressNetworkId($ip_bin, $matches[2] + 1))) { $summary['ipv6network'][$net_id] = spotEntity('ipv6net', $net_id); } } else { // search by FQDN has special treatment - if single object found, do not search by other fields $object_id_by_fqdn = NULL; $domains = preg_split('/\\s*,\\s*/', strtolower(getConfigVar('SEARCH_DOMAINS'))); if (!empty($domains) and $object_id = searchByMgmtHostname($terms)) { // get FQDN $attrs = getAttrValues($object_id); $fqdn = ''; if (isset($attrs[3]['value'])) { $fqdn = strtolower(trim($attrs[3]['value'])); } foreach ($domains as $domain) { if ('.' . $domain === substr($fqdn, -strlen($domain) - 1)) { $object_id_by_fqdn = $object_id; break; } } } if ($object_id_by_fqdn) { $summary['object'][$object_id_by_fqdn] = array('id' => $object_id_by_fqdn, 'method' => 'fqdn'); } else { $summary['object'] = getObjectSearchResults($terms); $summary['ipv4addressbydescr'] = getIPv4AddressSearchResult($terms); $summary['ipv6addressbydescr'] = getIPv6AddressSearchResult($terms); $summary['ipv4network'] = getIPv4PrefixSearchResult($terms); $summary['ipv6network'] = getIPv6PrefixSearchResult($terms); $summary['ipv4rspool'] = getIPv4RSPoolSearchResult($terms); $summary['ipv4vs'] = getIPv4VServiceSearchResult($terms); $summary['user'] = getAccountSearchResult($terms); $summary['file'] = getFileSearchResult($terms); $summary['rack'] = getRackSearchResult($terms); $summary['vlan'] = getVLANSearchResult($terms); } } # Filter search results in a way in some realms to omit records, which the # user would not be able to browse anyway. if (isset($summary['object'])) { foreach ($summary['object'] as $key => $record) { if (!isolatedPermission('object', 'default', spotEntity('object', $record['id']))) { unset($summary['object'][$key]); } } } if (isset($summary['ipv4network'])) { foreach ($summary['ipv4network'] as $key => $netinfo) { if (!isolatedPermission('ipv4net', 'default', $netinfo)) { unset($summary['ipv4network'][$key]); } } } if (isset($summary['ipv6network'])) { foreach ($summary['ipv6network'] as $key => $netinfo) { if (!isolatedPermission('ipv6net', 'default', $netinfo)) { unset($summary['ipv6network'][$key]); } } } if (isset($summary['file'])) { foreach ($summary['file'] as $key => $fileinfo) { if (!isolatedPermission('file', 'default', $fileinfo)) { unset($summary['file'][$key]); } } } // clear empty search result realms foreach ($summary as $key => $data) { if (!count($data)) { unset($summary[$key]); } } return $summary; }