https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114414

Revision: 114414
Author:   jeroendedauw
Date:     2012-03-21 21:58:23 +0000 (Wed, 21 Mar 2012)
Log Message:
-----------
work on diff stuff

Modified Paths:
--------------
    trunk/extensions/EducationProgram/EducationProgram.i18n.php
    trunk/extensions/EducationProgram/EducationProgram.php
    trunk/extensions/EducationProgram/actions/EPUndoAction.php
    trunk/extensions/EducationProgram/includes/EPRevisionDiff.php
    trunk/extensions/EducationProgram/includes/EPRevisionedObject.php

Modified: trunk/extensions/EducationProgram/EducationProgram.i18n.php
===================================================================
--- trunk/extensions/EducationProgram/EducationProgram.i18n.php 2012-03-21 
21:51:47 UTC (rev 114413)
+++ trunk/extensions/EducationProgram/EducationProgram.i18n.php 2012-03-21 
21:58:23 UTC (rev 114414)
@@ -794,6 +794,10 @@
        'duration-weeks' => '$1 {{PLURAL:$1|week|weeks}}',
        'duration-years' => '$1 {{PLURAL:$1|year|years}}',
        'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
+
+       // Diffs
+       'ep-diff-old' => 'Old value',
+       'ep-diff-new' => 'New value',
 );
 
 /** Message documentation (Message documentation)

Modified: trunk/extensions/EducationProgram/EducationProgram.php
===================================================================
--- trunk/extensions/EducationProgram/EducationProgram.php      2012-03-21 
21:51:47 UTC (rev 114413)
+++ trunk/extensions/EducationProgram/EducationProgram.php      2012-03-21 
21:58:23 UTC (rev 114414)
@@ -121,6 +121,7 @@
 $wgAutoloadClasses['EPRevisions']                                      = 
dirname( __FILE__ ) . '/includes/EPRevisions.php';
 $wgAutoloadClasses['EPArticles']                                       = 
dirname( __FILE__ ) . '/includes/EPArticles.php';
 $wgAutoloadClasses['EPStudentActivityPager']           = dirname( __FILE__ ) . 
'/includes/EPStudentActivityPager.php';
+$wgAutoloadClasses['EPRevisionDiff']                           = dirname( 
__FILE__ ) . '/includes/EPRevisionDiff.php';
 
 $wgAutoloadClasses['CoursePage']                                       = 
dirname( __FILE__ ) . '/pages/CoursePage.php';
 $wgAutoloadClasses['EPPage']                                           = 
dirname( __FILE__ ) . '/pages/EPPage.php';

Modified: trunk/extensions/EducationProgram/actions/EPUndoAction.php
===================================================================
--- trunk/extensions/EducationProgram/actions/EPUndoAction.php  2012-03-21 
21:51:47 UTC (rev 114413)
+++ trunk/extensions/EducationProgram/actions/EPUndoAction.php  2012-03-21 
21:58:23 UTC (rev 114414)
@@ -64,8 +64,21 @@
                                                $success = $this->doUndo( 
$object, $revision );
                                        }
                                        else {
-                                               $this->displayForm( $object, 
$revision );
-                                               $success = null;
+                                               $diff = $object->getUndoDiff( 
$revision );
+
+                                               if ( $diff->isValid() ) {
+                                                       if ( 
$diff->hasChanges() ) {
+                                                               
$diff->setContext( $this->getContext() );
+                                                               
$diff->display();
+
+                                                               
$this->displayForm( $object, $revision );
+                                                       }
+                                                       else {
+                                                               // TODO
+                                                       }
+
+                                                       $success = null;
+                                               }
                                        }
                                }
                        }

Modified: trunk/extensions/EducationProgram/includes/EPRevisionDiff.php
===================================================================
--- trunk/extensions/EducationProgram/includes/EPRevisionDiff.php       
2012-03-21 21:51:47 UTC (rev 114413)
+++ trunk/extensions/EducationProgram/includes/EPRevisionDiff.php       
2012-03-21 21:58:23 UTC (rev 114414)
@@ -17,40 +17,49 @@
 
        protected $changedFields = array();
 
-       public static function newFromUndoRevision( IContextSource $context, 
EPRevision $revison, array $fields = null ) {
+       protected $isValid = true;
+
+       public static function newFromUndoRevision( EPRevisionedObject 
$currentObject, EPRevision $revison, array $fields = null ) {
                $changedFields = array();
 
-               $oldObject = $revison->getPreviousRevision()->getObject();
+               $targetObject = $revison->getPreviousRevision()->getObject();
 
-               if ( $oldObject !== false ) {
-                       $newObject = $revison->getObject();
+               if ( $targetObject !== false ) {
+                       $sourceObject = $revison->getObject();
 
-                       $fields = is_null( $fields ) ? 
$newObject->getFieldNames() : $fields;
+                       $fields = is_null( $fields ) ? 
$sourceObject->getFieldNames() : $fields;
 
                        foreach ( $fields as $fieldName ) {
-                               if ( $this->getField( $fieldName ) === 
$newObject->getField( $fieldName ) ) {
-                                       $changedFields[$fieldName] = array(  );
-                                       $this->restoreField( $fieldName, 
$oldObject->getField( $fieldName ) );
+                               if ( $currentObject->getField( $fieldName ) === 
$sourceObject->getField( $fieldName )
+                                       && $sourceObject->getField( $fieldName 
) !== $targetObject->getField( $fieldName ) ) {
+
+                                       $changedFields[$fieldName] = array(
+                                               $sourceObject->getField( 
$fieldName ),
+                                               $targetObject->getField( 
$fieldName )
+                                       );
                                }
                        }
                }
 
-               return new self( $context, $changedFields );
+               $diff = new self( $changedFields );
+
+               $diff->setIsValid( $targetObject !== false );
+
+               return $diff;
        }
 
-       public function __construct( IContextSource $context, array 
$changedFields ) {
-               $this->setContext( $context );
+       public function __construct( array $changedFields ) {
                $this->changedFields = $changedFields;
        }
 
        public function display() {
                $out = $this->getOutput();
 
-               $out->addHTML( '<table><tr>' );
+               $out->addHTML( '<table class="wikitable sortable"><tr>' );
 
                $out->addElement( 'th', array(), '' );
-               $out->addElement( 'th', array(), $this->msg()->plain( 
'ep-diff-old' ) );
-               $out->addElement( 'th', array(), $this->msg()->plain( 
'ep-diff-new' ) );
+               $out->addElement( 'th', array(), $this->msg( 'ep-diff-old' 
)->plain() );
+               $out->addElement( 'th', array(), $this->msg( 'ep-diff-new' 
)->plain() );
 
                $out->addHTML( '</tr>' );
 
@@ -59,13 +68,34 @@
 
                        $out->addHtml( '<tr>' );
 
-                       $out->addElement( '<th>', array(), $field );
-                       $out->addElement( '<td>', array(), $old );
-                       $out->addElement( '<td>', array(), $new );
+                       $out->addElement( 'th', array(), $field );
+                       $out->addElement( 'td', array(), $old );
+                       $out->addElement( 'td', array(), $new );
 
                        $out->addHtml( '</tr>' );
                }
+
+               $out->addHTML( '</table>' );
        }
 
+       /**
+        * @return array
+        */
+       public function getChangedFields() {
+               return $this->changedFields;
+       }
 
+       public function isValid() {
+               return $this->isValid;
+       }
+
+       public function setIsValid( $isValid ) {
+               $this->isValid = $isValid;
+       }
+
+       public function hasChanges() {
+               return !empty( $this->changedFields );
+       }
+
+
 }
\ No newline at end of file

Modified: trunk/extensions/EducationProgram/includes/EPRevisionedObject.php
===================================================================
--- trunk/extensions/EducationProgram/includes/EPRevisionedObject.php   
2012-03-21 21:51:47 UTC (rev 114413)
+++ trunk/extensions/EducationProgram/includes/EPRevisionedObject.php   
2012-03-21 21:58:23 UTC (rev 114414)
@@ -376,26 +376,17 @@
         * @return boolean Success indicator
         */
        public function undoRevision( EPRevision $revison, array $fields = null 
) {
-               $oldObject = $revison->getPreviousRevision()->getObject();
+               $diff = $this->getUndoDiff( $revison, $fields );
 
-               if ( $oldObject === false ) {
-                       return false;
+               foreach ( $diff->getChangedFields() as $fieldName => $values ) {
+                       $this->restoreField( $fieldName, $values[1] );
                }
 
-               $newObject = $revison->getObject();
-
-               $fields = is_null( $fields ) ? $newObject->getFieldNames() : 
$fields;
-
-               foreach ( $fields as $fieldName ) {
-                       if ( $this->getField( $fieldName ) === 
$newObject->getField( $fieldName ) ) {
-                               $this->restoreField( $fieldName, 
$oldObject->getField( $fieldName ) );
-                       }
-               }
-
-               return true;
+               return $diff->isValid();
        }
 
        /**
+        * Get a diff for the changes that will happen when undoing the 
provided revision.
         *
         * @since 0.1
         *
@@ -405,21 +396,7 @@
         * @return EPRevisionDiff
         */
        public function getUndoDiff( EPRevision $revison, array $fields = null 
) {
-               $oldObject = $revison->getPreviousRevision()->getObject();
-
-               if ( $oldObject === false ) {
-                       return false;
-               }
-
-               $newObject = $revison->getObject();
-
-               $fields = is_null( $fields ) ? $newObject->getFieldNames() : 
$fields;
-
-               foreach ( $fields as $fieldName ) {
-                       if ( $this->getField( $fieldName ) === 
$newObject->getField( $fieldName ) ) {
-                               $this->restoreField( $fieldName, 
$oldObject->getField( $fieldName ) );
-                       }
-               }
+               return EPRevisionDiff::newFromUndoRevision( $this, $revison, 
$fields );
        }
 
        /**


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

Reply via email to