Пример #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 location from database
     $location = DataCenterDB::getLocation($path['id']);
     // Gets meta values
     $metaValues = $location->getMetaValues();
     // Gets spaces in location from database
     $spaces = $location->getSpaces(DataCenterDB::buildSort('facility', 'space', 'name'));
     // Builds lookup table of locations keyed on tense
     $spacesTable = DataCenterDB::buildLookupTable('tense', $spaces);
     // Builds table widget for each tense
     $tables = array();
     foreach (array('present', 'future', 'past') as $tense) {
         if (isset($spacesTable[$tense])) {
             $tables[$tense] = DataCenterUI::renderWidget('table', array('rows' => $spacesTable[$tense], 'fields' => array('name'), 'link' => array('page' => 'facilities', 'type' => 'space', 'id' => '#id', 'action' => 'view')));
         } else {
             $tables[$tense] = null;
         }
     }
     // Returns 2 columm layout with tabs and a map widget
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'spaces')), DataCenterUI::renderLayout('tabs', $tables), DataCenterUI::renderWidget('actions', array('links' => array(array('page' => 'facilities', 'type' => 'space', 'action' => 'add', 'parameter' => array('location', $location->getId()))), 'rights' => array('change'))), DataCenterUI::renderWidget('heading', array('message' => 'location')), DataCenterUI::renderWidget('details', array('row' => $location, 'fields' => array('tense' => array('format' => 'option'), 'name', 'region', 'latitude', 'longitude'))))), DataCenterUI::renderWidget('map', array('location' => $location, 'jumpto' => true))));
 }
Пример #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
     $objectLink = DataCenterDB::getAssetLink($path['id']);
     // Extracts object from object link
     $object = $objectLink->getAsset();
     // Gets plan from database
     $plan = DataCenterDB::getPlan($objectLink->get('plan'));
     // Initializes list of parameters for plan
     $planParameters = array();
     // Initializes list of fields to show in details
     $detailsFields = array();
     // Checks if object is a part of another asset
     if ($objectLink->get('parent_link')) {
         // Gets rack link object is linked to
         $rackLink = DataCenterDB::getAssetLink($objectLink->get('parent_link'));
         // Checks if object is in a rack
         if ($rackLink->get('asset_type') == 'rack') {
             // Extracts rack from rack link
             $rack = $rackLink->getAsset();
             // Builds plan parameters
             $planParameters = array('current-rack' => $rack->getId(), 'look-at-rack' => $rack->getId(), 'current-object' => $object->getId());
             $detailsFields = array('position' => array('field' => 'z'), 'side' => array('field' => 'orientation', 'format' => 'side'));
         }
     }
     // Gets structure of plan
     $structure = $plan->getStructure(DataCenterDB::buildSort('link', 'asset', array('orientation', 'z DESC')));
     // Returns single columm layout with a table
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'configuration')), DataCenterUI::renderWidget('details', array('row' => $objectLink, 'fields' => array_merge($detailsFields, array('name')))), DataCenterUI::renderWidget('heading', array('message' => 'asset')), DataCenterUI::renderWidget('details', array('row' => $object, 'fields' => array('serial', 'asset'))))), DataCenterUI::renderWidget('plan', array_merge($planParameters, array('plan' => $plan)))));
 }
Пример #3
0
 public function main($path)
 {
     if (!isset(self::$options[$path['type']])) {
         return 'MODELS';
     }
     // Gets all components from database
     $models = DataCenterDB::getModels($path['type'], DataCenterDB::buildSort('model', $path['type'], self::$options[$path['type']]['sort']));
     // Returns single columm layout with a table
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'models-type', 'subject' => DataCenterUI::message('type', $path['type']))), DataCenterUI::renderWidget('gallery', array_merge_recursive(self::$options[$path['type']]['gallery'], array('rows' => $models, 'link' => array('page' => 'models', 'type' => $path['type'], 'id' => '#id', 'action' => 'view')))), DataCenterUI::renderWidget('actions', array('links' => array(array('page' => 'models', 'type' => $path['type'], 'action' => 'create')), 'subject' => 'type', 'rights' => array('change')))))));
 }
Пример #4
0
 public function main($path)
 {
     // Gets all components from database
     $spaces = DataCenterDB::getSpaces(array_merge_recursive(DataCenterDB::buildJoin('facility', 'location', 'id', 'facility', 'space', 'location', array('name' => 'location_name')), DataCenterDB::buildSort('facility', 'space', array('location_name', 'name'))));
     $spacesTable = DataCenterDB::buildLookupTable('tense', $spaces);
     $tables = array();
     foreach (array('present', 'future', 'past') as $tense) {
         if (isset($spacesTable[$tense])) {
             $tables[$tense] = DataCenterUI::renderWidget('table', array('rows' => $spacesTable[$tense], 'fields' => array('name', 'location' => array('field' => 'location_name'), 'size' => array('fields' => array('width', 'height', 'depth'), 'glue' => 'x'), 'power'), 'link' => array('page' => 'facilities', 'type' => 'space', 'id' => '#id', 'action' => 'view')));
         } else {
             $tables[$tense] = null;
         }
     }
     // Returns 2 columm layout with a table and a map widget
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'spaces')), DataCenterUI::renderLayout('tabs', $tables)))));
 }
Пример #5
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))));
 }
Пример #6
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))));
 }
Пример #7
0
 public static function render(array $parameters)
 {
     global $wgUser;
     // Gets current path
     $path = DataCenterPage::getPath();
     // Sets Defaults
     $parameters = array_merge(self::$defaultParameters, $parameters);
     // Begins widget
     $xmlOutput = parent::begin($parameters['class']);
     if (isset($path['parameter']) && is_array($path['parameter']) && count($path['parameter']) >= 2) {
         $changes = array(DataCenterDB::getChange($path['parameter'][0]), DataCenterDB::getChange($path['parameter'][1]));
         if ($changes[0]->get('timestamp') > $changes[1]->get('timestamp')) {
             $changes = array_reverse($changes);
         }
         // Use blank user name if none is set
         foreach ($changes as $change) {
             if ($change->get('user') == 0) {
                 $change->set('username', DataCenterUI::message('label', 'change-blank-user'));
             }
         }
         // Get states from serialized versions
         $states = array(unserialize($changes[0]->get('state')), unserialize($changes[1]->get('state')));
         // Begins table
         $xmlOutput .= DataCenterXml::open('table', self::$defaultAttributes['table']);
         // Restructures data
         $data = array();
         foreach ($states as $i => $state) {
             foreach ($state as $group => $fields) {
                 if (!isset($data[$group])) {
                     $data[$group] = array();
                 }
                 foreach ($fields as $field => $value) {
                     if ($field !== 'id') {
                         if (!isset($data[$group][$field])) {
                             $data[$group][$field] = array();
                         }
                         $data[$group][$field][$i] = $value;
                     }
                 }
             }
         }
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(), DataCenterXml::cell($changes[0]->get('username') . ' - ' . DataCenterUI::format($changes[0]->get('timestamp'), 'date')), DataCenterXml::cell($changes[1]->get('username') . ' - ' . DataCenterUI::format($changes[1]->get('timestamp'), 'date')));
         // Loops over each field
         foreach ($data as $group => $fields) {
             if (count($fields) == 0) {
                 continue;
             }
             $xmlOutput .= DataCenterXml::row(DataCenterXml::headingCell(array_merge(self::$defaultAttributes['heading'], array('colspan' => 3)), DataCenterUI::message('label', 'change-state-' . $group)));
             $even = true;
             foreach ($fields as $field => $values) {
                 // Deals with incomplete data
                 if (count($values) == 1) {
                     if (!isset($values[0])) {
                         $values[0] = null;
                     }
                     if (!isset($values[1])) {
                         $values[1] = null;
                     }
                 }
                 // Detects differnce
                 $different = (string) $values[0] !== (string) $values[1];
                 $spanAttributes = array('class' => $different ? 'different' : 'same');
                 // Gets label name
                 if ($group == 'row') {
                     $label = DataCenterUI::message('field', strtr($field, '_', '-'));
                 } elseif ($group == 'meta') {
                     $metaField = DataCenterDB::getMetaField($field);
                     $label = $metaField->get('name');
                 }
                 $state = $even ? 'even' : 'odd';
                 // Adds row
                 $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(array('class' => 'label'), $label), DataCenterXml::cell(array('class' => 'older-' . $state), DataCenterXml::span($spanAttributes, $values[0])), DataCenterXml::cell(array('class' => 'newer-' . $state), DataCenterXml::span($spanAttributes, $values[1])));
                 $even = !$even;
             }
         }
         // Ends table
         $xmlOutput .= DataCenterXml::close('table');
     } else {
         // Gets history of component from database
         $changes = $parameters['component']->getChanges(array_merge_recursive(DataCenterDB::buildSort('meta', 'change', array('timestamp DESC')), DataCenterDB::buildRange($path)));
         // Gets number of changes fromd database
         $numChanges = $parameters['component']->numChanges();
         // Use blank user name if none is set
         foreach ($changes as $change) {
             if ($change->get('user') == 0) {
                 $change->set('username', DataCenterUI::message('label', 'change-blank-user'));
             }
         }
         // Builds form attributes
         $formAttributes = array('id' => 'form_history', 'name' => 'form_history', 'method' => 'post', 'action' => DataCenterXml::url($path));
         // Begins form
         $xmlOutput .= DataCenterXml::open('form', $formAttributes);
         // Begins table
         $xmlOutput .= DataCenterXml::open('table', self::$defaultAttributes['table']);
         // Adds paging
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(self::$defaultAttributes['paging'], parent::buildPaging($path, $numChanges)));
         // Adds headings
         $xmlOutput .= DataCenterXml::row(DataCenterXml::headingCell(), DataCenterXml::headingCell(), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'date')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'username')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'type')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'note')));
         foreach ($changes as $i => $change) {
             // Build row attributes
             $rowAttributes = array('class' => $i % 2 == 0 ? 'odd' : 'even');
             // Build radio attributes
             $radio1Attributes = array('type' => 'radio', 'name' => 'meta[change1]', 'id' => 'field_change1_' . $change->getId(), 'value' => $change->getId());
             if ($i == 0) {
                 $radio1Attributes['checked'] = 'checked';
             }
             $radio2Attributes = array('type' => 'radio', 'name' => 'meta[change2]', 'id' => 'field_change2_' . $change->getId(), 'value' => $change->getId());
             if ($i == 1 || count($changes) == 1) {
                 $radio2Attributes['checked'] = 'checked';
             }
             $xmlOutput .= DataCenterXml::row($rowAttributes, DataCenterXml::cell(self::$defaultAttributes['radio'], DataCenterXml::tag('input', $radio1Attributes)), DataCenterXml::cell(self::$defaultAttributes['radio'], DataCenterXml::tag('input', $radio2Attributes)), DataCenterXml::cell(self::$defaultAttributes['field'], DataCenterUI::format($change->get('timestamp'), 'date')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('username')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('type')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('note')));
         }
         // Adds reset and submit button
         $xmlOutput .= DataCenterXML::row(DataCenterXml::cell(self::$defaultAttributes['buttons'], DataCenterXml::tag('input', array('type' => 'reset', 'name' => 'reset', 'class' => 'reset', 'value' => DataCenterUI::message('label', 'reset'))) . DataCenterXml::tag('input', array('type' => 'submit', 'name' => 'submit', 'class' => 'submit', 'value' => DataCenterUI::message('label', 'compare-changes')))));
         // Adds do field
         $xmlOutput .= DataCenterXml::tag('input', array('type' => 'hidden', 'name' => 'do', 'value' => 'compareChanges'));
         // Adds token field
         $xmlOutput .= DataCenterXml::tag('input', array('type' => 'hidden', 'name' => 'token', 'value' => $wgUser->editToken()));
         $xmlOutput .= DataCenterXml::close('table');
         $xmlOutput .= DataCenterXml::close('form');
     }
     // Ends widget
     $xmlOutput .= parent::end();
     // Returns results
     return $xmlOutput;
 }
Пример #8
0
 public function main($path)
 {
     $plans = DataCenterDB::getPlans(DataCenterDB::buildSort('meta', 'plan', array('space', 'tense DESC')));
     $numPlans = DataCenterDB::numPlans();
     return DataCenterUI::renderLayout('columns', array(DataCenterUI::renderLayout('rows', array(DataCenterUI::renderWidget('heading', array('message' => 'plans')), DataCenterUI::renderWidget('table', array('rows' => $plans, 'num' => $numPlans, 'fields' => array('name', 'space' => array('field' => 'space_name'), 'tense' => array('format' => 'option')), 'link' => array('page' => 'plans', 'action' => 'view', 'type' => 'plan', 'id' => '#id')))))));
 }