r4874 when an object is contained within another, display the parent's rackspace...
authorAaron Dummer <aaron@dummer.info>
Sat, 31 Dec 2011 01:12:33 +0000 (01:12 +0000)
committerAaron Dummer <aaron@dummer.info>
Sat, 31 Dec 2011 01:12:33 +0000 (01:12 +0000)
added the 'Slot number' attribute to object types which may be mounted in a blade chassis (#474)

ChangeLog
wwwroot/inc/database.php
wwwroot/inc/functions.php
wwwroot/inc/install.php
wwwroot/inc/upgrade.php

index d373a6b..ab8a8d2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -22,6 +22,8 @@
        bugfix: Could not delete objects' log entries
        bugfix: hovering over a mounted object displayed incorrect child data (#498)
        update: list of virtual object types is now maintained as a Config setting (#488)
+       update: when an object is contained within another, display the parent's rackspace allocation info when viewing the child (#432) 
+       update: added the 'Slot number' attribute to object types which may be mounted in a blade chassis (#474)
        update: ability to delete IP prefixes from within its properties tab
        update: adding and deleting forms of IP prefixes are separated
 0.19.10 2011-10-17
index c347fd2..799dd35 100644 (file)
@@ -17,7 +17,7 @@ $SQLSchema = array
                        'label' => 'label',
                        'asset_no' => 'asset_no',
                        'objtype_id' => 'objtype_id',
-                       'rack_id' => '(SELECT rack_id FROM RackSpace WHERE object_id = id ORDER BY rack_id ASC LIMIT 1)',
+                       'rack_id' => '(SELECT RS.rack_id FROM RackSpace RS LEFT JOIN EntityLink EL ON RS.object_id = EL.parent_entity_id WHERE RS.object_id = RackObject.id OR EL.child_entity_id = RackObject.id ORDER BY RS.rack_id ASC LIMIT 1)',
                        'has_problems' => 'has_problems',
                        'comment' => 'comment',
                        'nports' => '(SELECT COUNT(*) FROM Port WHERE object_id = RackObject.id)',
@@ -1230,13 +1230,16 @@ function getOperationMolecules ($op_id = 0)
 
 function getResidentRacksData ($object_id = 0, $fetch_rackdata = TRUE)
 {
-       // Include racks that the object is directly mounted in,
-       // as well as racks that is 'Zero-U' mounted in
-       $result = usePreparedSelectBlade (
-               'SELECT rack_id FROM RackSpace WHERE object_id = ? ' .
+       // Include racks that the object is directly mounted in, racks that it's parent is mounted in,
+       // and racks that it is 'Zero-U' mounted in
+       $result = usePreparedSelectBlade
+       (
+               'SELECT DISTINCT RS.rack_id FROM RackSpace RS LEFT JOIN EntityLink EL ON RS.object_id = EL.parent_entity_id ' .
+               'WHERE RS.object_id = ? or EL.child_entity_id = ? ' .
                'UNION ' .
-               "SELECT parent_entity_id AS rack_id FROM EntityLink where parent_entity_type = 'rack' AND child_entity_type = 'object' AND child_entity_id = ?" .
-               'ORDER BY rack_id', array ($object_id, $object_id));
+               "SELECT parent_entity_id AS rack_id FROM EntityLink where parent_entity_type = 'rack' AND child_entity_type = 'object' AND child_entity_id = ? " .
+               'ORDER BY rack_id', array ($object_id, $object_id, $object_id)
+       );
        $rows = $result->fetchAll (PDO::FETCH_NUM);
        unset ($result);
        $ret = array();
index ad2f617..d36369f 100644 (file)
@@ -654,12 +654,18 @@ function applyRackProblemMask (&$rackData)
 // This function highlights specified object (and removes previous highlight).
 function highlightObject (&$rackData, $object_id)
 {
+       // Also highlight parent objects
+       $parents = getEntityRelatives ('parents', 'object', $object_id);
+       $parent_ids = array();
+       foreach ($parents as $parent)
+               $parent_ids[] = $parent['entity_id'];
+
        for ($unit_no = $rackData['height']; $unit_no > 0; $unit_no--)
                for ($locidx = 0; $locidx < 3; $locidx++)
                        if
                        (
                                $rackData[$unit_no][$locidx]['state'] == 'T' and
-                               $rackData[$unit_no][$locidx]['object_id'] == $object_id
+                               ($rackData[$unit_no][$locidx]['object_id'] == $object_id or     in_array($rackData[$unit_no][$locidx]['object_id'], $parent_ids))
                        )
                                $rackData[$unit_no][$locidx]['hl'] = 'h';
                        else
index 199902d..30b5336 100644 (file)
@@ -962,7 +962,8 @@ INSERT INTO `Attribute` (`id`, `type`, `name`) VALUES
 (24,'string','SW warranty expiration'),
 (25,'string','UUID'),
 (26,'dict','Hypervisor'),
-(27,'uint','Height'),
+(27,'uint','Height, units'),
+(28,'string','Slot number'),
 -- ^^^^^ Any new "default" attributes must go above this line! ^^^^^
 -- Primary key value 9999 makes sure, that AUTO_INCREMENT on server restart
 -- doesn't drop below 10000 (other code relies on this, site-specific
index f20baa1..aef4e7c 100644 (file)
@@ -1183,6 +1183,11 @@ CREATE TABLE `CactiGraph` (
                        break;
                case '0.19.11':
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, is_userdefined, description) VALUES ('VIRTUAL_OBJ_LISTSRC','{\$typeid_1504} or {\$typeid_1505} or {\$typeid_1506} or {\$typeid_1507}','string','no','no','no','List source: virtual objects')";
+                       $query[] = "INSERT INTO `Attribute` (`id`,`type`,`name`) VALUES (28,'string','Slot number')";
+                       $query[] = 'INSERT INTO `AttributeMap` (`objtype_id`,`attr_id`,`chapter_id`) VALUES (4,28,NULL)';
+                       $query[] = 'INSERT INTO `AttributeMap` (`objtype_id`,`attr_id`,`chapter_id`) VALUES (8,28,NULL)';
+                       $query[] = 'INSERT INTO `AttributeMap` (`objtype_id`,`attr_id`,`chapter_id`) VALUES (798,28,NULL)';
+                       $query[] = 'INSERT INTO `AttributeMap` (`objtype_id`,`attr_id`,`chapter_id`) VALUES (1055,28,NULL)';
                        $query[] = "UPDATE Config SET varvalue = '0.19.11' WHERE varname = 'DB_VERSION'";
                        break;
                case '0.20.0':