* (bug 4035) Fix prev/next revision links on edit page
[lhc/web/wiklou.git] / includes / EditPage.php
index d1d0e20..5f7b73c 100644 (file)
@@ -154,7 +154,10 @@ class EditPage {
         */
        function edit() {
                global $wgOut, $wgUser, $wgRequest, $wgTitle;
-
+               
+               if ( ! wfRunHooks( 'AlternateEdit', array( &$this  ) ) )
+                       return;
+               
                $fname = 'EditPage::edit';
                wfProfileIn( $fname );
                wfDebug( "$fname: enter\n" );
@@ -675,13 +678,12 @@ class EditPage {
                        }
                        $wgOut->setPageTitle( $s );
                        if ( !$this->checkUnicodeCompliantBrowser() ) {
-                               $this->mArticle->setOldSubtitle();
                                $wgOut->addWikiText( wfMsg( 'nonunicodebrowser') );
                        }
                        if ( isset( $this->mArticle )
                             && isset( $this->mArticle->mRevision )
                             && !$this->mArticle->mRevision->isCurrent() ) {
-                               $this->mArticle->setOldSubtitle();
+                               $this->mArticle->setOldSubtitle( $this->mArticle->mRevision->getId() );
                                $wgOut->addWikiText( wfMsg( 'editingold' ) );
                        }
                }
@@ -771,18 +773,9 @@ class EditPage {
 
                $checkboxhtml = $minoredithtml . $watchhtml;
 
-               $wgOut->addHTML( '<div id="wikiPreview">' );
-               if ( 'preview' == $this->formtype) {
-                       $previewOutput = $this->getPreviewText();
-                       if ( $wgUser->getOption('previewontop' ) ) {
-                               $wgOut->addHTML( $previewOutput );
-                               if($this->mTitle->getNamespace() == NS_CATEGORY) {
-                                       $this->mArticle->closeShowCategory();
-                               }
-                               $wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
-                       }
+               if ( 'preview' == $this->formtype && $wgUser->getOption( 'previewontop' ) ) {
+                       $this->showPreview();
                }
-               $wgOut->addHTML( '</div>' );
                if ( 'diff' == $this->formtype ) {
                        if ( $wgUser->getOption('previewontop' ) ) {
                                $wgOut->addHTML( $this->getDiff() );
@@ -903,8 +896,10 @@ END
                if ( $this->isConflict ) {
                        require_once( "DifferenceEngine.php" );
                        $wgOut->addWikiText( '==' . wfMsg( "yourdiff" ) . '==' );
-                       DifferenceEngine::showDiff( $this->textbox2, $this->textbox1,
-                         wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
+
+                       $de = new DifferenceEngine( $this->mTitle );
+                       $de->setText( $this->textbox2, $this->textbox1 );
+                       $de->showDiff( wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
 
                        $wgOut->addWikiText( '==' . wfMsg( "yourtext" ) . '==' );
                        $wgOut->addHTML( "<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
@@ -912,7 +907,7 @@ END
                }
                $wgOut->addHTML( "</form>\n" );
                if ( $this->formtype == 'preview' && !$wgUser->getOption( 'previewontop' ) ) {
-                       $wgOut->addHTML( '<div id="wikiPreview">' . $previewOutput . '</div>' );
+                       $this->showPreview();
                }
                if ( $this->formtype == 'diff' && !$wgUser->getOption( 'previewontop' ) ) {
                        #$wgOut->addHTML( '<div id="wikiPreview">' . $difftext . '</div>' );
@@ -921,6 +916,26 @@ END
 
                wfProfileOut( $fname );
        }
+       
+       /**
+        * Append preview output to $wgOut.
+        * Includes category rendering if this is a category page.
+        * @access private
+        */
+       function showPreview() {
+               global $wgOut;
+               $wgOut->addHTML( '<div id="wikiPreview">' );
+               if($this->mTitle->getNamespace() == NS_CATEGORY) {
+                       $this->mArticle->openShowCategory();
+               }
+               $previewOutput = $this->getPreviewText();
+               $wgOut->addHTML( $previewOutput );
+               if($this->mTitle->getNamespace() == NS_CATEGORY) {
+                       $this->mArticle->closeShowCategory();
+               }
+               $wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
+               $wgOut->addHTML( '</div>' );
+       }
 
        /**
         * Prepare a list of templates used by this page. Returns HTML.
@@ -1370,8 +1385,12 @@ END
                        $this->section, $this->textbox1, $this->summary, $this->edittime );
                $oldtitle = wfMsg( 'currentrev' );
                $newtitle = wfMsg( 'yourtext' );
-               if ( $oldtext != wfMsg( $wgUser->isLoggedIn() ? 'noarticletext' : 'noarticletextanon' ) || $newtext != '' ) {
-                       $difftext = DifferenceEngine::getDiff( $oldtext, $newtext, $oldtitle, $newtitle );
+               if ( $oldtext !== false  || $newtext != '' ) {
+                       $de = new DifferenceEngine( $this->mTitle );
+                       $de->setText( $oldtext, $newtext );
+                       $difftext = $de->getDiff( $oldtitle, $newtitle );
+               } else {
+                       $difftext = '';
                }
 
                return '<div id="wikiDiff">' . $difftext . '</div>';