r2865 - renderNewRackForm(): pass current realm to renderNewEntityTags()
authorDenis Ovsienko <infrastation@yandex.ru>
Sun, 14 Jun 2009 12:53:57 +0000 (12:53 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sun, 14 Jun 2009 12:53:57 +0000 (12:53 +0000)
 - renderIPv4SpaceEditor(): idem
 - renderAddMultipleObjectsForm(): idem
 - renderVSListEditForm(): idem
 - editRSPools(): idem
 - renderTagCheckbox(): display refc for each "used" tag, if target realm is known
 - renderEntityTags(): pass current realm to renderTagCheckbox()
 - renderNewEntityTags(): idem
 - renderCellFilterPortlet(): idem, plus provide the current selection to getObjectiveTagTree()
 - getObjectiveTagTree(): omit meaningless routes, but never skip pre-selected nodes

inc/functions.php
inc/interface.php

index 77aa207c98f60fc37752026b87c7ba7b1702664c..802e0043089401d4be30c7f7436a4e11667083d9 100644 (file)
@@ -1116,31 +1116,31 @@ function buildTagChainFromIds ($tagidlist)
 
 // Process a given tag tree and return only meaningful branches. The resulting
 // (sub)tree will have refcnt leaves on every last branch.
-function getObjectiveTagTree ($tree, $realm)
+function getObjectiveTagTree ($tree, $realm, $preselect)
 {
        $self = __FUNCTION__;
        $ret = array();
        foreach ($tree as $taginfo)
        {
-               $subsearch = array();
-               $pick = FALSE;
-               if (count ($taginfo['kids']))
-               {
-                       $subsearch = $self ($taginfo['kids'], $realm);
-                       $pick = count ($subsearch) > 0;
-               }
-               if (isset ($taginfo['refcnt'][$realm]))
-                       $pick = TRUE;
-               if (!$pick)
-                       continue;
-               $ret[] = array
+               $subsearch = $self ($taginfo['kids'], $realm, $preselect);
+               // If the current node addresses something, add it to the result
+               // regardless of how many sub-nodes it features.
+               if
                (
-                       'id' => $taginfo['id'],
-                       'tag' => $taginfo['tag'],
-                       'parent_id' => $taginfo['parent_id'],
-                       'refcnt' => $taginfo['refcnt'],
-                       'kids' => $subsearch
-               );
+                       isset ($taginfo['refcnt'][$realm]) or
+                       count ($subsearch) > 1 or
+                       tagOnIdList ($taginfo, $preselect)
+               )
+                       $ret[] = array
+                       (
+                               'id' => $taginfo['id'],
+                               'tag' => $taginfo['tag'],
+                               'parent_id' => $taginfo['parent_id'],
+                               'refcnt' => $taginfo['refcnt'],
+                               'kids' => $subsearch
+                       );
+               else
+                       $ret = array_merge ($ret, $subsearch);
        }
        return $ret;
 }
index 274d561747e0944d47d044a1eae3e21aa71ca3bf..da5c6853b253729673cfeb7ea535939a9305b384 100644 (file)
@@ -599,7 +599,7 @@ function renderNewRackForm ($row_id)
                $defh = '';
        echo "<tr><th class=tdright>Rack name (*):</th><td class=tdleft><input type=text name=rack_name tabindex=1></td>";
        echo "<td rowspan=4>Assign tags:<br>";
-       renderNewEntityTags();
+       renderNewEntityTags ('rack');
        echo "</td></tr>\n";
        echo "<tr><th class=tdright>Height in units (*):</th><td class=tdleft><input type=text name=rack_height1 tabindex=2 value='${defh}'></td></tr>\n";
        echo "<tr><th class=tdright>Comment:</th><td class=tdleft><input type=text name=rack_comment tabindex=3></td></tr>\n";
@@ -616,7 +616,7 @@ function renderNewRackForm ($row_id)
                $defh = '';
        echo "<tr><th class=tdright>Height in units (*):</th><td class=tdleft><input type=text name=rack_height2 value='${defh}'></td>";
        echo "<td rowspan=3 valign=top>Assign tags:<br>";
-       renderNewEntityTags();
+       renderNewEntityTags ('rack');
        echo "</td></tr>\n";
        echo "<tr><th class=tdright>Rack names (*):</th><td class=tdleft><textarea name=rack_names cols=40 rows=25></textarea></td></tr>\n";
        echo "<tr><td class=submit colspan=2>";
@@ -2168,7 +2168,7 @@ function renderIPv4SpaceEditor ()
        echo "<input type=hidden name=op value=addIPv4Prefix>\n";
        // tags column
        echo '<tr><td rowspan=4><h3>assign tags</h3>';
-       renderNewEntityTags();
+       renderNewEntityTags ('ipv4net');
        echo '</td>';
        // inputs column
        echo "<th class=tdright>prefix</th><td class=tdleft><input type=text name='range' size=18 class='live-validate' tabindex=1></td>";
@@ -2823,7 +2823,7 @@ function renderAddMultipleObjectsForm ()
                if ($i == 0)
                {
                        echo "<td valign=top rowspan=${max}>";
-                       renderNewEntityTags();
+                       renderNewEntityTags ('object');
                        echo "</td>\n";
                }
                echo "</tr>\n";
@@ -2842,7 +2842,7 @@ function renderAddMultipleObjectsForm ()
        echo "</td></tr>";
        echo "<tr><th>Tags</th></tr>";
        echo "<tr><td valign=top>";
-       renderNewEntityTags();
+       renderNewEntityTags ('object');
        echo "</td></tr>";
        echo "<tr><td colspan=2><input type=submit name=got_very_fast_data value='Go!'></td></tr></table>\n";
        echo "</form>\n";
@@ -4399,7 +4399,7 @@ function renderVSListEditForm ()
        printImageHREF ('CREATE', 'create virtual service', TRUE);
        echo "</td></tr><tr><th>VS configuration</th><td colspan=4 class=tdleft><textarea name=vsconfig rows=10 cols=80></textarea></td>\n";
        echo "<td rowspan=2><h3>assign tags</h3>";
-       renderNewEntityTags();
+       renderNewEntityTags ('ipv4vs');
        echo "</td></tr>";
        echo "<tr><th>RS configuration</th><td colspan=4 class=tdleft><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>\n";
        echo "</table>";
@@ -4458,7 +4458,7 @@ function editRSPools ()
        printImageHREF ('CREATE', 'create real server pool', TRUE);
        echo "</td></tr><tr><th>VS configuration</th><td><textarea name=vsconfig rows=10 cols=80></textarea></td>";
        echo "<td rowspan=2><h3>assign tags</h3>";
-       renderNewEntityTags();
+       renderNewEntityTags ('ipv4rspool');
        echo "</td></tr>";
        echo "<tr><th>RS configuration</th><td><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
        echo "</table></form>";
@@ -4810,7 +4810,7 @@ function renderTagTreeEditor ()
        finishPortlet();
 }
 
-function renderTagCheckbox ($inputname, $preselect, $taginfo, $level = 0)
+function renderTagCheckbox ($inputname, $preselect, $taginfo, $refcnt_realm = '', $level = 0)
 {
        $self = __FUNCTION__;
        if (tagOnChain ($taginfo, $preselect))
@@ -4825,21 +4825,23 @@ function renderTagCheckbox ($inputname, $preselect, $taginfo, $level = 0)
        }
        echo "<tr><td colspan=2 class=${class} style='padding-left: " . ($level * 16) . "px;'>";
        echo "<input type=checkbox name='${inputname}[]' value='${taginfo['id']}'${selected}> ";
-       echo $taginfo['tag'] . "</td></tr>\n";
+       echo $taginfo['tag'];
+       if (strlen ($refcnt_realm) and isset ($taginfo['refcnt'][$refcnt_realm]))
+               echo ' <small><i>(' . $taginfo['refcnt'][$refcnt_realm] . ')</i></small>';
+       echo "</td></tr>\n";
        foreach ($taginfo['kids'] as $kid)
-               $self ($inputname, $preselect, $kid, $level + 1);
+               $self ($inputname, $preselect, $kid, $refcnt_realm, $level + 1);
 }
 
 function renderEntityTags ($entity_id)
 {
-       global $tagtree, $target_given_tags, $pageno, $page, $target_given_tags;
-       $bypass_name = $page[$pageno]['bypass'];
+       global $tagtree, $target_given_tags, $pageno, $etype_by_pageno, $target_given_tags;
        startPortlet ('Tag list');
        echo '<table border=0 cellspacing=0 cellpadding=3 align=center>';
        printOpFormIntro ('saveTags');
        // Show a tree of tags with preselection, which matches current chain.
        foreach ($tagtree as $taginfo)
-               renderTagCheckbox ('taglist', $target_given_tags, $taginfo);
+               renderTagCheckbox ('taglist', $target_given_tags, $taginfo, $etype_by_pageno[$pageno]);
        echo '<tr><td class=tdleft>';
        printImageHREF ('SAVE', 'Save changes', TRUE);
        echo "</form></td><td class=tdright>";
@@ -4905,12 +4907,12 @@ function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass
                $hr = $ruler;
                // Show a tree of tags, pre-select according to currently requested list filter.
                global $tagtree;
-               $objectivetags = getObjectiveTagTree ($tagtree, $realm);
+               $objectivetags = getObjectiveTagTree ($tagtree, $realm, $preselect['tagidlist']);
                if (!count ($objectivetags))
                        echo "<tr><td colspan=2 class='tagbox sparenetwork'>(nothing is tagged yet)</td></tr>";
                else
                        foreach ($objectivetags as $taginfo)
-                               renderTagCheckbox ('cft', buildTagChainFromIds ($preselect['tagidlist']), $taginfo);
+                               renderTagCheckbox ('cft', buildTagChainFromIds ($preselect['tagidlist']), $taginfo, $realm);
        }
        // predicates block
        if (getConfigVar ('FILTER_SUGGEST_PREDICATES') == 'yes' or count ($preselect['pnamelist']))
@@ -4971,7 +4973,7 @@ function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass
 }
 
 // Dump all tags in a single SELECT element.
-function renderNewEntityTags ()
+function renderNewEntityTags ($for_realm = '')
 {
        global $taglist, $tagtree;
        if (!count ($taglist))
@@ -4981,7 +4983,7 @@ function renderNewEntityTags ()
        }
        echo '<div class=tagselector><table border=0 align=center>';
        foreach ($tagtree as $taginfo)
-               renderTagCheckbox ('taglist', array(), $taginfo);
+               renderTagCheckbox ('taglist', array(), $taginfo, $for_realm);
        echo '</table></div>';
 }