r2320 added ability to delete objects
authorAaron Dummer <aaron@dummer.info>
Tue, 30 Dec 2008 23:44:41 +0000 (23:44 +0000)
committerAaron Dummer <aaron@dummer.info>
Tue, 30 Dec 2008 23:44:41 +0000 (23:44 +0000)
ChangeLog
inc/database.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index a315eaf..f2fd5ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
        new feature: file attachments (by Aaron)
        new feature: IPv4 tree expand/collapse switch
        new feature: IPV4_TREE_SHOW_USAGE option controls IPv4 performance
+       new feature: ability to delete objects (by Aaron)
        update: display row name when listing objects. closes ticket 16 (by Aaron)
        update: ability to manage rows from the Rackspace page in addition to the Dictionary (by Aaron)
        update: IPv4 calculations were optimized for better speed
index 0a2894c..ce15dbd 100644 (file)
@@ -451,6 +451,32 @@ function commitUpdateObject ($object_id = 0, $new_name = '', $new_label = '', $n
        return recordHistory ('RackObject', "id = ${object_id}");
 }
 
+// There are times when you want to delete all traces of an object
+function commitDeleteObject ($object_id = 0)
+{
+       if ($object_id <= 0)
+       {
+               showError ('Invalid args', __FUNCTION__);
+               die;
+       }
+       global $dbxlink;
+       $dbxlink->query("DELETE FROM AttributeValue WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM File WHERE id IN (SELECT file_id FROM FileLink WHERE entity_id = 'object' AND entity_id = {$object_id})");
+       $dbxlink->query("DELETE FROM IPLoadBalancer WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM IPBonds WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM Port WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM PortForwarding WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM RackSpace WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM TagStorage WHERE target_realm = 'object' and target_id = {$object_id}");
+       $dbxlink->query("DELETE FROM Atom WHERE molecule_id IN (SELECT new_molecule_id FROM MountOperation WHERE object_id = {$object_id})");
+       $dbxlink->query("DELETE FROM Molecule WHERE id IN (SELECT new_molecule_id FROM MountOperation WHERE object_id = {$object_id})");
+       $dbxlink->query("DELETE FROM MountOperation WHERE object_id = {$object_id}");
+       $dbxlink->query("DELETE FROM RackObjectHistory WHERE id = {$object_id}");
+       $dbxlink->query("DELETE FROM RackObject WHERE id = {$object_id}");
+
+       return '';
+}
+
 function commitUpdateRack ($rack_id, $new_name, $new_height, $new_row_id, $new_comment)
 {
        if (empty ($rack_id) || empty ($new_name) || empty ($new_height))
index 101a536..8c0edd5 100644 (file)
@@ -811,6 +811,7 @@ function renderRackObject ($object_id = 0)
                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";
        printTagTRs ("${root}?page=objgroup&tab=default&group_id=${info['objtype_id']}&");
+       echo "<tr><th width='50%' class=tdright>Actions:</th><td class=tdleft><a href='${root}process.php?op=deleteObject&page=objects&tab=default&object_id=${object_id}&name=${info['name']}' onclick=\"javascript:return confirm('Are you sure you want to delete the object?')\">Delete object</a></td></tr>\n";
        echo "</table><br>\n";
        finishPortlet();
 
@@ -1376,8 +1377,9 @@ function printLog ($log)
                                71 => array ('code' => 'success', 'format' => 'File %s was linked successfully'),
                                72 => array ('code' => 'success', 'format' => 'File %s was unlinked successfully'),
                                73 => array ('code' => 'success', 'format' => 'File %s was deleted successfully'),
-                               74 => array ('code' => 'success', 'format' => 'Row %s was added successfully'),                         
-                               75 => array ('code' => 'success', 'format' => 'Row %s was updated successfully'),       
+                               74 => array ('code' => 'success', 'format' => 'Row %s was added successfully'),
+                               75 => array ('code' => 'success', 'format' => 'Row %s was updated successfully'),
+                               76 => array ('code' => 'success', 'format' => 'Object %s was deleted successfully'),
 
                                100 => array ('code' => 'error', 'format' => 'Generic error: %s'),
                                101 => array ('code' => 'error', 'format' => 'Port name cannot be empty'),
@@ -1795,6 +1797,7 @@ function renderProblematicObjectsPortlet ()
 function renderObjectSpace ()
 {
        global $root, $taglist, $tagtree;
+       showMessageOrError();
        echo "<table border=0 class=objectview>\n";
        echo "<tr><td class=pcleft width='50%'>";
        startPortlet ('View all by type');
@@ -1829,6 +1832,7 @@ function renderObjectSpace ()
 function renderObjectGroup ()
 {
        global $root, $pageno, $tabno, $nextorder, $taglist, $tagtree;
+       showMessageOrError();
        assertUIntArg ('group_id', __FUNCTION__, TRUE);
        $group_id = $_REQUEST['group_id'];
        $tagfilter = getTagFilter();
@@ -1874,7 +1878,7 @@ function renderObjectGroup ()
                return;
        }
        echo '<br><br><table border=0 cellpadding=5 cellspacing=0 align=center class=cooltable>';
-       echo '<tr><th>Common name</th><th>Visible label</th><th>Asset tag</th><th>Barcode</th><th>Row/Rack</th></tr>';
+       echo '<tr><th>Common name</th><th>Visible label</th><th>Asset tag</th><th>Barcode</th><th>Row/Rack</th><th></th></tr>';
        $order = 'odd';
        foreach ($objects as $obj)
        {
@@ -1893,6 +1897,9 @@ function renderObjectGroup ()
                        echo "<td class='${secondclass}'><a href='${root}?page=row&row_id=${obj['row_id']}'>${obj['Row_name']}</a>/<a href='${root}?page=rack&rack_id=${obj['rack_id']}'>${obj['Rack_name']}</a></td>";
                else
                        echo "<td class='${secondclass}'>Unmounted</td>";
+               echo "<td class='${secondclass}'><a href='${root}process.php?op=deleteObject&page=${pageno}&tab=${tabno}&group_id=${group_id}&object_id=${obj['id']}&name=${obj['dname']}' onclick=\"javascript:return confirm('Are you sure you want to delete the object: ${obj['dname']}?')\">";
+               printImageHREF ('delete', 'Delete object', TRUE);
+               echo "</a></td>";
                echo '</tr>';
                $order = $nextorder[$order];
        }
index eef1c2d..155742d 100644 (file)
@@ -38,6 +38,9 @@ $tab['objects']['default'] = 'View';
 $tab['objects']['addmore'] = 'Add more';
 $tabhandler['objects']['default'] = 'renderObjectSpace';
 $tabhandler['objects']['addmore'] = 'renderAddMultipleObjectsForm';
+$ophandler['objects']['default']['deleteObject'] = 'deleteObject';
+$msgcode['objects']['default']['deleteObject']['OK'] = 76;
+$msgcode['objects']['default']['deleteObject']['ERR'] = 100;
 
 $page['row']['title_handler'] = 'dynamic_title_row';
 $page['row']['bypass'] = 'row_id';
@@ -101,6 +104,9 @@ $page['objgroup']['handler'] = 'renderObjectGroup';
 $page['objgroup']['bypass'] = 'group_id';
 $page['objgroup']['bypass_type'] = 'uint0';
 $page['objgroup']['parent'] = 'objects';
+$ophandler['objgroup']['default']['deleteObject'] = 'deleteObject';
+$msgcode['objgroup']['default']['deleteObject']['OK'] = 76;
+$msgcode['objgroup']['default']['deleteObject']['ERR'] = 100;
 
 $page['object']['title_handler'] = 'dynamic_title_object';
 $page['object']['bypass'] = 'object_id';
index f48c473..cc491a5 100644 (file)
@@ -745,6 +745,17 @@ function updateObject ()
        return buildRedirectURL ('OK');
 }
 
+function deleteObject ()
+{
+       assertUIntArg ('object_id', __FUNCTION__);
+       $error = commitDeleteObject ($_REQUEST['object_id']);
+
+       if ($error != '')
+               return buildRedirectURL ('ERR', array ($error));
+
+       return buildRedirectURL ('OK', array ($_REQUEST['name']));
+}
+
 function useupPort ()
 {
        assertUIntArg ('port_id', __FUNCTION__);