Merge "Add new-inline-tags to tidy.conf"
[lhc/web/wiklou.git] / includes / diff / DifferenceEngine.php
index 3236e61..37a732b 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * User interface for the difference engine
+ * User interface for the difference engine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup DifferenceEngine
@@ -261,7 +276,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 = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev );
@@ -403,7 +418,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;
@@ -462,24 +477,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;
@@ -518,7 +517,15 @@ class DifferenceEngine extends ContextSource {
                                // Handled by extension
                        } else {
                                // Normal page
-                               $wikiPage = WikiPage::factory( $this->mNewPage );
+                               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();
@@ -680,6 +687,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;
@@ -755,6 +763,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;
@@ -776,6 +785,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+)-->/',
@@ -872,7 +882,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 );