Esempio n. 1
0
 public function view($path)
 {
     // Checks if the user did not provide enough information
     if (!$path['id']) {
         // Returns error message
         return DataCenterUI::message('error', 'insufficient-data');
     }
     // Gets plan from database
     $plan = DataCenterDB::getPlan($path['id']);
     // Gets space of plan
     $space = $plan->getSpace();
     // Gets location of space
     $location = $space->getLocation();
     // Sets location information to space
     $space->set('location_name', implode(' / ', $location->get(array('name', 'region'))));
     // Gets structure of plan from database
     $structure = $plan->getStructure(DataCenterDB::buildSort('link', 'asset', array('x', 'y')));
     // Builds tables from structure
     $tables = DataCenterDB::buildLookupTable('asset_type', $structure);
     // Builds list of rack/object assets used in plan
     if (isset($tables['rack']) && is_array($tables['rack'])) {
         foreach ($tables['rack'] as $key => $link) {
             $asset = $link->getAsset();
             $model = $asset->getModel();
             $tables['rack'][$key]->set(array('model' => implode(' / ', $model->get(array('manufacturer', 'name')))));
         }
     } else {
         $tables['rack'] = null;
     }
     // Builds javascript that references the renderable plan
     $target = array('dataCenter.renderer.getTarget' => array(DataCenterJs::toScalar('plan')), 'getModule');
     // Detects if this user came from a zoomed in page
     $refererPath = DataCenterPage::getRefererPath();
     $zoomOptions = array();
     if ($refererPath['page'] == $path['page'] && $refererPath['type'] == 'rack' && $refererPath['id'] !== null) {
         $rackLink = DataCenterDB::getAssetLink($refererPath['id']);
         $rack = $rackLink->getAsset();
         $zoomOptions['zoom-from-rack'] = $rack->getId();
     }
     if (!isset($tables['rack'])) {
         $tables['rack'] = array();
     }
     // Builds table of racks
     $racks = DataCenterUI::renderWidget('table', array('rows' => $tables['rack'], 'fields' => array('name', 'model', 'position' => array('fields' => array('x', 'y'), 'glue' => ' x ')), 'link' => array('page' => 'plans', 'type' => 'rack', 'action' => 'view', 'id' => '#id'), 'effects' => array(array('event' => 'onmouseover', 'script' => DataCenterJs::chain(array_merge($target, array('setRackHighlight' => array('{asset_id}', DataCenterJs::toScalar(true)))), false)), array('event' => 'onmouseout', 'script' => DataCenterJs::chain(array_merge($target, array('clearRackHighlight' => array(DataCenterJs::toScalar(true)))), false)))));
     // Returns single columm layout with a table
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'racks')), $racks, DataCenterUI::renderWidget('actions', array('links' => array(array('page' => 'plans', 'type' => 'rack', 'action' => 'select', 'parameter' => array('plan', $path['id']))), 'rights' => array('change'))), DataCenterUI::renderWidget('heading', array('message' => 'configuration')), DataCenterUI::renderWidget('details', array('row' => $plan, 'fields' => array('tense' => array('format' => 'option'), 'name', 'note'))), DataCenterUI::renderWidget('heading', array('message' => 'facility')), DataCenterUI::renderWidget('details', array('row' => $space, 'fields' => array('tense' => array('format' => 'option'), 'location' => array('field' => 'location_name'), 'name', 'size' => array('fields' => array('width', 'depth', 'height'), 'glue' => ' x '), 'power'))))), DataCenterUI::renderWidget('plan', array_merge(array('plan' => $plan), $zoomOptions))));
 }
Esempio n. 2
0
 public function view($path)
 {
     // Checks if the user did not provide enough information
     if (!$path['id']) {
         // Returns error message
         return DataCenterUI::message('error', 'insufficient-data');
     }
     // Gets link from database
     $rackLink = DataCenterDB::getAssetLink($path['id']);
     // Extracts rack from link
     $rack = $rackLink->getAsset();
     // Gets plan from database
     $plan = DataCenterDB::getPlan($rackLink->get('plan'));
     // Gets structure of plan
     $structure = $plan->getStructure(DataCenterDB::buildSort('link', 'asset', array('orientation', 'z DESC')));
     // Gets objects from rack in structure
     $id = $rackLink->getId();
     $objectLinks = array();
     foreach ($structure as $rackLink) {
         if ($rackLink->getId() == $id) {
             $objectLinks = $rackLink->getStructure();
             break;
         }
     }
     foreach ($objectLinks as $key => $objectLink) {
         $object = $objectLink->getAsset();
         $objectModel = $object->getModel();
         $objectLinks[$key]->set(array('rack' => $object->getId(), 'model' => implode(' / ', $objectModel->get(array('manufacturer', 'name'))), 'position' => implode(' / ', array($objectLink->get('z'), DataCenterUI::format($objectLink->get('orientation'), 'side')))));
     }
     // Builds javascript that references the renderable asset
     $target = DataCenterJs::chain(array('dataCenter.renderer.getTarget' => array(DataCenterJs::toScalar('plan')), 'getModule'), false);
     // Detects if this user came from a zoomed out page
     $refererPath = DataCenterPage::getRefererPath();
     $zoomOptions = array();
     if ($refererPath['page'] != $path['page'] || $refererPath['type'] == 'plan') {
         $zoomOptions['zoom-to-rack'] = $rack->getId();
     } else {
         $zoomOptions['look-at-rack'] = $rack->getId();
     }
     // Returns single columm layout with a table
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'objects')), 'objects' => DataCenterUI::renderWidget('table', array('rows' => $objectLinks, 'fields' => array('name', 'model', 'position'), 'link' => array('page' => 'plans', 'type' => 'object', 'id' => '#id', 'action' => 'view'), 'effects' => array(array('event' => 'onmouseover', 'script' => $target . '.setObjectHighlight({rack},true);', 'field' => 'id'), array('event' => 'onmouseout', 'script' => $target . '.clearObjectHighlight( true );')))), DataCenterUI::renderWidget('actions', array('links' => array(array('page' => 'plans', 'type' => 'object', 'action' => 'select', 'parameter' => array('rack', $path['id']))), 'rights' => array('change'))), DataCenterUI::renderWidget('heading', array('message' => 'configuration')), DataCenterUI::renderWidget('details', array('row' => $rackLink, 'fields' => array('position' => array('fields' => array('x', 'y'), 'glue' => ' x '), 'orientation' => array('format' => 'angle')))), DataCenterUI::renderWidget('heading', array('message' => 'asset')), DataCenterUI::renderWidget('details', array('row' => $rack, 'fields' => array('serial', 'asset'))))), DataCenterUI::renderWidget('plan', array_merge(array('plan' => $plan, 'current-rack' => $rack->getId()), $zoomOptions))));
 }