r2599 - considerConfiguredConstraint(): move constraint handling here from trigger_i...
authorDenis Ovsienko <infrastation@yandex.ru>
Fri, 3 Apr 2009 12:56:35 +0000 (12:56 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Fri, 3 Apr 2009 12:56:35 +0000 (12:56 +0000)
 - trigger_ipv4(): employ considerConfiguredConstraint()
 - trigger_natv4(): idem
 - getIPv4LBList(): phased out, its code merged into getNarrowObjectList()
 - getNarrowObjectList(): expect constraint name instead of type list
 - IPV4LB_LISTSRC: adjusted default value
 - NAMEFUL_OBJTYPES: replaced with NAMEWARN_LISTSRC
 - REQUIRE_ASSET_TAG_FOR: replaced with ASSETWARN_LISTSRC
 - IPV4_PERFORMERS: replaced with IPV4OBJ_LISTSRC
 - NATV4_PERFORMERS: replaced with IPV4NAT_LISTSRC

inc/database.php
inc/functions.php
inc/interface.php
inc/ophandlers.php
inc/triggers.php
install/init-dictbase.sql
upgrade.php

index 133c27c..5c9808e 100644 (file)
@@ -161,24 +161,31 @@ function getWhereClause ($tagfilter = array())
 }
 
 // Return a simple object list w/o related information, so that the returned value
-// can be directly used by printSelect().
-function getNarrowObjectList ($typeList = array())
+// can be directly used by printSelect(). An optional argument is the name of config
+// option with constraint in RackCode.
+function getNarrowObjectList ($varname = '')
 {
        $ret = array();
        global $dbxlink;
-       foreach ($typeList as $type_id)
+       $query =
+               "select RackObject.id as id, RackObject.name as name, dict_value as objtype_name, " .
+               "objtype_id from " .
+               "RackObject inner join Dictionary on objtype_id=dict_key join Chapter on Chapter.id = Dictionary.chapter_id " .
+               "where RackObject.deleted = 'no' and Chapter.name = 'RackObjectType' " .
+               "order by objtype_id, name";
+       $result = useSelectBlade ($query, __FUNCTION__);
+       while ($row = $result->fetch (PDO::FETCH_ASSOC))
+               $ret[$row['id']] = displayedName ($row);
+       if (strlen ($varname))
        {
-               $type_id = $dbxlink->quote (trim ($type_id));
-               $query =
-                       "select RackObject.id as id, RackObject.name as name, dict_value as objtype_name, " .
-                       "objtype_id from " .
-                       "RackObject inner join Dictionary on objtype_id=dict_key join Chapter on Chapter.id = Dictionary.chapter_id " .
-                       "where RackObject.deleted = 'no' and Chapter.name = 'RackObjectType' " .
-                       "and objtype_id = ${type_id} " .
-                       "order by name";
-               $result = useSelectBlade ($query, __FUNCTION__);
-               while ($row = $result->fetch (PDO::FETCH_ASSOC))
-                       $ret[$row['id']] = displayedName ($row);
+               $filtertext = getConfigVar ('IPV4LB_LISTSRC');
+               if (strlen ($filtertext))
+               {
+                       $filter = spotPayload ($filtertext, 'SYNT_EXPR');
+                       if ($filter['result'] != 'ACK')
+                               return array();
+                       $ret = filterEntityList ($ret, 'object', $filter['load']);
+               }
        }
        return $ret;
 }
index 2066068..8cf0be9 100644 (file)
@@ -43,7 +43,7 @@ function displayedName ($objectData)
 {
        if ($objectData['name'] != '')
                return $objectData['name'];
-       elseif (in_array ($objectData['objtype_id'], explode (',', getConfigVar ('NAMEFUL_OBJTYPES'))))
+       elseif (considerConfiguredConstraint ('object', $objectData['id'], 'NAMEWARN_LISTSRC'))
                return "ANONYMOUS " . $objectData['objtype_name'];
        else
                return "[${objectData['objtype_name']}]";
@@ -1960,20 +1960,6 @@ function judgeEntity ($realm, $id, $expression, $ptable)
        );
 }
 
-function getIPv4LBList()
-{
-       $ret = getNarrowObjectList (array_keys (readChapter ('RackObjectType')));
-       $filtertext = getConfigVar ('IPV4LB_LISTSRC');
-       if (strlen ($filtertext))
-       {
-               $filter = spotPayload ($filtertext, 'SYNT_EXPR');
-               if ($filter['result'] != 'ACK')
-                       return array();
-               $ret = filterEntityList ($ret, 'object', $filter['load']);
-       }
-       return $ret;
-}
-
 // If the requested predicate exists, return its [last] definition.
 // Otherwise return NULL (to signal filterEntityList() about error).
 // Also detect "not set" option selected.
@@ -1989,4 +1975,18 @@ function interpretPredicate ($pname)
        return $ret;
 }
 
+// Tell, if a constraint from config option permits giben record.
+function considerConfiguredConstraint ($entity_realm, $entity_id, $varname)
+{
+       // Compile the same text, which was used for making the decision.
+       $filtertext = getConfigVar ($varname);
+       if (!strlen ($filtertext))
+               return TRUE; // no restriction
+       $filter = spotPayload ($filtertext, 'SYNT_EXPR');
+       if ($filter['result'] != 'ACK')
+               return FALSE; // constraint set, but cannot be used
+       global $rackCode;
+       return judgeEntity ($entity_realm, $entity_id, $filter['load'], buildPredicateTable ($rackCode));
+}
+
 ?>
index 2f7f5ca..d75d5a8 100644 (file)
@@ -822,13 +822,13 @@ function renderRackObject ($object_id = 0)
        echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>\n";
        if (!empty ($info['name']))
                echo "<tr><th width='50%' class=tdright>Common name:</th><td class=tdleft>${info['name']}</td></tr>\n";
-       elseif (in_array ($info['objtype_id'], explode (',', getConfigVar ('NAMEFUL_OBJTYPES'))))
+       elseif (considerConfiguredConstraint ('object', $object_id, 'NAMEWARN_LISTSRC'))
                echo "<tr><td colspan=2 class=msg_error>Common name is missing.</td></tr>\n";
        echo "<tr><th width='50%' class=tdright>Object type:</th>";
        echo "<td class=tdleft><a href='".makeHref(array('page'=>'objgroup', 'group_id'=>$info['objtype_id'], 'hl_object_id'=>$object_id))."'>${info['objtype_name']}</a></td></tr>\n";
        if (!empty ($info['asset_no']))
                echo "<tr><th width='50%' class=tdright>Asset tag:</th><td class=tdleft>${info['asset_no']}</td></tr>\n";
-       elseif (in_array ($info['objtype_id'], explode (',', getConfigVar ('REQUIRE_ASSET_TAG_FOR'))))
+       elseif (considerConfiguredConstraint ('object', $object_id, 'ASSETWARN_LISTSRC'))
                echo "<tr><td colspan=2 class=msg_error>Asset tag is missing.</td></tr>\n";
        if (!empty ($info['label']))
                echo "<tr><th width='50%' class=tdright>Visible label:</th><td class=tdleft>${info['label']}</td></tr>\n";
@@ -2721,7 +2721,7 @@ function renderIPv4AddressAllocations ($dottedquad)
                echo "<tr><td>";
                printImageHREF ('add', 'allocate', TRUE);
                echo "</td><td>";
-               printSelect (getNarrowObjectList (explode (',', getConfigVar ('IPV4_PERFORMERS'))), 'object_id', NULL, 100);
+               printSelect (getNarrowObjectList ('IPV4OBJ_LISTSRC'), 'object_id', NULL, 100);
                echo "</td><td><input type=text tabindex=101 name=bond_name size=10></td><td>";
                printSelect ($aat, 'bond_type', NULL, 102);
                echo "</td><td>";
@@ -4337,7 +4337,7 @@ function renderRSPoolLBForm ($pool_id = 0)
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
        printOpFormIntro ('addLB');
        echo "<tr valign=top><th>LB / VS</th><td class=tdleft>";
-       printSelect (getIPv4LBList(), 'object_id', NULL, 1);
+       printSelect (getNarrowObjectList ('IPV4LB_LISTSRC'), 'object_id', NULL, 1);
        printSelect ($vs_list, 'vs_id', NULL, 2);
        echo "</td><td>";
        printImageHREF ('add', 'Configure LB', TRUE, 5);
@@ -4388,7 +4388,7 @@ function renderVServiceLBForm ($vs_id = 0)
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
        printOpFormIntro ('addLB');
        echo "<tr valign=top><th>LB / RS pool</th><td class=tdleft>";
-       printSelect (getIPv4LBList(), 'object_id', NULL, 1);
+       printSelect (getNarrowObjectList ('IPV4LB_LISTSRC'), 'object_id', NULL, 1);
        printSelect ($rsplist, 'pool_id', NULL, 2);
        echo "</td><td>";
        printImageHREF ('add', 'Configure LB', TRUE, 5);
index afb826d..e74322e 100644 (file)
@@ -916,16 +916,12 @@ function resetUIConfig()
        setConfigVar ('default_port_type','24');
        setConfigVar ('MASSCOUNT','15');
        setConfigVar ('MAXSELSIZE','30');
-       setConfigVar ('NAMEFUL_OBJTYPES','4,7,8');
        setConfigVar ('ROW_SCALE','2');
        setConfigVar ('PORTS_PER_ROW','12');
        setConfigVar ('IPV4_ADDRS_PER_PAGE','256');
        setConfigVar ('DEFAULT_RACK_HEIGHT','42');
-       setConfigVar ('REQUIRE_ASSET_TAG_FOR','4,7,8');
        setConfigVar ('DEFAULT_SLB_VS_PORT','');
        setConfigVar ('DEFAULT_SLB_RS_PORT','');
-       setConfigVar ('IPV4_PERFORMERS','1,4,7,8,12,14,445,447');
-       setConfigVar ('NATV4_PERFORMERS','4,7,8');
        setConfigVar ('DETECT_URLS','no');
        setConfigVar ('RACK_PRESELECT_THRESHOLD','1');
        setConfigVar ('DEFAULT_IPV4_RS_INSERVICE','no');
@@ -946,7 +942,11 @@ function resetUIConfig()
        setConfigVar ('PREVIEW_TEXT_COLS', '80');
        setConfigVar ('PREVIEW_IMAGE_MAXPXS', '320');
        setConfigVar ('VENDOR_SIEVE', '');
-       setConfigVar ('IPV4LB_LISTSRC', '');
+       setConfigVar ('IPV4LB_LISTSRC', '{$objtype_4}');
+       setConfigVar ('IPV4OBJ_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8} or {$objtype_12} or {$objtype_445} or {$objtype_447}');
+       setConfigVar ('IPV4NAT_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}');
+       setConfigVar ('ASSETWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}');
+       setConfigVar ('NAMEWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}');
        return buildRedirectURL (__FUNCTION__, 'OK');
 }
 
index 28d3d99..fce1fec 100644 (file)
@@ -62,29 +62,19 @@ function trigger_emptyRackspace ()
 function trigger_isloadbalancer ()
 {
        assertUIntArg ('object_id', __FUNCTION__);
-       // Compile the same text, which was used for making the decision.
-       $filtertext = getConfigVar ('IPV4LB_LISTSRC');
-       if (!strlen ($filtertext))
-               return TRUE; // no restriction, always show the tab
-       $filter = spotPayload ($filtertext, 'SYNT_EXPR');
-       if ($filter['result'] != 'ACK')
-               return FALSE; // filter set, but cannot be used
-       global $rackCode;
-       return judgeEntity ('object', $_REQUEST['object_id'], $filter['load'], buildPredicateTable ($rackCode));
+       return considerConfiguredConstraint ('object', $_REQUEST['object_id'], 'IPV4LB_LISTSRC');
 }
 
 function trigger_ipv4 ()
 {
        assertUIntArg ('object_id', __FUNCTION__);
-       $info = getObjectInfo ($_REQUEST['object_id']);
-       return in_array ($info['objtype_id'], explode (',', getConfigVar ('IPV4_PERFORMERS')));
+       return considerConfiguredConstraint ('object', $_REQUEST['object_id'], 'IPV4OBJ_LISTSRC');
 }
 
 function trigger_natv4 ()
 {
        assertUIntArg ('object_id', __FUNCTION__);
-       $info = getObjectInfo ($_REQUEST['object_id']);
-       return in_array ($info['objtype_id'], explode (',', getConfigVar ('NATV4_PERFORMERS')));
+       return considerConfiguredConstraint ('object', $_REQUEST['object_id'], 'IPV4NAT_LISTSRC');
 }
 
 function trigger_poolrscount ()
index de45abc..f3a577a 100644 (file)
@@ -248,16 +248,12 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, descriptio
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('MASSCOUNT','15','uint','no','no','&quot;Fast&quot; form is this many records tall');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('MAXSELSIZE','30','uint','no','no','&lt;SELECT&gt; lists height');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('enterprise','MyCompanyName','string','no','no','Organization name');
-INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('NAMEFUL_OBJTYPES','4,7,8','string','yes','no','Expect common name configured for the following object types');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('ROW_SCALE','2','uint','no','no','Picture scale for rack row display');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('PORTS_PER_ROW','12','uint','no','no','Ports per row in VLANs tab');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4_ADDRS_PER_PAGE','256','uint','no','no','IPv4 addresses per page');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_RACK_HEIGHT','42','uint','yes','no','Default rack height');
-INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('REQUIRE_ASSET_TAG_FOR','4,7,8','string','yes','no','Require asset tag for the following object types');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_SLB_VS_PORT','','uint','yes','no','Default port of SLB virtual service');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_SLB_RS_PORT','','uint','yes','no','Default port of SLB real server');
-INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4_PERFORMERS','1,4,7,8,12,14,445,447','string','yes','no','IPv4-capable object types');
-INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('NATV4_PERFORMERS','4,7,8','string','yes','no','NATv4-capable object types');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DETECT_URLS','no','string','yes','no','Detect URLs in text fields');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('RACK_PRESELECT_THRESHOLD','1','uint','no','no','Rack pre-selection threshold');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_IPV4_RS_INSERVICE','no','string','no','no','Inservice status for new SLB real servers');
@@ -278,7 +274,11 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, descriptio
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('PREVIEW_TEXT_COLS','80','uint','yes','no','Columns for text file preview');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('PREVIEW_IMAGE_MAXPXS','320','uint','yes','no','Max pixels per axis for image file preview');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('VENDOR_SIEVE','','string','yes','no','Vendor sieve configuration');
-INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4LB_LISTSRC','','string','yes','no','IPv4 LBs list source');
+INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4LB_LISTSRC','{$objtype_4}','string','yes','no','List source: IPv4 load balancers');
+INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4OBJ_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8} or {$objtype_12} or {$objtype_445} or {$objtype_447}','string','yes','no','List source: IPv4-enabled objects');
+INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4NAT_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: IPv4 NAT performers');
+INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('ASSETWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: object, for which asset tag should be set');
+INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('NAMEWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: object, for which common name should be set');
 INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DB_VERSION','0.17.0','string','no','yes','Database version.');
 
 INSERT INTO `Script` VALUES ('RackCode','allow {$userid_1}');
index bb287a8..ebe7c8c 100644 (file)
@@ -178,7 +178,15 @@ CREATE TABLE `FileLink` (
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('PREVIEW_TEXT_COLS','80','uint','yes','no','Columns for text file preview')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('PREVIEW_IMAGE_MAXPXS','320','uint','yes','no','Max pixels per axis for image file preview')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('VENDOR_SIEVE','','string','yes','no','Vendor sieve configuration')";
-                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4LB_LISTSRC','','string','yes','no','IPv4 LBs list source')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4LB_LISTSRC','{$objtype_4}','string','yes','no','List source: IPv4 load balancers')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4OBJ_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8} or {$objtype_12} or {$objtype_445} or {$objtype_447}','string','yes','no','List source: IPv4-enabled objects')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4NAT_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: IPv4 NAT performers')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('ASSETWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: object, for which asset tag should be set')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('NAMEWARN_LISTSRC','{$objtype_4} or {$objtype_7} or {$objtype_8}','string','yes','no','List source: object, for which common name should be set')";
+                       $query[] = "delete from Config where varname = 'NAMEFUL_OBJTYPES'";
+                       $query[] = "delete from Config where varname = 'REQUIRE_ASSET_TAG_FOR'";
+                       $query[] = "delete from Config where varname = 'IPV4_PERFORMERS'";
+                       $query[] = "delete from Config where varname = 'NATV4_PERFORMERS'";
                        $query[] = "alter table TagTree add column valid_realm set('file','ipv4net','ipv4vs','ipv4rspool','object','rack','user') not null default 'file,ipv4net,ipv4vs,ipv4rspool,object,rack,user' after parent_id";
                        $result = $dbxlink->query ("select user_id, user_name, user_realname from UserAccount where user_enabled = 'no'");
                        while ($row = $result->fetch (PDO::FETCH_ASSOC))