function findObjectParentCandidates($object_id) { $object = spotEntity('object', $object_id); $args = array($object['objtype_id'], $object_id, $object_id); $query = "SELECT O.id, O.name, O.objtype_id FROM Object O "; $query .= "LEFT JOIN ObjectParentCompat OPC ON O.objtype_id = OPC.parent_objtype_id "; $query .= "WHERE OPC.child_objtype_id = ? "; $query .= "AND O.id != ? "; // exclude existing parents $query .= "AND O.id NOT IN (SELECT parent_entity_id FROM EntityLink WHERE parent_entity_type = 'object' AND child_entity_type = 'object' AND child_entity_id = ?) "; if ($object['objtype_id'] == 1504 || $object['objtype_id'] == 1507) { array_push($args, $object['objtype_id'], $object_id, $object_id); $query .= "AND OPC.parent_objtype_id != 4 "; $query .= "UNION "; $query .= "SELECT O.id, O.name, O.objtype_id FROM Object O "; $query .= "LEFT JOIN ObjectParentCompat OPC ON O.objtype_id = OPC.parent_objtype_id "; $query .= "LEFT JOIN AttributeValue AV ON O.id = AV.object_id "; $query .= "WHERE OPC.child_objtype_id = ? "; $query .= "AND (O.objtype_id = 4 AND AV.attr_id = 26 AND AV.uint_value = 1501) "; $query .= "AND O.id != ? "; // exclude existing parents $query .= "AND O.id NOT IN (SELECT parent_entity_id FROM EntityLink WHERE parent_entity_type = 'object' AND child_entity_type = 'object' AND child_entity_id = ?) "; } $query .= "ORDER BY 2"; $result = usePreparedSelectBlade($query, $args); $ret = array(); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { $ret[$row['id']] = empty($row['name']) ? sprintf("[%s] - object %d", decodeObjectType($row['objtype_id']), $row['id']) : $row['name']; } return $ret; }
function renderCell($cell) { $override = callHook('getRenderedCell', $cell); if (isset($override)) { echo $override; return; } switch ($cell['realm']) { case 'user': echo "<table class='slbcell vscell'><tr><td rowspan=3 width='5%'>"; printImageHREF('USER'); echo '</td><td>' . mkA(stringForTD($cell['user_name']), 'user', $cell['user_id']) . '</td></tr>'; if (strlen($cell['user_realname'])) { echo "<tr><td><strong>" . stringForTD($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>' . stringForTD($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>" . stringForTD($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']); $img = "<img border=0 width={$thumbwidth} height={$thumbheight} title='{$cell['height']} units' " . "src='?module=image&img=minirack&rack_id={$cell['id']}'>"; echo mkA($img, 'rack', $cell['id']); echo "</td><td>"; echo mkA('<strong>' . stringForTD($cell['name']) . '</strong>', 'rack', $cell['id']); echo "</td></tr><tr><td>"; echo stringForTD($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>' . stringForTD($cell['name']) . '</strong>', 'location', $cell['id']); echo "</td></tr><tr><td>"; echo stringForTD($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>' . stringForLabel($cell['dname']) . '</strong>', 'object', $cell['id']); echo "<br /><small>" . stringForLabel(decodeObjectType($cell['objtype_id'])) . "</small></td></tr>"; echo '<tr><td>', count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : ' '; echo "</td></tr></table>"; break; default: throw new InvalidArgException('realm', $cell['realm']); } }
function renderEditAttrMapForm() { function printNewItemTR($attrMap) { printOpFormIntro('add'); echo '<tr><td colspan=2 class=tdleft>'; echo '<select name=attr_id tabindex=100>'; $shortType['uint'] = 'U'; $shortType['float'] = 'F'; $shortType['string'] = 'S'; $shortType['dict'] = 'D'; $shortType['date'] = 'T'; foreach ($attrMap as $attr) { echo "<option value={$attr['id']}>[" . $shortType[$attr['type']] . "] {$attr['name']}</option>"; } echo "</select></td><td class=tdleft>"; printImageHREF('add', '', TRUE); echo ' '; $objtypes = readChapter(CHAP_OBJTYPE, 'o'); printNiftySelect(cookOptgroups($objtypes), array('name' => 'objtype_id', 'tabindex' => 101)); echo ' <select name=chapter_no tabindex=102><option value=0>-- dictionary chapter for [D] attributes --</option>'; foreach (getChapterList() as $chapter) { if ($chapter['sticky'] != 'yes') { echo "<option value='{$chapter['id']}'>{$chapter['name']}</option>"; } } echo '</select></td></tr></form>'; } global $attrtypes, $nextorder; $order = 'odd'; $attrMap = getAttrMap(); startPortlet('Attribute map'); echo "<table class=cooltable border=0 cellpadding=5 cellspacing=0 align=center>"; echo '<tr><th class=tdleft>Attribute name</th><th class=tdleft>Attribute type</th><th class=tdleft>Applies to</th></tr>'; if (getConfigVar('ADDNEW_AT_TOP') == 'yes') { printNewItemTR($attrMap); } foreach ($attrMap as $attr) { if (!count($attr['application'])) { continue; } echo "<tr class=row_{$order}><td class=tdleft>{$attr['name']}</td>"; echo "<td class=tdleft>" . $attrtypes[$attr['type']] . "</td><td colspan=2 class=tdleft>"; foreach ($attr['application'] as $app) { if ($app['sticky'] == 'yes') { printImageHREF('nodelete', 'system mapping'); } elseif ($app['refcnt']) { printImageHREF('nodelete', $app['refcnt'] . ' value(s) stored for objects'); } else { echo getOpLink(array('op' => 'del', 'attr_id' => $attr['id'], 'objtype_id' => $app['objtype_id']), '', 'delete', 'Remove mapping'); } echo ' '; if ($attr['type'] == 'dict') { echo decodeObjectType($app['objtype_id'], 'o') . " (values from '{$app['chapter_name']}')<br>"; } else { echo decodeObjectType($app['objtype_id'], 'o') . '<br>'; } } echo "</td></tr>"; $order = $nextorder[$order]; } if (getConfigVar('ADDNEW_AT_TOP') != 'yes') { printNewItemTR($attrMap); } echo "</table>\n"; finishPortlet(); }
function setDisplayedName(&$cell) { if ($cell['realm'] == 'object') { if ($cell['name'] != '') { $cell['dname'] = $cell['name']; } else { $cell['dname'] = '[' . decodeObjectType($cell['objtype_id'], 'o') . ']'; } } elseif ($cell['realm'] == 'ipv4vs') { if ($cell['proto'] == 'MARK') { $cell['dname'] = "fwmark: " . implode('', unpack('N', substr($cell['vip_bin'], 0, 4))); } else { $cell['dname'] = $cell['vip'] . ':' . $cell['vport'] . '/' . $cell['proto']; } } }