r2055 + employ the new big "add" icon and pre-assigned tags in both VS and RS pool...
authorDenis Ovsienko <infrastation@yandex.ru>
Fri, 11 Jul 2008 17:26:31 +0000 (17:26 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Fri, 11 Jul 2008 17:26:31 +0000 (17:26 +0000)
+ remove silly border from image submits
+ finally make duplicated tag saving code a separate function (addTagsForLastRecord)
+ introduce and make use of lastInsertID()

ChangeLog
inc/database.php
inc/interface.php
inc/ophandlers.php
pi.css

index 902bf1a..a61197f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+0.16.1
+       new feature: allow pre-selected tags for newly added virtual services and RS pools
 0.16.0 2008-07-09
        new feature: tag roller
        new feature: taggable user accounts
index c04d085..936a807 100644 (file)
@@ -362,23 +362,8 @@ function commitAddRack ($name, $height, $row_id, $comment, $taglist)
                showError ('useInsertBlade() failed', __FUNCTION__);
                return FALSE;
        }
-
-       if (($result = useSelectBlade ('select last_insert_id()', __FUNCTION__)) == NULL) 
-       {
-               showError ('Query #2 failed', __FUNCTION__);
-               return FALSE;
-       }
-       // we always have a row
-       $row = $result->fetch (PDO::FETCH_NUM);
-       $last_insert_id = $row[0];
-       $result->closeCursor();
-       $errcount = 0;
-       foreach ($taglist as $tag_id)
-               if (addTagForEntity ('rack', $last_insert_id, $tag_id) == FALSE)
-                       $errcount++;    
-       if ($errcount)
-               showError ("Experienced ${errcount} errors adding tags for the rack");
-       return recordHistory ('Rack', "id = ${last_insert_id}");
+       $last_insert_id = lastInsertID();
+       return (addTagsForLastRecord ('rack', $taglist, $last_insert_id) == '') and recordHistory ('Rack', "id = ${last_insert_id}");
 }
 
 function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $new_asset_no, $taglist = array())
@@ -403,26 +388,16 @@ function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $ne
                showError ("SQL query #1 failed", __FUNCTION__);
                return FALSE;
        }
-       $result2 = useSelectBlade ('select last_insert_id()', __FUNCTION__);
-       if ($result2 == NULL)
-       {
-               $errorInfo = $dbxlink->errorInfo();
-               showError ("SQL query '${query}' failed: ${errorInfo[2]}", __FUNCTION__);
-               die;
-       }
-       // we always have a row
-       $row = $result2->fetch (PDO::FETCH_NUM);
-       $last_insert_id = $row[0];
-       $result2->closeCursor();
+       $last_insert_id = lastInsertID();
        // Do AutoPorts magic
        executeAutoPorts ($last_insert_id, $new_type_id);
        // Now tags...
-       $errcount = 0;
-       foreach ($taglist as $tag_id)
-               if (addTagForEntity ('object', $last_insert_id, $tag_id) == FALSE)
-                       $errcount++;
-       if ($errcount)
-               showError ("Experienced ${errcount} errors adding tags for the object");
+       $error = addTagsForLastRecord ('object', $taglist, $last_insert_id);
+       if ($error != '')
+       {
+               showError ("Error adding tags for the object: ${error}");
+               return FALSE;
+       }
        return recordHistory ('RackObject', "id = ${last_insert_id}");
 }
 
@@ -580,6 +555,18 @@ function getMolecule ($mid = 0)
        return $ret;
 }
 
+// returns exactly what is's named after
+function lastInsertID ()
+{
+       if (NULL == ($result = useSelectBlade ('select last_insert_id()', __FUNCTION__)))
+       {
+               showError ('SQL query failed!', __FUNCTION__);
+               die;
+       }
+       $row = $result->fetch (PDO::FETCH_NUM);
+       return $row[0];
+}
+
 // This function creates a new record in Molecule and number of linked
 // R-U-A records in Atom.
 function createMolecule ($molData)
@@ -592,16 +579,7 @@ function createMolecule ($molData)
                showError ('Error inserting into Molecule', __FUNCTION__);
                return NULL;
        }
-       $query = 'select last_insert_id()';
-       $result2 = $dbxlink->query ($query);
-       if ($result2 == NULL)
-       {
-               showError ('Cannot get last ID.', __FUNCTION__);
-               return NULL;
-       }
-       $row = $result2->fetch (PDO::FETCH_NUM);
-       $molecule_id = $row[0];
-       $result2->closeCursor();
+       $molecule_id = lastInsertID();
        foreach ($molData as $rua)
        {
                $rack_id = $rua['rack_id'];
@@ -2141,14 +2119,11 @@ function addRStoRSPool ($pool_id = 0, $rsip = '', $rsport = 0, $inservice = 'no'
        );
 }
 
-function commitCreateVS ($vip = '', $vport = 0, $proto = '', $name = '', $vsconfig, $rsconfig)
+function commitCreateVS ($vip = '', $vport = 0, $proto = '', $name = '', $vsconfig, $rsconfig, $taglist = array())
 {
        if (empty ($vip) or $vport <= 0 or empty ($proto))
-       {
-               showError ('Invalid arguments', __FUNCTION__);
-               die;
-       }
-       return useInsertBlade
+               return __FUNCTION__ . ': invalid arguments';
+       if (!useInsertBlade
        (
                'IPVirtualService',
                array
@@ -2160,7 +2135,9 @@ function commitCreateVS ($vip = '', $vport = 0, $proto = '', $name = '', $vsconf
                        'vsconfig' => (empty ($vsconfig) ? 'NULL' : "'${vsconfig}'"),
                        'rsconfig' => (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'")
                )
-       );
+       ))
+               return __FUNCTION__ . ': SQL insertion failed';
+       return addTagsForLastRecord ('ipv4vs', $taglist);
 }
 
 function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vs_id = 0, $vsconfig = '', $rsconfig = '')
@@ -2384,9 +2361,11 @@ function getRSPoolsForObject ($object_id = 0)
        return $ret;
 }
 
-function commitCreateRSPool ($name = '', $vsconfig = '', $rsconfig = '')
+function commitCreateRSPool ($name = '', $vsconfig = '', $rsconfig = '', $taglist = array())
 {
-       return useInsertBlade
+       if (empty ($name))
+               return __FUNCTION__ . ': invalid arguments';
+       if (!useInsertBlade
        (
                'IPRSPool',
                array
@@ -2395,7 +2374,9 @@ function commitCreateRSPool ($name = '', $vsconfig = '', $rsconfig = '')
                        'vsconfig' => (empty ($vsconfig) ? 'NULL' : "'${vsconfig}'"),
                        'rsconfig' => (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'")
                )
-       );
+       ))
+               return __FUNCTION__ . ': SQL insertion failed';
+       return addTagsForLastRecord ('ipv4rspool', $taglist);
 }
 
 function commitDeleteRSPool ($pool_id = 0)
@@ -2666,6 +2647,22 @@ function addTagForEntity ($realm, $entity_id, $tag_id)
        );
 }
 
+function addTagsForLastRecord ($realm, $taglist, $last_insert_id = 0)
+{
+       if (!count ($taglist))
+               return '';
+       if (!$last_insert_id)
+               $last_insert_id = lastInsertID();
+       $errcount = 0;
+       foreach ($taglist as $tag_id)
+               if (addTagForEntity ($realm, $last_insert_id, $tag_id) == FALSE)
+                       $errcount++;    
+       if (!$errcount)
+               return '';
+       else
+               return "Experienced ${errcount} errors adding tags in realm '${realm}' for entity ID == ${last_insert_id}";
+}
+
 function createIPv4Prefix ($range = '', $name = '', $is_bcast = FALSE, $taglist = array())
 {
        // $range is in x.x.x.x/x format, split into ip/mask vars
@@ -2742,22 +2739,7 @@ function createIPv4Prefix ($range = '', $name = '', $is_bcast = FALSE, $taglist
                updateAddress ($network_addr, 'network', 'yes');
                updateAddress ($broadcast_addr, 'broadcast', 'yes');
        }
-       if (!count ($taglist))
-               return '';
-       if (($result = useSelectBlade ('select last_insert_id()', __FUNCTION__)) == NULL) 
-               return 'Query #3 failed in ' . __FUNCTION__;
-       $row = $result->fetch (PDO::FETCH_NUM);
-       $last_insert_id = $row[0];
-       $result->closeCursor();
-       unset ($result);
-       $errcount = 0;
-       foreach ($taglist as $tag_id)
-               if (addTagForEntity ('ipv4net', $last_insert_id, $tag_id) == FALSE)
-                       $errcount++;    
-       if (!$errcount)
-               return '';
-       else
-               return "Experienced ${errcount} errors adding tags for the IPv4 prefix";
+       return addTagsForLastRecord ('ipv4net', $taglist);
 }
 
 // FIXME: This function doesn't wipe relevant records from IPAddress table.
index 3255020..22dd4d4 100644 (file)
@@ -3430,6 +3430,9 @@ function printImageHREF ($tag, $title = '', $do_input = FALSE, $tabindex = 0)
        $image['create']['path'] = 'pix/tango-document-new.png';
        $image['create']['width'] = 16;
        $image['create']['height'] = 16;
+       $image['CREATE']['path'] = 'pix/tango-document-new-big.png';
+       $image['CREATE']['width'] = 32;
+       $image['CREATE']['height'] = 32;
        $image['DENIED']['path'] = 'pix/tango-dialog-error-big.png';
        $image['DENIED']['width'] = 32;
        $image['DENIED']['height'] = 32;
@@ -3438,7 +3441,7 @@ function printImageHREF ($tag, $title = '', $do_input = FALSE, $tabindex = 0)
        $img = $image[$tag];
        if ($do_input == TRUE)
                echo
-                       "<input type=image name=submit " .
+                       "<input type=image name=submit class=icon " .
                        "src='${root}${img['path']}' " .
                        "border=0 " .
                        ($tabindex ? '' : "tabindex=${tabindex}") .
@@ -4283,10 +4286,13 @@ function renderVSListEditForm ()
        echo "<td><input type=text name=vport size=5 value='${default_port}' tabindex=2></td><td>";
        printSelect ($protocols, 'proto', 'TCP');
        echo "</td>";
-       echo "<td><input type=text name=name tabindex=4></td>";
-       echo "<td rowspan=3 valign=middle><input type=submit value=OK tabindex=5></td></tr>";
-       echo "<tr><th>VS configuration</th><td colspan=4 class=tdleft><textarea name=vsconfig rows=10 cols=80></textarea></td></tr>";
-       echo "<tr><th>RS configuration</th><td colspan=4 class=tdleft><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
+       echo "<td><input type=text name=name tabindex=4></td><td>";
+       printImageHREF ('CREATE', 'create virtual service', TRUE);
+       echo "</td></tr><tr><th>VS configuration</th><td colspan=4 class=tdleft><textarea name=vsconfig rows=10 cols=80></textarea></td>\n";
+       echo "<td rowspan=2><h3>assign tags</h3>";
+       renderTagSelect();
+       echo "</td></tr>";
+       echo "<tr><th>RS configuration</th><td colspan=4 class=tdleft><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>\n";
        echo "</table>";
        echo "</form>\n";
        finishPortlet();
@@ -4322,9 +4328,9 @@ function renderVSListEditForm ()
                echo "</td>";
                echo "<td class=tdleft><input type=text name=name value='${vsinfo['name']}'></td>";
                echo "<td><textarea name=vsconfig>${vsinfo['vsconfig']}</textarea></td>";
-               echo "<td><textarea name=rsconfig>${vsinfo['rsconfig']}</textarea></td>";
-               echo "<td><input type=submit value=OK></td>";
-               echo "</tr></form>\n";
+               echo "<td><textarea name=rsconfig>${vsinfo['rsconfig']}</textarea></td><td>";
+               printImageHREF ('save', 'save changes', TRUE);
+               echo "</td></tr></form>\n";
                $order = $nextorder[$order];
        }
        echo "</table>";
@@ -4376,10 +4382,13 @@ function editRSPools ()
        echo "<input type=hidden name=op value=add>\n";
        echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
        echo "<tr><th>name</th>";
-       echo "<td><input type=text name=name tabindex=1></td>";
-       echo "<td><input type=submit tabindex=1 value=OK></td></tr>";
-       echo "<tr><th>VS configuration</th><td colspan=2><textarea name=vsconfig rows=10 cols=80></textarea></td></tr>";
-       echo "<tr><th>RS configuration</th><td colspan=2><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
+       echo "<td class=tdleft><input type=text name=name tabindex=1></td><td>";
+       printImageHREF ('CREATE', 'create real server pool', TRUE);
+       echo "</td></tr><tr><th>VS configuration</th><td><textarea name=vsconfig rows=10 cols=80></textarea></td>";
+       echo "<td rowspan=2><h3>assign tags</h3>";
+       renderTagSelect();
+       echo "</td></tr>";
+       echo "<tr><th>RS configuration</th><td><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
        echo "</table></form>";
        finishPortlet();
 
@@ -4409,9 +4418,9 @@ function editRSPools ()
                echo "</td>";
                echo "<td class=tdleft><input type=text name=name value='${pool_info['name']}'></td>";
                echo "<td><textarea name=vsconfig>${pool_info['vsconfig']}</textarea></td>";
-               echo "<td><textarea name=rsconfig>${pool_info['rsconfig']}</textarea></td>";
-               echo "<td><input type=submit value=OK></td>";
-               echo "</tr></form>\n";
+               echo "<td><textarea name=rsconfig>${pool_info['rsconfig']}</textarea></td><td>";
+               printImageHREF ('save', 'save changes', TRUE);
+               echo "</td></tr></form>\n";
                $order = $nextorder[$order];
        }
        echo "</table>";
index 70bd3b8..98ae581 100644 (file)
@@ -896,15 +896,18 @@ function addVService ()
        assertStringArg ('name', __FUNCTION__, TRUE);
        assertStringArg ('vsconfig', __FUNCTION__, TRUE);
        assertStringArg ('rsconfig', __FUNCTION__, TRUE);
-       if (!commitCreateVS (
+       $error = commitCreateVS
+       (
                $_REQUEST['vip'],
                $_REQUEST['vport'],
                $_REQUEST['proto'],
                $_REQUEST['name'],
                $_REQUEST['vsconfig'],
-               $_REQUEST['rsconfig']
-       ))
-               return buildRedirectURL_ERR ('commitCreateVS() failed');
+               $_REQUEST['rsconfig'],
+               isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array()
+       );
+       if ($error != '')
+               return buildRedirectURL_ERR ($error);
        else
                return buildRedirectURL_OK ('Virtual service was successfully created');
 }
@@ -1025,12 +1028,15 @@ function addRSPool ()
        assertStringArg ('name', __FUNCTION__, TRUE);
        assertStringArg ('vsconfig', __FUNCTION__, TRUE);
        assertStringArg ('rsconfig', __FUNCTION__, TRUE);
-       if (!commitCreateRSPool (
+       $error = commitCreateRSPool
+       (
                $_REQUEST['name'],
                $_REQUEST['vsconfig'],
-               $_REQUEST['rsconfig']
-       ))
-               return buildRedirectURL_ERR ('commitCreateRSPool() failed');
+               $_REQUEST['rsconfig'],
+               isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array()
+       );
+       if ($error != '')
+               return buildRedirectURL_ERR ($error);
        else
                return buildRedirectURL_OK ('RS pool was successfully created');
 }
diff --git a/pi.css b/pi.css
index 983026c..94e5c09 100644 (file)
--- a/pi.css
+++ b/pi.css
@@ -218,6 +218,10 @@ input {
 }
 input [type="text"] {
 }
+input.icon {
+       background-color : transparent;
+       border-width: 0px;
+}
 textarea {
        background-color : #f0f0f0;
        border-width : 1px;