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