}
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)
{
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.
$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)
{
$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;
}
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':
// 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)
{
$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++)
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)
{
// 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);
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');
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']))
// 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);
{
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;
}
}
$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);
$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';
// 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')
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.
);
case 'rack':
assertUIntArg ('rack_id', __FUNCTION__);
- $rack = getRackData ($_REQUEST['rack_id']);
+ $rack = spotEntity ('rack', $_REQUEST['rack_id']);
return array
(
'name' => $rack['name'],
{
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
{
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;
}
}
// 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++;
}
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;
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');
{
// 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;
}
imagepng ($img);
imagedestroy ($img);
+ return TRUE;
}
function renderProgressBarImage ($done)