r2745 - stuffInRackspace(): sayonara, this data is in rack structure already
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 13 May 2009 18:47:51 +0000 (18:47 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 13 May 2009 18:47:51 +0000 (18:47 +0000)
 - renderRackInfoPortlet(): use "mountedObjects" field
 - generateMiniRack(): return status code, don't suppress lower level errors
 - renderRackThumb(): don't push mime-type header before status is cleared
 - amplifyCell(): handle 'rack' realm
 - getRackData(): sayonara, obsoleted by amplifyCell()
 - getRSUforRackRow(): switch from getRackData() to spotEntity() and/or amplifyCell()
 - generateMiniRack(): idem
 - getFileLinks(): idem
 - updateObjectAllocation(): idem
 - rollTags(): idem
 - deleteRack(): idem
 - updateRackDesign(): idem
 - updateRackProblems(): idem
 - getResidentRacksData(): idem
 - renderRack(): idem
 - renderEditRackForm(): idem
 - renderGridForm(): idem
 - renderRackSpaceForObject(): idem
 - renderMolecule(): idem
 - renderRackPage(): idem
 - dynamic_title_decoder(): idem

inc/database.php
inc/functions.php
inc/interface.php
inc/ophandlers.php
render_image.php

index 8904d61..5fd77b3 100644 (file)
@@ -467,72 +467,34 @@ function amplifyCell (&$record, $dummy = NULL)
                }
                unset ($result);
                break;
+       case 'rack':
+               $record['mountedObjects'] = array();
+               // start with default rackspace
+               for ($i = $record['height']; $i > 0; $i--)
+                       for ($locidx = 0; $locidx < 3; $locidx++)
+                               $record[$i][$locidx]['state'] = 'F';
+               // load difference
+               $query =
+                       "select unit_no, atom, state, object_id " .
+                       "from RackSpace where rack_id = ${record['id']} and " .
+                       "unit_no between 1 and " . $record['height'] . " order by unit_no";
+               $result = useSelectBlade ($query, __FUNCTION__);
+               global $loclist;
+               $mounted_objects = array();
+               while ($row = $result->fetch (PDO::FETCH_ASSOC))
+               {
+                       $record[$row['unit_no']][$loclist[$row['atom']]]['state'] = $row['state'];
+                       $record[$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;
+               }
+               $record['mountedObjects'] = array_keys ($mounted_objects);
+               unset ($result);
+               break;
        default:
        }
 }
 
-// This is a popular helper for getting information about
-// a particular rack and its rackspace at once.
-function getRackData ($rack_id = 0, $silent = FALSE)
-{
-       if ($rack_id == 0)
-       {
-               if ($silent == FALSE)
-                       showError ('Invalid rack_id', __FUNCTION__);
-               return NULL;
-       }
-       $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}'";
-       $result = useSelectBlade ($query, __FUNCTION__);
-       if (($row = $result->fetch (PDO::FETCH_ASSOC)) == NULL)
-       {
-               if ($silent == FALSE)
-                       showError ('Query #1 succeded, but returned no data', __FUNCTION__);
-               return NULL;
-       }
-
-       // load metadata
-       $clist = array
-       (
-               'id',
-               'name',
-               'height',
-               'comment',
-               'row_id',
-               'row_name'
-       );
-       foreach ($clist as $cname)
-               $rack[$cname] = $row[$cname];
-       $result->closeCursor();
-       unset ($result);
-
-       // start with default rackspace
-       for ($i = $rack['height']; $i > 0; $i--)
-               for ($locidx = 0; $locidx < 3; $locidx++)
-                       $rack[$i][$locidx]['state'] = 'F';
-
-       // load difference
-       $query =
-               "select unit_no, atom, state, object_id " .
-               "from RackSpace where rack_id = ${rack_id} and " .
-               "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;
-}
-
 // This is a popular helper.
 function getObjectInfo ($object_id = 0, $set_dname = TRUE)
 {
@@ -774,7 +736,7 @@ function commitUpdateRack ($rack_id, $new_name, $new_height, $new_row_id, $new_c
        return recordHistory ('Rack', "id = ${rack_id}");
 }
 
-// This function accepts rack data returned by getRackData(), validates and applies changes
+// This function accepts rack data returned by amplifyCell(), validates and applies changes
 // supplied in $_REQUEST and returns resulting array. Only those changes are examined, which
 // correspond to current rack ID.
 // 1st arg is rackdata, 2nd arg is unchecked state, 3rd arg is checked state.
@@ -992,7 +954,7 @@ function getResidentRacksData ($object_id = 0, $fetch_rackdata = TRUE)
        $query = "select distinct rack_id from RackSpace where object_id = ${object_id} order by rack_id";
        $result = useSelectBlade ($query, __FUNCTION__);
        $rows = $result->fetchAll (PDO::FETCH_NUM);
-       $result->closeCursor();
+       unset ($result);
        $ret = array();
        foreach ($rows as $row)
        {
@@ -1001,15 +963,14 @@ function getResidentRacksData ($object_id = 0, $fetch_rackdata = TRUE)
                        $ret[$row[0]] = $row[0];
                        continue;
                }
-               $rackData = getRackData ($row[0]);
-               if ($rackData == NULL)
+               if (NULL == ($rackData = spotEntity ('rack', $row[0])))
                {
-                       showError ('getRackData() failed', __FUNCTION__);
+                       showError ('Rack not found', __FUNCTION__);
                        return NULL;
                }
+               amplifyCell ($rackData);
                $ret[$row[0]] = $rackData;
        }
-       $result->closeCursor();
        return $ret;
 }
 
@@ -3523,7 +3484,7 @@ function getFileLinks ($file_id = 0)
                        case 'rack':
                                $page = 'rack';
                                $id_name = 'rack_id';
-                               $parent = getRackData($row['entity_id']);
+                               $parent = spotEntity ($row['entity_type'], $row['entity_id']);
                                $name = $parent['name'];
                                break;
                        case 'user':
index 91f7863..c231592 100644 (file)
@@ -366,7 +366,7 @@ function binInvMaskFromDec ($maskL)
 
 // This function looks up 'has_problems' flag for 'T' atoms
 // and modifies 'hl' key. May be, this should be better done
-// in getRackData(). We don't honour 'skipped' key, because
+// in amplifyCell(). We don't honour 'skipped' key, because
 // the function is also used for thumb creation.
 function markupObjectProblems (&$rackData)
 {
@@ -672,7 +672,8 @@ function getRSUforRackRow ($rowData = NULL)
        $total_height = 0;
        foreach (array_keys ($rowData) as $rack_id)
        {
-               $data = getRackData ($rack_id);
+               $data = spotEntity ('rack', $rack_id);
+               amplifyCell ($data);
                $total_height += $data['height'];
                for ($unit_no = $data['height']; $unit_no > 0; $unit_no--)
                        for ($locidx = 0; $locidx < 3; $locidx++)
@@ -681,21 +682,6 @@ function getRSUforRackRow ($rowData = NULL)
        return ($counter['T'] + $counter['W'] + $counter['U']) / ($counter['T'] + $counter['W'] + $counter['U'] + $counter['F']);
 }
 
-// Return a list of object IDs, which can be found in the given rackspace block.
-function stuffInRackspace ($rackData)
-{
-       $objects = array();
-       for ($i = $rackData['height']; $i > 0; $i--)
-               for ($locidx = 0; $locidx < 3; $locidx++)
-                       if
-                       (
-                               $rackData[$i][$locidx]['state'] == 'T' and
-                               !in_array ($rackData[$i][$locidx]['object_id'], $objects)
-                       )
-                               $objects[] = $rackData[$i][$locidx]['object_id'];
-       return $objects;
-}
-
 // Make sure the string is always wrapped with LF characters
 function lf_wrap ($str)
 {
index 553a444..8846dea 100644 (file)
@@ -506,11 +506,8 @@ function assertIPv4Arg ($argname, $caller = 'N/A', $ok_if_empty = FALSE)
 // This function renders rack as HTML table.
 function renderRack ($rack_id, $hl_obj_id = 0)
 {
-       if (($rackData = getRackData ($rack_id)) == NULL)
-       {
-               showError ('getRackData() failed', __FUNCTION__);
-               return;
-       }
+       $rackData = spotEntity ('rack', $rack_id);
+       amplifyCell ($rackData);
        markAllSpans ($rackData);
        if ($hl_obj_id > 0)
                highlightObject ($rackData, $hl_obj_id);
@@ -711,12 +708,8 @@ function renderEditObjectForm ($object_id)
 function renderEditRackForm ($rack_id)
 {
        global $pageno;
-       $rack = getRackData ($rack_id);
-       if ($rack == NULL)
-       {
-               showError ('getRackData() failed', __FUNCTION__);
-               return;
-       }
+       $rack = spotEntity ('rack', $rack_id);
+       amplifyCell ($rack);
 
        startPortlet ('Rack attributes');
        printOpFormIntro ('updateRack');
@@ -787,7 +780,7 @@ function renderRackInfoPortlet ($rackData)
        renderProgressBar (getRSUforRack ($rackData));
        echo "</td></tr>\n";
        echo "<tr><th width='50%' class=tdright>Objects:</th><td class=tdleft>";
-       echo count (stuffInRackspace ($rackData));
+       echo count ($rackData['mountedObjects']);
        echo "</td></tr>\n";
        printTagTRs (makeHref(array('page'=>'rackspace', 'tab'=>'default'))."&");
        if (!empty ($rackData['comment']))
@@ -800,11 +793,8 @@ function renderRackInfoPortlet ($rackData)
 // FIXME: switch to using printOpFormIntro()
 function renderGridForm ($rack_id, $filter, $header, $submit, $state1, $state2)
 {
-       if (($rackData = getRackData ($rack_id)) == NULL)
-       {
-               showError ('getRackData() failed', __FUNCTION__);
-               return;
-       }
+       $rackData = spotEntity ('rack', $rack_id);
+       amplifyCell ($rackData);
        $filter ($rackData);
        markupObjectProblems ($rackData);
 
@@ -1665,12 +1655,12 @@ function renderRackSpaceForObject ($object_id)
                {
                        if (!isset ($workingRacksData[$cand_id]))
                        {
-                               $rackData = getRackData ($cand_id);
-                               if ($rackData == NULL)
+                               if (NULL == ($rackData = spotEntity ('rack', $cand_id)))
                                {
-                                       showError ('getRackData() failed', __FUNCTION__);
+                                       showError ('Rack not found', __FUNCTION__);
                                        return NULL;
                                }
+                               amplifyCell ($rackData);
                                $workingRacksData[$cand_id] = $rackData;
                        }
                }
@@ -1697,15 +1687,10 @@ function renderRackSpaceForObject ($object_id)
        $allRacksData = listCells ('rack');
        if (count ($allRacksData) <= getConfigVar ('RACK_PRESELECT_THRESHOLD'))
        {
-               foreach (array_keys ($allRacksData) as $rack_id)
+               foreach ($allRacksData as $rack)
                {
-                       $rackData = getRackData ($rack_id);
-                       if ($rackData == NULL)
-                       {
-                               showError ('getRackData() failed', __FUNCTION__);
-                               return NULL;
-                       }
-                       $workingRacksData[$rack_id] = $rackData;
+                       amplifyCell ($rack);
+                       $workingRacksData[$rack_id] = $rack;
                }
                foreach ($workingRacksData as &$rackData)
                        applyObjectMountMask ($rackData, $object_id);
@@ -1777,7 +1762,8 @@ function renderMolecule ($mdata, $object_id)
                $atom = $rua['atom'];
                if (!isset ($rackpack[$rack_id]))
                {
-                       $rackData = getRackData ($rack_id);
+                       $rackData = spotEntity ('rack', $rack_id);
+                       amplifyCell ($rackData);
                        for ($i = $rackData['height']; $i > 0; $i--)
                                for ($locidx = 0; $locidx < 3; $locidx++)
                                        $rackData[$i][$locidx]['state'] = 'F';
@@ -3144,7 +3130,7 @@ function renderSearchResults ()
 
 // This function prints a table of checkboxes to aid the user in toggling mount atoms
 // from one state to another. The first argument is rack data as
-// produced by getRackData(), the second is the value used for the 'unckecked' state
+// produced by amplifyCell(), the second is the value used for the 'unckecked' state
 // and the third is the value used for 'checked' state.
 // Usage contexts:
 // for mounting an object:             printAtomGrid ($data, 'F', 'T')
@@ -3307,11 +3293,12 @@ function renderConfigMainpage ()
 
 function renderRackPage ($rack_id)
 {
-       if (($rackData = getRackData ($rack_id)) == NULL)
+       if (NULL == ($rackData = spotEntity ('rack', $rack_id)))
        {
-               showError ('getRackData() failed', __FUNCTION__);
+               showError ('Rack not found', __FUNCTION__);
                return;
        }
+       amplifyCell ($rackData);
        echo "<table border=0 class=objectview cellspacing=0 cellpadding=0><tr>";
 
        // Left column with information.
@@ -5952,7 +5939,7 @@ function dynamic_title_decoder ($path_position)
                );
        case 'rack':
                assertUIntArg ('rack_id', __FUNCTION__);
-               $rack = getRackData ($_REQUEST['rack_id']);
+               $rack = spotEntity ('rack', $_REQUEST['rack_id']);
                return array
                (
                        'name' => $rack['name'],
@@ -6029,10 +6016,10 @@ function dynamic_title_decoder ($path_position)
                {
                case 'rack':
                        assertUIntArg ('rack_id', __FUNCTION__);
-                       $rack = getRackData ($_REQUEST['rack_id']);
+                       $rack = spotEntity ('rack', $_REQUEST['rack_id']);
                        if ($rack == NULL)
                        {
-                               showError ('getRackData() failed', __FUNCTION__);
+                               showError ('Rack not found', __FUNCTION__);
                                return NULL;
                        }
                        return array
index f66534f..45a251e 100644 (file)
@@ -700,12 +700,13 @@ function updateObjectAllocation ()
                {
                        if (!isset ($workingRacksData[$cand_id]))
                        {
-                               $rackData = getRackData ($cand_id);
+                               $rackData = spotEntity ('rack', $cand_id);
                                if ($rackData == NULL)
                                {
-                                       showError ('getRackData() failed', __FUNCTION__);
+                                       showError ('rack not found', __FUNCTION__);
                                        return;
                                }
+                               amplifyCell ($rackData);
                                $workingRacksData[$cand_id] = $rackData;
                        }
                }
@@ -1449,11 +1450,12 @@ function rollTags ()
        // Minimizing the extra chain early, so that tag rebuilder doesn't have to
        // filter out the same tag again and again. It will have own noise to cancel.
        $extrachain = getExplicitTagsOnly (buildTagChainFromIds ($extratags));
-       foreach (array_keys (listCells ('rack', $_REQUEST['row_id'])) as $rack_id)
+       foreach (listCells ('rack', $_REQUEST['row_id']) as $rack)
        {
-               if (rebuildTagChainForEntity ('rack', $rack_id, $extrachain))
+               if (rebuildTagChainForEntity ('rack', $rack['id'], $extrachain))
                        $n_ok++;
-               foreach (stuffInRackspace (getRackData ($rack_id)) as $object_id)
+               amplifyCell ($rack);
+               foreach ($rack['mountedObjects'] as $object_id)
                        if (rebuildTagChainForEntity ('object', $object_id, $extrachain))
                                $n_ok++;
        }
@@ -1660,25 +1662,14 @@ $msgcode['deleteRack']['ERR1'] = 206;
 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
-       {
+       if (NULL == ($rackData = spotEntity ('rack', $_REQUEST['rack_id'])))
+               return buildRedirectURL (__FUNCTION__, 'ERR', array ('Rack not found'), 'rackspace', 'default');
+       amplifyCell ($rackData);
+       if (count ($rackData['mountedObjects']))
                return buildRedirectURL (__FUNCTION__, 'ERR1');
-       }
+       if (TRUE !== commitDeleteRack ($_REQUEST['rack_id']))
+               return buildRedirectURL (__FUNCTION__, 'ERR', array(), 'rackspace', 'default');
+       return buildRedirectURL (__FUNCTION__, 'OK', array ($rackData['name']), 'rackspace', 'default');
 }
 
 $msgcode['updateRack']['OK'] = 68;
@@ -1698,28 +1689,26 @@ function updateRack ()
                return buildRedirectURL (__FUNCTION__, 'ERR');
 }
 
+$msgcode['updateRackDesign']['ERR'] = 100;
 function updateRackDesign ()
 {
        assertUIntArg ('rack_id', __FUNCTION__);
-       if (($rackData = getRackData ($_REQUEST['rack_id'])) == NULL)
-       {
-               showError ('getRackData() failed', __FUNCTION__);
-               return;
-       }
+       if (NULL == ($rackData = spotEntity ('rack', $_REQUEST['rack_id'])))
+               return buildRedirectURL (__FUNCTION__, 'ERR', array ('Rack not found'), 'rackspace', 'default');
+       amplifyCell ($rackData);
        applyRackDesignMask($rackData);
        markupObjectProblems ($rackData);
        $response = processGridForm ($rackData, 'A', 'F');
        return buildWideRedirectURL (array($response));
 }
 
+$msgcode['updateRackProblems']['ERR'] = 100;
 function updateRackProblems ()
 {
        assertUIntArg ('rack_id', __FUNCTION__);
-       if (($rackData = getRackData ($_REQUEST['rack_id'])) == NULL)
-       {
-               showError ('getRackData() failed', __FUNCTION__);
-               return;
-       }
+       if (NULL == ($rackData = spotEntity ('rack', $_REQUEST['rack_id'])))
+               return buildRedirectURL (__FUNCTION__, 'ERR', array ('Rack not found'), 'rackspace', 'default');
+       amplifyCell ($rackData);
        applyRackProblemMask($rackData);
        markupObjectProblems ($rackData);
        $response = processGridForm ($rackData, 'F', 'U');
index 38ac387..5f67d47 100644 (file)
@@ -62,28 +62,31 @@ function renderRackThumb ($rack_id = 0)
 {
        // Don't call DB extra times, hence we are most probably not the
        // only script wishing to acces the same data now.
-       header("Content-type: image/png");
-       $thumbcache = loadThumbCache ($rack_id);
-       if ($thumbcache !== NULL)
+       if (NULL !== ($thumbcache = loadThumbCache ($rack_id)))
+       {
+               header("Content-type: image/png");
                echo $thumbcache;
-       else
+               return;
+       }
+       ob_start();
+       if (FALSE !== generateMiniRack ($rack_id))
        {
-               ob_start();
-               generateMiniRack ($rack_id);
-               $capture = ob_get_contents();
-               ob_end_flush();
+               $capture = ob_get_clean();
+               header("Content-type: image/png");
+               echo $capture;
                saveThumbCache ($rack_id, $capture);
+               return;
        }
+       // error text in the buffer
+       ob_end_flush();
 }
 
-// Output a binary string containing the PNG minirack.
-function generateMiniRack ($rack_id = 0)
+// Output a binary string containing the PNG minirack. Indicate error with return code.
+function generateMiniRack ($rack_id)
 {
-       if (($rackData = getRackData ($rack_id, TRUE)) == NULL)
-       {
-               renderError();
-               return;
-       }
+       if (NULL === ($rackData = spotEntity ('rack', $rack_id)))
+               return FALSE;
+       amplifyCell ($rackData);
        markupObjectProblems ($rackData);
        global $rtwidth;
        $rtdepth = 9;
@@ -123,6 +126,7 @@ function generateMiniRack ($rack_id = 0)
        }
        imagepng ($img);
        imagedestroy ($img);
+       return TRUE;
 }
 
 function renderProgressBarImage ($done)