public static function render(array $parameters)
 {
     global $wgUser;
     // Gets current path
     $path = DataCenterPage::getPath();
     // Sets Defaults
     $parameters = array_merge(self::$defaultParameters, $parameters);
     // Begins widget
     $xmlOutput = parent::begin($parameters['class']);
     if (isset($path['parameter']) && is_array($path['parameter']) && count($path['parameter']) >= 2) {
         $changes = array(DataCenterDB::getChange($path['parameter'][0]), DataCenterDB::getChange($path['parameter'][1]));
         if ($changes[0]->get('timestamp') > $changes[1]->get('timestamp')) {
             $changes = array_reverse($changes);
         }
         // Use blank user name if none is set
         foreach ($changes as $change) {
             if ($change->get('user') == 0) {
                 $change->set('username', DataCenterUI::message('label', 'change-blank-user'));
             }
         }
         // Get states from serialized versions
         $states = array(unserialize($changes[0]->get('state')), unserialize($changes[1]->get('state')));
         // Begins table
         $xmlOutput .= DataCenterXml::open('table', self::$defaultAttributes['table']);
         // Restructures data
         $data = array();
         foreach ($states as $i => $state) {
             foreach ($state as $group => $fields) {
                 if (!isset($data[$group])) {
                     $data[$group] = array();
                 }
                 foreach ($fields as $field => $value) {
                     if ($field !== 'id') {
                         if (!isset($data[$group][$field])) {
                             $data[$group][$field] = array();
                         }
                         $data[$group][$field][$i] = $value;
                     }
                 }
             }
         }
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(), DataCenterXml::cell($changes[0]->get('username') . ' - ' . DataCenterUI::format($changes[0]->get('timestamp'), 'date')), DataCenterXml::cell($changes[1]->get('username') . ' - ' . DataCenterUI::format($changes[1]->get('timestamp'), 'date')));
         // Loops over each field
         foreach ($data as $group => $fields) {
             if (count($fields) == 0) {
                 continue;
             }
             $xmlOutput .= DataCenterXml::row(DataCenterXml::headingCell(array_merge(self::$defaultAttributes['heading'], array('colspan' => 3)), DataCenterUI::message('label', 'change-state-' . $group)));
             $even = true;
             foreach ($fields as $field => $values) {
                 // Deals with incomplete data
                 if (count($values) == 1) {
                     if (!isset($values[0])) {
                         $values[0] = null;
                     }
                     if (!isset($values[1])) {
                         $values[1] = null;
                     }
                 }
                 // Detects differnce
                 $different = (string) $values[0] !== (string) $values[1];
                 $spanAttributes = array('class' => $different ? 'different' : 'same');
                 // Gets label name
                 if ($group == 'row') {
                     $label = DataCenterUI::message('field', strtr($field, '_', '-'));
                 } elseif ($group == 'meta') {
                     $metaField = DataCenterDB::getMetaField($field);
                     $label = $metaField->get('name');
                 }
                 $state = $even ? 'even' : 'odd';
                 // Adds row
                 $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(array('class' => 'label'), $label), DataCenterXml::cell(array('class' => 'older-' . $state), DataCenterXml::span($spanAttributes, $values[0])), DataCenterXml::cell(array('class' => 'newer-' . $state), DataCenterXml::span($spanAttributes, $values[1])));
                 $even = !$even;
             }
         }
         // Ends table
         $xmlOutput .= DataCenterXml::close('table');
     } else {
         // Gets history of component from database
         $changes = $parameters['component']->getChanges(array_merge_recursive(DataCenterDB::buildSort('meta', 'change', array('timestamp DESC')), DataCenterDB::buildRange($path)));
         // Gets number of changes fromd database
         $numChanges = $parameters['component']->numChanges();
         // Use blank user name if none is set
         foreach ($changes as $change) {
             if ($change->get('user') == 0) {
                 $change->set('username', DataCenterUI::message('label', 'change-blank-user'));
             }
         }
         // Builds form attributes
         $formAttributes = array('id' => 'form_history', 'name' => 'form_history', 'method' => 'post', 'action' => DataCenterXml::url($path));
         // Begins form
         $xmlOutput .= DataCenterXml::open('form', $formAttributes);
         // Begins table
         $xmlOutput .= DataCenterXml::open('table', self::$defaultAttributes['table']);
         // Adds paging
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(self::$defaultAttributes['paging'], parent::buildPaging($path, $numChanges)));
         // Adds headings
         $xmlOutput .= DataCenterXml::row(DataCenterXml::headingCell(), DataCenterXml::headingCell(), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'date')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'username')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'type')), DataCenterXml::headingCell(self::$defaultAttributes['heading'], DataCenterUI::message('field', 'note')));
         foreach ($changes as $i => $change) {
             // Build row attributes
             $rowAttributes = array('class' => $i % 2 == 0 ? 'odd' : 'even');
             // Build radio attributes
             $radio1Attributes = array('type' => 'radio', 'name' => 'meta[change1]', 'id' => 'field_change1_' . $change->getId(), 'value' => $change->getId());
             if ($i == 0) {
                 $radio1Attributes['checked'] = 'checked';
             }
             $radio2Attributes = array('type' => 'radio', 'name' => 'meta[change2]', 'id' => 'field_change2_' . $change->getId(), 'value' => $change->getId());
             if ($i == 1 || count($changes) == 1) {
                 $radio2Attributes['checked'] = 'checked';
             }
             $xmlOutput .= DataCenterXml::row($rowAttributes, DataCenterXml::cell(self::$defaultAttributes['radio'], DataCenterXml::tag('input', $radio1Attributes)), DataCenterXml::cell(self::$defaultAttributes['radio'], DataCenterXml::tag('input', $radio2Attributes)), DataCenterXml::cell(self::$defaultAttributes['field'], DataCenterUI::format($change->get('timestamp'), 'date')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('username')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('type')), DataCenterXml::cell(self::$defaultAttributes['field'], $change->get('note')));
         }
         // Adds reset and submit button
         $xmlOutput .= DataCenterXML::row(DataCenterXml::cell(self::$defaultAttributes['buttons'], DataCenterXml::tag('input', array('type' => 'reset', 'name' => 'reset', 'class' => 'reset', 'value' => DataCenterUI::message('label', 'reset'))) . DataCenterXml::tag('input', array('type' => 'submit', 'name' => 'submit', 'class' => 'submit', 'value' => DataCenterUI::message('label', 'compare-changes')))));
         // Adds do field
         $xmlOutput .= DataCenterXml::tag('input', array('type' => 'hidden', 'name' => 'do', 'value' => 'compareChanges'));
         // Adds token field
         $xmlOutput .= DataCenterXml::tag('input', array('type' => 'hidden', 'name' => 'token', 'value' => $wgUser->editToken()));
         $xmlOutput .= DataCenterXml::close('table');
         $xmlOutput .= DataCenterXml::close('form');
     }
     // Ends widget
     $xmlOutput .= parent::end();
     // Returns results
     return $xmlOutput;
 }
Beispiel #2
0
 public static function render(array $parameters)
 {
     // Sets defaults
     $parameters = array_merge_recursive(self::$defaultParameters, $parameters);
     // Begins widget
     $xmlOutput = parent::begin($parameters['class']);
     // Processes fields
     $fields = self::processFields($parameters['fields']);
     // Check if there was an error processing fields
     if (!$fields) {
         // Tells the user
         return DataCenterUI::message('error', 'no-fields');
     }
     // Begins table
     $xmlOutput .= DataCenterXml::open('table', array('border' => 0, 'cellspacing' => 0));
     // Gets current path
     $path = DataCenterPage::getPath();
     // Check if number of possible records was given
     if (isset($parameters['num'])) {
         // Adds paging
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(array('colspan' => count($parameters['fields']), 'align' => 'right'), parent::buildPaging($path, $parameters['num'])));
     }
     // Adds headings
     foreach ($fields as $label => $options) {
         $xmlOutput .= DataCenterXml::headingCell(array('align' => $options['align']), DataCenterUI::message('field', $label));
     }
     if (count($parameters['rows']) == 0) {
         $xmlOutput .= DataCenterXml::row(DataCenterXml::cell(DataCenterUI::message('error', 'no-rows')));
     }
     // Loops over each row
     foreach ($parameters['rows'] as $i => $row) {
         // Builds row attributes
         $rowAttributes = array_merge(array('class' => $i % 2 == 0 ? 'odd' : 'even'), DataCenterXml::buildEffects($parameters['effects'], $row), DataCenterXml::buildLink($parameters['link'], $row));
         if (count($parameters['link']) > 0) {
             $rowAttributes['class'] .= ' link';
         }
         // Begins row
         $xmlOutput .= DataCenterXml::open('tr', $rowAttributes);
         // Loops over each field
         foreach ($fields as $label => $options) {
             // Checks if multiple fields were specified
             if (count($options['fields']) > 0) {
                 // Builds array of values
                 $values = array();
                 foreach ($options['fields'] as $field => $fieldOptions) {
                     $values[] = DataCenterUI::format($row->get($field), $fieldOptions['format']);
                 }
                 // Glues values together
                 $value = implode($options['glue'], $values);
                 // Alternatively checks if a field was specified
             } elseif ($options['field']) {
                 // Uses specified field
                 $value = DataCenterUI::format($row->get($options['field']), $options['format']);
             } else {
                 // Uses label as field
                 $value = DataCenterUI::format($row->get($label), $options['format']);
             }
             // Adds cell
             $xmlOutput .= DataCenterXml::cell(array('align' => $options['align']), $value);
         }
         // Ends row
         $xmlOutput .= DataCenterXml::close('tr');
     }
     // Ends table
     $xmlOutput .= DataCenterXml::close('table');
     // Clears any floating
     $xmlOutput .= DataCenterXml::clearFloating();
     // Ends widget
     $xmlOutput .= parent::end();
     // Returns results
     return $xmlOutput;
 }