Example #1
0
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>" : '&nbsp;';
            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>" : '&nbsp;';
            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>&nbsp;';
            }
            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>" : '&nbsp;';
            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>" : '&nbsp;';
            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>" : '&nbsp;';
            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>" : '&nbsp;';
            echo "</td></tr></table>";
            break;
        default:
            throw new InvalidArgException('realm', $cell['realm']);
    }
}
Example #2
0
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;
}