show object names in allocated units (Mantis#1711)
authorDenis Ovsienko <denis@ovsienko.info>
Fri, 2 Nov 2018 19:28:50 +0000 (19:28 +0000)
committerDenis Ovsienko <denis@ovsienko.info>
Fri, 2 Nov 2018 20:36:16 +0000 (20:36 +0000)
This change implements the original idea by Bram.

renderAtomGrid() generates forms built into rack diagrams to allow the
user to adjust rack design and to mark rack-specific problems and to
change rackspace allocation for an object. The function used to put a
checkbox into each atom of the diagram regardless if specific atoms
belong to the context (where they did not belong, the checkboxes were
disabled). This was supposedly done to keep the rack diagram unit rows
exactly the same height.

However, that was not convenient as the user could not correlate the
checkboxes of interest with neither names nor exact boundaries of known
objects in the rack and often had to rely on unit numbers only or to flip
between the default and the rackspace tabs.

Port some logic from renderRack() to renderAtomGrid() to show mounted
objects on the said forms. Amend addBulkSelectorJS() to keep the bulk
selector away from the object hyperlinks, which are much more useful if
they remain clickable, especially on the object rackspace tab.

ChangeLog
wwwroot/inc/interface.php

index 1c18cdd..b0af24a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
        update: add a server configuration report (same as before install/upgrade)
        update: new modular port type 'SFP28'
        update: allow to delete local user accounts (Mantis#1089)
+       update: show names in allocated units when assigning rackspace (Mantis#1711)
        new feature: "shared router" allocation (GH#210 by Vladimir Ivanov)
        new feature: optional tag descriptions
        new feature: support for HP N.11.78 and IOS 15 (GH #225 by Vasilii Shashkov)
index 4f118e3..3a975eb 100644 (file)
@@ -2153,7 +2153,7 @@ function addBulkSelectorJS ($element_id)
 $(function () {
     $("#{$element_id} tbody").selectable({
         filter: 'td.atom',
-        cancel: 'th',
+        cancel: 'th,a',
         stop: function () {
             $(".ui-selected input:enabled", this).each(function () {
                 this.checked = !this.checked
@@ -3961,8 +3961,9 @@ function renderSearchResults ($terms, $summary)
 // produced by amplifyCell(), the second is the R/O flag. When this flag is true all checkboxes
 // are become disabled
 
-function renderAtomGrid ($data, $is_ro=FALSE)
+function renderAtomGrid ($data, $is_ro = FALSE)
 {
+       markAllSpans ($data);
        $rack_id = $data['id'];
        $reverse = considerConfiguredConstraint ($data, 'REVERSED_RACKS_LISTSRC');
        addJS ('js/racktables.js');
@@ -3972,17 +3973,44 @@ function renderAtomGrid ($data, $is_ro=FALSE)
                echo "<tr><th><a href='javascript:;' onclick=\"toggleRowOfAtoms('${rack_id}','${unit_no}')\">${unit_label}</a></th>";
                for ($locidx = 0; $locidx < 3; $locidx++)
                {
-                       $name = "atom_${rack_id}_${unit_no}_${locidx}";
+                       $show_checkbox = $data[$unit_no][$locidx]['enabled'];
+                       if (! $show_checkbox && array_fetch ($data[$unit_no][$locidx], 'skipped', FALSE))
+                               continue;
                        $state = $data[$unit_no][$locidx]['state'];
-                       echo "<td class='atom state_${state}";
-                       if (isset ($data[$unit_no][$locidx]['hl']))
-                               echo $data[$unit_no][$locidx]['hl'];
-                       echo "'>";
-                       $disabled_text = $is_ro ? ' disabled' : '';
-                       if (!($data[$unit_no][$locidx]['enabled'] === TRUE))
-                               echo "<input type=checkbox id=${name} disabled>";
-                       else
+                       $td = array ('class' => $show_checkbox ? 'atom ' : '');
+                       $td['class'] .= "state_{$state}";
+                       if (array_key_exists ('hl', $data[$unit_no][$locidx]))
+                       {
+                               // Implies $state != 'F'.
+                               $hl = $data[$unit_no][$locidx]['hl'];
+                               $td['class'] .= $hl;
+                               if ($state == 'T')
+                               {
+                                       // Implies object_id is set and the value is not NULL.
+                                       $objectData = spotEntity ('object', $data[$unit_no][$locidx]['object_id']);
+                                       setEntityColors ($objectData);
+                                       $extrastyle = $hl != '' ? 'border:3px solid #80ffff !important;' : '';
+                                       $td['class'] .= getObjectClass ($objectData, $extrastyle);
+                               }
+                       }
+                       if (! $show_checkbox)
+                               foreach (array ('colspan', 'rowspan') as $key)
+                                       if (array_key_exists ($key, $data[$unit_no][$locidx]))
+                                               $td[$key] = $data[$unit_no][$locidx][$key];
+
+                       echo makeHtmlTag ('td', $td);
+                       if ($show_checkbox)
+                       {
+                               // FIXME: This data requires a cleaner handover from markupAtomGrid()
+                               // to be better suited for makeHtmlTag().
+                               $name = "atom_${rack_id}_${unit_no}_${locidx}";
+                               $disabled_text = $is_ro ? ' disabled' : '';
                                echo "<input type=checkbox" . $data[$unit_no][$locidx]['checked'] . " name=${name} id=${name}${disabled_text}>";
+                       }
+                       elseif ($state == 'T')
+                               printObjectDetailsForRenderRack ($data[$unit_no][$locidx]['object_id']);
+                       else
+                               echo '&nbsp;';
                        echo '</td>';
                }
                echo "</tr>\n";