* @file
*/
+use MediaWiki\Block\DatabaseBlock;
use MediaWiki\EditPage\TextboxBuilder;
use MediaWiki\EditPage\TextConflictHelper;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\RevisionRecord;
use Wikimedia\ScopedCallback;
/**
$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() ) {
# the revisions exist and they were not deleted.
# Otherwise, $content will be left as-is.
if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
- !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
- !$oldrev->isDeleted( Revision::DELETED_TEXT )
+ !$undorev->isDeleted( RevisionRecord::DELETED_TEXT ) &&
+ !$oldrev->isDeleted( RevisionRecord::DELETED_TEXT )
) {
if ( WikiPage::hasDifferencesOutsideMainSlot( $undorev, $oldrev )
|| !$this->isSupportedContentModel( $oldrev->getContentModel() )
}
if ( $undoMsg === null ) {
- $oldContent = $this->page->getContent( Revision::RAW );
+ $oldContent = $this->page->getContent( RevisionRecord::RAW );
$popts = ParserOptions::newFromUserAndLang(
$user, MediaWikiServices::getInstance()->getContentLanguage() );
$newContent = $content->preSaveTransform( $this->mTitle, $user, $popts );
$handler = ContentHandler::getForModelID( $this->contentModel );
return $handler->makeEmptyContent();
}
- $content = $revision->getContent( Revision::FOR_THIS_USER, $user );
+ $content = $revision->getContent( RevisionRecord::FOR_THIS_USER, $user );
return $content;
}
*/
protected function getCurrentContent() {
$rev = $this->page->getRevision();
- $content = $rev ? $rev->getContent( Revision::RAW ) : null;
+ $content = $rev ? $rev->getContent( RevisionRecord::RAW ) : null;
if ( $content === false || $content === null ) {
$handler = ContentHandler::getForModelID( $this->contentModel );
$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();
}
}
$parserOptions = ParserOptions::newFromUser( $user );
- $content = $page->getContent( Revision::RAW );
+ $content = $page->getContent( RevisionRecord::RAW );
if ( !$content ) {
// TODO: somehow show a warning to the user!
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 ( $revision ) {
// Let sysop know that this will make private content public if saved
- if ( !$revision->userCan( Revision::DELETED_TEXT, $user ) ) {
+ if ( !$revision->userCan( RevisionRecord::DELETED_TEXT, $user ) ) {
$out->wrapWikiMsg(
"<div class='mw-warning plainlinks'>\n$1\n</div>\n",
'rev-deleted-text-permission'
);
- } elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+ } elseif ( $revision->isDeleted( RevisionRecord::DELETED_TEXT ) ) {
$out->wrapWikiMsg(
"<div class='mw-warning plainlinks'>\n$1\n</div>\n",
'rev-deleted-text-view'
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;
}