From 61a1d9964f9ae648d59844f7aee9e47c016749fd Mon Sep 17 00:00:00 2001 From: Denis Ovsienko Date: Wed, 13 May 2009 18:47:51 +0000 Subject: [PATCH 1/1] r2745 - stuffInRackspace(): sayonara, this data is in rack structure already - 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 | 99 ++++++++++++++-------------------------------- inc/functions.php | 20 ++-------- inc/interface.php | 57 +++++++++++--------------- inc/ophandlers.php | 55 +++++++++++--------------- render_image.php | 34 +++++++++------- 5 files changed, 96 insertions(+), 169 deletions(-) diff --git a/inc/database.php b/inc/database.php index 8904d613..5fd77b3b 100644 --- a/inc/database.php +++ b/inc/database.php @@ -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': diff --git a/inc/functions.php b/inc/functions.php index 91f78637..c2315925 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -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) { diff --git a/inc/interface.php b/inc/interface.php index 553a4446..8846dea1 100644 --- a/inc/interface.php +++ b/inc/interface.php @@ -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 "\n"; echo "Objects:"; - echo count (stuffInRackspace ($rackData)); + echo count ($rackData['mountedObjects']); echo "\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 ""; // 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 diff --git a/inc/ophandlers.php b/inc/ophandlers.php index f66534f1..45a251ea 100644 --- a/inc/ophandlers.php +++ b/inc/ophandlers.php @@ -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'); diff --git a/render_image.php b/render_image.php index 38ac387e..5f67d47a 100644 --- a/render_image.php +++ b/render_image.php @@ -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) -- 2.25.1