function removeIPFromVS() { $vip = array('vip' => assertIPArg('ip')); $vsinfo = spotEntity('ipvs', assertUIntArg('vs_id')); amplifyCell($vsinfo); $used = 0; foreach (getTriplets($vsinfo) as $triplet) { if (isVIPEnabled($vip, $triplet['vips'])) { $used++; } } if (usePreparedDeleteBlade('VSIPs', array('vs_id' => $vsinfo['id']) + $vip)) { showSuccess("IP removed" . ($used ? ", it was binded with {$used} SLBs" : '')); } else { showNotice("Nothing changed"); } }
function renderSLBTriplets2($cell, $editable = FALSE, $hl_ip = NULL) { list($realm1, $realm2) = array_values(array_diff(array('object', 'ipvs', 'ipv4rspool'), array($cell['realm']))); if ($editable && getConfigVar('ADDNEW_AT_TOP') == 'yes') { callHook('renderNewTripletForm', $realm1, $realm2); } $fields = array('ipvs' => 'vs_id', 'object' => 'object_id', 'ipv4rspool' => 'rspool_id'); $headers = array('ipvs' => 'VS', 'object' => 'LB', 'ipv4rspool' => 'RS pool'); $triplets = groupTriplets(getTriplets($cell)); // sort $headers by number of grouped cells $new_headers = array(); $grouped_by = array('ipvs' => 0, 'object' => 0, 'ipv4rspool' => 0); foreach ($triplets as $slb) { if (isset($slb['span'])) { foreach (array_keys($slb['span']) as $realm) { $grouped_by[$realm]++; } } } arsort($grouped_by, SORT_NUMERIC); foreach (array_keys($grouped_by) as $realm) { $new_headers[$realm] = $headers[$realm]; } $headers = $new_headers; // render table header if (count($triplets)) { startPortlet('VS group instances (' . count($triplets) . ')'); echo "<table cellspacing=0 cellpadding=5 align=center class=widetable><tr><th></th>"; foreach ($headers as $realm => $header) { if ($realm != $cell['realm']) { echo "<th>{$header}</th>"; } } echo '<th>Ports</th>'; echo '<th>VIPs</th>'; echo "</tr>"; } addJS('js/slb_editor.js'); addJS('js/jquery.thumbhover.js'); $class = 'slb-checks'; if ($editable) { $class .= ' editable'; } // render table rows global $nextorder; $order = 'odd'; $span = array(); foreach ($triplets as $slb) { $vs_cell = spotEntity('ipvs', $slb['vs_id']); amplifyCell($vs_cell); echo makeHtmlTag('tr', array('valign' => 'top', 'class' => "row_{$order} triplet-row", 'data-object_id' => $slb['object_id'], 'data-vs_id' => $slb['vs_id'], 'data-rspool_id' => $slb['rspool_id'])); echo '<td><a href="#" onclick="' . "slb_config_preview(event, {$slb['object_id']}, {$slb['vs_id']}, {$slb['rspool_id']}); return false" . '">' . getImageHREF('Zoom', 'config preview') . '</a></td>'; foreach (array_keys($headers) as $realm) { if ($realm == $cell['realm']) { continue; } if (isset($span[$realm])) { if (--$span[$realm] <= 0) { unset($span[$realm]); } } else { $span_html = ''; if (isset($slb['span'][$realm])) { $span[$realm] = $slb['span'][$realm] - 1; $span_html = sprintf("rowspan=%d", $slb['span'][$realm]); } echo "<td {$span_html} class=tdleft>"; $slb_cell = spotEntity($realm, $slb[$fields[$realm]]); renderSLBEntityCell($slb_cell); echo "</td>"; } } // render ports echo "<td class=tdleft><ul class='{$class}'>"; foreach ($vs_cell['ports'] as $port) { echo '<li class="' . (($row = isPortEnabled($port, $slb['ports'])) ? 'enabled' : 'disabled') . '">'; echo formatVSPort($port) . getPopupSLBConfig($row); if ($editable) { renderPopupTripletForm($slb, $port, NULL, $row); } echo '</li>'; } echo '</ul></td>'; // render VIPs echo "<td class=tdleft><ul class='{$class}'>"; foreach ($vs_cell['vips'] as $vip) { $row = isVIPEnabled($vip, $slb['vips']); $li_class = $row ? 'enabled' : 'disabled'; if ($vip['vip'] === $hl_ip && $li_class == 'enabled') { $li_class .= ' highlight'; } echo "<li class='{$li_class}'>"; echo formatVSIP($vip); if (is_array($row) && !empty($row['prio'])) { $prio_class = 'slb-prio slb-prio-' . preg_replace('/\\s.*/', '', $row['prio']); echo '<span class="' . htmlspecialchars($prio_class, ENT_QUOTES) . '">' . htmlspecialchars($row['prio']) . '</span>'; } echo getPopupSLBConfig($row); if ($editable) { renderPopupTripletForm($slb, NULL, $vip, $row); } echo '</li>'; } echo '<ul></td>'; if ($editable) { echo '<td valign=middle>'; printOpFormIntro('del', array('object_id' => $slb['object_id'], 'vs_id' => $slb['vs_id'], 'rspool_id' => $slb['rspool_id'])); printImageHREF('DELETE', 'Remove triplet', TRUE); echo '</form></td>'; } echo "</tr>\n"; $order = $nextorder[$order]; } if (count($triplets)) { echo "</table>\n"; finishPortlet(); } if ($editable && getConfigVar('ADDNEW_AT_TOP') != 'yes') { callHook('renderNewTripletForm', $realm1, $realm2); } }