r3309 getObjectVLANDomainID(): dismissed
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 2 Mar 2010 14:09:43 +0000 (14:09 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 2 Mar 2010 14:09:43 +0000 (14:09 +0000)
getVLANSwitchInfo(): new function instead
trigger_vlanconfig(): update accordingly
trigger_vlanports(): ditto
savePortVLANConfig(): clean up and make setSwitchVLANConfig() do all the work
renderObjectVLANSync(): add some logic to radio inputs rendering

inc/database.php
inc/interface.php
inc/ophandlers.php
inc/triggers.php

index 2d2b6effe3fbfec4dcc53ef291fe3428c9b96044..d3a8f199fe650aae66b8a9710945c1824a0ce4c8 100644 (file)
@@ -3637,14 +3637,12 @@ function commitUpdateVLANDomain ($vdom_id, $vdom_descr)
        return $query->execute (array ($vdom_descr, $vdom_id));
 }
 
-function getObjectVLANDomainID ($object_id)
+function getVLANSwitchInfo ($object_id)
 {
-       global $dbxlink;
-       $query = $dbxlink->prepare ('SELECT domain_id FROM VLANSwitch WHERE object_id = ?');
-       $query->execute (array ($object_id));
-       if ($row = $query->fetch (PDO::FETCH_ASSOC))
-               return $row['domain_id'];
-       return 0;
+       $result = usePreparedSelectBlade ('SELECT domain_id, mutex_rev FROM VLANSwitch WHERE object_id = ?', array ($object_id));
+       if ($result and $row = $result->fetch (PDO::FETCH_ASSOC))
+               return $row;
+       return NULL;
 }
 
 // Return a list of object's ports, which can run 802.1Q, each with a list
index cacb85af286fb57412c368ba3c5041e6135410f4..c0877c01fde8666ca20a4d40905b4149bce9033a 100644 (file)
@@ -6376,7 +6376,7 @@ function renderObjectVLANConfig ($object_id)
 {
        startPortlet ('VLAN domain');
        echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>";
-       if (!($current_vdom_id = getObjectVLANDomainID ($object_id)))
+       if (NULL === $vswitch = getVLANSwitchInfo ($object_id))
        {
                printOpFormIntro ('bind');
                echo "<tr><th width='50%' class=tdright>Current:</th><td class='tdleft sparenetwork'>(none)</td></tr>";
@@ -6391,12 +6391,12 @@ function renderObjectVLANConfig ($object_id)
        }
        else
        {
-               $vdom_info = getVLANDomainInfo ($current_vdom_id);
+               $vdom_info = getVLANDomainInfo ($vswitch['domain_id']);
                echo "<tr><th width='50%' class=tdright>Current:</th><td class=tdleft><a href='";
-               echo makeHref (array ('page' => 'vlandomain', 'vdom_id' => $current_vdom_id));
+               echo makeHref (array ('page' => 'vlandomain', 'vdom_id' => $vswitch['domain_id']));
                echo "'>" . $vdom_info['description'] . '</a></td></tr>';
                echo "<tr><th width='50%' class=tdright>Action:</th><td class=tdleft>";
-               echo '<a href="' . makeHrefProcess (array ('op' => 'unbind', 'vdom_id' => $current_vdom_id, 'object_id' => $object_id));
+               echo '<a href="' . makeHrefProcess (array ('op' => 'unbind', 'vdom_id' => $vswitch['domain_id'], 'object_id' => $object_id));
                echo '">';
                printImageHREF ('CUT', 'unbind');
                echo '</a></td></tr>';
@@ -6645,7 +6645,7 @@ function renderObjectVLANPorts ($object_id)
                renderPortVLANConfig
                (
                        $port_id,
-                       getVLANDomain (getObjectVLANDomainID ($object_id)),
+                       $object_id,
                        array_key_exists ($port_id, $allowed) ? $allowed[$port_id] : array(),
                        array_key_exists ($port_id, $native) ? $native[$port_id] : 0
                );
@@ -6653,14 +6653,16 @@ function renderObjectVLANPorts ($object_id)
        echo '</tr></table>';
 }
 
-function renderPortVLANConfig ($port_id, $vdom, $allowed, $native)
+function renderPortVLANConfig ($port_id, $object_id, $allowed, $native)
 {
+       $vswitch = getVLANSwitchInfo ($object_id);
+       $vdom = getVLANDomain ($vswitch['domain_id']);
        if (!count ($vdom['vlanlist']))
        {
                echo '<td colspan=2>(configured VLAN domain is empty)</td>';
                return;
        }
-       printOpFormIntro ('savePortVLANConfig', array ('port_id' => $port_id));
+       printOpFormIntro ('savePortVLANConfig', array ('port_id' => $port_id, 'mutex_rev' => $vswitch['mutex_rev']));
        echo '<td width="35%">';
        echo '<table border=0 cellspacing=0 cellpadding=3 align=center>';
        echo '<tr><th colspan=2>allowed</th></tr>';
@@ -6842,7 +6844,6 @@ function renderObjectVLANSync ($object_id)
                                $formports[$port_id]['port_name'] = $port['name'];
                                break;
                        }
-       printOpFormIntro ('sync');
        $rawconf = array();
        gwRetrieveDeviceConfig ($object_id, $rawconf); // FIXME: handle error
        $deviceconfig = iosReadVLANConfig (dos2unix ($rawconf));
@@ -6861,18 +6862,42 @@ function renderObjectVLANSync ($object_id)
                                break;
                        }
        }
+       $vswitch = getVLANSwitchInfo ($object_id);
+       $domvlans = array_keys (getDomainVLANs ($vswitch['domain_id']));
+       printOpFormIntro ('sync', array ('mutex_rev' => $vswitch['mutex_rev']));
        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
        echo '<tr><th rowspan=2>port name</th><th rowspan=2>desired config</th><th colspan=3>wins</th>';
        echo '<th rowspan=2>running config</th></tr><tr><th>&larr;</th><th>&nbsp;</th><th>&rarr;</th></tr>';
        $order = 'odd';
        foreach ($formports as $port_id => $port)
        {
+               $desired_cfgstring = serializeVLANPack ($port['desired_native'], $port['desired_allowed']);
+               $running_cfgstring = serializeVLANPack ($port['running_native'], $port['running_allowed']);
+               // decide on the radio inputs now
+               $radio = array ('left' => TRUE, 'asis' => TRUE, 'right' => TRUE);
+               $checked = array ('left' => '', 'asis' => ' checked', 'right' => '');
+               if ($desired_cfgstring == $running_cfgstring)
+                       $radio['left'] = $radio['right'] = FALSE;
+               else // turn off each side independently
+               {
+                       if ($desired_cfgstring == 'default')
+                               $radio['left'] = FALSE;
+                       // if any of the running VLANs isn't in the domain...
+                       if (count (array_diff ($port['running_allowed'], $domvlans)))
+                               $radio['right'] = FALSE;
+               }
                echo "<tr class=row_${order}><td>${port['port_name']}</td>";
-               echo '<td>' . serializeVLANPack ($port['desired_native'], $port['desired_allowed']) . '</td>';
-               echo "<td><input name=radio_${port_id} type=radio value=left></td>";
-               echo "<td><input name=radio_${port_id} type=radio value=asis checked></td>";
-               echo "<td><input name=radio_${port_id} type=radio value=right></td>";
-               echo '<td>' . serializeVLANPack ($port['running_native'], $port['running_allowed']) . '</td>';
+               echo "<td>${desired_cfgstring}</td>";
+               foreach ($radio as $pos => $enabled)
+               {
+                       echo '<td>';
+                       if (!$enabled)
+                               echo '&nbsp;';
+                       else
+                               echo "<input name=radio_${port_id} type=radio value=${pos}" . $checked[$pos] . ">";
+                       echo '</td>';
+               }
+               echo "<td>${running_cfgstring}</td>";
                echo '</tr>';
                $order = $nextorder[$order];
        }
index 08379ddde3b471ca9c1d2bd73478df76ad9b4567..afbfc872cb27479f32f70819cd479e3f7e8fd124 100644 (file)
@@ -2172,22 +2172,24 @@ $msgcode['savePortVLANConfig']['ERR2'] = 109;
 function savePortVLANConfig ()
 {
        assertUIntArg ('port_id');
-       global $sic, $dbxlink;
-       $vlan_id = isset ($sic['vlan_id']) ? $sic['vlan_id'] : 0; // 0 means "reset"
+       assertUIntArg ('mutex_rev');
+       global $sic;
        $portinfo = getPortInfo ($sic['port_id']);
        if ($portinfo['object_id'] != $sic['object_id'])
                // should we throw instead?
                return buildRedirectURL (__FUNCTION__, 'ERR1', array(), NULL, NULL, array ('port_id' => $sic['port_id']));
-       $allowed = isset ($sic['allowed_id']) ? $sic['allowed_id'] : array();
-       $native = isset ($sic['native_id']) ? $sic['native_id'] : 0; // 0 means "reset"
-       $dbxlink->beginTransaction();
-       if (setPortVLANConfig ($sic['port_id'], $allowed, $native))
+       try
+       {
+               $allowed = isset ($sic['allowed_id']) ? $sic['allowed_id'] : array();
+               $native = isset ($sic['native_id']) ? $sic['native_id'] : 0; // 0 means "reset"
+               $work = array (array ('port_id' => $sic['port_id'], 'allowed' => $allowed, 'native' => $native));
+               setSwitchVLANConfig ($sic['object_id'], $sic['mutex_rev'], $work);
+       }
+       catch (Exception $e)
        {
-               $dbxlink->commit();
-               return buildRedirectURL (__FUNCTION__, 'OK', array(), NULL, NULL, array ('port_id' => $sic['port_id']));
+               return buildRedirectURL (__FUNCTION__, 'ERR2', array(), NULL, NULL, array ('port_id' => $sic['port_id']));
        }
-       $dbxlink->rollBack();
-       return buildRedirectURL (__FUNCTION__, 'ERR2', array(), NULL, NULL, array ('port_id' => $sic['port_id']));
+       return buildRedirectURL (__FUNCTION__, 'OK', array(), NULL, NULL, array ('port_id' => $sic['port_id']));
 }
 
 $msgcode['bindVLANtoIPv4']['OK'] = 48;
index b9599dc724d383c6d6019eac8040ad6def01ba73..96fd5e93bb392ed96a29d5e1ac0fda8f5c96ceb4 100644 (file)
@@ -185,7 +185,7 @@ function trigger_rackspace ()
 // case additionally heat the tab, if no domain is set.
 function trigger_vlanconfig ()
 {
-       if (getObjectVLANDomainID ($_REQUEST['object_id']))
+       if (NULL !== getVLANSwitchInfo ($_REQUEST['object_id']))
                return 'std';
        elseif (considerConfiguredConstraint (spotEntity ('object', $_REQUEST['object_id']), 'VLANSWITCH_LISTSRC'))
                return 'attn';
@@ -207,6 +207,6 @@ function trigger_ipv4net_vlanconfig ()
 
 function trigger_vlanports ()
 {
-       return getObjectVLANDomainID ($_REQUEST['object_id']) ? 'std' : '';
+       return NULL !== getVLANSwitchInfo ($_REQUEST['object_id']) ? 'std' : '';
 }
 ?>