r2432 Added rack deletion feature
authorDenis Yeldandi <dyeldandi@gmail.com>
Tue, 10 Feb 2009 15:34:09 +0000 (15:34 +0000)
committerDenis Yeldandi <dyeldandi@gmail.com>
Tue, 10 Feb 2009 15:34:09 +0000 (15:34 +0000)
inc/database.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index 3fe8077ff3fa1497a7c09c447f36660606ec546e..96f8e7b19008063153fc54f8e299e4133c2f0670 100644 (file)
@@ -275,7 +275,7 @@ function getRackData ($rack_id = 0, $silent = FALSE)
        $query =
                "select Rack.id, Rack.name, row_id, height, Rack.comment, RackRow.name as row_name from " .
                "Rack left join RackRow on Rack.row_id = RackRow.id  " .
-               "where  Rack.id='${rack_id}' and Rack.deleted = 'no' limit 1";
+               "where  Rack.id='${rack_id}' and Rack.deleted = 'no'";
        $result = useSelectBlade ($query, __FUNCTION__);
        if (($row = $result->fetch (PDO::FETCH_ASSOC)) == NULL)
        {
@@ -311,11 +311,15 @@ function getRackData ($rack_id = 0, $silent = FALSE)
                "unit_no between 1 and " . $rack['height'] . " order by unit_no";
        $result = useSelectBlade ($query, __FUNCTION__);
        global $loclist;
+       $mounted_objects = array();
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
        {
                $rack[$row['unit_no']][$loclist[$row['atom']]]['state'] = $row['state'];
                $rack[$row['unit_no']][$loclist[$row['atom']]]['object_id'] = $row['object_id'];
+               if ($row['state'] == 'T' and $row['object_id']!=NULL)
+                       $mounted_objects[$row['object_id']] = TRUE;
        }
+       $rack['mountedObjects'] = array_keys($mounted_objects);
        $result->closeCursor();
        return $rack;
 }
@@ -534,6 +538,20 @@ function commitDeleteObject ($object_id = 0)
        return '';
 }
 
+function commitDeleteRack($rack_id)
+{
+       global $dbxlink;
+       $query = "delete from RackSpace where rack_id = '${rack_id}'";
+       $dbxlink->query ($query);
+       $query = "delete from TagStorage where entity_realm='rack' and entity_id='${rack_id}'";
+       $dbxlink->query ($query);
+       $query = "delete from RackHistory where id = '${rack_id}'";
+       $dbxlink->query ($query);
+       $query = "delete from Rack where id = '${rack_id}'";
+       $dbxlink->query ($query);
+       return TRUE;
+}
+
 function commitUpdateRack ($rack_id, $new_name, $new_height, $new_row_id, $new_comment)
 {
        if (empty ($rack_id) || empty ($new_name) || empty ($new_height))
index a3dd52f91ff6669528b481c64fd33cf2f75c2bb3..d8c5264f39e4f38185fd0c0300f69ea5141c27d6 100644 (file)
@@ -233,6 +233,7 @@ function renderRackspace ()
 {
        $tagfilter = getTagFilter();
        $tagfilter_str = getTagFilterStr ($tagfilter);
+       showMessageOrError();
        echo "<table class=objview border=0 width='100%'><tr><td class=pcleft>";
        renderTagFilterPortlet ($tagfilter, 'rack');
        echo '</td><td class=pcright>';
@@ -614,6 +615,12 @@ function renderEditRackForm ($rack_id)
        echo "<tr><th class=tdright>Name (required):</th><td class=tdleft><input type=text name=rack_name value='${rack['name']}'></td></tr>\n";
        echo "<tr><th class=tdright>Height (required):</th><td class=tdleft><input type=text name=rack_height value='${rack['height']}'></td></tr>\n";
        echo "<tr><th class=tdright>Comment:</th><td class=tdleft><input type=text name=rack_comment value='${rack['comment']}'></td></tr>\n";
+       if (count ($rack['mountedObjects']) == 0)
+       {
+               echo "<tr><th class=tdright>Actions:</th><td class=tdleft><a href='".
+                       makeHrefProcess(array('op'=>'deleteRack', 'rack_id'=>$rack_id)).
+                       "' onclick=\"javascript:return confirm('Are you sure you want to delete the rack?')\">Delete rack</a></td></tr>\n";
+       }
        echo "<tr><td class=submit colspan=2>";
        printImageHREF ('SAVE', 'Save changes', TRUE);
        echo "</td></tr>\n";
@@ -1412,6 +1419,7 @@ function printLog ($log)
                                76 => array ('code' => 'success', 'format' => 'Object %s was deleted successfully'),
                                77 => array ('code' => 'success', 'format' => 'Row %s was deleted successfully'),
                                78 => array ('code' => 'success', 'format' => 'File %s saved Ok'),
+                               79 => array ('code' => 'success', 'format' => 'Rack %s was deleted successfully'),
 
 // records 100~199 with fatal error messages
                                100 => array ('code' => 'error', 'format' => 'Generic error: %s'),
@@ -1502,6 +1510,7 @@ function printLog ($log)
                                203 => array ('code' => 'warning', 'format' => 'Port %s seems to be the first in VLAN %u at this switch.'),
                                204 => array ('code' => 'warning', 'format' => 'Check uplink/downlink configuration for proper operation.'),
                                205 => array ('code' => 'warning', 'format' => '%u change request(s) have been ignored'),
+                               206 => array ('code' => 'warning', 'format' => 'Rack is not empty'),
                        );
                        // Handle the arguments. Is there any better way to do it?
                        foreach ($log['m'] as $record)
index 4d49abff4521db4a46bf1f9c5c6fed1b84f6add1..8946116a4b3875dbc6de9cebab57af5f901714d5 100644 (file)
@@ -87,6 +87,7 @@ $trigger['rack']['tags'] = 'trigger_tags';
 $ophandler['rack']['design']['updateRack'] = 'updateRackDesign';
 $ophandler['rack']['problems']['updateRack'] = 'updateRackProblems';
 $ophandler['rack']['edit']['updateRack'] = 'updateRack';
+$ophandler['rack']['edit']['deleteRack'] = 'deleteRack';
 $ophandler['rack']['tags']['saveTags'] = 'saveEntityTags';
 $ophandler['rack']['files']['addFile'] = 'addFileToEntity';
 $ophandler['rack']['files']['linkFile'] = 'linkFileToEntity';
@@ -228,6 +229,9 @@ $msgcode['generateAutoPorts']['ERR'] = 142;
 $msgcode['setPortVLAN']['ERR1'] = 156;
 $msgcode['saveEntityTags']['OK'] = 22;
 $msgcode['saveEntityTags']['ERR'] = 143;
+$msgcode['deleteRack']['OK'] = 79;
+$msgcode['deleteRack']['ERR'] = 100;
+$msgcode['deleteRack']['ERR1'] = 206;
 
 $page['ipv4space']['title'] = 'IPv4 space';
 $page['ipv4space']['parent'] = 'index';
index 8177238c23acb940fcac4be815668512a5a395b6..18241cb6cad0361ca81965fbd004a638a78f7f67 100644 (file)
@@ -1539,6 +1539,30 @@ function addRack ()
                return buildRedirectURL (__FUNCTION__, 'ERR2');
 }
 
+function deleteRack ()
+{
+       assertUIntArg ('rack_id', __FUNCTION__);
+       $rack_id = $_REQUEST['rack_id'];
+       $rackData = getRackData ($rack_id);
+       if ($rackData == NULL)
+       {
+               showError ('getRackData() failed', __FUNCTION__);
+               return;
+       }
+       if (count ($rackData['mountedObjects']) == 0)
+       {
+               resetThumbCache ($rack_id);
+               if (TRUE === commitDeleteRack ($rack_id))
+                       return buildRedirectURL (__FUNCTION__, 'OK', array ($rackData['name']), 'rackspace', 'default');
+               else
+                       return buildRedirectURL (__FUNCTION__, 'ERR', array(), 'rackspace', 'default');
+       }
+       else
+       {
+               return buildRedirectURL (__FUNCTION__, 'ERR1');
+       }
+}
+
 function updateRack ()
 {
        assertUIntArg ('rack_id', __FUNCTION__);