Merge "Put callback function within class in SiteConfigurationTest"
[lhc/web/wiklou.git] / includes / EditPage.php
index aefadbe..9a27d23 100644 (file)
@@ -892,7 +892,7 @@ class EditPage {
         * @since 1.21
         */
        protected function getContentObject( $def_content = null ) {
-               global $wgOut, $wgRequest;
+               global $wgOut, $wgRequest, $wgUser, $wgContLang;
 
                wfProfileIn( __METHOD__ );
 
@@ -930,10 +930,6 @@ class EditPage {
                                $undo = $wgRequest->getInt( 'undo' );
 
                                if ( $undo > 0 && $undoafter > 0 ) {
-                                       if ( $undo < $undoafter ) {
-                                               # If they got undoafter and undo round the wrong way, switch them
-                                               list( $undo, $undoafter ) = array( $undoafter, $undo );
-                                       }
 
                                        $undorev = Revision::newFromId( $undo );
                                        $oldrev = Revision::newFromId( $undoafter );
@@ -942,8 +938,6 @@ class EditPage {
                                        # the revisions exist and they were not deleted.
                                        # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
-                                               $undorev->getPage() == $oldrev->getPage() &&
-                                               $undorev->getPage() == $this->mTitle->getArticleID() &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
                                                !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
 
@@ -953,34 +947,45 @@ class EditPage {
                                                        # Warn the user that something went wrong
                                                        $undoMsg = 'failure';
                                                } else {
-                                                       # Inform the user of our success and set an automatic edit summary
-                                                       $undoMsg = 'success';
-
-                                                       # If we just undid one rev, use an autosummary
-                                                       $firstrev = $oldrev->getNext();
-                                                       if ( $firstrev && $firstrev->getId() == $undo ) {
-                                                               $userText = $undorev->getUserText();
-                                                               if ( $userText === '' ) {
-                                                                       $undoSummary = wfMessage(
-                                                                               'undo-summary-username-hidden',
-                                                                               $undo
-                                                                       )->inContentLanguage()->text();
-                                                               } else {
-                                                                       $undoSummary = wfMessage(
-                                                                               'undo-summary',
-                                                                               $undo,
-                                                                               $userText
-                                                                       )->inContentLanguage()->text();
-                                                               }
-                                                               if ( $this->summary === '' ) {
-                                                                       $this->summary = $undoSummary;
-                                                               } else {
-                                                                       $this->summary = $undoSummary . wfMessage( 'colon-separator' )
-                                                                               ->inContentLanguage()->text() . $this->summary;
+                                                       $oldContent = $this->mArticle->getPage()->getContent( Revision::RAW );
+                                                       $popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
+                                                       $newContent = $content->preSaveTransform( $this->mTitle, $wgUser, $popts );
+
+                                                       if ( $newContent->equals( $oldContent ) ) {
+                                                               # Tell the user that the undo results in no change,
+                                                               # i.e. the revisions were already undone.
+                                                               $undoMsg = 'nochange';
+                                                               $content = false;
+                                                       } else {
+                                                               # Inform the user of our success and set an automatic edit summary
+                                                               $undoMsg = 'success';
+
+                                                               # If we just undid one rev, use an autosummary
+                                                               $firstrev = $oldrev->getNext();
+                                                               if ( $firstrev && $firstrev->getId() == $undo ) {
+                                                                       $userText = $undorev->getUserText();
+                                                                       if ( $userText === '' ) {
+                                                                               $undoSummary = wfMessage(
+                                                                                       'undo-summary-username-hidden',
+                                                                                       $undo
+                                                                               )->inContentLanguage()->text();
+                                                                       } else {
+                                                                               $undoSummary = wfMessage(
+                                                                                       'undo-summary',
+                                                                                       $undo,
+                                                                                       $userText
+                                                                               )->inContentLanguage()->text();
+                                                                       }
+                                                                       if ( $this->summary === '' ) {
+                                                                               $this->summary = $undoSummary;
+                                                                       } else {
+                                                                               $this->summary = $undoSummary . wfMessage( 'colon-separator' )
+                                                                                       ->inContentLanguage()->text() . $this->summary;
+                                                                       }
+                                                                       $this->undidRev = $undo;
                                                                }
-                                                               $this->undidRev = $undo;
+                                                               $this->formtype = 'diff';
                                                        }
-                                                       $this->formtype = 'diff';
                                                }
                                        } else {
                                                // Failed basic sanity checks.
@@ -989,7 +994,7 @@ class EditPage {
                                                $undoMsg = 'norev';
                                        }
 
-                                       // Messages: undo-success, undo-failure, undo-norev
+                                       // Messages: undo-success, undo-failure, undo-norev, undo-nochange
                                        $class = ( $undoMsg == 'success' ? '' : 'error ' ) . "mw-undo-{$undoMsg}";
                                        $this->editFormPageTop .= $wgOut->parse( "<div class=\"{$class}\">" .
                                                wfMessage( 'undo-' . $undoMsg )->plain() . '</div>', true, /* interface */true );
@@ -3316,7 +3321,7 @@ HTML
         */
        static function getEditToolbar() {
                global $wgStylePath, $wgContLang, $wgLang, $wgOut;
-               global $wgUseTeX, $wgEnableUploads, $wgForeignFileRepos;
+               global $wgEnableUploads, $wgForeignFileRepos;
 
                $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
 
@@ -3397,7 +3402,7 @@ HTML
                                'tip'    => wfMessage( 'media_tip' )->text(),
                                'key'    => 'M'
                        ) : false,
-                       $wgUseTeX ? array(
+                       class_exists( 'MathRenderer' ) ? array(
                                'image'  => $wgLang->getImageFile( 'button-math' ),
                                'id'     => 'mw-editbutton-math',
                                'open'   => "<math>",