X-Git-Url: https://git.cyclocoop.org/%242?a=blobdiff_plain;f=includes%2FEditPage.php;h=0bcc893ba95d8879fb5dd95204946df8fea24261;hb=f734e7b1089e0493d19814d5294e7af09eddbca4;hp=1d9ff052400f042748d26a4ab7817e50aef465dc;hpb=f79ad343f7170eecc7673fcaf32fc9229469808c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/EditPage.php b/includes/EditPage.php index 1d9ff05240..0bcc893ba9 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -20,6 +20,7 @@ * @file */ +use MediaWiki\Block\DatabaseBlock; use MediaWiki\EditPage\TextboxBuilder; use MediaWiki\EditPage\TextConflictHelper; use MediaWiki\Logger\LoggerFactory; @@ -565,14 +566,6 @@ class EditPage { $this->enableApiEditOverride = $enableOverride; } - /** - * @deprecated since 1.29, call edit directly - */ - public function submit() { - wfDeprecated( __METHOD__, '1.29' ); - $this->edit(); - } - /** * This is the function that gets called for "action=edit". It * sets up various member variables, then passes execution to @@ -1483,8 +1476,9 @@ class EditPage { $user = $this->context->getUser(); $title = Title::newFromText( $preload ); + # Check for existence to avoid getting MediaWiki:Noarticletext - if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) { + if ( !$this->isPageExistingAndViewable( $title, $user ) ) { // TODO: somehow show a warning to the user! return $handler->makeEmptyContent(); } @@ -1493,7 +1487,7 @@ class EditPage { if ( $page->isRedirect() ) { $title = $page->getRedirectTarget(); # Same as before - if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) { + if ( !$this->isPageExistingAndViewable( $title, $user ) ) { // TODO: somehow show a warning to the user! return $handler->makeEmptyContent(); } @@ -1526,6 +1520,21 @@ class EditPage { return $content->preloadTransform( $title, $parserOptions, $params ); } + /** + * Verify if a given title exists and the given user is allowed to view it + * + * @see EditPage::getPreloadedContent() + * @param Title|null $title + * @param User $user + * @return bool + * @throws Exception + */ + private function isPageExistingAndViewable( $title, User $user ) { + $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); + + return $title && $title->exists() && $permissionManager->userCan( 'read', $user, $title ); + } + /** * Make sure the form isn't faking a user's credentials. * @@ -1988,6 +1997,8 @@ ERROR; } } + $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); + $changingContentModel = false; if ( $this->contentModel !== $this->mTitle->getContentModel() ) { if ( !$config->get( 'ContentHandlerUseDB' ) ) { @@ -2001,10 +2012,19 @@ ERROR; // Make sure the user can edit the page under the new content model too $titleWithNewContentModel = clone $this->mTitle; $titleWithNewContentModel->setContentModel( $this->contentModel ); - if ( !$titleWithNewContentModel->userCan( 'editcontentmodel', $user ) - || !$titleWithNewContentModel->userCan( 'edit', $user ) + + $canEditModel = $permissionManager->userCan( + 'editcontentmodel', + $user, + $titleWithNewContentModel + ); + + if ( + !$canEditModel + || !$permissionManager->userCan( 'edit', $user, $titleWithNewContentModel ) ) { $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL ); + return $status; } @@ -2048,7 +2068,7 @@ ERROR; if ( $new ) { // Late check for create permission, just in case *PARANOIA* - if ( !$this->mTitle->userCan( 'create', $user ) ) { + if ( !$permissionManager->userCan( 'create', $user, $this->mTitle ) ) { $status->fatal( 'nocreatetext' ); $status->value = self::AS_NO_CREATE_PERMISSION; wfDebug( __METHOD__ . ": no create permission\n" ); @@ -2595,13 +2615,13 @@ ERROR; $username = explode( '/', $this->mTitle->getText(), 2 )[0]; $user = User::newFromName( $username, false /* allow IP users */ ); $ip = User::isIP( $username ); - $block = Block::newFromTarget( $user, $user ); + $block = DatabaseBlock::newFromTarget( $user, $user ); if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist $out->wrapWikiMsg( "
\n$1\n
", [ 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ] ); } elseif ( !is_null( $block ) && - $block->getType() != Block::TYPE_AUTO && + $block->getType() != DatabaseBlock::TYPE_AUTO && ( $block->isSitewide() || $user->isBlockedFrom( $this->mTitle ) ) ) { // Show log extract if the user is sitewide blocked or is partially @@ -2609,7 +2629,8 @@ ERROR; LogEventsList::showLogExtract( $out, 'block', - MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(), + MediaWikiServices::getInstance()->getNamespaceInfo()-> + getCanonicalName( NS_USER ) . ':' . $block->getTarget(), '', [ 'lim' => 1, @@ -2671,7 +2692,7 @@ ERROR; protected function showCustomIntro() { if ( $this->editintro ) { $title = Title::newFromText( $this->editintro ); - if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) { + if ( $this->isPageExistingAndViewable( $title, $this->context->getUser() ) ) { // Added using template syntax, to take 's into account. $this->context->getOutput()->addWikiTextAsContent( '
{{:' . $title->getFullText() . '}}
', @@ -2933,7 +2954,7 @@ ERROR; } if ( !$this->mTitle->isUserConfigPage() ) { - $out->addHTML( self::getEditToolbar( $this->mTitle ) ); + $out->addHTML( self::getEditToolbar() ); } if ( $this->blankArticle ) { @@ -4100,10 +4121,9 @@ ERROR; /** * Allow extensions to provide a toolbar. * - * @param Title|null $title Title object for the page being edited (optional) * @return string|null */ - public static function getEditToolbar( $title = null ) { + public static function getEditToolbar() { $startingToolbar = '
'; $toolbar = $startingToolbar; @@ -4359,33 +4379,6 @@ ERROR; $out->addReturnTo( $this->getContextTitle(), [ 'action' => 'edit' ] ); } - /** - * Filter an input field through a Unicode de-armoring process if it - * came from an old browser with known broken Unicode editing issues. - * - * @deprecated since 1.30, does nothing - * - * @param WebRequest $request - * @param string $field - * @return string - */ - protected function safeUnicodeInput( $request, $field ) { - return rtrim( $request->getText( $field ) ); - } - - /** - * Filter an output field through a Unicode armoring process if it is - * going to an old browser with known broken Unicode editing issues. - * - * @deprecated since 1.30, does nothing - * - * @param string $text - * @return string - */ - protected function safeUnicodeOutput( $text ) { - return $text; - } - /** * @since 1.29 */ @@ -4451,7 +4444,9 @@ ERROR; protected function addPageProtectionWarningHeaders() { $out = $this->context->getOutput(); if ( $this->mTitle->isProtected( 'edit' ) && - MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace() ) !== [ '' ] + MediaWikiServices::getInstance()->getNamespaceInfo()->getRestrictionLevels( + $this->mTitle->getNamespace() + ) !== [ '' ] ) { # Is the title semi-protected? if ( $this->mTitle->isSemiProtected() ) {