r1789 + parseWikiLink() learns optgroup name skipping
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 18 Mar 2008 12:10:47 +0000 (12:10 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 18 Mar 2008 12:10:47 +0000 (12:10 +0000)
+ string attributes can be wiki links now
+ initial code for object-tags tab

inc/database.php
inc/functions.php
inc/gateways.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index 756c824..b80cb3f 100644 (file)
@@ -1594,7 +1594,7 @@ function commitReduceAttrMap ($attr_id = 0, $objtype_id)
 // This function returns all optional attributes for requested object
 // as an array of records. NULL is returned on error and empty array
 // is returned, if there are no attributes found.
-function getAttrValues ($object_id)
+function getAttrValues ($object_id, $strip_optgroup = FALSE)
 {
        if ($object_id <= 0)
        {
@@ -1623,9 +1623,12 @@ function getAttrValues ($object_id)
                        case 'uint':
                        case 'float':
                        case 'string':
+                               $record['value'] = $row[$row['attr_type'] . '_value'];
+                               $record['a_value'] = parseWikiLink ($record['value'], 'a');
+                               break;
                        case 'dict':
-                               $record['value'] = parseWikiLink ($row[$row['attr_type'] . '_value'], 'o');
-                               $record['a_value'] = parseWikiLink ($row[$row['attr_type'] . '_value'], 'a');
+                               $record['value'] = parseWikiLink ($row[$row['attr_type'] . '_value'], 'o', $strip_optgroup);
+                               $record['a_value'] = parseWikiLink ($row[$row['attr_type'] . '_value'], 'a', $strip_optgroup);
                                $record['chapter_name'] = $row['chapter_name'];
                                $record['key'] = $row['uint_value'];
                                break;
index 2affe23..300babe 100644 (file)
@@ -1148,13 +1148,20 @@ function findAllEndpoints ($object_id, $fallback = '')
 // 3. [[word word word | URL]]
 // This function parses the line and returns text suitable for either A
 // (rendering <A HREF>) or O (for <OPTION>).
-function parseWikiLink ($line, $which)
+function parseWikiLink ($line, $which, $strip_optgroup = FALSE)
 {
        if (preg_match ('/^\[\[.+\]\]$/', $line) == 0)
-               return $line;
+       {
+               if ($strip_optgroup)
+                       return ereg_replace ('^.+\^', '', $line);
+               else
+                       return $line;
+       }
        $line = preg_replace ('/^\[\[(.+)\]\]$/', '$1', $line);
        $s = explode ('|', $line);
        $o_value = trim ($s[0]);
+       if ($strip_optgroup)
+               $o_value = ereg_replace ('^.+\^', '', $o_value);
        $a_value = trim ($s[1]);
        if ($which == 'a')
                return "<a href='${a_value}'>${o_value}</a>";
index 90377ea..4903424 100644 (file)
@@ -86,7 +86,7 @@ function getSwitchVLANs ($object_id = 0)
                return NULL;
        }
        $hwtype = $swtype = 'unknown';
-       foreach (getAttrValues ($object_id) as $record)
+       foreach (getAttrValues ($object_id, TRUE) as $record)
        {
                if ($record['name'] == 'SW type' && !empty ($record['value']))
                        $swtype = str_replace (' ', '+', $record['value']);
@@ -167,7 +167,7 @@ function setSwitchVLANs ($object_id = 0, $setcmd)
        if (count ($endpoints) > 1)
                return array (array ('code' => 'error', 'message' => 'More than one IP address is assigned to this object, please configure FQDN attribute.'));
        $hwtype = $swtype = 'unknown';
-       foreach (getAttrValues ($object_id) as $record)
+       foreach (getAttrValues ($object_id, TRUE) as $record)
        {
                if ($record['name'] == 'SW type' && !empty ($record['value']))
                        $swtype = strtr ($record['value'], ' ', '+');
index 9c5a429..55d07dd 100644 (file)
@@ -517,9 +517,9 @@ function printSelect ($rowList, $select_name, $selected_id = 1)
        $other = array();
        foreach ($rowList as $dict_key => $dict_value)
        {
-               if (strpos ($dict_value, '|') !== FALSE)
+               if (strpos ($dict_value, '^') !== FALSE)
                {
-                       $tmp = explode ('|', $dict_value, 2);
+                       $tmp = explode ('^', $dict_value, 2);
                        $optgroup[$tmp[0]][$dict_key] = $tmp[1];
                }
                else
@@ -702,7 +702,8 @@ function renderRackObject ($object_id = 0)
                echo "<tr><th width='50%' class=tdright>Barcode:</th><td class=tdleft>${info['barcode']}</td></tr>\n";
        if ($info['has_problems'] == 'yes')
                echo "<tr><td colspan=2 class=msg_error>Has problems</td></tr>\n";
-       foreach (getAttrValues ($object_id) as $record)
+       $attrs = getAttrValues ($object_id, TRUE);
+       foreach (getAttrValues ($object_id, TRUE) as $record)
                if (!empty ($record['value']))
                        echo "<tr><th width='50%' class=opt_attr_th>${record['name']}:</th><td class=tdleft>${record['a_value']}</td></tr>\n";
        if (count ($expl_tags))
@@ -4642,13 +4643,23 @@ function renderTagOption ($taginfo, $level = 0)
                renderTagOption ($kid, $level + 1);
 }
 
-function renderObjectTags ()
+function renderObjectTags ($object_id)
 {
+       global $root, $pageno, $tabno;
+       showMessageOrError();
        $tree = getTagTree();
+       startPortlet ('Tag list');
+       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=op value=save>\n";
        echo '<select name=taglist[] multiple size=' . getConfigVar ('MAXSELSIZE') . '>';
        foreach ($tree as $taginfo)
                renderTagOption ($taginfo);
-       echo '</select>';
+       echo '</select><br>';
+       echo "<input type=submit value='Save'></form>\n";
+       finishPortlet();
 }
 
 ?>
index c2199a5..a213767 100644 (file)
@@ -118,6 +118,7 @@ $ophandler['object']['portfwrd']['forwardPorts'] = 'addPortForwarding';
 $ophandler['object']['portfwrd']['delPortForwarding'] = 'delPortForwarding';
 $ophandler['object']['portfwrd']['updPortForwarding'] = 'updPortForwarding';
 $ophandler['object']['autoports']['generate'] = 'generateAutoPorts';
+$ophandler['object']['tags']['save'] = 'saveObjectTags';
 
 $page['ipv4space']['title'] = 'IPv4 space';
 $page['ipv4space']['parent'] = 'index';
index a4d3707..0ac80dc 100644 (file)
@@ -1235,4 +1235,22 @@ function generateAutoPorts ()
                return "${root}?page=${pageno}&tab=${tabno}&object_id=${object_id}&error=" . urlencode ('executeAutoPorts() failed');
 }
 
+// Filter out implicit tags before storing the new tag set.
+function saveObjectTags ()
+{
+       global $root, $pageno, $tabno, $explicit_tags, $implicit_tags;
+       assertUIntArg ('object_id');
+       $object_id = $_REQUEST['object_id'];
+       return "${root}?page=${pageno}&tab=${tabno}&object_id=${object_id}&message=" . urlencode ('This is a dummy message.');
+       // FIXME: build a trail from the submitted data, minimize it;
+       // then find and handle any differences between the result
+       // and current explicit tag set (or wipe existing records and
+       // store the whole new set instead).
+       $nchanges = 0;
+       foreach ($_REQUEST['taglist'] as $tag_id)
+       {
+//             if (tagOnTrail ($explicit
+       }
+}
+
 ?>