Revision: 46106
Author:   tparscal
Date:     2009-01-23 23:08:06 +0000 (Fri, 23 Jan 2009)

Log Message:
-----------
Created history widget, in favor of difference widget, which uses a wiki-style 
change comparison interface. Made improvements and bug fixes to change-related 
database code. Integrated full change system into each component view. Removed 
history page.

Modified Paths:
--------------
    trunk/extensions/DataCenter/Controllers/Assets.php
    trunk/extensions/DataCenter/Controllers/Facilities.php
    trunk/extensions/DataCenter/Controllers/Models.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/Views/Assets.php
    trunk/extensions/DataCenter/Views/Facilities/Location.php
    trunk/extensions/DataCenter/Views/Facilities/Space.php
    trunk/extensions/DataCenter/Views/Facilities.php
    trunk/extensions/DataCenter/Views/Models.php

Added Paths:
-----------
    trunk/extensions/DataCenter/UI/Widgets/History.php

Removed Paths:
-------------
    trunk/extensions/DataCenter/Controllers/History.php
    trunk/extensions/DataCenter/UI/Widgets/Difference.php
    trunk/extensions/DataCenter/Views/History.php

Modified: trunk/extensions/DataCenter/Controllers/Assets.php
===================================================================
--- trunk/extensions/DataCenter/Controllers/Assets.php  2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Controllers/Assets.php  2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -53,4 +53,12 @@
                $asset->insertChange( $data['change'] );
                return true;
        }
+
+       public function compareChanges(
+               array $data,
+               $type
+       ) {
+               DataCenterWidgetHistory::compareChanges( $data );
+               return null;
+       }
 }
\ No newline at end of file

Modified: trunk/extensions/DataCenter/Controllers/Facilities.php
===================================================================
--- trunk/extensions/DataCenter/Controllers/Facilities.php      2009-01-23 
22:54:28 UTC (rev 46105)
+++ trunk/extensions/DataCenter/Controllers/Facilities.php      2009-01-23 
23:08:06 UTC (rev 46106)
@@ -63,4 +63,12 @@
                }
                return false;
        }
+
+       public function compareChanges(
+               array $data,
+               $type
+       ) {
+               DataCenterWidgetHistory::compareChanges( $data );
+               return null;
+       }
 }
\ No newline at end of file

Deleted: trunk/extensions/DataCenter/Controllers/History.php
===================================================================
--- trunk/extensions/DataCenter/Controllers/History.php 2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Controllers/History.php 2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -1,18 +0,0 @@
-<?php
-/**
- * History Page Class for DataCenter extension
- *
- * @file
- * @ingroup Extensions
- */
-
-class DataCenterControllerHistory extends DataCenterController {
-
-       /* Functions */
-
-       public function __construct(
-               array $path
-       ) {
-               // Actions
-       }
-}
\ No newline at end of file

Modified: trunk/extensions/DataCenter/Controllers/Models.php
===================================================================
--- trunk/extensions/DataCenter/Controllers/Models.php  2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Controllers/Models.php  2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -67,4 +67,12 @@
                }
                return true;
        }
+
+       public function compareChanges(
+               array $data,
+               $type
+       ) {
+               DataCenterWidgetHistory::compareChanges( $data );
+               return null;
+       }
 }
\ No newline at end of file

Modified: trunk/extensions/DataCenter/DataCenter.css
===================================================================
--- trunk/extensions/DataCenter/DataCenter.css  2009-01-23 22:54:28 UTC (rev 
46105)
+++ trunk/extensions/DataCenter/DataCenter.css  2009-01-23 23:08:06 UTC (rev 
46106)
@@ -133,7 +133,108 @@
 .datacenter-ui div.widget-fieldlinks input.reset {
        margin-right: 10px;
 }
+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;
+}
 
+/*
+ * History Widget
+ */
+.datacenter-ui div.widget-history form {
+       margin: 0px;
+       padding: 0px;
+}
+.datacenter-ui div.widget-history input.reset {
+       margin-right: 10px;
+}
+div.datacenter-ui div.widget-history tr td {
+       padding-top: 8px;
+       padding-bottom: 8px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+div.datacenter-ui div.widget-history tr.odd {
+       background-color: #FFFFFF;
+}
+div.datacenter-ui div.widget-history tr.even {
+       background-color: #EEEEEE;
+}
+.datacenter-ui div.widget-history input.reset {
+       margin-right: 10px;
+}
+div.datacenter-ui div.widget-history table {
+       background-color: white;
+       border: solid 1px #DDDDDD;
+       width: 100%;
+}
+div.datacenter-ui div.widget-history th {
+       background-color: #DDDDDD;
+       color: #999999;
+       padding-top: 4px;
+       padding-bottom: 4px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+div.datacenter-ui div.widget-history tr td {
+       padding-top: 4px;
+       padding-bottom: 4px;
+       padding-left: 8px;
+       padding-right: 8px;
+}
+div.datacenter-ui div.widget-history table {
+       border: solid 1px silver;
+       width: 100%;
+}
+div.datacenter-ui div.widget-history td.label {
+       width: 20%;
+       padding-left: 8px;
+       padding-right: 8px;
+       color: gray;
+}
+div.datacenter-ui div.widget-history td.older-odd {
+       width: 40%;
+       padding-left: 8px;
+       padding-right: 8px;
+       background-color: #FFFFAA;
+}
+div.datacenter-ui div.widget-history td.older-even {
+       width: 40%;
+       padding-left: 8px;
+       padding-right: 8px;
+       background-color: #FFFFDD;
+}
+div.datacenter-ui div.widget-history td.newer-odd {
+       width: 40%;
+       padding-left: 8px;
+       padding-right: 8px;
+       background-color: #CCFFCC;
+}
+div.datacenter-ui div.widget-history td.newer-even {
+       width: 40%;
+       padding-left: 8px;
+       padding-right: 8px;
+       background-color: #EEFFEE;
+}
+div.datacenter-ui div.widget-history span.different {
+       color: red;
+}
+
 /**
  * Heading Widget
  */
@@ -262,29 +363,6 @@
 }
 
 /**
- * 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 {
@@ -484,37 +562,6 @@
 }
 
 /**
- * Difference Widget
- */
-div.datacenter-ui div.widget-difference table {
-       border: solid 1px silver;
-       width: 100%;
-}
-div.datacenter-ui div.widget-difference td.label {
-       width: 20%;
-       padding-left: 8px;
-       padding-right: 8px;
-       color: gray;
-}
-div.datacenter-ui div.widget-difference td.previous {
-       width: 40%;
-       padding-left: 8px;
-       padding-right: 8px;
-       color: green;
-       background-color: #DDFFDD;
-}
-div.datacenter-ui div.widget-difference td.current {
-       width: 40%;
-       padding-left: 8px;
-       padding-right: 8px;
-       color: blue;
-       background-color: #DDDDFF;
-}
-div.datacenter-ui div.widget-difference span.different {
-       color: red;
-}
-
-/**
  * Gallery Widget
  */
 div.datacenter-ui div.widget-gallery div.heading {

Modified: trunk/extensions/DataCenter/DataCenter.db.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.db.php       2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/DataCenter.db.php       2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -1667,8 +1667,22 @@
                if ( !is_array( $values ) ) {
                        return;
                }
-               $change = DataCenterDBChange::newFromComponent( $this, $values 
);
-               $change->insert();
+               // Gets it'self from the database - as we need ALL DATA for the 
state
+               $component = DataCenterDB::getRow(
+                       __CLASS__,
+                       $this->category,
+                       $this->type,
+                       $this->getId()
+               );
+               // Checks if component existed
+               if ( $component ) {
+                       // Creates a change from a component
+                       $change = DataCenterDBChange::newFromComponent(
+                               $component, $values
+                       );
+                       // Inserts change
+                       $change->insert();
+               }
        }
 
        /**

Modified: trunk/extensions/DataCenter/DataCenter.i18n.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.i18n.php     2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/DataCenter.i18n.php     2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -20,7 +20,6 @@
        'datacenter-ui-page-plans' => 'Plans',
        'datacenter-ui-page-assets' => 'Assets',
        'datacenter-ui-page-models' => 'Models',
-       'datacenter-ui-page-history' => 'History',
        'datacenter-ui-page-repairs' => 'Repairs',
        'datacenter-ui-page-settings' => 'Settings',
        // Types
@@ -145,6 +144,7 @@
        'datacenter-ui-field-uses' => 'Uses',
        'datacenter-ui-field-confirm' => 'Enter "yes" to confirm',
        // Label
+       'datacenter-ui-label-compare-changes' => 'Compare selected changes',
        'datacenter-ui-label-reset' => 'Reset',
        'datacenter-ui-label-cancel' => 'Cancel',
        'datacenter-ui-label-remove' => 'Remove',
@@ -159,6 +159,9 @@
        '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&deg;',
+       'datacenter-ui-label-change-state-row' => 'Core Fields',
+       'datacenter-ui-label-change-state-meta' => 'Meta Fields',
+       'datacenter-ui-label-change-blank-user' => 'System',
        // Defaults
        'datacenter-ui-default-new-type' => 'New $1',
        // List Headings
@@ -173,7 +176,6 @@
        // Information Headings
        'datacenter-ui-heading-details' => 'Details',
        'datacenter-ui-heading-model-attachments' => 'Model Attachments',
-       'datacenter-ui-heading-difference' => 'Difference',
        'datacenter-ui-heading-asset' => 'Asset',
        'datacenter-ui-heading-model' => 'Model',
        'datacenter-ui-heading-facility' => 'Facility',

Modified: trunk/extensions/DataCenter/DataCenter.page.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.page.php     2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/DataCenter.page.php     2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -39,7 +39,7 @@
 
 class DataCenterPage extends SpecialPage {
 
-       /* Members */
+       /* Private Static Members */
 
        /*
         * The path given to the special page is a string of text including any 
text
@@ -63,6 +63,7 @@
                array( 'page', 'type', 'id' ),
                array( 'action', 'parameter' ),
        );
+
        /*
         * Once the path is interpreted it is determined if the request 
specified a
         * page. If the request did not specify a page, the first page in this 
array
@@ -106,10 +107,6 @@
                        'view' => 'DataCenterViewModels',
                        'default' => 'object'
                ),
-               'history' => array(
-                       'controller' => 'DataCenterControllerHistory',
-                       'view' => 'DataCenterViewHistory',
-               ),
                'settings' => array(
                        'controller' => 'DataCenterControllerSettings',
                        'view' => 'DataCenterViewSettings',
@@ -125,6 +122,8 @@
                'public' => array()
        );
 
+       private static $path;
+
        /* Private Static Functions */
 
        private static function urlToSub(
@@ -220,6 +219,15 @@
                );
        }
 
+       public static function getPath() {
+               if ( !self::$path ) {
+                       self::$path = self::subToPath(
+                               self::urlToSub( $_SERVER['PHP_SELF'] )
+                       );
+               }
+               return self::$path;
+       }
+
        /* Functions */
 
        public function __construct() {
@@ -303,12 +311,15 @@
                                                                $status = 
$controller->$do(
                                                                        $data, 
$path['type']
                                                                );
-                                                               // Redirects to 
success or failure URL
-                                                               
$wgOut->redirect(
-                                                                       
$wgRequest->getText(
-                                                                               
$status ? 'success' : 'failure'
-                                                                       )
-                                                               );
+                                                               // Checks if 
status is not null
+                                                               if ( $status 
!== null ) {
+                                                                       // 
Redirects to success or failure URL
+                                                                       
$wgOut->redirect(
+                                                                               
$wgRequest->getText(
+                                                                               
        $status ? 'success' : 'failure'
+                                                                               
)
+                                                                       );
+                                                               }
                                                        }
                                                }
                                        }

Modified: trunk/extensions/DataCenter/DataCenter.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.php  2009-01-23 22:54:28 UTC (rev 
46105)
+++ trunk/extensions/DataCenter/DataCenter.php  2009-01-23 23:08:06 UTC (rev 
46106)
@@ -84,11 +84,11 @@
        'DataCenterWidgetActions' => $dir . 'UI/Widgets/Actions.php',
        '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',
+       'DataCenterWidgetHistory' => $dir . 'UI/Widgets/History.php',
        'DataCenterWidgetMap' => $dir . 'UI/Widgets/Map.php',
        'DataCenterWidgetModel' => $dir . 'UI/Widgets/Model.php',
        'DataCenterWidgetPlan' => $dir . 'UI/Widgets/Plan.php',
@@ -106,7 +106,6 @@
        // Views/*
        'DataCenterViewAssets' => $dir . 'Views/Assets.php',
        'DataCenterViewFacilities' => $dir . 'Views/Facilities.php',
-       'DataCenterViewHistory' => $dir . 'Views/History.php',
        'DataCenterViewModels' => $dir . 'Views/Models.php',
        'DataCenterViewOverview' => $dir . 'Views/Overview.php',
        'DataCenterViewPlans' => $dir . 'Views/Plans.php',

Modified: trunk/extensions/DataCenter/DataCenter.ui.php
===================================================================
--- trunk/extensions/DataCenter/DataCenter.ui.php       2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/DataCenter.ui.php       2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -753,11 +753,11 @@
                'actions' => 'DataCenterWidgetActions',
                'body' => 'DataCenterWidgetBody',
                'details' => 'DataCenterWidgetDetails',
-               'difference' => 'DataCenterWidgetDifference',
                'fieldlinks' => 'DataCenterWidgetFieldLinks',
                'form' => 'DataCenterWidgetForm',
                'gallery' => 'DataCenterWidgetGallery',
                'heading' => 'DataCenterWidgetHeading',
+               'history' => 'DataCenterWidgetHistory',
                'map' => 'DataCenterWidgetMap',
                'model' => 'DataCenterWidgetModel',
                'plan' => 'DataCenterWidgetPlan',

Deleted: trunk/extensions/DataCenter/UI/Widgets/Difference.php
===================================================================
--- trunk/extensions/DataCenter/UI/Widgets/Difference.php       2009-01-23 
22:54:28 UTC (rev 46105)
+++ trunk/extensions/DataCenter/UI/Widgets/Difference.php       2009-01-23 
23:08:06 UTC (rev 46106)
@@ -1,95 +0,0 @@
-<?php
-/**
- * UI Class for DataCenter extension
- *
- * @file
- * @ingroup Extensions
- */
-
-class DataCenterWidgetDifference extends DataCenterWidget {
-
-       /* Private Static Members */
-
-       private static $defaultParameters = array(
-               /**
-                * XML id attribute
-                * @datatype    string
-                */
-               'id' => 'difference',
-               /**
-                * XML class attribute
-                * @datatype    string
-                */
-               'class' => 'widget-difference',
-               /**
-                * Data Source: previous state of row
-                * @datatype    DataCenterDBRow
-                */
-               'previous' => null,
-               /**
-                * Data Source: current state of row
-                * @datatype    DataCenterDBRow
-                */
-               'current' => null,
-       );
-
-       /* Functions */
-
-       public static function render(
-               array $parameters
-       ) {
-               // Sets defaults
-               $parameters = array_merge( self::$defaultParameters, 
$parameters );
-               // Begins widget
-               $xmlOutput = parent::begin( $parameters['class'] );
-               // Begins table
-               $xmlOutput .= DataCenterXml::open( 'table' );
-               // Checks that an array of fields and valid rows were given
-               if (
-                       is_array( $parameters['previous'] ) &&
-                       is_array( $parameters['current'] )
-               ) {
-                       // Loops over each field
-                       foreach ( $parameters['current'] as $field => $value ) {
-                               // Detects new field
-                               if ( !isset( $parameters['previous'][$field] ) 
) {
-                                       $different = true;
-                                       $parameters['previous'][$field] = 
'NULL';
-                               }
-                               // Detects changed field
-                               $different = ( $value !== 
$parameters['previous'][$field] );
-                               // Adds row
-                               $xmlOutput .= DataCenterXml::row(
-                                       DataCenterXml::cell(
-                                               array( 'class' => 'label' ),
-                                               DataCenterUI::message( 'field', 
$field )
-                                       ),
-                                       DataCenterXml::cell(
-                                               array( 'class' => 'previous' ),
-                                               DataCenterXml::span(
-                                                       array(
-                                                               'class' => 
$different ? 'different' : 'same'
-                                                       ),
-                                                       
$parameters['previous'][$field]
-                                               )
-                                       ),
-                                       DataCenterXml::cell(
-                                               array( 'class' => 'current' ),
-                                               DataCenterXml::span(
-                                                       array(
-                                                               'class' => 
$different ? 'different' : 'same'
-                                                       ),
-                                                       $value
-                                               )
-                                       )
-                               );
-                       }
-               }
-               // Ends table
-               $xmlOutput .= DataCenterXml::close( 'table' );
-               // Ends widget
-               $xmlOutput .= parent::end();
-               // Returns results
-               return $xmlOutput;
-       }
-}
\ No newline at end of file

Added: trunk/extensions/DataCenter/UI/Widgets/History.php
===================================================================
--- trunk/extensions/DataCenter/UI/Widgets/History.php                          
(rev 0)
+++ trunk/extensions/DataCenter/UI/Widgets/History.php  2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -0,0 +1,379 @@
+<?php
+
+/**
+ * UI Class for DataCenter extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class DataCenterWidgetHistory extends DataCenterWidget {
+
+       /* Private Static Members */
+
+       private static $defaultParameters = array(
+               /**
+                * XML ID attribute of widget
+                * @datatype    string
+                */
+               'id' => 'history',
+               /**
+                * CSS class of widget
+                * @datatype    string
+                */
+               'class' => 'widget-history',
+               /**
+                * Data Source
+                * @datatype    DataCenterComponent
+                */
+               'component' => null,
+               /**
+                * Current Path
+                * @datatype    array
+                */
+               'path' => null,
+       );
+
+       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',
+               ),
+               /**
+                * Default XML attributes for checkbox cell
+                */
+               'radio' => array(
+                       'class' => 'radio',
+                       'width' => '1%',
+               ),
+               /**
+                * Default XML attributes for label cell
+                */
+               'field' => array(
+                       'class' => 'field',
+               ),
+               /**
+                * Default XML attributes for buttons cell
+                */
+               'buttons' => array(
+                       'class' => 'buttons',
+                       'align' => 'right',
+                       'colspan' => 6
+               ),
+       );
+
+       /* 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'] );
+               if (
+                       isset( $parameters['path']['parameter'] ) &&
+                       is_array( $parameters['path']['parameter'] ) &&
+                       ( count( $parameters['path']['parameter'] ) >= 2 )
+               ) {
+                       $changes = array(
+                               DataCenterDB::getChange( 
$parameters['path']['parameter'][0] ),
+                               DataCenterDB::getChange( 
$parameters['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, 
'_', '-' )
+                                               );
+                                       } else if ( $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(
+                               DataCenterDB::buildSort(
+                                       'meta', 'change', array( 'timestamp 
DESC' )
+                               )
+                       );
+                       // 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( 
$parameters['path'] ),
+                       );
+                       // Begins form
+                       $xmlOutput .= DataCenterXml::open( 'form', 
$formAttributes );
+                       // Begins table
+                       $xmlOutput .= DataCenterXml::open(
+                               'table', self::$defaultAttributes['table']
+                       );
+                       // 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;
+       }
+
+       public static function compareChanges(
+               $data
+       ) {
+               global $wgOut;
+               $path = DataCenterPage::getPath();
+               $path['parameter'] = array(
+                       $data['meta']['change1'], $data['meta']['change2']
+               );
+               $wgOut->redirect( DataCenterXml::url( $path ) );
+       }
+}
\ No newline at end of file

Modified: trunk/extensions/DataCenter/Views/Assets.php
===================================================================
--- trunk/extensions/DataCenter/Views/Assets.php        2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Views/Assets.php        2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -130,7 +130,24 @@
                return DataCenterUI::renderLayout(
                        'columns',
                        array(
-                               DataCenterViewHistory::typeHistory( $path, 
$asset )
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array(
+                                                               'message' => 
'history-type',
+                                                               'subject' => 
DataCenterUI::message(
+                                                                       'type', 
$path['type']
+                                                               )
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'history',
+                                                       array( 'component' => 
$asset, 'path' => $path )
+                                               ),
+                                       )
+                               ),
                        )
                );
        }

Modified: trunk/extensions/DataCenter/Views/Facilities/Location.php
===================================================================
--- trunk/extensions/DataCenter/Views/Facilities/Location.php   2009-01-23 
22:54:28 UTC (rev 46105)
+++ trunk/extensions/DataCenter/Views/Facilities/Location.php   2009-01-23 
23:08:06 UTC (rev 46106)
@@ -77,18 +77,6 @@
                );
        }
 
-       public function history(
-               $path
-       ) {
-               $asset = DataCenterDB::getLocation( $path['id'] );
-               return DataCenterUI::renderLayout(
-                       'columns',
-                       array(
-                               DataCenterViewHistory::typeHistory( $path, 
$asset )
-                       )
-               );
-       }
-
        public function view(
                $path
        ) {

Modified: trunk/extensions/DataCenter/Views/Facilities/Space.php
===================================================================
--- trunk/extensions/DataCenter/Views/Facilities/Space.php      2009-01-23 
22:54:28 UTC (rev 46105)
+++ trunk/extensions/DataCenter/Views/Facilities/Space.php      2009-01-23 
23:08:06 UTC (rev 46106)
@@ -73,18 +73,6 @@
                );
        }
 
-       public function history(
-               $path
-       ) {
-               $asset = DataCenterDB::getSpace( $path['id'] );
-               return DataCenterUI::renderLayout(
-                       'columns',
-                       array(
-                               DataCenterViewHistory::typeHistory( $path, 
$asset )
-                       )
-               );
-       }
-
        public function view(
                $path
        ) {

Modified: trunk/extensions/DataCenter/Views/Facilities.php
===================================================================
--- trunk/extensions/DataCenter/Views/Facilities.php    2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Views/Facilities.php    2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -10,4 +10,38 @@
 
        /* Functions */
 
+       public function history(
+               $path
+       ) {
+               if ( $path['type'] == 'location' ) {
+                       $facility = DataCenterDB::getLocation( $path['id'] );
+               } else if ( $path['type'] == 'space' ) {
+                       $facility = DataCenterDB::getSpace( $path['id'] );
+               } else {
+                       return null;
+               }
+               return DataCenterUI::renderLayout(
+                       'columns',
+                       array(
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array(
+                                                               'message' => 
'history-type',
+                                                               'subject' => 
DataCenterUI::message(
+                                                                       'type', 
$path['type']
+                                                               )
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'history',
+                                                       array( 'component' => 
$facility, 'path' => $path )
+                                               ),
+                                       )
+                               ),
+                       )
+               );
+       }
 }
\ No newline at end of file

Deleted: trunk/extensions/DataCenter/Views/History.php
===================================================================
--- trunk/extensions/DataCenter/Views/History.php       2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Views/History.php       2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -1,144 +0,0 @@
-<?php
-/**
- * History UI Class for DataCenter extension
- *
- * @file
- * @ingroup Extensions
- */
-
-class DataCenterViewHistory extends DataCenterView {
-
-       /* Functions */
-
-       public function main(
-               $path
-       ) {
-               $changes = DataCenterDB::getChanges();
-               return DataCenterUI::renderLayout(
-                       'columns',
-                       array(
-                               DataCenterUI::renderLayout(
-                                       'rows',
-                                       array(
-                                               DataCenterUI::renderWidget(
-                                                       'heading', array( 
'message' => 'history' )
-                                               ),
-                                               DataCenterUI::renderWidget(
-                                                       'table',
-                                                       array(
-                                                               'rows' => 
$changes,
-                                                               'fields' => 
array(
-                                                                       'date' 
=> array(
-                                                                               
'field' => 'timestamp',
-                                                                               
'format' => 'date'
-                                                                       ),
-                                                                       
'username',
-                                                                       'type',
-                                                                       
'component' => array(
-                                                                               
'fields' => array(
-                                                                               
        'component_category',
-                                                                               
        'component_type',
-                                                                               
        'component_id'
-                                                                               
),
-                                                                               
'glue' => ' / '
-                                                                       ),
-                                                                       'note'
-                                                               ),
-                                                               'link' => array(
-                                                                       'page' 
=> 'history',
-                                                                       'type' 
=> 'change',
-                                                                       
'action' => 'view',
-                                                                       'id' => 
'#id',
-                                                               )
-                                                       )
-                                               ),
-                                       )
-                               ),
-                       )
-               );
-       }
-
-       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' );
-               }
-               $change = DataCenterDB::getChange( $path['id'] );
-               $component = DataCenterDB::getRow(
-                       'DataCenterDBComponent',
-                       $change->get( 'component_category' ),
-                       $change->get( 'component_type' ),
-                       $change->get( 'component_id' )
-               );
-               return DataCenterUI::renderLayout(
-                       'columns',
-                       array(
-                               DataCenterUI::renderLayout(
-                                       'rows',
-                                       array(
-                                               DataCenterUI::renderWidget(
-                                                       'heading',
-                                                       array( 'message' => 
'difference' )
-                                               ),
-                                               DataCenterUI::renderWidget(
-                                                       'difference',
-                                                       array(
-                                                               'current' => 
$component->get(),
-                                                               'previous' => 
unserialize(
-                                                                       
$change->get( 'state' )
-                                                               )
-                                                       )
-                                               )
-                                       )
-                               ),
-                       )
-               );
-       }
-
-       /* Static Functions */
-
-       public static function typeHistory(
-               $path,
-               $component
-       ) {
-               $changes = $component->getChanges(
-                       DataCenterDB::buildSort(
-                               'meta', 'change', 'timestamp DESC'
-                       )
-               );
-               return DataCenterUI::renderLayout(
-                       'rows',
-                       array(
-                               DataCenterUI::renderWidget(
-                                       'heading',
-                                       array(
-                                               'message' => 'history-type', 
'type' => $path['type']
-                                       )
-                               ),
-                               DataCenterUI::renderWidget( 'table',
-                                       array(
-                                               'rows' => $changes,
-                                               'fields' => array(
-                                                       'date' => array(
-                                                               'field' => 
'timestamp',
-                                                               'format' => 
'date'
-                                                       ),
-                                                       'username',
-                                                       'type',
-                                                       'note'
-                                               ),
-                                               'link' => array(
-                                                       'page' => 'history',
-                                                       'type' => 'change',
-                                                       'action' => 'view',
-                                                       'id' => '#id',
-                                               )
-                                       )
-                               ),
-                       )
-               );
-       }
-}
\ No newline at end of file

Modified: trunk/extensions/DataCenter/Views/Models.php
===================================================================
--- trunk/extensions/DataCenter/Views/Models.php        2009-01-23 22:54:28 UTC 
(rev 46105)
+++ trunk/extensions/DataCenter/Views/Models.php        2009-01-23 23:08:06 UTC 
(rev 46106)
@@ -197,11 +197,28 @@
        public function history(
                $path
        ) {
-               $asset = DataCenterDB::getAsset( $path['type'], $path['id'] );
+               $model = DataCenterDB::getModel( $path['type'], $path['id'] );
                return DataCenterUI::renderLayout(
                        'columns',
                        array(
-                               DataCenterViewHistory::typeHistory( $path, 
$asset )
+                               DataCenterUI::renderLayout(
+                                       'rows',
+                                       array(
+                                               DataCenterUI::renderWidget(
+                                                       'heading',
+                                                       array(
+                                                               'message' => 
'history-type',
+                                                               'subject' => 
DataCenterUI::message(
+                                                                       'type', 
$path['type']
+                                                               )
+                                                       )
+                                               ),
+                                               DataCenterUI::renderWidget(
+                                                       'history',
+                                                       array( 'component' => 
$model, 'path' => $path )
+                                               ),
+                                       )
+                               ),
                        )
                );
        }



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

Reply via email to