* @file
*/
+use MediaWiki\Block\DatabaseBlock;
use MediaWiki\EditPage\TextboxBuilder;
use MediaWiki\EditPage\TextConflictHelper;
use MediaWiki\Logger\LoggerFactory;
$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
if ( $this->context->getUser()->getBlock() ) {
// track block with a cookie if it doesn't exists already
- $this->context->getUser()->trackBlockWithCookie();
+ MediaWikiServices::getInstance()->getBlockManager()
+ ->trackBlockWithCookie( $this->context->getUser() );
// Auto-block user's IP if the account was "hard" blocked
if ( !wfReadOnly() ) {
$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();
}
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();
}
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.
*
}
}
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
+
$changingContentModel = false;
if ( $this->contentModel !== $this->mTitle->getContentModel() ) {
if ( !$config->get( 'ContentHandlerUseDB' ) ) {
// 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;
}
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" );
}
} elseif ( $namespace == NS_FILE ) {
# Show a hint to shared repo
- $file = wfFindFile( $this->mTitle );
+ $file = MediaWikiServices::getInstance()->getRepoGroup()->findFile( $this->mTitle );
if ( $file && !$file->isLocal() ) {
$descUrl = $file->getDescriptionUrl();
# there must be a description url to show a hint to shared repo
$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( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
[ '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
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 <noinclude>'s into account.
$this->context->getOutput()->addWikiTextAsContent(
'<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>',
if ( !Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
return null;
- };
+ }
// Don't add a pointless `<div>` to the page unless a hook caller populated it
return ( $toolbar === $startingToolbar ) ? null : $toolbar;
}