r1813 + implement IPv4 networks tagging
authorDenis Ovsienko <infrastation@yandex.ru>
Sat, 22 Mar 2008 17:46:03 +0000 (17:46 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sat, 22 Mar 2008 17:46:03 +0000 (17:46 +0000)
inc/database.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index 093b489..eac7183 100644 (file)
@@ -2453,7 +2453,7 @@ function commitDestroyTag ($tagid = 0)
 function wipeTags ($realm, $id)
 {
        global $dbxlink;
-       $query = "delete from TagStorage where target_realm = 'object' and target_id = ${id}";
+       $query = "delete from TagStorage where target_realm = '${realm}' and target_id = ${id}";
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
index e46aa7e..c6e01d4 100644 (file)
@@ -1861,7 +1861,7 @@ function renderAddNewRange ()
 
 function renderIPRange ($id)
 {
-       global $root, $pageno, $tabno;
+       global $root, $pageno, $tabno, $expl_tags, $impl_tags, $auto_tags;
        $maxperpage = getConfigVar ('IPV4_ADDRS_PER_PAGE');
        if (isset($_REQUEST['pg']))
                $page = $_REQUEST['pg'];
@@ -1869,8 +1869,38 @@ function renderIPRange ($id)
                $page=0;
 
        $range = getIPRange($id);
-       echo "<center><h1>${range['ip']}/${range['mask']}</h1><h2>${range['name']}</h2></center>\n";
+       echo "<table border=0 class=objectview cellspacing=0 cellpadding=0>";
+       echo "<tr><td colspan=2 align=center><h1>${range['ip']}/${range['mask']}</h1><h2>${range['name']}</h2></td></tr>\n";
+
+       echo "<tr><td class=pcleft width='50%'>";
+       startPortlet ('summary');
+       $total = ($range['ip_bin'] | $range['mask_bin_inv']) - ($range['ip_bin'] & $range['mask_bin']) + 1;
+       $used = count ($range['addrlist']);
+       echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>\n";
+       echo "<tr><th width='50%' class=tdright>Utilization:</th><td class=tdleft>";
+       renderProgressBar ($used/$total);
+       echo "&nbsp;${used}/${total}</td></tr>\n";
+       if (getConfigVar ('SHOW_EXPLICIT_TAGS') == 'yes' and count ($expl_tags))
+       {
+               echo "<tr><th width='50%' class=tag_list_th>Explicit tags:</th><td class=tdleft>";
+               echo serializeTags ($expl_tags) . "</td></tr>\n";
+       }
+       if (getConfigVar ('SHOW_IMPLICIT_TAGS') == 'yes' and count ($impl_tags))
+       {
+               echo "<tr><th width='50%' class=tag_list_th>Implicit tags:</th><td class=tdleft>";
+               echo serializeTags ($impl_tags) . "</td></tr>\n";
+       }
+       if (getConfigVar ('SHOW_AUTOMATIC_TAGS') == 'yes' and count ($auto_tags))
+       {
+               echo "<tr><th width='50%' class=tag_list_th>Automatic tags:</th><td class=tdleft>";
+               echo serializeTags ($auto_tags) . "</td></tr>\n";
+       }
+       echo "</table><br>\n";
+       finishPortlet();
+       echo "</td>\n";
 
+       echo "<td class=pcright>";
+       startPortlet ('details');
        $startip = $range['ip_bin'] & $range['mask_bin'];
        $endip = $range['ip_bin'] | $range['mask_bin_inv'];
        $realstartip = $startip;
@@ -1971,7 +2001,8 @@ function renderIPRange ($id)
        }
 
        echo "</table>";
-       
+       finishPortlet();
+       echo "</td></tr></table>\n";
 }
 
 function renderIPRangeProperties ($id)
@@ -4693,8 +4724,23 @@ function renderTagOption ($taginfo, $level = 0)
                renderTagOption ($kid, $level + 1);
 }
 
-function renderObjectTags ($object_id)
+function renderObjectTags ($id)
 {
+       renderEntityTags ('object', 'object_id', $id);
+}
+
+function renderIPv4PrefixTags ($id)
+{
+       renderEntityTags ('ipv4net', 'id', $id);
+}
+
+function renderEntityTags ($entity_realm = '', $bypass_name, $entity_id = 0)
+{
+       if ($entity_realm == '' or $entity_id <= 0)
+       {
+               showError ('Invalid or missing arguments', __FUNCTION__);
+               return;
+       }
        global $root, $pageno, $tabno;
        showMessageOrError();
        $tree = getTagTree();
@@ -4702,7 +4748,7 @@ function renderObjectTags ($object_id)
        echo "<form method=post action='${root}process.php'>\n";
        echo "<input type=hidden name=page value=${pageno}>\n";
        echo "<input type=hidden name=tab value=${tabno}>\n";
-       echo "<input type=hidden name=object_id value=${object_id}>\n";
+       echo "<input type=hidden name=${bypass_name} value=${entity_id}>\n";
        echo "<input type=hidden name=op value=save>\n";
        echo '<select name=taglist[] multiple size=' . getConfigVar ('MAXSELSIZE') . '>';
        foreach ($tree as $taginfo)
index bed98c4..6eeb107 100644 (file)
@@ -137,11 +137,15 @@ $page['iprange']['tagloader'] = 'loadIPv4PrefixTags';
 $tab['iprange']['default'] = 'Browse';
 $tab['iprange']['properties'] = 'Properties';
 $tab['iprange']['liveptr'] = 'Live PTR';
+$tab['iprange']['tags'] = 'Tags';
 $tabhandler['iprange']['default'] = 'renderIPRange';
 $tabhandler['iprange']['properties'] = 'renderIPRangeProperties';
 $tabhandler['iprange']['liveptr'] = 'renderLivePTR';
+$tabhandler['iprange']['tags'] = 'renderIPv4PrefixTags';
+$trigger['iprange']['tags'] = 'trigger_tags';
 $ophandler['iprange']['properties']['editRange'] = 'editRange';
 $ophandler['iprange']['liveptr']['import'] = 'importPTRData';
+$ophandler['iprange']['tags']['save'] = 'saveIPv4PrefixTags';
 
 $page['ipaddress']['title_handler'] = 'dynamic_title_ipaddress';
 $page['ipaddress']['parent'] = 'iprange';
index 1e08ef7..11a4dcb 100644 (file)
@@ -1315,27 +1315,37 @@ function generateAutoPorts ()
 }
 
 // Filter out implicit tags before storing the new tag set.
-function saveObjectTags ()
+function saveEntityTags ($realm, $bypass)
 {
        global $root, $pageno, $tabno, $explicit_tags, $implicit_tags;
-       assertUIntArg ('object_id');
-       $object_id = $_REQUEST['object_id'];
+       assertUIntArg ($bypass);
+       $entity_id = $_REQUEST[$bypass];
        // Build a trail from the submitted data, minimize it,
        // then wipe existing records and store the new set instead.
-       wipeTags ('object', $object_id);
+       wipeTags ($realm, $entity_id);
        $newtrail = getExplicitTagsOnly (buildTrailFromIds ($_REQUEST['taglist']));
        $n_succeeds = $n_errors = 0;
        foreach ($newtrail as $taginfo)
        {
-               if (useInsertBlade ('TagStorage', array ('target_realm' => "'object'", 'target_id' => $object_id, 'tag_id' => $taginfo['id'])))
+               if (useInsertBlade ('TagStorage', array ('target_realm' => "'${realm}'", 'target_id' => $entity_id, 'tag_id' => $taginfo['id'])))
                        $n_succeeds++;
                else
                        $n_errors++;
        }
        if ($n_errors)
-               return "${root}?page=${pageno}&tab=${tabno}&object_id=${object_id}&error=" . urlencode ("Replaced trail with ${n_succeeds} tags, but experienced ${n_errors} errors.");
+               return "${root}?page=${pageno}&tab=${tabno}&${bypass}=${entity_id}&error=" . urlencode ("Replaced trail with ${n_succeeds} tags, but experienced ${n_errors} errors.");
        else
-               return "${root}?page=${pageno}&tab=${tabno}&object_id=${object_id}&message=" . urlencode ("New trail is ${n_succeeds} tags long");
+               return "${root}?page=${pageno}&tab=${tabno}&${bypass}=${entity_id}&message=" . urlencode ("New trail is ${n_succeeds} tags long");
+}
+
+function saveObjectTags ()
+{
+       return saveEntityTags ('object', 'object_id');
+}
+
+function saveIPv4PrefixTags ()
+{
+       return saveEntityTags ('ipv4net', 'id');
 }
 
 function destroyTag ()