r1937 + enable preset tags for object creation
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 3 Jun 2008 11:34:44 +0000 (11:34 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 3 Jun 2008 11:34:44 +0000 (11:34 +0000)
ChangeLog
inc/database.php
inc/interface.php

index 03bc4f7741ffde670af1803c12f2c0cc4d4362a5..6abf1af750eb60585e496380e3a2caa718ac9b71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
        bugfix: fix auth headers in upgrade script (broken in 0.15.0)
        new feature: fetch switch serial number via SNMP (by killsystem)
        new feature: adding multiple racks
+       updates: user interface cleanups
 0.15.0 2008-05-10
        new feature: tags
        new feature: automatic option groups
index 00fea0e4b8c50c0db2e91f52e1d86b137b9a1972..7b66046160428300db4690bdced36d225f403279 100644 (file)
@@ -346,6 +346,7 @@ function commitAddRack ($name, $height, $row_id, $comment, $taglist)
        $row = $result->fetch (PDO::FETCH_NUM);
        $last_insert_id = $row[0];
        $result->closeCursor();
+       $errcount = 0;
        foreach ($taglist as $tag_id)
                if (useInsertBlade
                (
@@ -363,30 +364,29 @@ function commitAddRack ($name, $height, $row_id, $comment, $taglist)
        return recordHistory ('Rack', "id = ${last_insert_id}");
 }
 
-function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $new_asset_no)
+function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $new_asset_no, $taglist = array())
 {
        global $dbxlink;
-       // Maintain UNIQUE INDEX for common names and asset tags.
-       $new_asset_no = empty ($new_asset_no) ? 'NULL' : "'${new_asset_no}'";
-       $new_barcode = empty ($new_barcode) ? 'NULL' : "'${new_barcode}'";
-       $new_name = empty ($new_name) ? 'NULL' : "'${new_name}'";
-       $query =
-               "insert into RackObject(name, label, barcode, objtype_id, asset_no) " .
-               "values(${new_name}, '${new_label}', ${new_barcode}, '${new_type_id}', ${new_asset_no})";
-       $result1 = $dbxlink->query ($query);
+       // Maintain UNIQUE INDEX for common names and asset tags by
+       // filtering out empty strings (not NULLs).
+       $result1 = useInsertBlade
+       (
+               'RackObject',
+               array
+               (
+                       'name' => empty ($new_name) ? 'NULL' : "'${new_name}'",
+                       'label' => "'${new_label}'",
+                       'barcode' => empty ($new_barcode) ? 'NULL' : "'${new_barcode}'",
+                       'objtype_id' => $new_type_id,
+                       'asset_no' => empty ($new_asset_no) ? 'NULL' : "'${new_asset_no}'"
+               )
+       );
        if ($result1 == NULL)
        {
-               $errorInfo = $dbxlink->errorInfo();
-               showError ("SQL query '${query}' failed: ${errorInfo[2]}", __FUNCTION__);
-               die;
-       }
-       if ($result1->rowCount() != 1)
-       {
-               showError ('Adding new object failed', __FUNCTION__);
+               showError ("SQL query #1 failed", __FUNCTION__);
                return FALSE;
        }
-       $query = 'select last_insert_id()';
-       $result2 = $dbxlink->query ($query);
+       $result2 = useSelectBlade ('select last_insert_id()');
        if ($result2 == NULL)
        {
                $errorInfo = $dbxlink->errorInfo();
@@ -399,6 +399,22 @@ function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $ne
        $result2->closeCursor();
        // Do AutoPorts magic
        executeAutoPorts ($last_insert_id, $new_type_id);
+       // Now tags...
+       $errcount = 0;
+       foreach ($taglist as $tag_id)
+               if (useInsertBlade
+               (
+                       'TagStorage',
+                       array
+                       (
+                               'target_realm' => "'object'",
+                               'target_id' => $last_insert_id,
+                               'tag_id' => $tag_id
+                       )
+               ) == FALSE)
+                       $errcount++;    
+       if ($errcount)
+               showError ("Experienced ${errcount} errors adding tags for the object");
        return recordHistory ('RackObject', "id = ${last_insert_id}");
 }
 
index f772cb4ad0c06b308bc8669dcce1aacb19b93c8a..733844de4b66cf7258c947ff455072cbe0edfb47 100644 (file)
@@ -2456,6 +2456,7 @@ function renderAddMultipleObjectsForm ()
        // Look for current submit.
        if (isset ($_REQUEST['got_fast_data']))
        {
+               $taglist = isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array();
                $keepvalues = TRUE;
                $max = getConfigVar ('MASSCOUNT');
                for ($i = 0; $i < $max; $i++)
@@ -2477,10 +2478,10 @@ function renderAddMultipleObjectsForm ()
                        $asset_no[$i] = $_REQUEST["${i}_object_asset_no"];
                        $barcode[$i] = $_REQUEST["${i}_object_barcode"];
 
-                       // It's better to skip silently than printing a notice.
+                       // It's better to skip silently, than to print a notice.
                        if ($type_id[$i] == 0)
                                continue;
-                       if (commitAddObject ($name[$i], $label[$i], $barcode[$i], $type_id[$i], $asset_no[$i]) === TRUE)
+                       if (commitAddObject ($name[$i], $label[$i], $barcode[$i], $type_id[$i], $asset_no[$i], $taglist) === TRUE)
                                $log[] = array ('code' => 'success', 'message' => "Added new object '${name[$i]}'");
                        else
                                $log[] = array ('code' => 'error', 'message' => __FUNCTION__ . ': commitAddObject() failed');
@@ -2488,6 +2489,7 @@ function renderAddMultipleObjectsForm ()
        }
        elseif (isset ($_REQUEST['got_very_fast_data']))
        {
+               $taglist = isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array();
                $keepvalues = TRUE;
                assertUIntArg ('global_type_id', __FUNCTION__, TRUE);
                assertStringArg ('namelist', __FUNCTION__, TRUE);
@@ -2514,7 +2516,7 @@ function renderAddMultipleObjectsForm ()
                                        $names2[] = rtrim ($parts[0]);
                        }
                        foreach ($names2 as $cname)
-                               if (commitAddObject ($cname, '', '', $global_type_id, '') === TRUE)
+                               if (commitAddObject ($cname, '', '', $global_type_id, '', $taglist) === TRUE)
                                        $log[] = array ('code' => 'success', 'message' => "Added new object '${cname}'");
                                else
                                        $log[] = array ('code' => 'error', 'message' => "Could not add '${cname}'");
@@ -2526,13 +2528,14 @@ function renderAddMultipleObjectsForm ()
        $typelist = getObjectTypeList();
        $typelist[0] = 'select type...';
 
-       startPortlet ('Distinct types');
+       startPortlet ('Distinct types, same tags');
+       $max = getConfigVar ('MASSCOUNT');
        echo "<form name=fastform method=post action='${root}?page=${pageno}&tab=${tabno}'>";
        echo '<table border=0 align=center>';
-       echo "<tr><th>Object type</th><th>Common name</th><th>Visible label</th><th>Asset tag</th><th>Barcode</th></tr>\n";
+       echo "<tr><th>Object type</th><th>Common name</th><th>Visible label</th>";
+       echo "<th>Asset tag</th><th>Barcode</th><th>Tags</th></tr>\n";
        // If a user forgot to select object type on input, we keep his
        // previous input in the form.
-       $max = getConfigVar ('MASSCOUNT');
        for ($i = 0; $i < $max; $i++)
        {
                echo '<tr><td>';
@@ -2540,36 +2543,48 @@ function renderAddMultipleObjectsForm ()
                printSelect ($typelist, "${i}_object_type_id", 0);
                echo '</td>';
                echo "<td><input type=text size=30 name=${i}_object_name";
-               if ($keepvalues and $type_id[$i] == 0)
+               if ($keepvalues and isset ($name[$i]) and (!isset ($type_id[$i]) or $type_id[$i] == 0))
                        echo " value='${name[$i]}'";
                echo "></td>";
                echo "<td><input type=text size=30 name=${i}_object_label";
-               if ($keepvalues and $type_id[$i] == 0)
+               if ($keepvalues and isset ($label[$i]) and (!isset ($type_id[$i]) or $type_id[$i] == 0))
                        echo " value='${label[$i]}'";
                echo "></td>";
                echo "<td><input type=text size=20 name=${i}_object_asset_no";
-               if ($keepvalues and $type_id[$i] == 0)
+               if ($keepvalues and isset ($asset_no[$i]) and (!isset ($type_id[$i]) or $type_id[$i] == 0))
                        echo " value='${asset_no[$i]}'";
                echo "></td>";
                echo "<td><input type=text size=10 name=${i}_object_barcode";
-               if ($keepvalues and $type_id[$i] == 0)
+               if ($keepvalues and isset ($barcode[$i]) and (!isset ($type_id[$i]) or $type_id[$i] == 0))
                        echo " value='${barcode[$i]}'";
                echo "></td>";
+               if ($i == 0)
+               {
+                       echo "<td valign=top rowspan=${max}>";
+                       renderTagSelect();
+                       echo "</td>\n";
+               }
                echo "</tr>\n";
        }
        echo "<tr><td class=submit colspan=5><input type=submit name=got_fast_data value='Go!'></td></tr>\n";
        echo "</form></table>\n";
        finishPortlet();
 
-       startPortlet ('Same type');
+       startPortlet ('Same type, same tags');
        echo "<form name=veryfastform method=post action='${root}?page=${pageno}&tab=${tabno}'>";
-       echo 'For each line below create an object of type ';
-       printSelect ($typelist, "global_type_id", getConfigVar ('DEFAULT_OBJECT_TYPE'));
-       echo " <input type=submit name=got_very_fast_data value='Go!'><br>\n";
-       echo "<textarea name=namelist cols=40 rows=25>\n";
+       echo "<table border=0 align=center><tr><th>names</th><th>type</th></tr>";
+       echo "<tr><td rowspan=3><textarea name=namelist cols=40 rows=25>\n";
        if ($keepvalues and $global_type_id == 0)
                echo $_REQUEST['namelist'];
-       echo "</textarea></form>\n";
+       echo "</textarea></td><td valign=top>";
+       printSelect ($typelist, "global_type_id", getConfigVar ('DEFAULT_OBJECT_TYPE'));
+       echo "</td></tr>";
+       echo "<tr><th>Tags</th></tr>";
+       echo "<tr><td valign=top>";
+       renderTagSelect();
+       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";
        finishPortlet();
 }