r4219 update: UI: rack lists are now reduced by common tags with object on Rackspace tab
authorAlexey Andriyanov <alan@al-an.info>
Sun, 13 Feb 2011 10:15:58 +0000 (10:15 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Sun, 13 Feb 2011 10:15:58 +0000 (10:15 +0000)
renderRackSpaceForObject: reducing rack lists by common tags with object on Rackspace tab
ophandlers.php, install.php, upgrade.php: new config var FILTER_RACKLIST_BY_TAGS introduced

ChangeLog
wwwroot/css/pi.css
wwwroot/inc/interface.php
wwwroot/inc/ophandlers.php
wwwroot/install.php
wwwroot/upgrade.php

index 9d949f4..f9974e4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+0.19.1
+       update: UI: rack lists are now reduced by common tags with object on Rackspace tab (FILTER_RACKLIST_BY_TAGS config var)
 0.19.0 2011-02-12
        new feature: IPv6 support, except of LivePTR, NAT and SLB functionality (by Alexey Andriyanov)
        new feature: cable ID column for links (#328, by Giovani Zamboni and Jens Weibler)
index 51b2bc8..57f73da 100644 (file)
@@ -628,3 +628,8 @@ a.toggleTreeMode {
 a.img-link {
        vertical-align: bottom;
 }
+
+/* text label with rackcode (object-rackspace tab) */
+.filter-text {
+       font-family: "Courier New",Courier,monospace;
+}      
index 4bc614f..39bb7e7 100644 (file)
@@ -2022,6 +2022,38 @@ function renderRackSpaceForObject ($object_id)
        echo "<td class=pcleft height='1%'>";
        startPortlet ('Racks');
        $allRacksData = listCells ('rack');
+
+       // filter rack list to match only racks having common tags with the object (reducing $allRacksData)
+       if (! isset ($_REQUEST['show_all_racks']) and getConfigVar ('FILTER_RACKLIST_BY_TAGS') == 'yes')
+       {
+               $matching_racks = array();
+               $object = spotEntity ('object', $object_id);
+               $matched_tags = array();
+               foreach ($allRacksData as $rack)
+                       foreach ($object['etags'] as $tag)
+                               if (tagOnChain ($tag, $rack['etags']) or tagOnChain ($tag, $rack['itags']))
+                               {
+                                       $matching_racks[$rack['id']] = $rack;
+                                       $matched_tags[$tag['id']] = $tag;
+                                       break;
+                               }
+               // add current object's racks even if they dont match filter
+               foreach ($workingRacksData as $rack_id => $rack)
+                       if (! isset ($matching_racks[$rack_id]))
+                               $matching_racks[$rack_id] = $rack;
+               // if matching racks found, and rack list is reduced, show 'show all' link
+               if (count ($matching_racks) and count ($matching_racks) != count ($allRacksData))
+               {
+                       $filter_text = '';
+                       foreach ($matched_tags as $tag)
+                               $filter_text .= (empty ($filter_text) ? '' : ' or ') . '{' . $tag['tag'] . '}';
+                       $href_show_all = trim($_SERVER['REQUEST_URI'], '&');
+                       $href_show_all .= htmlspecialchars('&show_all_racks=1');
+                       echo "(filtered by <span class='filter-text'>$filter_text</span>, <a href='$href_show_all'>show all</a>)<p>";
+                       $allRacksData = $matching_racks;
+               }
+       }
+
        if (count ($allRacksData) <= getConfigVar ('RACK_PRESELECT_THRESHOLD'))
                foreach ($allRacksData as $rack)
                        if (!array_key_exists ($rack['id'], $workingRacksData))
index 0d7a714..f51b4a2 100644 (file)
@@ -1419,7 +1419,8 @@ function resetUIConfig()
        setConfigVar ('SHRINK_TAG_TREE_ON_CLICK', 'yes');
        setConfigVar ('MAX_UNFILTERED_ENTITIES', '0');
        setConfigVar ('SYNCDOMAIN_MAX_PROCESSES', '0');
-    setConfigVar ('PORT_EXCLUSION_LISTSRC', '{$typeid_3} or {$typeid_10} or {$typeid_11} or {$typeid_1505} or {$typeid_1506}');
+       setConfigVar ('PORT_EXCLUSION_LISTSRC', '{$typeid_3} or {$typeid_10} or {$typeid_11} or {$typeid_1505} or {$typeid_1506}');
+       setConfigVar ('FILTER_RACKLIST_BY_TAGS', 'yes');
        return buildRedirectURL (__FUNCTION__, 'OK');
 }
 
index df18181..43f09ad 100644 (file)
@@ -1364,6 +1364,7 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdef
 ('MAX_UNFILTERED_ENTITIES','0','uint','no','no','yes','Max item count to display on unfiltered result page'),
 ('SYNCDOMAIN_MAX_PROCESSES','0','uint','yes','no', 'no', 'How many worker proceses syncdomain cron script should create'),
 ('PORT_EXCLUSION_LISTSRC','{\$typeid_3} or {\$typeid_10} or {\$typeid_11} or {\$typeid_1505} or {\$typeid_1506}','string','yes','no','no','List source: objects without ports'),
+('FILTER_RACKLIST_BY_TAGS','yes','string','yes','no','yes','Rackspace: show only racks matching the current object\'s tags'),
 ('DB_VERSION','0.19.0','string','no','yes','no','Database version.');
 
 INSERT INTO `Script` VALUES ('RackCode','allow {\$userid_1}');
index a7740be..200d06c 100644 (file)
@@ -961,6 +961,11 @@ CREATE TABLE `EntityLink` (
                        $query[] = 'ALTER TABLE `VLANSwitchTemplate` DROP COLUMN `max_local_vlans`';
                        $query[] = "UPDATE Config SET varvalue = '0.19.0' WHERE varname = 'DB_VERSION'";
                        break;
+               case '0.19.1':
+                       $query = array_merge ($query, reloadDictionary ($batchid));
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES ('FILTER_RACKLIST_BY_TAGS','yes','string','yes','no','yes','Rackspace: show only racks matching the current object\'s tags')";
+                       $query[] = "UPDATE Config SET varvalue = '0.19.1' WHERE varname = 'DB_VERSION'";
+                       break;
                default:
                        showError ("executeUpgradeBatch () failed, because batch '${batchid}' isn't defined");
                        die;