Merge "Remove unused $wgDebugDBTransactions"
[lhc/web/wiklou.git] / includes / diff / DifferenceEngine.php
index 1bba4ca..e8f35f0 100644 (file)
@@ -261,7 +261,7 @@ class DifferenceEngine extends ContextSource {
                                $samePage = false;
                        }
 
-                       if ( $samePage && $this->mNewPage->userCan( 'edit', $user ) ) {
+                       if ( $samePage && $this->mNewPage->quickUserCan( 'edit', $user ) ) {
                                if ( $this->mNewRev->isCurrent() && $this->mNewPage->userCan( 'rollback', $user ) ) {
                                        $out->preventClickjacking();
                                        $rollback = '   ' . Linker::generateRollback( $this->mNewRev );
@@ -403,7 +403,7 @@ class DifferenceEngine extends ContextSource {
 
                if ( $this->mMarkPatrolledLink === null ) {
                        // Prepare a change patrol link, if applicable
-                       if ( $wgUseRCPatrol && $this->mNewPage->userCan( 'patrol', $this->getUser() ) ) {
+                       if ( $wgUseRCPatrol && $this->mNewPage->quickUserCan( 'patrol', $this->getUser() ) ) {
                                // If we've been given an explicit change identifier, use it; saves time
                                if ( $this->mRcidMarkPatrolled ) {
                                        $rcid = $this->mRcidMarkPatrolled;
@@ -435,7 +435,7 @@ class DifferenceEngine extends ContextSource {
                                // Build the link
                                if ( $rcid ) {
                                        $this->getOutput()->preventClickjacking();
-                                       $token = $this->getUser()->editToken( $rcid );
+                                       $token = $this->getUser()->getEditToken( $rcid );
                                        $this->mMarkPatrolledLink = ' <span class="patrollink">[' . Linker::linkKnown(
                                                $this->mNewPage,
                                                $this->msg( 'markaspatrolleddiff' )->escaped(),
@@ -462,24 +462,8 @@ class DifferenceEngine extends ContextSource {
         * @return String
         */
        protected function revisionDeleteLink( $rev ) {
-               $link = '';
-               $user = $this->getUser();
-               $canHide = $user->isAllowed( 'deleterevision' );
-               // Show del/undel link if:
-               // (a) the user can delete revisions, or
-               // (b) the user can view deleted revision *and* this one is deleted
-               if ( $canHide || ( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) {
-                       if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
-                               $link = Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
-                       } else {
-                               $query = array(
-                                       'type'   => 'revision',
-                                       'target' => $rev->getTitle()->getPrefixedDBkey(),
-                                       'ids'    => $rev->getId()
-                               );
-                               $link = Linker::revDeleteLink( $query,
-                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
-                       }
+               $link = Linker::getRevDeleteLink( $this->getUser(), $rev, $rev->getTitle() );
+               if ( $link !== '' ) {
                        $link = '&#160;&#160;&#160;' . $link . ' ';
                }
                return $link;
@@ -499,6 +483,7 @@ class DifferenceEngine extends ContextSource {
                if ( wfRunHooks( 'ArticleContentOnDiff', array( $this, $out ) ) ) {
                        $this->loadNewText();
                        $out->setRevisionId( $this->mNewid );
+                       $out->setRevisionTimestamp( $this->mNewRev->getTimestamp() );
                        $out->setArticleFlag( true );
 
                        if ( $this->mNewPage->isCssJsSubpage() || $this->mNewPage->isCssOrJsPage() ) {
@@ -516,9 +501,16 @@ class DifferenceEngine extends ContextSource {
                        } elseif ( !wfRunHooks( 'ArticleViewCustom', array( $this->mNewtext, $this->mNewPage, $out ) ) ) {
                                // Handled by extension
                        } else {
-                               # Use the current version parser cache if applicable
-                               $wikiPage = WikiPage::factory( $this->mNewPage );
-                               $useParserCache = $wikiPage->isParserCacheUsed( $this->getUser(), $this->mNewid );
+                               // Normal page
+                               if ( $this->getTitle()->equals( $this->mNewPage ) ) {
+                                       // If the Title stored in the context is the same as the one
+                                       // of the new revision, we can use its associated WikiPage
+                                       // object.
+                                       $wikiPage = $this->getWikiPage();
+                               } else {
+                                       // Otherwise we need to create our own WikiPage object
+                                       $wikiPage = WikiPage::factory( $this->mNewPage );
+                               }
 
                                $parserOptions = ParserOptions::newFromContext( $this->getContext() );
                                $parserOptions->enableLimitReport();
@@ -528,15 +520,11 @@ class DifferenceEngine extends ContextSource {
                                        $parserOptions->setEditSection( false );
                                }
 
-                               $parserOutput = false;
-                               if ( $useParserCache ) {
-                                       $parserOutput = ParserCache::singleton()->get( $wikiPage, $parserOptions );
-                               }
+                               $parserOutput = $wikiPage->getParserOutput( $parserOptions, $this->mNewid );
 
+                               # WikiPage::getParserOutput() should not return false, but just in case
                                if( $parserOutput ) {
                                        $out->addParserOutput( $parserOutput );
-                               } else {
-                                       $out->addWikiTextTidy( $this->mNewtext );
                                }
                        }
                }
@@ -684,6 +672,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @param $otext String: old text, must be already segmented
         * @param $ntext String: new text, must be already segmented
+        * @return bool|string
         */
        function generateDiffBody( $otext, $ntext ) {
                global $wgExternalDiffEngine, $wgContLang;
@@ -759,6 +748,7 @@ class DifferenceEngine extends ContextSource {
        /**
         * Generate a debug comment indicating diff generating time,
         * server node, and generator backend.
+        * @return string
         */
        protected function debug( $generator = "internal" ) {
                global $wgShowHostnames;
@@ -780,6 +770,7 @@ class DifferenceEngine extends ContextSource {
 
        /**
         * Replace line numbers with the text in the user's language
+        * @return mixed
         */
        function localiseLineNumbers( $text ) {
                return preg_replace_callback( '/<!--LINE (\d+)-->/',
@@ -847,7 +838,7 @@ class DifferenceEngine extends ContextSource {
         * @return String HTML fragment
         */
        private function getRevisionHeader( Revision $rev, $complete = '' ) {
-               $lang = $this->getLang();
+               $lang = $this->getLanguage();
                $user = $this->getUser();
                $revtimestamp = $rev->getTimestamp();
                $timestamp = $lang->userTimeAndDate( $revtimestamp, $user );
@@ -876,7 +867,7 @@ class DifferenceEngine extends ContextSource {
                                $editQuery['oldid'] = $rev->getID();
                        }
 
-                       $msg = $this->msg( $title->userCan( 'edit', $user ) ? 'editold' : 'viewsourceold' )->escaped();
+                       $msg = $this->msg( $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold' )->escaped();
                        $header .= ' (' . Linker::linkKnown( $title, $msg, array(), $editQuery ) . ')';
                        if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                                $header = Html::rawElement( 'span', array( 'class' => 'history-deleted' ), $header );