r3078 - addPortInterfaceCompat(): new function
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 27 Aug 2009 17:29:11 +0000 (17:29 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 27 Aug 2009 17:29:11 +0000 (17:29 +0000)
 - delPortInterfaceCompat(): ditto
 - renderPortIFCompat(): ditto
 - renderPortIFCompatEditor(): ditto
 - getPortIIFOptions(): ditto
 - commitSupplementPIC(): ditto
 - commitReducePIC(): ditto
 - getNewPortTypeOptions(): split into getPortInterfaceCompat() and real getNewPortTypeOptions()

inc/database.php
inc/functions.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index 91972e25becbdb02b03098fcfb81402b41cee911..7b013863f5d536c17924993d07ea192ce496e14f 100644 (file)
@@ -3688,34 +3688,14 @@ function alreadyUsedL2Address ($address, $my_object_id)
        return $row[0] != 0;
 }
 
-// Return data for printNiftySelect() with port type options. All OIF options
-// for the default IIF will be shown, but only the default OIFs will be present
-// for each other IIFs. IIFs, for which there is no default OIF, will not
-// be listed.
-// This SELECT will be used for the "add new port" form.
-function getNewPortTypeOptions()
+function getPortInterfaceCompat()
 {
        $query = 'SELECT iif_id, iif_name, oif_id, dict_value AS oif_name ' .
                'FROM PortInterfaceCompat INNER JOIN PortInnerInterface ON id = iif_id ' .
                'INNER JOIN Dictionary ON dict_key = oif_id ' .
                'ORDER BY iif_id, oif_name';
        $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array();
-       $prefs = getPortListPrefs();
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-       {
-               // Add all records for the picked IIF under own OPTGROUP
-               if ($row['iif_id'] == $prefs['iif_pick'])
-                       $optgroup = $row['iif_name'];
-               elseif (array_key_exists ($row['iif_id'], $prefs['oif_picks']) and $prefs['oif_picks'][$row['iif_id']] == $row['oif_id'])
-                       $optgroup = 'other';
-               else
-                       continue;
-               if (!array_key_exists ($optgroup, $ret))
-                       $ret[$optgroup] = array();
-               $ret[$optgroup][$row['iif_id'] . '-' . $row['oif_id']] = $row['oif_name'];
-       }
-       return $ret;
+       return $result->fetchAll (PDO::FETCH_ASSOC);
 }
 
 // Return a set of options for a plain SELECT. These options include the current
@@ -3733,4 +3713,29 @@ function getExistingPortTypeOptions ($port_id)
        return $ret;
 }
 
+function getPortIIFOptions()
+{
+       $ret = array();
+       $result = useSelectBlade ('SELECT id, iif_name FROM PortInnerInterface ORDER BY iif_name', __FUNCTION__);
+       while ($row = $result->fetch (PDO::FETCH_ASSOC))
+               $ret[$row['id']] = $row['iif_name'];
+       return $ret;
+}
+
+function commitSupplementPIC ($iif_id, $oif_id)
+{
+       return useInsertBlade
+       (
+               'PortInterfaceCompat',
+               array ('iif_id' => $iif_id, 'oif_id' => $oif_id)
+       );
+}
+
+function commitReducePIC ($iif_id, $oif_id)
+{
+       global $dbxlink;
+       $query = "DELETE FROM PortInterfaceCompat WHERE iif_id = ${iif_id} AND oif_id = ${oif_id}";
+       return $dbxlink->query ($query) != NULL;
+}
+
 ?>
index 071832b4d50d9bf4cd7b905332107a4a92b75f76..06946a9927943650447883a2422af51f869b0c2f 100644 (file)
@@ -2233,4 +2233,28 @@ function getPortListPrefs()
        return $ret;
 }
 
+// Return data for printNiftySelect() with port type options. All OIF options
+// for the default IIF will be shown, but only the default OIFs will be present
+// for each other IIFs. IIFs, for which there is no default OIF, will not
+// be listed.
+// This SELECT will be used for the "add new port" form.
+function getNewPortTypeOptions()
+{
+       $ret = array();
+       $prefs = getPortListPrefs();
+       foreach (getPortInterfaceCompat() as $row)
+       {
+               if ($row['iif_id'] == $prefs['iif_pick'])
+                       $optgroup = $row['iif_name'];
+               elseif (array_key_exists ($row['iif_id'], $prefs['oif_picks']) and $prefs['oif_picks'][$row['iif_id']] == $row['oif_id'])
+                       $optgroup = 'other';
+               else
+                       continue;
+               if (!array_key_exists ($optgroup, $ret))
+                       $ret[$optgroup] = array();
+               $ret[$optgroup][$row['iif_id'] . '-' . $row['oif_id']] = $row['oif_name'];
+       }
+       return $ret;
+}
+
 ?>
index 1e22c0af34ce47d0eaa59ad926d47a63511f1a1b..03914cad72e34a4f1bf117d5a43418e4d2f8aaaf 100644 (file)
@@ -6128,4 +6128,66 @@ function dynamic_title_decoder ($path_position)
        }
 }
 
+function renderPortIFCompat()
+{
+       global $nextorder;
+       echo '<br><table class=cooltable align=center border=0 cellpadding=5 cellspacing=0>';
+       echo '<tr><th class=tdleft>inner interface</th><th class=tdleft>outer interface</th></tr>';
+       $last_iif_id = 0;
+       $order = 'even';
+       foreach (getPortInterfaceCompat() as $record)
+       {
+               if ($last_iif_id != $record['iif_id'])
+               {
+                       $order = $nextorder[$order];
+                       $last_iif_id = $record['iif_id'];
+               }
+               echo "<tr class=row_${order}><td class=tdleft>${record['iif_name']}</td><td class=tdleft>${record['oif_name']}</td></tr>";
+       }
+       echo '</table>';
+}
+
+function renderPortIFCompatEditor()
+{
+       function printNewitemTR()
+       {
+               printOpFormIntro ('add');
+               echo '<tr><th class=tdleft>';
+               printImageHREF ('add', 'add pair', TRUE);
+               echo '</th><th class=tdleft>';
+               printSelect (getPortIIFOptions(), 'iif_id');
+               echo '</th><th class=tdleft>';
+               printSelect (readChapter (CHAP_PORTTYPE), 'oif_id');
+               echo '</th></tr></form>';
+       }
+
+       startPortlet ('[WDM helpers]');
+       finishPortlet();
+
+       startPortlet ('interface by interface');
+       global $nextorder;
+       $last_iif_id = 0;
+       $order = 'even';
+       echo '<br><table class=cooltable align=center border=0 cellpadding=5 cellspacing=0>';
+       echo '<tr><th>&nbsp;</th><th class=tdleft>inner interface</th><th class=tdleft>outer interface</th></tr>';
+       if (getConfigVar ('ADDNEW_AT_TOP') == 'yes')
+               printNewitemTR();
+       foreach (getPortInterfaceCompat() as $record)
+       {
+               if ($last_iif_id != $record['iif_id'])
+               {
+                       $order = $nextorder[$order];
+                       $last_iif_id = $record['iif_id'];
+               }
+               echo "<tr class=row_${order}><td>";
+               echo '<a href="' . makeHrefProcess (array ('op' => 'del', 'iif_id' => $record['iif_id'], 'oif_id' => $record['oif_id'])) . '">';
+               printImageHREF ('delete', 'remove pair', TRUE);
+               echo "</a></td><td class=tdleft>${record['iif_name']}</td><td class=tdleft>${record['oif_name']}</td></tr>";
+       }
+       if (getConfigVar ('ADDNEW_AT_TOP') != 'yes')
+               printNewitemTR();
+       echo '</table>';
+       finishPortlet();
+}
+
 ?>
index b58c6ffa46e5b1afb441f2289d7fbc1c192f3814..2e7f93f38a8399998c7cd05d25a182b4562d1a5c 100644 (file)
@@ -312,7 +312,7 @@ $tabhandler['perms']['default'] = 'renderRackCodeViewer';
 $tabhandler['perms']['edit'] = 'renderRackCodeEditor';
 $ophandler['perms']['edit']['saveRackCode'] = 'saveRackCode';
 
-$page['portmap']['title'] = 'Port compatibility map';
+$page['portmap']['title'] = 'Port compatibility';
 $page['portmap']['parent'] = 'config';
 $tab['portmap']['default'] = 'View';
 $tab['portmap']['edit'] = 'Change';
@@ -320,6 +320,15 @@ $tabhandler['portmap']['default'] = 'renderPortMapViewer';
 $tabhandler['portmap']['edit'] = 'renderPortMapEditor';
 $ophandler['portmap']['edit']['save'] = 'savePortMap';
 
+$page['portifcompat']['title'] = 'Enabled port types';
+$page['portifcompat']['parent'] = 'config';
+$tab['portifcompat']['default'] = 'View';
+$tab['portifcompat']['edit'] = 'Edit';
+$tabhandler['portifcompat']['default'] = 'renderPortIFCompat';
+$tabhandler['portifcompat']['edit'] = 'renderPortIFCompatEditor';
+$ophandler['portifcompat']['edit']['add'] = 'addPortInterfaceCompat';
+$ophandler['portifcompat']['edit']['del'] = 'delPortInterfaceCompat';
+
 $page['attrs']['title'] = 'Attributes';
 $page['attrs']['parent'] = 'config';
 $tab['attrs']['default'] = 'View';
index b935a022f84fba57f2b591a83293b7d37d969bd5..fc7fd9017bc97a3eeecd4198e375484943bf61ce 100644 (file)
@@ -1924,4 +1924,26 @@ function updateFileText ()
        return buildRedirectURL (__FUNCTION__, 'ERR2');
 }
 
+$msgcode['addPortInterfaceCompat']['OK'] = 48;
+$msgcode['addPortInterfaceCompat']['ERR'] = 110;
+function addPortInterfaceCompat ()
+{
+       assertUIntArg ('iif_id', __FUNCTION__);
+       assertUIntArg ('oif_id', __FUNCTION__);
+       if (commitSupplementPIC ($_REQUEST['iif_id'], $_REQUEST['oif_id']))
+               return buildRedirectURL (__FUNCTION__, 'OK');
+       return buildRedirectURL (__FUNCTION__, 'ERR');
+}
+
+$msgcode['delPortInterfaceCompat']['OK'] = 49;
+$msgcode['delPortInterfaceCompat']['ERR'] = 111;
+function delPortInterfaceCompat ()
+{
+       assertUIntArg ('iif_id', __FUNCTION__);
+       assertUIntArg ('oif_id', __FUNCTION__);
+       if (commitReducePIC ($_REQUEST['iif_id'], $_REQUEST['oif_id']))
+               return buildRedirectURL (__FUNCTION__, 'OK');
+       return buildRedirectURL (__FUNCTION__, 'ERR');
+}
+
 ?>