r1812 + generalise tag storage and handling; prepare to introduce tags for other...
authorDenis Ovsienko <infrastation@yandex.ru>
Sat, 22 Mar 2008 17:03:34 +0000 (17:03 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sat, 22 Mar 2008 17:03:34 +0000 (17:03 +0000)
inc/database.php
inc/functions.php
inc/navigation.php
inc/ophandlers.php
install/init-structure.sql
upgrade.php

index 4d291b3..093b489 100644 (file)
@@ -2381,16 +2381,31 @@ function executeAutoPorts ($object_id = 0, $type_id = 0)
 
 // Return only implicitly listed tags, the rest of the trail will be
 // generated/deducted later at higher levels.
-function loadRackObjectTags ($object_id = 0)
+function loadEntityTags ($entity_realm = '', $entity_id = 0)
 {
+       if ($entity_realm == '' or $entity_id <= 0)
+       {
+               showError ('Invalid or missing arguments', __FUNCTION__);
+               return NULL;
+       }
        $ret = array();
-       $result = useSelectBlade ("select tt.id, tag from RackObject as ro inner join RackObjectTags as rot on ro.id = rot.object_id inner join TagTree as tt on rot.tag_id = tt.id where ro.id = ${object_id}");
+       $result = useSelectBlade ("select tt.id, tag from TagStorage as ts inner join TagTree as tt on ts.tag_id = tt.id where target_realm = '${entity_realm}' and target_id = ${entity_id}");
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
                $ret[$row['id']] = $row;
        $result->closeCursor();
        return $ret;
 }
 
+function loadRackObjectTags ($id)
+{
+       return loadEntityTags ('object', $id);
+}
+
+function loadIPv4PrefixTags ($id)
+{
+       return loadEntityTags ('ipv4net', $id);
+}
+
 function getTagList ()
 {
        $taglist = array();
@@ -2434,4 +2449,15 @@ function commitDestroyTag ($tagid = 0)
        else
                return 'useDeleteBlade() failed in ' . __FUNCTION__;
 }
+
+function wipeTags ($realm, $id)
+{
+       global $dbxlink;
+       $query = "delete from TagStorage where target_realm = 'object' and target_id = ${id}";
+       $result = $dbxlink->exec ($query);
+       if ($result === NULL)
+               return FALSE;
+       return TRUE;
+}
+
 ?>
index 574f785..8628f02 100644 (file)
@@ -1458,6 +1458,15 @@ function loadRackObjectAutoTags()
        return $ret;
 }
 
+function loadIPv4PrefixAutoTags()
+{
+       assertUIntArg ('id');
+       $ret = array();
+       $ret[] = array ('tag' => '$id_' . $_REQUEST['id']);
+       $ret[] = array ('tag' => '$allipv4networks');
+       return $ret;
+}
+
 function getGlobalAutoTags()
 {
        global $remote_username, $accounts;
index 012b41b..bed98c4 100644 (file)
@@ -132,6 +132,8 @@ $page['iprange']['title_handler'] = 'dynamic_title_iprange';
 $page['iprange']['parent'] = 'ipv4space';
 $page['iprange']['bypass'] = 'id';
 $page['iprange']['bypass_type'] = 'uint';
+$page['iprange']['autotagloader'] = 'loadIPv4PrefixAutoTags';
+$page['iprange']['tagloader'] = 'loadIPv4PrefixTags';
 $tab['iprange']['default'] = 'Browse';
 $tab['iprange']['properties'] = 'Properties';
 $tab['iprange']['liveptr'] = 'Live PTR';
index d993583..1e08ef7 100644 (file)
@@ -1322,12 +1322,12 @@ function saveObjectTags ()
        $object_id = $_REQUEST['object_id'];
        // Build a trail from the submitted data, minimize it,
        // then wipe existing records and store the new set instead.
-       useDeleteBlade ('RackObjectTags', 'object_id', $object_id, FALSE, TRUE);
+       wipeTags ('object', $object_id);
        $newtrail = getExplicitTagsOnly (buildTrailFromIds ($_REQUEST['taglist']));
        $n_succeeds = $n_errors = 0;
        foreach ($newtrail as $taginfo)
        {
-               if (useInsertBlade ('RackObjectTags', array ('object_id' => $object_id, 'tag_id' => $taginfo['id'])))
+               if (useInsertBlade ('TagStorage', array ('target_realm' => "'object'", 'target_id' => $object_id, 'tag_id' => $taginfo['id'])))
                        $n_succeeds++;
                else
                        $n_errors++;
index 7c680b9..b19923c 100644 (file)
@@ -224,12 +224,6 @@ CREATE TABLE `RackObjectHistory` (
   `user_name` char(64) default NULL
 ) ENGINE=MyISAM;
 
-CREATE TABLE `RackObjectTags` (
-  `object_id` int(10) unsigned default NULL,
-  `tag_id` int(10) unsigned default NULL,
-  UNIQUE KEY `object_tag` (`object_id`,`tag_id`)
-) TYPE=MyISAM;
-
 CREATE TABLE `RackSpace` (
   `rack_id` int(10) unsigned NOT NULL default '0',
   `unit_no` int(10) unsigned NOT NULL default '0',
@@ -239,6 +233,14 @@ CREATE TABLE `RackSpace` (
   PRIMARY KEY  (`rack_id`,`unit_no`,`atom`)
 ) ENGINE=MyISAM;
 
+CREATE TABLE `TagStorage` (
+  `target_realm` enum('object','ipv4net','rack','ipv4vs','ipv4rspool') NOT NULL default 'object',
+  `target_id` int(10) unsigned NOT NULL,
+  `tag_id` int(10) unsigned default NULL,
+  UNIQUE KEY `entity_tag` (`target_realm`,`target_id`,`tag_id`),
+  KEY `target_id` (`target_id`)
+) TYPE=MyISAM;
+
 CREATE TABLE `TagTree` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `parent_id` int(10) unsigned default NULL,
index b9f484d..77c71a3 100644 (file)
@@ -1057,10 +1057,12 @@ CREATE TABLE `IPVirtualService` (
                        $query[] = "insert into PortCompat (type1, type2) values (682, 682)";
                        $query[] =
 "
-CREATE TABLE `RackObjectTags` (
-  `object_id` int(10) unsigned default NULL,
+CREATE TABLE `TagStorage` (
+  `target_realm` enum('object','ipv4net','rack','ipv4vs','ipv4rspool') NOT NULL default 'object',
+  `target_id` int(10) unsigned NOT NULL,
   `tag_id` int(10) unsigned default NULL,
-  UNIQUE KEY `object_tag` (`object_id`,`tag_id`)
+  UNIQUE KEY `entity_tag` (`target_realm`,`target_id`,`tag_id`),
+  KEY `target_id` (`target_id`)
 ) TYPE=MyISAM;
 ";
                        $query[] =