r4452 Make VLAN switch templates one of "generic" realms:
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 12 Apr 2011 10:53:19 +0000 (10:53 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 12 Apr 2011 10:53:19 +0000 (10:53 +0000)
$SQLSchema: add realm descriptor
amplifyCell(): merge code from getVLANSwitchTemplate()
generateEntityAutoTags(): add respective case
getVSTOptions(): rewrite and move to functions.php
install.php: update ENUM column
upgrade.php: idem
apply8021QOrder(): make use of spotEntity()/listCells()
trigger_vst_editrules(): idem
cloneVST(): idem
render8021QOrderForm(): idem
render8021QStatus(): idem
renderVSTListEditor(): idem
renderVST(): idem
renderVSTRulesEditor(): idem

wwwroot/inc/database.php
wwwroot/inc/functions.php
wwwroot/inc/install.php
wwwroot/inc/interface.php
wwwroot/inc/navigation.php
wwwroot/inc/ophandlers.php
wwwroot/inc/triggers.php
wwwroot/inc/upgrade.php

index 7d13630..11d0924 100644 (file)
@@ -140,6 +140,21 @@ $SQLSchema = array
                'ordcolumns' => array ('row_name', 'Rack.name'),
                'pidcolumn' => 'row_id',
        ),
+       'vst' => array
+       (
+               'table' => 'VLANSwitchTemplate',
+               'columns' => array
+               (
+                       'id' => 'id',
+                       'description' => 'description',
+                       'mutex_rev' => 'mutex_rev',
+                       'saved_by' => 'saved_by',
+                       'switchc' => '(SELECT COUNT(object_id) FROM VLANSwitch WHERE template_id = id)',
+                       'rulec' => '(SELECT COUNT(rule_no) FROM VLANSTRule WHERE vst_id = id)',
+               ),
+               'keycolumn' => 'id',
+               'ordcolumns' => array ('description'),
+       ),
 );
 
 $searchfunc = array
@@ -511,6 +526,22 @@ function amplifyCell (&$record, $dummy = NULL)
        case 'ipv6net':
                $record['8021q'] = getIPv6Network8021QBindings ($record['id']);
                break;
+       case 'vst':
+               $record['rules'] = array();
+               $record['switches'] = array();
+               $result = usePreparedSelectBlade
+               (
+                       'SELECT rule_no, port_pcre, port_role, wrt_vlans, description ' .
+                       'FROM VLANSTRule WHERE vst_id = ? ORDER BY rule_no',
+                       array ($record['id'])
+               );
+               while ($row = $result->fetch (PDO::FETCH_ASSOC))
+                       $record['rules'][$row['rule_no']] = $row;
+               unset ($result);
+               $result = usePreparedSelectBlade ('SELECT object_id, domain_id FROM VLANSwitch WHERE template_id = ?', array ($record['id']));
+               while ($row = $result->fetch (PDO::FETCH_ASSOC))
+                       $record['switches'][$row['object_id']] = $row;
+               break;
        default:
        }
 }
@@ -3248,6 +3279,10 @@ function generateEntityAutoTags ($cell)
                        $ret[] = array ('tag' => '$fileid_' . $cell['id']);
                        $ret[] = array ('tag' => '$any_file');
                        break;
+               case 'vst':
+                       $ret[] = array ('tag' => '$vstid_' . $cell['id']);
+                       $ret[] = array ('tag' => '$any_vst');
+                       break;
                default:
                        throw new InvalidArgException ('cell', '(array)', 'this input does not belong here');
                        break;
@@ -3262,6 +3297,7 @@ function generateEntityAutoTags ($cell)
                case 'ipv4vs':
                case 'ipv4rspool':
                case 'file':
+               case 'vst':
                        if (!count ($cell['etags']))
                                $ret[] = array ('tag' => '$untagged');
                        break;
@@ -4445,15 +4481,6 @@ function getVSTStats()
        return $ret;
 }
 
-function getVSTOptions()
-{
-       $result = usePreparedSelectBlade ('SELECT id, description FROM VLANSwitchTemplate ORDER BY description');
-       $ret = array();
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-               $ret[$row['id']] = $row['description'];
-       return $ret;
-}
-
 function getVLANSwitchTemplate ($vst_id)
 {
        $result = usePreparedSelectBlade ('SELECT id, description, mutex_rev, saved_by FROM VLANSwitchTemplate WHERE id = ?', array ($vst_id));
index 2eb7a6f..b48bc0c 100644 (file)
@@ -58,6 +58,7 @@ $etype_by_pageno = array
        'rack' => 'rack',
        'user' => 'user',
        'file' => 'file',
+       'vst' => 'vst',
 );
 
 // Rack thumbnail image width summands: "front", "interior" and "rear" elements w/o surrounding border.
@@ -2603,6 +2604,14 @@ function getIPv4RSPoolOptions ()
        return $ret;
 }
 
+function getVSTOptions()
+{
+       $ret = array();
+       foreach (listCells ('vst') as $vst)
+               $ret[$vst['id']] = niftyString ($vst['description'], 30, FALSE);
+       return $ret;
+}
+
 // Let's have this debug helper here to enable debugging of process.php w/o interface.php.
 function dump ($var)
 {
@@ -2877,7 +2886,8 @@ function array_values_same ($a1, $a2)
 // the provided list. Return resulting list.
 function apply8021QOrder ($vst_id, $portlist)
 {
-       $vst = getVLANSwitchTemplate ($vst_id);
+       $vst = spotEntity ('vst', $vst_id);
+       amplifyCell ($vst);
        foreach (array_keys ($portlist) as $port_name)
        {
                foreach ($vst['rules'] as $rule)
index 73b6845..8fcd914 100644 (file)
@@ -804,7 +804,7 @@ CREATE TABLE `Script` (
 ) ENGINE=InnoDB;
 
 CREATE TABLE `TagStorage` (
-  `entity_realm` enum('file','ipv4net','ipv4vs','ipv4rspool','object','rack','user','ipv6net') NOT NULL default 'object',
+  `entity_realm` enum('file','ipv4net','ipv4vs','ipv4rspool','object','rack','user','ipv6net','vst') NOT NULL default 'object',
   `entity_id` int(10) unsigned NOT NULL,
   `tag_id` int(10) unsigned NOT NULL default '0',
   UNIQUE KEY `entity_tag` (`entity_realm`,`entity_id`,`tag_id`),
index 184f861..db0399a 100644 (file)
@@ -7380,7 +7380,8 @@ function render8021QOrderForm ($some_id)
                        );
                break;
        case 'vst':
-               $vst = getVLANSwitchTemplate ($some_id);
+               $vst = spotEntity ('vst', $some_id);
+               amplifyCell ($vst);
                foreach ($vst['switches'] as $vswitch)
                        $minuslines[$vswitch['object_id']] = array
                        (
@@ -7486,7 +7487,7 @@ function render8021QStatus ()
 
        echo '</td><td class=pcleft width="40%">';
 
-       if (!count ($vstlist = getVSTStats()))
+       if (!count ($vstlist = listCells ('vst')))
                startPortlet ('no switch templates');
        else
        {
@@ -8540,7 +8541,7 @@ function renderVSTListEditor()
        echo '<tr><th>&nbsp;</th><th>description</th><th>&nbsp</th></tr>';
        if (getConfigVar ('ADDNEW_AT_TOP') == 'yes')
                printNewItemTR();
-       foreach (getVSTStats() as $vst_id => $vst_info)
+       foreach (listCells ('vst') as $vst_id => $vst_info)
        {
                printOpFormIntro ('upd', array ('vst_id' => $vst_id));
                echo '<tr><td>';
@@ -8590,10 +8591,16 @@ function renderVSTRules ($rules, $title = NULL)
 
 function renderVST ($vst_id)
 {
-       $vst = getVLANSwitchTemplate ($vst_id);
+       $vst = spotEntity ('vst', $vst_id);
+       amplifyCell ($vst);
        echo '<table border=0 class=objectview cellspacing=0 cellpadding=0>';
        echo "<tr><td colspan=2 align=center><h1>${vst['description']}</h1><h2>";
        echo "<tr><td class=pcleft width='50%'>";
+       startPortlet ('summary');
+       echo '<table border=0 cellspacing=0 cellpadding=3 width="100%">';
+       printTagTRs ($vst);
+       echo '</table>';
+       finishPortlet();
        renderVSTRules ($vst['rules']);
        echo '</td><td class=pcright>';
        if (!count ($vst['switches']))
@@ -8619,13 +8626,14 @@ function renderVST ($vst_id)
 
 function renderVSTRulesEditor ($vst_id)
 {
-       $vst = getVLANSwitchTemplate ($vst_id);
-       if (count ($vst['rules']))
+       $vst = spotEntity ('vst', $vst_id);
+       amplifyCell ($vst);
+       if ($vst['rulec'])
                $source_options = array();
        else
        {
                $source_options = array();
-               foreach (getVSTStats() as $vst_id => $vst_info)
+               foreach (listCells ('vst') as $vst_id => $vst_info)
                        if ($vst_info['rulec'])
                                $source_options[$vst_id] = niftyString ('(' . $vst_info['rulec'] . ') ' . $vst_info['description']);
        }
index 7a31eae..61c7ea6 100644 (file)
@@ -631,15 +631,19 @@ $page['vst']['bypass_type'] = 'uint';
 $tab['vst']['default'] = 'View';
 $tab['vst']['editrules'] = 'Edit';
 $tab['vst']['8021qorder'] = '802.1Q orders';
+$tab['vst']['tags'] = 'Tags';
 $trigger['vst']['editrules'] = 'trigger_vst_editrules';
 $trigger['vst']['8021qorder'] = 'trigger_8021q_configured';
+$trigger['vst']['tags'] = 'trigger_tags';
 $tabhandler['vst']['default'] = 'renderVST';
 $tabhandler['vst']['editrules'] = 'renderVSTRulesEditor';
 $tabhandler['vst']['8021qorder'] = 'render8021QOrderForm';
+$tabhandler['vst']['tags'] = 'renderEntityTags';
 $ophandler['vst']['editrules']['clone'] = 'cloneVST';
 $ophandler['vst']['editrules']['upd'] = 'updVSTRule';
 $ophandler['vst']['8021qorder']['add'] = 'add8021QOrder';
 $ophandler['vst']['8021qorder']['del'] = 'del8021QOrder';
+$ophandler['vst']['tags']['saveTags'] = 'saveEntityTags';
 
 $page['dqueue']['parent'] = '8021q';
 $page['dqueue']['bypass'] = 'dqcode';
index 33a4b34..e24813f 100644 (file)
@@ -2662,7 +2662,8 @@ function cloneVST()
 {
        assertUIntArg ('mutex_rev', TRUE);
        assertUIntArg ('from_id');
-       $src_vst = getVLANSwitchTemplate ($_REQUEST['from_id']);
+       $src_vst = spotEntity ('vst', $_REQUEST['from_id']);
+       amplifyCell ($src_vst);
        commitUpdateVSTRules (getBypassValue(), $_REQUEST['mutex_rev'], $src_vst['rules']);
        return buildRedirectURL (__FUNCTION__, 'OK');
 }
index f8fc0a4..bec0655 100644 (file)
@@ -333,8 +333,8 @@ function trigger_anyDP ($command, $constraint)
 // tease rules editor tab, when the VST has no rules
 function trigger_vst_editrules()
 {
-       $vst = getVLANSwitchTemplate ($_REQUEST['vst_id']);
-       return count ($vst['rules']) ? 'std' : 'attn';
+       $vst = spotEntity ('vst', getBypassValue());
+       return $vst['rulec'] ? 'std' : 'attn';
 }
 
 ?>
index a6979f4..34e6729 100644 (file)
@@ -1100,6 +1100,7 @@ CREATE TABLE `PortLog` (
                        }
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES ('SSH_OBJS_LISTSRC','none','string','yes','no','yes','Rackcode filter for SSH-managed objects')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES ('TELNET_OBJS_LISTSRC','none','string','yes','no','yes','Rackcode filter for telnet-managed objects')";
+                       $query[] = "ALTER TABLE TagStorage MODIFY COLUMN entity_realm ENUM('file','ipv4net','ipv4vs','ipv4rspool','object','rack','user','ipv6net','vst') NOT NULL default 'object'";
                        $query[] = "UPDATE Config SET varvalue = '0.20.0' WHERE varname = 'DB_VERSION'";
                        break;
                default: