X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fdiff%2FDifferenceEngine.php;h=841daea195b5874672c1637c08de863d2c19baa2;hb=64e7e7d760fc3e043f7e01a89cc3697869aaa93b;hp=86d1a43517348fbdc0a1fad117ae6f60b86d61b0;hpb=efe7286cac744ccc7bce5417d20601a387f6d1ad;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 86d1a43517..8a5caa2dce 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -22,7 +22,6 @@ */ use MediaWiki\MediaWikiServices; -use MediaWiki\Permissions\PermissionManager; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\SlotRecord; use MediaWiki\Storage\NameTableAccessException; @@ -198,7 +197,7 @@ class DifferenceEngine extends ContextSource { */ protected $isSlotDiffRenderer = false; - /**#@-*/ + /** #@- */ /** * @param IContextSource|null $context Context to use, anything else will be ignored @@ -401,7 +400,8 @@ class DifferenceEngine extends ContextSource { * @return string|bool Link HTML or false */ public function deletedLink( $id ) { - if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) { + $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); + if ( $permissionManager->userHasRight( $this->getUser(), 'deletedhistory' ) ) { $dbr = wfGetDB( DB_REPLICA ); $arQuery = Revision::getArchiveQueryInfo(); $row = $dbr->selectRow( @@ -508,7 +508,7 @@ class DifferenceEngine extends ContextSource { # Check if one of the revisions is deleted/suppressed $deleted = $suppressed = false; - $allowed = $this->mNewRev->userCan( Revision::DELETED_TEXT, $user ); + $allowed = $this->mNewRev->userCan( RevisionRecord::DELETED_TEXT, $user ); $revisionTools = []; @@ -541,21 +541,22 @@ class DifferenceEngine extends ContextSource { $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); - if ( $samePage && $this->mNewPage && $permissionManager->userCan( - 'edit', $user, $this->mNewPage, PermissionManager::RIGOR_QUICK + if ( $samePage && $this->mNewPage && $permissionManager->quickUserCan( + 'edit', $user, $this->mNewPage ) ) { - if ( $this->mNewRev->isCurrent() && $permissionManager->userCan( + if ( $this->mNewRev->isCurrent() && $permissionManager->quickUserCan( 'rollback', $user, $this->mNewPage ) ) { - $rollbackLink = Linker::generateRollback( $this->mNewRev, $this->getContext() ); + $rollbackLink = Linker::generateRollback( $this->mNewRev, $this->getContext(), + [ 'noBrackets' ] ); if ( $rollbackLink ) { $out->preventClickjacking(); $rollback = "\u{00A0}\u{00A0}\u{00A0}" . $rollbackLink; } } - if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && - !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) + if ( $this->userCanEdit( $this->mOldRev ) && + $this->userCanEdit( $this->mNewRev ) ) { $undoLink = Html::element( 'a', [ 'href' => $this->mNewPage->getLocalURL( [ @@ -605,15 +606,15 @@ class DifferenceEngine extends ContextSource { Hooks::run( 'DifferenceEngineOldHeader', [ $this, &$oldHeader, $prevlink, $oldminor, $diffOnly, $ldel, $this->unhide ] ); - if ( $this->mOldRev->isDeleted( Revision::DELETED_TEXT ) ) { + if ( $this->mOldRev->isDeleted( RevisionRecord::DELETED_TEXT ) ) { $deleted = true; // old revisions text is hidden - if ( $this->mOldRev->isDeleted( Revision::DELETED_RESTRICTED ) ) { + if ( $this->mOldRev->isDeleted( RevisionRecord::DELETED_RESTRICTED ) ) { $suppressed = true; // also suppressed } } # Check if this user can see the revisions - if ( !$this->mOldRev->userCan( Revision::DELETED_TEXT, $user ) ) { + if ( !$this->mOldRev->userCan( RevisionRecord::DELETED_TEXT, $user ) ) { $allowed = false; } } @@ -675,9 +676,9 @@ class DifferenceEngine extends ContextSource { Hooks::run( 'DifferenceEngineNewHeader', [ $this, &$newHeader, $formattedRevisionTools, $nextlink, $rollback, $newminor, $diffOnly, $rdel, $this->unhide ] ); - if ( $this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) { + if ( $this->mNewRev->isDeleted( RevisionRecord::DELETED_TEXT ) ) { $deleted = true; // new revisions text is hidden - if ( $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) ) { + if ( $this->mNewRev->isDeleted( RevisionRecord::DELETED_RESTRICTED ) ) { $suppressed = true; // also suppressed } } @@ -764,12 +765,14 @@ class DifferenceEngine extends ContextSource { protected function getMarkPatrolledLinkInfo() { $user = $this->getUser(); $config = $this->getConfig(); + $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); // Prepare a change patrol link, if applicable if ( // Is patrolling enabled and the user allowed to? $config->get( 'UseRCPatrol' ) && - $this->mNewPage && $this->mNewPage->quickUserCan( 'patrol', $user ) && + $this->mNewPage && + $permissionManager->quickUserCan( 'patrol', $user, $this->mNewPage ) && // Only do this if the revision isn't more than 6 hours older // than the Max RC age (6h because the RC might not be cleaned out regularly) RecentChange::isInRCLifespan( $this->mNewRev->getTimestamp(), 21600 ) @@ -802,7 +805,7 @@ class DifferenceEngine extends ContextSource { // Build the link if ( $rcid ) { $this->getOutput()->preventClickjacking(); - if ( $user->isAllowed( 'writeapi' ) ) { + if ( $permissionManager->userHasRight( $user, 'writeapi' ) ) { $this->getOutput()->addModules( 'mediawiki.page.patrol.ajax' ); } @@ -897,7 +900,11 @@ class DifferenceEngine extends ContextSource { ) { $out->addParserOutput( $parserOutput, [ 'enableSectionEditLinks' => $this->mNewRev->isCurrent() - && $this->mNewRev->getTitle()->quickUserCan( 'edit', $this->getUser() ), + && MediaWikiServices::getInstance()->getPermissionManager()->quickUserCan( + 'edit', + $this->getUser(), + $this->mNewRev->getTitle() + ) ] ); } } @@ -1011,11 +1018,11 @@ class DifferenceEngine extends ContextSource { if ( !$this->loadRevisionData() ) { return false; } elseif ( $this->mOldRev && - !$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) + !$this->mOldRev->userCan( RevisionRecord::DELETED_TEXT, $this->getUser() ) ) { return false; } elseif ( $this->mNewRev && - !$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) + !$this->mNewRev->userCan( RevisionRecord::DELETED_TEXT, $this->getUser() ) ) { return false; } @@ -1465,7 +1472,7 @@ class DifferenceEngine extends ContextSource { $users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit ); $numUsers = count( $users ); - if ( $numUsers == 1 && $users[0] == $newRev->getUserText( Revision::RAW ) ) { + if ( $numUsers == 1 && $users[0] == $newRev->getUserText( RevisionRecord::RAW ) ) { $numUsers = 0; // special case to say "by the same user" instead of "by one other user" } @@ -1497,6 +1504,20 @@ class DifferenceEngine extends ContextSource { return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse(); } + /** + * @param Revision $rev + * @return bool whether the user can see and edit the revision. + */ + private function userCanEdit( Revision $rev ) { + $user = $this->getUser(); + + if ( !$rev->userCan( RevisionRecord::DELETED_TEXT, $user ) ) { + return false; + } + + return true; + } + /** * Get a header for a specified revision. * @@ -1530,13 +1551,14 @@ class DifferenceEngine extends ContextSource { $header = Linker::linkKnown( $title, $header, [], [ 'oldid' => $rev->getId() ] ); - if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) { + if ( $this->userCanEdit( $rev ) ) { $editQuery = [ 'action' => 'edit' ]; if ( !$rev->isCurrent() ) { $editQuery['oldid'] = $rev->getId(); } - $key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold'; + $key = MediaWikiServices::getInstance()->getPermissionManager() + ->quickUserCan( 'edit', $user, $title ) ? 'editold' : 'viewsourceold'; $msg = $this->msg( $key )->escaped(); $editLink = $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $title, $msg, [], $editQuery ) )->escaped(); @@ -1545,7 +1567,7 @@ class DifferenceEngine extends ContextSource { [ 'class' => 'mw-diff-edit' ], $editLink ); - if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { + if ( $rev->isDeleted( RevisionRecord::DELETED_TEXT ) ) { $header = Html::rawElement( 'span', [ 'class' => 'history-deleted' ], @@ -1869,13 +1891,17 @@ class DifferenceEngine extends ContextSource { } if ( $this->mOldRev ) { - $this->mOldContent = $this->mOldRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + $this->mOldContent = $this->mOldRev->getContent( + RevisionRecord::FOR_THIS_USER, $this->getUser() + ); if ( $this->mOldContent === null ) { return false; } } - $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + $this->mNewContent = $this->mNewRev->getContent( + RevisionRecord::FOR_THIS_USER, $this->getUser() + ); Hooks::run( 'DifferenceEngineLoadTextAfterNewContentIsLoaded', [ $this ] ); if ( $this->mNewContent === null ) { return false; @@ -1900,7 +1926,9 @@ class DifferenceEngine extends ContextSource { return false; } - $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + $this->mNewContent = $this->mNewRev->getContent( + RevisionRecord::FOR_THIS_USER, $this->getUser() + ); Hooks::run( 'DifferenceEngineAfterLoadNewText', [ $this ] );