Revision: 46035
Author:   tparscal
Date:     2009-01-22 22:10:56 +0000 (Thu, 22 Jan 2009)

Log Message:
-----------
Created new widget for editing field links. Finished settings for fields.

Modified Paths:
--------------
    trunk/extensions/DataCenter/Controllers/Settings.php
    trunk/extensions/DataCenter/DataCenter.css
    trunk/extensions/DataCenter/DataCenter.db.php
    trunk/extensions/DataCenter/DataCenter.i18n.php
    trunk/extensions/DataCenter/DataCenter.page.php
    trunk/extensions/DataCenter/DataCenter.php
    trunk/extensions/DataCenter/DataCenter.ui.php
    trunk/extensions/DataCenter/UI/Widgets/Body.php
    trunk/extensions/DataCenter/UI/Widgets/Form.php
    trunk/extensions/DataCenter/Views/Overview.php

Added Paths:
-----------
    trunk/extensions/DataCenter/UI/Widgets/FieldLinks.php
    trunk/extensions/DataCenter/Views/Settings/Field.php

Removed Paths:
-------------
    trunk/extensions/DataCenter/Views/Settings/Meta.php

Modified: trunk/extensions/DataCenter/Controllers/Settings.php
===================================================================
--- trunk/extensions/DataCenter/Controllers/Settings.php        2009-01-22 
20:50:46 UTC (rev 46034)
+++ trunk/extensions/DataCenter/Controllers/Settings.php        2009-01-22 
22:10:56 UTC (rev 46035)
@@ -11,7 +11,7 @@
        /* Members */
 
        public $types = array(
-               'meta' => array( 'page' => 'settings', 'type' => 'meta' ),
+               'field' => array( 'page' => 'settings', 'type' => 'field' ),
        );
 
        /* Functions */
@@ -20,21 +20,63 @@
                array $path
        ) {
                // Actions
+               if ( $path['id'] && $path['type'] == 'field' ) {
+                       $this->actions['remove'] = array(
+                               'page' => 'settings',
+                               'type' => $path['type'],
+                               'action' => 'remove',
+                               'id' => $path['id']
+                       );
+                       $this->actions['configure'] = array(
+                               'page' => 'settings',
+                               'type' => $path['type'],
+                               'action' => 'configure',
+                               'id' => $path['id']
+                       );
+                       $this->actions['view'] = array(
+                               'page' => 'settings',
+                               'type' => $path['type'],
+                               'action' => 'view',
+                               'id' => $path['id']
+                       );
+               }
        }
 
-       public function add(
+       public function save(
                array $data,
                $type
        ) {
-               $setting = DataCenterMeta::newFromValues( $type, $data['row'] );
-               return $setting->save();
+               switch ( $type ) {
+                       case 'field':
+                               $field = DataCenterDBMetaField::newFromValues( 
$data['row'] );
+                               $field->save();
+                               return true;
+               }
+               return false;
        }
 
-       public function edit(
+       public function remove(
                array $data,
                $type
        ) {
-               $setting = DataCenterMeta::newFromValues( $type, $data['row'] );
-               return $setting->save();
+               switch ( $type ) {
+                       case 'field':
+                               $field = DataCenterDBMetaField::newFromValues( 
$data['row'] );
+                               $values = $field->getValues();
+                               foreach ( $values as $value ) {
+                                       $value->delete();
+                               }
+                               $field->delete();
+                               return true;
+               }
+               return false;
        }
+
+       public function saveFieldLinks(
+               array $data,
+               $type
+       ) {
+               DataCenterWidgetFieldLinks::saveFieldLinks( $data );
+               return true;
+       }
 }
\ No newline at end of file

Modified: trunk/extensions/DataCenter/DataCenter.css
===================================================================
--- trunk/extensions/DataCenter/DataCenter.css  2009-01-22 20:50:46 UTC (rev 
46034)
+++ trunk/extensions/DataCenter/DataCenter.css  2009-01-22 22:10:56 UTC (rev 
46035)
@@ -88,7 +88,6 @@
 /*
  * Form Widget
  */
- 
 .datacenter-ui div.widget-form {
        border: solid 1px silver;
 }
@@ -115,6 +114,26 @@
        background-color: #DDEEFF;
 }
 
+/*
+ * FieldLinks Widget
+ */
+.datacenter-ui div.widget-fieldlinks form {
+       margin: 0px;
+       padding: 0px;
+}
+.datacenter-ui div.widget-fieldlinks input.reset {
+       margin-right: 10px;
+}
+div.datacenter-ui div.widget-fieldlinks tr td {
+       padding-top: 8px;
+       padding-bottom: 8px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+.datacenter-ui div.widget-fieldlinks input.reset {
+       margin-right: 10px;
+}
+
 /**
  * Heading Widget
  */
@@ -243,6 +262,29 @@
 }
 
 /**
+ * FieldLinks Widget
+ */
+div.datacenter-ui div.widget-fieldlinks table {
+       background-color: white;
+       border: solid 1px #DDDDDD;
+       width: 100%;
+}
+div.datacenter-ui div.widget-fieldlinks th {
+       background-color: #DDDDDD;
+       color: #999999;
+       padding-top: 4px;
+       padding-bottom: 4px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+div.datacenter-ui div.widget-fieldlinks tr td {
+       padding-top: 4px;
+       padding-bottom: 4px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+
+/**
  * Model Widget
  */
 div.datacenter-ui div.widget-model table {

Modified: trunk/extensions/DataCenter/DataCenter.db.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.db.php       2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/DataCenter.db.php       2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -1091,6 +1091,84 @@
                return self::numRows( 'meta', 'change', $options );
        }
 
+       /**
+        * Wraps self::getRows specializing...
+        * - class as DataCenterDBMetaField
+        * - category as meta
+        * - type as field
+        */
+       public static function getMetaFields(
+               array $options = array()
+       ) {
+               return self::getRows(
+                       'DataCenterDBMetaField', 'meta', 'field', $options
+               );
+       }
+
+       /**
+        * Wraps self::getRow specializing...
+        * - class as DataCenterDBMetaFieldLink
+        * - category as meta
+        * - type as field
+        */
+       public static function getMetaField(
+               $id
+       ) {
+               return self::getRow(
+                       'DataCenterDBMetaField', 'meta', 'field', $id
+               );
+       }
+
+       /**
+        * Wraps self::numRows specializing...
+        * - category as meta
+        * - type as field
+        */
+       public static function numMetaFields(
+               array $options = array()
+       ) {
+               return self::numRows( 'meta', 'field', $options );
+       }
+
+       /**
+        * Wraps self::getRows specializing...
+        * - class as DataCenterDBMetaValue
+        * - category as meta
+        * - type as value
+        */
+       public static function getMetaValues(
+               array $options = array()
+       ) {
+               return self::getRows(
+                       'DataCenterDBMetaValue', 'meta', 'value', $options
+               );
+       }
+
+       /**
+        * Wraps self::getRow specializing...
+        * - class as DataCenterDBMetaValueLink
+        * - category as meta
+        * - type as value
+        */
+       public static function getMetaValue(
+               $id
+       ) {
+               return self::getRow(
+                       'DataCenterDBMetaValue', 'meta', 'value', $id
+               );
+       }
+
+       /**
+        * Wraps self::numRows specializing...
+        * - category as meta
+        * - type as value
+        */
+       public static function numMetaValues(
+               array $options = array()
+       ) {
+               return self::numRows( 'meta', 'value', $options );
+       }
+
        /* Option Builders */
 
        /**
@@ -1899,6 +1977,52 @@
        ) {
                return parent::newFromClass( __CLASS__, 'link', 'field', 
$values );
        }
+
+       /* Functions */
+
+       public function getValues() {
+               return DataCenterDB::getMetaValues(
+                       array_merge_recursive(
+                               DataCenterDB::buildCondition(
+                                       'meta', 'value', 'field', $this->get( 
'field' )
+                               ),
+                               DataCenterDB::buildCondition(
+                                       'meta',
+                                       'value',
+                                       'component_category',
+                                       $this->get( 'component_category' )
+                               ),
+                               DataCenterDB::buildCondition(
+                                       'meta',
+                                       'value',
+                                       'component_type',
+                                       $this->get( 'component_type' )
+                               )
+                       )
+               );
+       }
+
+       public function numValues() {
+               return DataCenterDB::numMetaValues(
+                       array_merge_recursive(
+                               DataCenterDB::buildCondition(
+                                       'meta', 'value', 'field', $this->get( 
'field' )
+                               ),
+                               DataCenterDB::buildCondition(
+                                       'meta',
+                                       'value',
+                                       'component_category',
+                                       $this->get( 'component_category' )
+                               ),
+                               DataCenterDB::buildCondition(
+                                       'meta',
+                                       'value',
+                                       'component_type',
+                                       $this->get( 'component_type' )
+                               )
+                       )
+               );
+       }
 }
 
 /* Facility Rows */
@@ -1994,6 +2118,37 @@
        ) {
                return parent::newFromClass( __CLASS__, 'meta', 'field', 
$values );
        }
+
+       /* Functions */
+
+       public function getLinks(
+               array $options = array()
+       ) {
+               return DataCenterDB::getMetaFieldLinks(
+                       array_merge_recursive(
+                               $options,
+                               DataCenterDB::buildCondition(
+                                       'link', 'field', 'field', $this->getId()
+                               )
+                       )
+               );
+       }
+
+       public function getValues() {
+               return DataCenterDB::getMetaValues(
+                       DataCenterDB::buildCondition(
+                               'meta', 'value', 'field', $this->getId()
+                       )
+               );
+       }
+
+       public function numValues() {
+               return DataCenterDB::numMetaValues(
+                       DataCenterDB::buildCondition(
+                               'meta', 'value', 'field', $this->getId()
+                       )
+               );
+       }
 }
 
 class DataCenterDBMetaValue extends DataCenterDBRow  {

Modified: trunk/extensions/DataCenter/DataCenter.i18n.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.i18n.php     2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/DataCenter.i18n.php     2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -30,9 +30,15 @@
        'datacenter-ui-type-rack' => 'Rack',
        'datacenter-ui-type-object' => 'Object',
        'datacenter-ui-type-port' => 'Port',
-       'datacenter-ui-type-meta' => 'Meta',
        'datacenter-ui-type-model' => 'Model',
        'datacenter-ui-type-attachment' => 'Attachment',
+       'datacenter-ui-type-field' => 'Field',
+       // Categories
+       'datacenter-ui-category-facility' => 'Facility',
+       'datacenter-ui-category-asset' => 'Asset',
+       'datacenter-ui-category-model' => 'Model',
+       'datacenter-ui-category-link' => 'Link',
+       'datacenter-ui-category-meta' => 'Meta',
        // Actions
        'datacenter-ui-action-configure' => 'Configure',
        'datacenter-ui-action-edit' => 'Edit',
@@ -49,6 +55,7 @@
        'datacenter-ui-action-create-type' => 'Create $1',
        'datacenter-ui-action-design-type' => 'Design and Deploy $1',
        'datacenter-ui-action-select-type' => 'Select and Attach $1',
+       'datacenter-ui-action-apply-type' => 'Apply $1',
        'datacenter-ui-action-history' => 'History',
        // Options
        'datacenter-ui-option-front' => 'Front',
@@ -74,6 +81,11 @@
        'datacenter-ui-option-future' => 'Future',
        'datacenter-ui-option-true' => 'True',
        'datacenter-ui-option-false' => 'False',
+       'datacenter-ui-option-boolean' => 'Boolean (yes/no)',
+       'datacenter-ui-option-string' => 'String (single-link)',
+       'datacenter-ui-option-text' => 'Text (multi-line)',
+       'datacenter-ui-option-number' => 'Number',
+       'datacenter-ui-option-tag' => 'Tag',
        // Errors
        'datacenter-ui-error-insufficient-data' => 'You have provided 
insufficient data',
        'datacenter-ui-error-invalid-data' => 'You have provided invalid data',
@@ -129,7 +141,9 @@
        'datacenter-ui-field-manufacturer' => 'Manufacturer',
        'datacenter-ui-field-tense' => 'Tense',
        'datacenter-ui-field-change-summary' => 'Change Summary',
+       'datacenter-ui-field-uses' => 'Uses',
        // Label
+       'datacenter-ui-label-reset' => 'Reset',
        'datacenter-ui-label-cancel' => 'Cancel',
        'datacenter-ui-label-remove' => 'Remove',
        'datacenter-ui-label-save' => 'Save',
@@ -140,7 +154,8 @@
        'datacenter-ui-label-add' => 'Add',
        'datacenter-ui-label-add-type' => 'Add $1',
        'datacenter-ui-label-browse-by' => 'Browse by:',
-       'datacenter-ui-label-num-spaces' => '$1 {{PLURAL:$1|Space|Spaces}}',
+       'datacenter-ui-label-num-spaces' => '$1 {{PLURAL:$1|Spaces|Space}}',
+       'datacenter-ui-label-num-uses' => '$1 {{PLURAL:$1|uses|use}}',
        'datacenter-ui-label-degrees-value' => '$1°',
        // Defaults
        'datacenter-ui-default-new-type' => 'New $1',
@@ -151,6 +166,8 @@
        'datacenter-ui-heading-spaces' => 'Spaces',
        'datacenter-ui-heading-racks' => 'Racks',
        'datacenter-ui-heading-objects' => 'Objects',
+       'datacenter-ui-heading-fields' => 'Fields',
+       'datacenter-ui-heading-applied-components' => 'Applied Components',
        // Information Headings
        'datacenter-ui-heading-details' => 'Details',
        'datacenter-ui-heading-model-attachments' => 'Model Attachments',
@@ -161,6 +178,7 @@
        'datacenter-ui-heading-location' => 'Location',
        'datacenter-ui-heading-space' => 'Space',
        'datacenter-ui-heading-configuration' => 'Configuration',
+       'datacenter-ui-heading-field' => 'Field',
        // Type-based Headings
        'datacenter-ui-heading-history-type' => '$1 History',
        'datacenter-ui-heading-remove-type' => 'Remove $1?',
@@ -179,9 +197,11 @@
        'datacenter-ui-heading-attaching-type' => 'Attaching $1',
        'datacenter-ui-heading-configuring-type' => 'Configuring $1',
        // Bodies
-       'datacenter-ui-body-confirm-remove-type' => 'Removing this $1 will 
result in the removal of the following links and cannot be recovered from. Do 
you want to continue with the removal?',
-       'datacenter-ui-body-invalid-request' => 'You have requested a page with 
an invalid path.',
-       'datacenter-ui-body-welcome' => 'Welcome to the beta-testing of 
DataCenter. Please poke around and give feedback Trevor Parscal. If you are 
going to help out, take a look at the media wiki extension page for DataCenter 
which has a list of feature priorities.',
+       'datacenter-ui-body-notice-removing-type' => 'Removing this $1 will 
result in the removal of the following links and cannot be recovered from. Do 
you want to continue with the removal?',
+       'datacenter-ui-body-notice-removing-field' => 'Removing this field will 
result in the removal of the following links and all data associated with them 
and cannot be recovered from. Do you want to continue with the removal?',
+       'datacenter-ui-body-important-configuring-field' => 'Changing the 
format of this field may cause related data to be interpreted incorectly, 
espcially when switching between textual, numeric and boolean formats.',
+       'datacenter-ui-body-important-welcome' => 'Welcome to the beta-testing 
of DataCenter. Please poke around and give feedback Trevor Parscal. If you are 
going to help out, take a look at the media wiki extension page for DataCenter 
which has a list of feature priorities.',
+       'datacenter-ui-body-error-invalid-request' => 'You have requested a 
page with an invalid path.',
        // Tabs
        'datacenter-ui-tab-racks' => 'Racks',
        'datacenter-ui-tab-details' => 'Details',

Modified: trunk/extensions/DataCenter/DataCenter.page.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.page.php     2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/DataCenter.page.php     2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -114,7 +114,7 @@
                        'controller' => 'DataCenterControllerSettings',
                        'view' => 'DataCenterViewSettings',
                        'types' => array(
-                               'meta' => 'DataCenterViewSettingsMeta',
+                               'field' => 'DataCenterViewSettingsField',
                        ),
                        'default' => 'meta'
                )
@@ -178,8 +178,14 @@
        }
 
        private static function loadState() {
-               // Load state from session
-               self::$state = $_SESSION['DATA_CENTER_STATE'];
+               // Checks if state information is in the session
+               if ( isset( $_SESSION['DATA_CENTER_STATE'] ) ) {
+                       // Load state from session
+                       self::$state = $_SESSION['DATA_CENTER_STATE'];
+               } else {
+                       // Use fallbacks for expected values where possible
+                       self::$state['private']['last-page'] = 
$_SERVER['PHP_SELF'];
+               }
        }
 
        private static function saveState() {
@@ -209,10 +215,6 @@
        }
 
        public static function getRefererPath() {
-               if ( !self::$state['private']['last-page'] ) {
-                       // Use this page as a fallback
-                       self::$state['private']['last-page'] = 
$_SERVER['PHP_SELF'];
-               }
                return self::subToPath(
                        self::urlToSub( self::$state['private']['last-page'] )
                );

Modified: trunk/extensions/DataCenter/DataCenter.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.php  2009-01-22 20:50:46 UTC (rev 
46034)
+++ trunk/extensions/DataCenter/DataCenter.php  2009-01-22 22:10:56 UTC (rev 
46035)
@@ -85,6 +85,7 @@
        'DataCenterWidgetBody' => $dir . 'UI/Widgets/Body.php',
        'DataCenterWidgetDetails' => $dir . 'UI/Widgets/Details.php',
        'DataCenterWidgetDifference' => $dir . 'UI/Widgets/Difference.php',
+       'DataCenterWidgetFieldLinks' => $dir . 'UI/Widgets/FieldLinks.php',
        'DataCenterWidgetForm' => $dir . 'UI/Widgets/Form.php',
        'DataCenterWidgetGallery' => $dir . 'UI/Widgets/Gallery.php',
        'DataCenterWidgetHeading' => $dir . 'UI/Widgets/Heading.php',
@@ -101,7 +102,7 @@
        'DataCenterViewPlansPlan' => $dir . 'Views/Plans/Plan.php',
        'DataCenterViewPlansRack' => $dir . 'Views/Plans/Rack.php',
        // Views/Settings/*
-       'DataCenterViewSettingsMeta' => $dir . 'Views/Settings/Meta.php',
+       'DataCenterViewSettingsField' => $dir . 'Views/Settings/Field.php',
        // Views/*
        'DataCenterViewAssets' => $dir . 'Views/Assets.php',
        'DataCenterViewFacilities' => $dir . 'Views/Facilities.php',

Modified: trunk/extensions/DataCenter/DataCenter.ui.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.ui.php       2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/DataCenter.ui.php       2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -754,6 +754,7 @@
                'body' => 'DataCenterWidgetBody',
                'details' => 'DataCenterWidgetDetails',
                'difference' => 'DataCenterWidgetDifference',
+               'fieldlinks' => 'DataCenterWidgetFieldLinks',
                'form' => 'DataCenterWidgetForm',
                'gallery' => 'DataCenterWidgetGallery',
                'heading' => 'DataCenterWidgetHeading',
@@ -835,6 +836,9 @@
                        case 'type':
                                return self::message( 'type', $value );
                                break;
+                       case 'category':
+                               return self::message( 'category', $value );
+                               break;
                        case 'side':
                                return self::message( 'option', $value ? 
'front' : 'back' );
                                break;

Modified: trunk/extensions/DataCenter/UI/Widgets/Body.php
===================================================================
--- trunk/extensions/DataCenter/UI/Widgets/Body.php     2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/UI/Widgets/Body.php     2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -32,6 +32,11 @@
                 */
                 'subject' => null,
                /**
+                * Name of type of component to inject as parameter for message
+                * @datatype    string
+                */
+                'type' => null,
+               /**
                 * Text to display
                 * @datatype    string
                 */
@@ -40,7 +45,7 @@
                 * Style of box to display body in
                 * @datatype    string
                 */
-                'type' => 'generic',
+                'style' => 'generic',
        );
 
        /* Functions */
@@ -56,7 +61,7 @@
                if (
                        // Required parameters
                        isset( $parameters['message'] ) &&
-                       // Required types
+                       // Required styles
                        is_scalar( $parameters['message'] ) &&
                        // Required values
                        ( $parameters['message'] !== null )
@@ -70,6 +75,14 @@
                                $message = DataCenterUI::message(
                                        'body', $parameters['message'], 
$parameters['subject']
                                );
+                       // Checks if a type was given
+                       } else if ( $parameters['type'] !== null ) {
+                               // Uses type-based message
+                               $message = DataCenterUI::message(
+                                       'body',
+                                       $parameters['message'],
+                                       DataCenterUI::message( 'type', 
$parameters['type'] )
+                               );
                        } else {
                                // Uses plain message
                                $message = DataCenterUI::message(
@@ -78,21 +91,21 @@
                        }
                        // Returns body with message
                        $xmlOutput .= DataCenterXml::div(
-                               array( 'class' => $parameters['type'] ),
+                               array( 'class' => $parameters['style'] ),
                                DataCenterXml::div( $message )
                        );
                // Checks if text was given
                } else if (
                        // Required parameters
                        isset( $parameters['text'] ) &&
-                       // Required types
+                       // Required styles
                        is_scalar( $parameters['text'] ) &&
                        // Required values
                        ( $parameters['text'] !== null )
                ) {
                        // Returns a body with text
                        $xmlOutput .= DataCenterXml::div(
-                               array( 'class' => $parameters['type'] ),
+                               array( 'class' => $parameters['style'] ),
                                DataCenterXml::div( $parameters['text'] )
                        );
                }

Added: trunk/extensions/DataCenter/UI/Widgets/FieldLinks.php
===================================================================
--- trunk/extensions/DataCenter/UI/Widgets/FieldLinks.php                       
        (rev 0)
+++ trunk/extensions/DataCenter/UI/Widgets/FieldLinks.php       2009-01-22 
22:10:56 UTC (rev 46035)
@@ -0,0 +1,321 @@
+<?php
+
+/**
+ * UI Class for DataCenter extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class DataCenterWidgetFieldLinks extends DataCenterWidget {
+
+       /* Private Static Members */
+
+       private static $defaultParameters = array(
+               /**
+                * XML ID attribute of widget
+                * @datatype    string
+                */
+               'id' => 'fieldlinks',
+               /**
+                * CSS class of widget
+                * @datatype    string
+                */
+               'class' => 'widget-fieldlinks',
+               /**
+                * Data Source
+                * @datatype    DataCenterField
+                */
+               'field' => null,
+               /**
+                * Current Path
+                * @datatype    array
+                */
+               'path' => null,
+       );
+
+       private static $targets = array(
+               'facility' => array(
+                       'location',
+                       'space',
+               ),
+               'asset' => array(
+                       'rack',
+                       'object',
+               ),
+               'model' => array(
+                       'rack',
+                       'object',
+                       'port',
+               ),
+       );
+
+       private static $defaultAttributes = array(
+               /**
+                * Default XML attributes for table
+                */
+               'table' => array(
+                       'width' => '100%',
+                       'cellpadding' => 5,
+                       'cellspacing' => 0,
+                       'border' => 0,
+               ),
+               /**
+                * Default XML attributes for heading cell
+                */
+               'heading' => array(
+                       'align' => 'left',
+                       'colspan' => 3
+               ),
+               /**
+                * Default XML attributes for checkbox cell
+                */
+               'checkbox' => array(
+                       'class' => 'checkbox',
+                       'width' => '10%',
+               ),
+               /**
+                * Default XML attributes for label cell
+                */
+               'label' => array(
+                       'class' => 'label',
+               ),
+               /**
+                * Default XML attributes for label cell
+                */
+               'uses' => array(
+                       'class' => 'uses',
+               ),
+               /**
+                * Default XML attributes for buttons cell
+                */
+               'buttons' => array(
+                       'class' => 'buttons',
+                       'align' => 'right',
+                       'colspan' => 3
+               ),
+       );
+
+       /* Static Functions */
+
+       public static function render(
+               array $parameters
+       ) {
+               global $wgUser;
+               // Sets Defaults
+               $parameters = array_merge( self::$defaultParameters, 
$parameters );
+               // Begins widget
+               $xmlOutput = parent::begin( $parameters['class'] );
+               // Gets existing links from database
+               $metaFieldLinks = $parameters['field']->getLinks();
+               $existsTable = array();
+               foreach ( $metaFieldLinks as $metaFieldLink ) {
+                       $key = implode(
+                               '_',
+                               $metaFieldLink->get(
+                                       array( 'component_category', 
'component_type' )
+                               )
+                       );
+                       $existsTable[$key] = $metaFieldLink;
+               }
+               // Builds form attributes
+               $formAttributes = array(
+                       'id' => 'form_fieldlinks',
+                       'name' => 'form_fieldlinks',
+                       'method' => 'post',
+                       'action' => DataCenterXml::url( $parameters['path'] ),
+               );
+               // Begins form
+               $xmlOutput .= DataCenterXml::open( 'form', $formAttributes );
+               // Begins table
+               $xmlOutput .= DataCenterXml::open(
+                       'table', self::$defaultAttributes['table']
+               );
+               foreach ( self::$targets as $category => $types ) {
+                       $xmlOutput .= DataCenterXml::row(
+                               DataCenterXml::headingCell(
+                                       self::$defaultAttributes['heading'],
+                                       DataCenterUI::message( 'category', 
$category )
+                               )
+                       );
+                       foreach ( $types as $type ) {
+                               $name = $category . '_' . $type;
+                               $checkboxAttributes = array(
+                                       'type' => 'checkbox',
+                                       'name' => "meta[{$name}]",
+                                       'id' => "field_{$name}",
+                                       'value' => 1,
+                               );
+                               $count = 0;
+                               if ( isset( $existsTable[$name] ) ) {
+                                       $checkboxAttributes['checked'] = 
'checked';
+                                       $count = 
$existsTable[$name]->numValues();
+                                       if ( $count > 0 ) {
+                                               $checkboxAttributes['disabled'] 
= 'true';
+                                               $checkboxAttributes['name'] = 
"locked[{$name}]";
+                                               $xmlOutput .= 
DataCenterXml::tag(
+                                                       'input',
+                                                       array(
+                                                               'type' => 
'hidden',
+                                                               'name' => 
"meta[{$name}]",
+                                                               'value' => 1,
+                                                       )
+                                               );
+                                       }
+                               }
+                               $xmlOutput .= DataCenterXml::row(
+                                       DataCenterXml::cell(
+                                               
self::$defaultAttributes['checkbox'],
+                                               DataCenterXml::tag( 'input', 
$checkboxAttributes )
+                                       ),
+                                       DataCenterXml::cell(
+                                               
self::$defaultAttributes['label'],
+                                               DataCenterXml::tag(
+                                                       'label',
+                                                       array( 'for' => 
"field_{$name}" ),
+                                                       DataCenterUI::message( 
'type', $type )
+                                               )
+                                       ),
+                                       DataCenterXml::cell(
+                                               
self::$defaultAttributes['uses'],
+                                               $count > 0 ?
+                                               DataCenterUI::message( 'label', 
'num-uses', $count ) :
+                                               ''
+                                       )
+                               );
+                       }
+               }
+               // 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', 'save' ),
+                                       )
+                               )
+                       )
+               );
+               $xmlOutput .= DataCenterXml::close( 'table' );
+               // Adds row fields
+               $xmlOutput .= DataCenterXml::tag(
+                       'input', array(
+                               'type' => 'hidden',
+                               'name' => 'row[id]',
+                               'value' => $parameters['field']->getId(),
+                       )
+               );
+               // Adds do field
+               $xmlOutput .= DataCenterXml::tag(
+                       'input', array(
+                               'type' => 'hidden',
+                               'name' => 'do',
+                               'value' => 'saveFieldLinks'
+                       )
+               );
+               // Adds token field
+               $xmlOutput .= DataCenterXml::tag(
+                       'input', array(
+                               'type' => 'hidden',
+                               'name' => 'token',
+                               'value' => $wgUser->editToken()
+                       )
+               );
+               // Adds success field
+               $xmlOutput .= DataCenterXml::tag(
+                       'input',
+                       array(
+                               'type' => 'hidden',
+                               'name' => 'success',
+                               'value' => DataCenterXml::url( 
$parameters['path'] )
+                       )
+               );
+               // Adds failure field
+               $xmlOutput .= DataCenterXml::tag(
+                       'input',
+                       array(
+                               'type' => 'hidden',
+                               'name' => 'failure',
+                               'value' => DataCenterXml::url( 
$parameters['path'] )
+                       )
+               );
+               // Adds canellation field
+               $xmlOutput .= DataCenterXml::tag(
+                       'input',
+                       array(
+                               'type' => 'hidden',
+                               'name' => 'cancellation',
+                               'value' => DataCenterXml::url( 
$parameters['path'] )
+                       )
+               );
+               $xmlOutput .= DataCenterXml::close( 'form' );
+               // Ends widget
+               $xmlOutput .= parent::end();
+               // Returns results
+               return $xmlOutput;
+       }
+
+       public function saveFieldLinks(
+               array $data
+       ) {
+               $metaField = DataCenterDBMetaField::newFromValues( $data['row'] 
);
+               $metaFieldLinks = $metaField->getLinks();
+               // Build table of links that do exist
+               $doesExistTable = array();
+               foreach ( $metaFieldLinks as $metaFieldLink ) {
+                       $key = implode(
+                               '_',
+                               $metaFieldLink->get(
+                                       array( 'component_category', 
'component_type' )
+                               )
+                       );
+                       $doesExistTable[$key] = $metaFieldLink;
+               }
+               // Build table of links that should exist
+               $shouldExistTable = array();
+               foreach ( $data['meta'] as $key => $value ) {
+                       list( $category, $type ) =  explode( '_', $key );
+                       $shouldExistTable[$category . '_' . $type] = true;
+               }
+               // Solve the difference
+               foreach ( self::$targets as $category => $types ) {
+                       foreach ( $types as $type ) {
+                               $key = $category . '_' . $type;
+                               if (
+                                       isset( $shouldExistTable[$key] ) &&
+                                       !isset( $doesExistTable[$key] )
+                               ) {
+                                       // Insert new
+                                       $metaFieldLink = 
DataCenterDBMetaFieldLink::newFromValues(
+                                               array(
+                                                       'field' => 
$metaField->getId(),
+                                                       'component_category' => 
$category,
+                                                       'component_type' => 
$type,
+                                               )
+                                       );
+                                       $metaFieldLink->insert();
+                               } else if (
+                                       !isset( $shouldExistTable[$key] ) &&
+                                       isset( $doesExistTable[$key] ) &&
+                                       ( $doesExistTable[$key]->numValues() == 
0 )
+                               ) {
+                                       // Remove existing
+                                       $doesExistTable[$key]->delete();
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file

Modified: trunk/extensions/DataCenter/UI/Widgets/Form.php
===================================================================
--- trunk/extensions/DataCenter/UI/Widgets/Form.php     2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/UI/Widgets/Form.php     2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -114,22 +114,23 @@
                 * Default XML attributes for label cell
                 */
                'label' => array(
+                       'class' => 'label',
                        'align' => 'left',
                        'nowrap' => 'nowrap',
-                       'class' => 'label'
                ),
                /**
                 * Default XML attributes for field cell
                 */
                'field' => array(
+                       'class' => 'field',
                        'width' => '200',
                        'align' => 'left',
-                       'class' => 'field'
                ),
                /**
                 * Default XML attributes for submit button cell
                 */
-               'submit' => array(
+               'buttons' => array(
+                       'class' => 'buttons',
                        'align' => 'right',
                        'colspan' => 2
                ),
@@ -174,9 +175,7 @@
                        ),
                );
                // Begins form
-               $xmlOutput .= DataCenterXml::open(
-                       'form', $formAttributes
-               );
+               $xmlOutput .= DataCenterXml::open( 'form', $formAttributes );
                // Inserts content before fields
                $xmlOutput .= $parameters['insert'];
                // Begins table
@@ -381,7 +380,7 @@
                // Adds cancel and submit button
                $xmlOutput .= DataCenterXML::row(
                        DataCenterXml::cell(
-                               self::$defaultAttributes['submit'],
+                               self::$defaultAttributes['buttons'],
                                DataCenterXml::tag(
                                        'input',
                                        array(

Modified: trunk/extensions/DataCenter/Views/Overview.php
===================================================================
--- trunk/extensions/DataCenter/Views/Overview.php      2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/Views/Overview.php      2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -22,8 +22,8 @@
                                                DataCenterUI::renderWidget(
                                                        'body',
                                                        array(
-                                                               'message' => 
'welcome',
-                                                               'type' => 
'important'
+                                                               'message' => 
'important-welcome',
+                                                               'style' => 
'important'
                                                        )
                                                )
                                        )

Copied: trunk/extensions/DataCenter/Views/Settings/Field.php (from rev 45967, 
trunk/extensions/DataCenter/Views/Settings/Meta.php)
===================================================================
--- trunk/extensions/DataCenter/Views/Settings/Field.php                        
        (rev 0)
+++ trunk/extensions/DataCenter/Views/Settings/Field.php        2009-01-22 
22:10:56 UTC (rev 46035)
@@ -0,0 +1,271 @@
+<?php
+/**
+ * Connections UI Class for DataCenter extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class DataCenterViewSettingsField extends DataCenterView {
+
+       /* Functions */
+
+       public function main(
+               $path
+       ) {
+               $metaFields = DataCenterDB::getMetaFields();
+               return DataCenterUI::renderLayout(
+                       'columns',
+                       array(
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading', array( 
'message' => 'fields' )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'table',
+                                                       array(
+                                                               'rows' => 
$metaFields,
+                                                               'fields' => 
array(
+                                                                       'name',
+                                                                       
'format' => array( 'format' => 'option' )
+                                                               ),
+                                                               'link' => array(
+                                                                       'page' 
=> 'settings',
+                                                                       'type' 
=> 'field',
+                                                                       
'action' => 'view',
+                                                                       'id' => 
'#id',
+                                                               )
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'actions',
+                                                       array(
+                                                               'links' => 
array(
+                                                                       array(
+                                                                               
'page' => 'settings',
+                                                                               
'type' => 'field',
+                                                                               
'action' => 'add'
+                                                                       )
+                                                               ),
+                                                       )
+                                               ),
+                                       )
+                               ),
+                       )
+               );
+       }
+
+       public function view(
+               $path
+       ) {
+               $metaField = DataCenterDB::getMetaField( $path['id'] );
+               return DataCenterUI::renderLayout(
+                       'columns',
+                       array(
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading', array( 
'message' => 'field' )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'details',
+                                                       array(
+                                                               'row' => 
$metaField,
+                                                               'fields' => 
array(
+                                                                       'name',
+                                                                       
'format' => array( 'format' => 'option' )
+                                                               )
+                                                       )
+                                               ),
+                                       )
+                               ),
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array( 'message' => 
'applied-components' )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'fieldlinks',
+                                                       array(
+                                                               'field' => 
$metaField,
+                                                               'path' => $path,
+                                                       )
+                                               ),
+                                       )
+                               ),
+                       )
+               );
+       }
+
+       public function remove(
+               $path
+       ) {
+               $metaField = DataCenterDB::getMetaField( $path['id'] );
+               $metaFieldLinks = $metaField->getLinks();
+               foreach ( $metaFieldLinks as $metaFieldLink ) {
+                       $metaFieldLink->set( 'uses', 
$metaFieldLink->numValues() );
+               }
+               // Returns 2 columm layout with a form and a scene
+               return DataCenterUI::renderLayout(
+                       'columns',
+                       array(
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array(
+                                                               'message' => 
'remove-type',
+                                                               'type' => 
'field'
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'body',
+                                                       array(
+                                                               'message' => 
'notice-removing-field',
+                                                               'style' => 
'notice',
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'table',
+                                                       array(
+                                                               'rows' => 
$metaFieldLinks,
+                                                               'fields' => 
array(
+                                                                       
'category' => array(
+                                                                               
'field' => 'component_category',
+                                                                               
'format' => 'category'
+                                                                       ),
+                                                                       'type' 
=> array(
+                                                                               
'field' => 'component_type',
+                                                                               
'format' => 'type'
+                                                                       ),
+                                                                       'uses'
+                                                               )
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'form',
+                                                       array(
+                                                               'do' => 
'remove',
+                                                               'label' => 
'remove',
+                                                               'hidden' => 
array( 'id' ),
+                                                               'success' => 
array(
+                                                                       'page' 
=> 'settings',
+                                                                       'type' 
=> 'field',
+                                                               ),
+                                                               'failure' => 
$path,
+                                                               'cancellation' 
=> array(
+                                                                       'page' 
=> 'settings',
+                                                                       'type' 
=> 'field',
+                                                                       
'action' => 'view',
+                                                                       'id' => 
$path['id'],
+                                                               ),
+                                                               'row' => 
$metaField,
+                                                               'action' => 
array(
+                                                                       'page' 
=> 'settings',
+                                                                       'type' 
=> 'field'
+                                                               ),
+                                                               'fields' => 
array()
+                                                       )
+                                               )
+                                       )
+                               ),
+                               '&nbsp;'
+                       )
+               );
+       }
+
+       public function add(
+               $path
+       ) {
+               return $this->configure( $path );
+       }
+
+       public function configure(
+               $path
+       ) {
+               // Detects mode
+               if ( !$path['id'] ) {
+                       // Creates new component
+                       $field = DataCenterDBMetaField::newFromValues();
+                       // Sets 'do' specific parameters
+                       $formParameters = array(
+                               'label' => 'add',
+                               'success' => array(
+                                       'page' => 'settings',
+                                       'type' => 'field'
+                               ),
+                       );
+               } else {
+                       // Gets component from database
+                       $field = DataCenterDB::getMetaField( $path['id'] );
+                       // Sets 'do' specific parameters
+                       $formParameters = array(
+                               'label' => 'save',
+                               'hidden' => array( 'id' ),
+                               'success' => array(
+                                       'page' => 'settings',
+                                       'type' => 'field',
+                                       'action' => 'view',
+                                       'id' => $path['id'],
+                               ),
+                       );
+               }
+               // Returns 2 columm layout with a form and a scene
+               return DataCenterUI::renderLayout(
+                       'columns',
+                       array(
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array(
+                                                               'message' => 
'configuring-type',
+                                                               'type' => 
'field',
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'body',
+                                                       array(
+                                                               'message' => 
'important-configuring-field',
+                                                               'style' => 
'important',
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'form',
+                                                       array_merge(
+                                                               $formParameters,
+                                                               array(
+                                                                       'do' => 
'save',
+                                                                       
'failure' => $path,
+                                                                       
'action' => array(
+                                                                               
'page' => 'settings', 'type' => 'field'
+                                                                       ),
+                                                                       'row' 
=> $field,
+                                                                       
'fields' => array(
+                                                                               
'name' => array( 'type' => 'string' ),
+                                                                               
'format' => array(
+                                                                               
        'type' => 'list',
+                                                                               
        'enum' => array(
+                                                                               
                'category' => 'meta',
+                                                                               
                'type' => 'field',
+                                                                               
                'field' => 'format',
+                                                                               
        ),
+                                                                               
),
+                                                                       ),
+                                                               )
+                                                       )
+                                               ),
+                                       )
+                               ),
+                               '&nbsp;'
+                       )
+               );
+       }
+}
\ No newline at end of file


Property changes on: trunk/extensions/DataCenter/Views/Settings/Field.php
___________________________________________________________________
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Deleted: trunk/extensions/DataCenter/Views/Settings/Meta.php
===================================================================
--- trunk/extensions/DataCenter/Views/Settings/Meta.php 2009-01-22 20:50:46 UTC 
(rev 46034)
+++ trunk/extensions/DataCenter/Views/Settings/Meta.php 2009-01-22 22:10:56 UTC 
(rev 46035)
@@ -1,151 +0,0 @@
-<?php
-/**
- * Connections UI Class for DataCenter extension
- *
- * @file
- * @ingroup Extensions
- */
-
-class DataCenterViewSettingsMeta extends DataCenterView {
-
-       /* Private Static Members */
-
-       private static $componentTypes = array(
-               'facility' => array(
-                       'location',
-                       'space',
-               ),
-               'asset' => array(
-                       'rack',
-                       'object',
-               ),
-               'model' => array(
-                       'rack',
-                       'object',
-                       'port',
-               ),
-       );
-
-       /* Functions */
-
-       public function main(
-               $path
-       ) {
-               /*
-               $tables = array();
-               foreach ( $types as $type => $label ) {
-                       // Gets all components from database
-                       $fields = DataCenterDB::getMetaFields(
-                               DataCenterDB::buildCondition(
-                                       'meta', 'field', 'asset_type', $type
-                               )
-                       );
-                       // Adds table to list of tables
-                       $tables[$label] = DataCenterUI::renderWidget(
-                               'table',
-                               array(
-                                       'heading' => array( 'message' => 
'fields' ),
-                                       'rows' => $fields,
-                                       'fields' => array(
-                                               'name', 'format' => array( 
'format' => 'option' )
-                                       ),
-                                       'link' => array(
-                                               'page' => 'settings',
-                                               'type' => 'field',
-                                               'id' => '#id',
-                                               'action' => 'view',
-                                       ),
-                                       'actions' => array(
-                                               'links' => array(
-                                                       array(
-                                                               'page' => 
'settings',
-                                                               'type' => 
'field',
-                                                               'action' => 
'add',
-                                                               'parameter' => 
$type,
-                                                       ),
-                                               ),
-                                       ),
-                               )
-                       );
-               }
-               // Returns tabbed layout with tables of meta fields for each 
model type
-               return DataCenterUI::renderLayout( 'tabs', $tables );
-               */
-               return '[LIST OF META FIELDS]';
-       }
-
-       public function add(
-               $path
-       ) {
-               return $this->edit( $path );
-       }
-
-       public function edit(
-               $path
-       ) {
-               // Detects mode
-               if ( !$path['id'] ) {
-                       // Creates new component
-                       $field = DataCenterMeta::newFromValues(
-                               'field', array( 'asset_type' => 
$path['parameter'] )
-                       );
-                       // Sets 'do' specific parameters
-                       $formParameters = array(
-                               'do' => 'add',
-                               'label' => 'add',
-                               'hidden' => array( 'asset_type' ),
-                               'success' => array(
-                                       'page' => 'settings',
-                                       'type' => 'meta'
-                               ),
-                       );
-               } else {
-                       // Gets component from database
-                       $field = DataCenterDB::getMetaField( $path['id'] );
-                       // Sets 'do' specific parameters
-                       $formParameters = array(
-                               'do' => 'edit',
-                               'label' => 'save',
-                               'hidden' => array( 'id', 'asset_type' ),
-                               'success' => array(
-                                       'page' => 'settings',
-                                       'type' => 'meta',
-                                       'action' => 'view',
-                                       'id' => $path['id'],
-                               ),
-                       );
-               }
-               // Returns 2 columm layout with a form and a scene
-               return DataCenterUI::renderLayout(
-                       'columns',
-                       array(
-                               DataCenterUI::renderWidget(
-                                       'form',
-                                       array_merge(
-                                               $formParameters,
-                                               array(
-                                                       'failure' => $path,
-                                                       'action' => array(
-                                                               'page' => 
'settings',
-                                                               'type' => 'meta'
-                                                       ),
-                                                       'row' => $field,
-                                                       'fields' => array(
-                                                               'name' => 
array( 'type' => 'string' ),
-                                                               'format' => 
array(
-                                                                       'type' 
=> 'list',
-                                                                       'enum' 
=> array(
-                                                                               
'category' => 'meta',
-                                                                               
'type' => 'field',
-                                                                               
'field' => 'format',
-                                                                       ),
-                                                               ),
-                                                       ),
-                                               )
-                                       )
-                               ),
-                               '[MODEL VIEWER]',
-                       )
-               );
-       }
-}
\ No newline at end of file



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to