r2589 - phase out 'tagloader' and 'autotagloader' keys from $page array
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 1 Apr 2009 17:38:51 +0000 (17:38 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 1 Apr 2009 17:38:51 +0000 (17:38 +0000)
 - loadRackTags(): completely replaced by existing loadEntityTags()
 - loadRackObjectTags(): idem
 - loadIPv4PrefixTags(): idem
 - loadIPv4VSTags(): idem
 - loadIPv4RSPoolTags(): idem
 - loadUserTags(): idem
 - loadFileTags(): idem
 - loadRackAutoTags(): completely replaced by new generateEntityAutoTags()
 - loadRackObjectAutoTags(): idem
 - loadIPv4PrefixAutoTags(): idem
 - loadIPv4AddressAutoTags(): idem
 - loadIPv4VSAutoTags(): idem
 - loadIPv4RSPoolAutoTags(): idem
 - getUserAutoTags(): idem
 - loadFileAutoTags(): idem
 - loadEntityTags(): don't fail, when there is no data to return
 - getIPv4PrefixTags(): discontinued
 - fixContext(): work around user's auto tags issue
 - ibid: make use of generateEntityAutoTags() and loadEntityTags()
 - filterEntityList(): new function draft

inc/database.php
inc/functions.php
inc/init.php
inc/interface.php
inc/navigation.php

index b20a9ff5448c8d487d2b642e37ff20f752df4140..133c27c68cdc755300f11a3da31b752c91afe5ad 100644 (file)
@@ -2910,12 +2910,9 @@ function executeAutoPorts ($object_id = 0, $type_id = 0)
 // Result is a chain: randomly indexed taginfo list.
 function loadEntityTags ($entity_realm = '', $entity_id = 0)
 {
-       if ($entity_realm == '' or $entity_id <= 0)
-       {
-               showError ('Invalid or missing arguments', __FUNCTION__);
-               return NULL;
-       }
        $ret = array();
+       if (!in_array ($entity_realm, array ('file', 'ipv4net', 'ipv4vs', 'ipv4rspool', 'object', 'rack', 'user')))
+               return $ret;
        $query = "select tt.id, tag from " .
                "TagStorage as ts inner join TagTree as tt on ts.tag_id = tt.id " .
                "where entity_realm = '${entity_realm}' and entity_id = ${entity_id} " .
@@ -2927,41 +2924,6 @@ function loadEntityTags ($entity_realm = '', $entity_id = 0)
        return getExplicitTagsOnly ($ret);
 }
 
-function loadFileTags ($id)
-{
-       return loadEntityTags ('file', $id);
-}
-
-function loadRackObjectTags ($id)
-{
-       return loadEntityTags ('object', $id);
-}
-
-function loadIPv4PrefixTags ($id)
-{
-       return loadEntityTags ('ipv4net', $id);
-}
-
-function loadRackTags ($id)
-{
-       return loadEntityTags ('rack', $id);
-}
-
-function loadIPv4VSTags ($id)
-{
-       return loadEntityTags ('ipv4vs', $id);
-}
-
-function loadIPv4RSPoolTags ($id)
-{
-       return loadEntityTags ('ipv4rspool', $id);
-}
-
-function loadUserTags ($user_id)
-{
-       return loadEntityTags ('user', $user_id);
-}
-
 // Return a tag chain with all DB tags on it.
 function getTagList ()
 {
index b0f1b328e12f96ae26696453f6a5bb8d4251bf1b..7fbd6eab44965a0860fc62d38a39fced9a2f9a02 100644 (file)
@@ -974,99 +974,63 @@ function complementByKids ($idlist, $tree = NULL, $getall = FALSE)
        return $ret;
 }
 
-function getUserAutoTags ($username = NULL)
+// Universal autotags generator, a complementing function for loadEntityTags().
+// An important extension is that 'ipaddress' quasi-realm is also handled.
+// Bypass key isn't strictly typed, but interpreted depending on the realm.
+function generateEntityAutoTags ($entity_realm = '', $bypass_value = '')
 {
-       global $remote_username, $accounts;
-       if ($username == NULL)
-               $username = $remote_username;
        $ret = array();
-       $ret[] = array ('tag' => '$username_' . $username);
-       if (isset ($accounts[$username]['user_id']))
-               $ret[] = array ('tag' => '$userid_' . $accounts[$username]['user_id']);
-       return $ret;
-}
-
-function loadRackObjectAutoTags ()
-{
-       assertUIntArg ('object_id', __FUNCTION__);
-       $object_id = $_REQUEST['object_id'];
-       $oinfo = getObjectInfo ($object_id);
-       $ret = array();
-       $ret[] = array ('tag' => '$id_' . $object_id);
-       $ret[] = array ('tag' => '$typeid_' . $oinfo['objtype_id']);
-       $ret[] = array ('tag' => '$any_object');
-       if (validTagName ($oinfo['name']))
-               $ret[] = array ('tag' => '$cn_' . $oinfo['name']);
-       return $ret;
-}
-
-// Common code for both prefix and address tag listers.
-function loadFileAutoTags ()
-{
-       assertUIntArg ('file_id', __FUNCTION__);
-       $ret = array();
-       $ret[] = array ('tag' => '$fileid_' . $_REQUEST['file_id']);
-       $ret[] = array ('tag' => '$any_file');
-       return $ret;
-}
-
-function getIPv4PrefixTags ($netid)
-{
-       $netinfo = getIPv4NetworkInfo ($netid);
-       $ret = array();
-       $ret[] = array ('tag' => '$ip4net-' . str_replace ('.', '-', $netinfo['ip']) . '-' . $netinfo['mask']);
-       // FIXME: find and list tags for all parent networks?
-       $ret[] = array ('tag' => '$any_ip4net');
-       $ret[] = array ('tag' => '$any_net');
-       return $ret;
-}
-
-function loadIPv4PrefixAutoTags ()
-{
-       assertUIntArg ('id', __FUNCTION__);
-       return array_merge
-       (
-               array (array ('tag' => '$ip4netid_' . $_REQUEST['id'])),
-               getIPv4PrefixTags ($_REQUEST['id'])
-       );
-}
-
-function loadIPv4AddressAutoTags ()
-{
-       assertIPv4Arg ('ip', __FUNCTION__);
-       return array_merge
-       (
-               array (array ('tag' => '$ip4net-' . str_replace ('.', '-', $_REQUEST['ip']) . '-32')),
-               getIPv4PrefixTags (getIPv4AddressNetworkId ($_REQUEST['ip']))
-       );
-}
-
-function loadRackAutoTags ()
-{
-       assertUIntArg ('rack_id', __FUNCTION__);
-       $ret = array();
-       $ret[] = array ('tag' => '$rackid_' . $_REQUEST['rack_id']);
-       $ret[] = array ('tag' => '$any_rack');
-       return $ret;
-}
-
-function loadIPv4VSAutoTags ()
-{
-       assertUIntArg ('vs_id', __FUNCTION__);
-       $ret = array();
-       $ret[] = array ('tag' => '$ipv4vsid_' . $_REQUEST['vs_id']);
-       $ret[] = array ('tag' => '$any_ipv4vs');
-       $ret[] = array ('tag' => '$any_vs');
-       return $ret;
-}
-
-function loadIPv4RSPoolAutoTags ()
-{
-       assertUIntArg ('pool_id', __FUNCTION__);
-       $ret = array();
-       $ret[] = array ('tag' => '$ipv4rspid_' . $_REQUEST['pool_id']);
-       $ret[] = array ('tag' => '$any_ipv4rsp');
-       $ret[] = array ('tag' => '$any_rsp');
+       switch ($entity_realm)
+       {
+               case 'rack':
+                       $ret[] = array ('tag' => '$rackid_' . $bypass_value);
+                       $ret[] = array ('tag' => '$any_rack');
+                       break;
+               case 'object':
+                       $oinfo = getObjectInfo ($bypass_value);
+                       $ret[] = array ('tag' => '$id_' . $bypass_value);
+                       $ret[] = array ('tag' => '$typeid_' . $oinfo['objtype_id']);
+                       $ret[] = array ('tag' => '$any_object');
+                       if (validTagName ($oinfo['name']))
+                               $ret[] = array ('tag' => '$cn_' . $oinfo['name']);
+                       break;
+               case 'ipv4net':
+                       $netinfo = getIPv4NetworkInfo ($bypass_value);
+                       $ret[] = array ('tag' => '$ip4netid_' . $bypass_value);
+                       $ret[] = array ('tag' => '$ip4net-' . str_replace ('.', '-', $netinfo['ip']) . '-' . $netinfo['mask']);
+                       $ret[] = array ('tag' => '$any_ip4net');
+                       $ret[] = array ('tag' => '$any_net');
+                       break;
+               case 'ipaddress':
+                       $netinfo = getIPv4NetworkInfo (getIPv4AddressNetworkId ($bypass_value));
+                       $ret[] = array ('tag' => '$ip4net-' . str_replace ('.', '-', $bypass_value) . '-32');
+                       $ret[] = array ('tag' => '$ip4net-' . str_replace ('.', '-', $netinfo['ip']) . '-' . $netinfo['mask']);
+                       $ret[] = array ('tag' => '$any_ip4net');
+                       $ret[] = array ('tag' => '$any_net');
+                       break;
+               case 'ipv4vs':
+                       $ret[] = array ('tag' => '$ipv4vsid_' . $bypass_value);
+                       $ret[] = array ('tag' => '$any_ipv4vs');
+                       $ret[] = array ('tag' => '$any_vs');
+                       break;
+               case 'ipv4rspool':
+                       $ret[] = array ('tag' => '$ipv4rspid_' . $bypass_value);
+                       $ret[] = array ('tag' => '$any_ipv4rsp');
+                       $ret[] = array ('tag' => '$any_rsp');
+                       break;
+               case 'user':
+                       global $accounts;
+                       $ret[] = array ('tag' => '$username_' . $bypass_value);
+                       if (isset ($accounts[$bypass_value]['user_id']))
+                               $ret[] = array ('tag' => '$userid_' . $accounts[$bypass_value]['user_id']);
+                       break;
+               case 'file':
+                       $ret[] = array ('tag' => '$fileid_' . $bypass_value);
+                       $ret[] = array ('tag' => '$any_file');
+                       break;
+               default:
+                       break;
+       }
        return $ret;
 }
 
@@ -1142,15 +1106,25 @@ function fixContext ()
        if (isset ($tmap[$pageno][$tabno]))
                redirectUser ($pageno, $tmap[$pageno][$tabno]);
 
-       if (isset ($page[$pageno]['autotagloader']))
-               $auto_tags = array_merge ($auto_tags, $page[$pageno]['autotagloader'] ());
+       // Don't reset autochain, because auth procedures could push stuff there in.
+       // Another important point is to ignore 'user' realm, so we don't infuse effective
+       // context with autotags of the displayed account and don't try using uint
+       // bypass, where string is expected.
        if
        (
-               isset ($page[$pageno]['tagloader']) and
+               $pageno != 'user' and
                isset ($page[$pageno]['bypass']) and
                isset ($_REQUEST[$page[$pageno]['bypass']])
        )
-               $target_given_tags = $page[$pageno]['tagloader'] ($_REQUEST[$page[$pageno]['bypass']]);
+               $auto_tags = array_merge ($auto_tags, generateEntityAutoTags ($pageno, $_REQUEST[$page[$pageno]['bypass']]));
+       if
+       (
+               isset ($page[$pageno]['bypass']) and
+               isset ($page[$pageno]['bypass_type']) and
+               $page[$pageno]['bypass_type'] == 'uint' and
+               isset ($_REQUEST[$page[$pageno]['bypass']])
+       )
+               $target_given_tags = loadEntityTags ($pageno, $_REQUEST[$page[$pageno]['bypass']]);
        // Explicit and implicit chains should be normally empty at this point, so
        // overwrite the contents anyway.
        $expl_tags = mergeTagChains ($user_given_tags, $target_given_tags);
@@ -1929,4 +1903,17 @@ function dos2unix ($text)
        return str_replace ("\r\n", "\n", $text);
 }
 
+// Take a list of records and filter against given RackCode expression.
+// Return a new list with the items, for which the expression returned TRUE.
+function filterEntityList ($list_in, $realm, $expression)
+{
+       $list_out = array();
+       foreach ($list_in as $item_key => $item_value)
+       {
+               if (TRUE)
+                       $list_out[$item_key] = $item_value;
+       }
+       return $list_out;
+}
+
 ?>
index a9e93235dbf41382569a75c05974791c43ab5f79..8d881912e7c6da54bf80346bd12f72b64dfbc658 100644 (file)
@@ -189,9 +189,9 @@ $target_given_tags = array();
 $user_given_tags = array();
 if (!isset ($script_mode) or $script_mode !== TRUE)
 {
-       $auto_tags = array_merge ($auto_tags, getUserAutoTags());
+       $auto_tags = array_merge ($auto_tags, generateEntityAutoTags ('user', $remote_username));
        if (isset ($accounts[$remote_username]))
-               $user_given_tags = loadUserTags ($accounts[$remote_username]['user_id']);
+               $user_given_tags = loadEntityTags ('user', $accounts[$remote_username]['user_id']);
 }
 
 ?>
index e76634f1ebf59387676819385ea67883e0c1bdb4..40e4f781f4e03c4abd55a56336c2e756679c6e71 100644 (file)
@@ -1900,7 +1900,7 @@ function renderObjectGroup ()
                        $secondclass = 'tdleft port_highlight';
                else
                        $secondclass = 'tdleft';
-               $tags = loadRackObjectTags ($obj['id']);
+               $tags = loadEntityTags ('object', $obj['id']);
                echo "<tr class=row_${order} valign=top><td class='${secondclass}'><a href='".makeHref(array('page'=>'object', 'object_id'=>$obj['id']))."'><strong>${obj['dname']}</strong></a>";
                if (count ($tags))
                        echo '<br><small>' . serializeTags ($tags, makeHref(array('page'=>$pageno, 'tab'=>'default', 'group_id'=>$group_id))."&") . '</small>';
@@ -3151,7 +3151,7 @@ function renderSearchResults ()
                                        echo '<tr><th>Common name</th><th>Visible label</th><th>Asset tag</th><th>Barcode</th></tr>';
                                        foreach ($what as $obj)
                                        {
-                                               $tags = loadRackObjectTags ($obj['id']);
+                                               $tags = loadEntityTags ('object', $obj['id']);
                                                echo "<tr class=row_${order} valign=top><td class=tdleft><a href=\"${root}?page=object&object_id=${obj['id']}\">${obj['dname']}</a>";
                                                if (count ($tags))
                                                        echo '<br><small>' . serializeTags ($tags) . '</small>';
@@ -4587,7 +4587,7 @@ function renderRSPoolList ()
        $order = 'odd';
        foreach ($pool_list as $pool_id => $pool_info)
        {
-               $pooltags = loadIPv4RSPoolTags ($pool_id);
+               $pooltags = loadEntityTags ('ipv4rspool', $pool_id);
                echo "<tr valign=top class=row_${order}><td class=tdleft>";
                echo "<a href='".makeHref(array('page'=>'ipv4rspool', 'pool_id'=>$pool_id))."'>" . (empty ($pool_info['name']) ? 'ANONYMOUS' : $pool_info['name']) . '</a>';
                echo ($pool_info['refcnt'] ? ", ${pool_info['refcnt']}" : '');
@@ -5391,7 +5391,7 @@ function renderUser ($user_id)
                echo "<tr><th width='50%' class=tdright><span class=tagheader>Given implicit tags</span>:</th><td class=tdleft>";
                echo serializeTags ($target_shadow, $baseurl) . "</td></tr>\n";
        }
-       $target_auto_tags = getUserAutoTags ($username);
+       $target_auto_tags = generateEntityAutoTags ('user', $username);
        if (getConfigVar ('SHOW_AUTOMATIC_TAGS') == 'yes' and count ($target_auto_tags))
        {
                echo "<tr><th width='50%' class=tdright><span class=tagheader>Automatic tags</span>:</th><td class=tdleft>";
@@ -5854,7 +5854,7 @@ function printRoutersTD ($rlist)
 function printIPv4NetInfoTDs ($netinfo, $tdclass = 'tdleft', $indent = 0, $symbol = 'spacer', $symbolurl = '')
 {
        global $root;
-       $tags = isset ($netinfo['id']) ? loadIPv4PrefixTags ($netinfo['id']) : array();
+       $tags = isset ($netinfo['id']) ? loadEntityTags ('ipv4net', $netinfo['id']) : array();
        if ($symbol == 'spacer')
        {
                $indent++;
@@ -5898,7 +5898,7 @@ function renderIPv4NetCell ($netinfo)
        else
                echo "<tr><td class=sparenetwork>no name</td></tr>";
        echo '<td>';
-       $tags = loadIPv4PrefixTags ($netinfo['id']);
+       $tags = loadEntityTags ('ipv4net', $netinfo['id']);
        echo count ($tags) ? ("<small>" . serializeTags ($tags) . "</small>") : '&nbsp;';
        echo "</td></tr></table>";
 }
@@ -5915,7 +5915,7 @@ function renderUserCell ($account)
        else
                echo "<tr><td class=sparenetwork>no name</td></tr>";
        echo '<td>';
-       $tags = loadUserTags ($account['user_id']);
+       $tags = loadEntityTags ('user', $account['user_id']);
        echo count ($tags) ? ("<small>" . serializeTags ($tags) . "</small>") : '&nbsp;';
        echo "</td></tr></table>";
 }
@@ -5929,7 +5929,7 @@ function renderLBCell ($object_id)
        echo "</td></tr><tr><td>";
        printImageHREF ('LB');
        echo "</td></tr><tr><td><small>";
-       echo serializeTags (loadRackObjectTags ($object_id));
+       echo serializeTags (loadEntityTags ('object', $object_id));
        echo "</small></td></tr></table>";
 }
 
@@ -5942,7 +5942,7 @@ function renderRSPoolCell ($pool_id, $pool_name)
        echo "</a></td></tr><tr><td>";
        printImageHREF ('RS pool');
        echo "</td></tr><tr><td><small>";
-       echo serializeTags (loadIPv4RSPoolTags ($pool_id));
+       echo serializeTags (loadEntityTags ('ipv4rspool', $pool_id));
        echo "</small></td></tr></table>";
 }
 
@@ -5963,7 +5963,7 @@ function renderIPv4VSCell ($vsinfo)
        echo "</a></td></tr><tr><td>";
        echo $vsinfo['name'];
        echo '</td></tr><tr><td>';
-       $tags = loadIPv4VSTags ($vsinfo['id']);
+       $tags = loadEntityTags ('ipv4vs', $vsinfo['id']);
        echo count ($tags) ? ("<small>" . serializeTags ($tags) . "</small>") : '&nbsp;';
        echo "</td></tr></table>";
 }
@@ -5979,7 +5979,7 @@ function renderRouterCell ($dottedquad, $ifname, $object_id, $object_dname)
        echo "</td></tr><tr><td>";
        printImageHREF ('router');
        echo "</td></tr><tr><td><small>";
-       echo serializeTags (loadRackObjectTags ($object_id));
+       echo serializeTags (loadEntityTags ('object', $object_id));
        echo "</small></td></tr></table>";
 }
 
@@ -6004,7 +6004,7 @@ function renderFileCell ($fileinfo)
        echo "</td><td>";
        printf ("<a href='${root}?page=file&file_id=%s'><strong>%s</strong></a>", $fileinfo['id'], niftyString ($fileinfo['name']));
        echo "</td></tr><tr><td>";
-       $tags = loadFileTags ($fileinfo['id']);
+       $tags = loadEntityTags ('file', $fileinfo['id']);
        echo count ($tags) ? ("<small>" . serializeTags ($tags) . "</small>") : '&nbsp;';
        echo "</td></tr><tr><td><a href='${root}download.php?file_id=${fileinfo['id']}'>";
        printImageHREF ('download', 'Download file');
index 10786193c8a4c33184e99d054efeb0b86bf8230e..443258ca7204ab6d1a849f510edf57193b0a7982 100644 (file)
@@ -69,8 +69,6 @@ $page['rack']['title_handler'] = 'dynamic_title_rack';
 $page['rack']['bypass'] = 'rack_id';
 $page['rack']['bypass_type'] = 'uint';
 $page['rack']['parent'] = 'row';
-$page['rack']['tagloader'] = 'loadRackTags';
-$page['rack']['autotagloader'] = 'loadRackAutoTags';
 $tab['rack']['default'] = 'View';
 $tab['rack']['edit'] = 'Properties';
 $tab['rack']['design'] = 'Design';
@@ -118,8 +116,6 @@ $page['object']['title_handler'] = 'dynamic_title_object';
 $page['object']['bypass'] = 'object_id';
 $page['object']['bypass_type'] = 'uint';
 $page['object']['parent'] = 'objgroup';
-$page['object']['tagloader'] = 'loadRackObjectTags';
-$page['object']['autotagloader'] = 'loadRackObjectAutoTags';
 $tab['object']['default'] = 'View';
 $tab['object']['edit'] = 'Properties';
 $tab['object']['rackspace'] = 'Rackspace';
@@ -255,8 +251,6 @@ $page['ipv4net']['title_handler'] = 'dynamic_title_ipv4net';
 $page['ipv4net']['parent'] = 'ipv4space';
 $page['ipv4net']['bypass'] = 'id';
 $page['ipv4net']['bypass_type'] = 'uint';
-$page['ipv4net']['autotagloader'] = 'loadIPv4PrefixAutoTags';
-$page['ipv4net']['tagloader'] = 'loadIPv4PrefixTags';
 $tab['ipv4net']['default'] = 'Browse';
 $tab['ipv4net']['properties'] = 'Properties';
 $tab['ipv4net']['liveptr'] = 'Live PTR';
@@ -284,7 +278,6 @@ $page['ipaddress']['title_handler'] = 'dynamic_title_ipaddress';
 $page['ipaddress']['parent'] = 'ipv4net';
 $page['ipaddress']['bypass'] = 'ip';
 $page['ipaddress']['bypass_type'] = 'inet4';
-$page['ipaddress']['autotagloader'] = 'loadIPv4AddressAutoTags';
 $tab['ipaddress']['default'] = 'Browse';
 $tab['ipaddress']['properties'] = 'Properties';
 $tab['ipaddress']['assignment'] = 'Allocation';
@@ -325,8 +318,6 @@ $page['ipv4vs']['title_handler'] = 'dynamic_title_vservice';
 $page['ipv4vs']['parent'] = 'ipv4vslist';
 $page['ipv4vs']['bypass'] = 'vs_id';
 $page['ipv4vs']['bypass_type'] = 'uint';
-$page['ipv4vs']['tagloader'] = 'loadIPv4VSTags';
-$page['ipv4vs']['autotagloader'] = 'loadIPv4VSAutoTags';
 $tab['ipv4vs']['default'] = 'View';
 $tab['ipv4vs']['edit'] = 'Edit';
 $tab['ipv4vs']['editlblist'] = 'Load balancers';
@@ -368,8 +359,6 @@ $page['ipv4rspool']['title_handler'] = 'dynamic_title_rspool';
 $page['ipv4rspool']['parent'] = 'ipv4rsplist';
 $page['ipv4rspool']['bypass'] = 'pool_id';
 $page['ipv4rspool']['bypass_type'] = 'uint';
-$page['ipv4rspool']['tagloader'] = 'loadIPv4RSPoolTags';
-$page['ipv4rspool']['autotagloader'] = 'loadIPv4RSPoolAutoTags';
 $tab['ipv4rspool']['default'] = 'View';
 $tab['ipv4rspool']['edit'] = 'Edit';
 $tab['ipv4rspool']['editlblist'] = 'Load Balancers';
@@ -447,8 +436,6 @@ $page['user']['title_handler'] = 'dynamic_title_user';
 $page['user']['parent'] = 'userlist';
 $page['user']['bypass'] = 'user_id';
 $page['user']['bypass_type'] = 'uint';
-$page['user']['tagloader'] = 'loadUserTags';
-$page['user']['autotagloader'] = 'getUserAutoTags';
 $tab['user']['default'] = 'View';
 $tab['user']['tags'] = 'Tags';
 $tab['user']['files'] = 'Files';
@@ -623,8 +610,6 @@ $page['file']['title_handler'] = 'dynamic_title_file';
 $page['file']['bypass'] = 'file_id';
 $page['file']['bypass_type'] = 'uint';
 $page['file']['parent'] = 'files';
-$page['file']['tagloader'] = 'loadFileTags';
-$page['file']['autotagloader'] = 'loadFileAutoTags';
 $tab['file']['default'] = 'View';
 $tab['file']['edit'] = 'Properties';
 $tab['file']['tags'] = 'Tags';