use MediaWiki\EditPage\TextConflictHelper;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\RevisionRecord;
use Wikimedia\ScopedCallback;
/**
wfDebug( __METHOD__ . ": User can't edit\n" );
if ( $this->context->getUser()->getBlock() ) {
- // track block with a cookie if it doesn't exists already
- $this->context->getUser()->trackBlockWithCookie();
+ // Track block with a cookie if it doesn't exist already
+ MediaWikiServices::getInstance()->getBlockManager()
+ ->trackBlockWithCookie( $this->context->getUser() );
// Auto-block user's IP if the account was "hard" blocked
if ( !wfReadOnly() ) {
# checking, etc.
if ( $this->formtype == 'initial' || $this->firsttime ) {
if ( $this->initialiseForm() === false ) {
- $out = $this->context->getOutput();
- if ( $out->getRedirect() === '' ) { // mcrundo hack redirects, don't override it
- $this->noSuchSectionPage();
- }
return;
}
* @return string|null
*/
protected function importContentFormData( &$request ) {
- return; // Don't do anything, EditPage already extracted wpTextbox1
+ return null; // Don't do anything, EditPage already extracted wpTextbox1
}
/**
$content = $this->getContentObject( false ); # TODO: track content object?!
if ( $content === false ) {
+ $out = $this->context->getOutput();
+ if ( $out->getRedirect() === '' ) { // mcrundo hack redirects, don't override it
+ $this->noSuchSectionPage();
+ }
+ return false;
+ }
+
+ if ( !$this->isSupportedContentModel( $content->getModel() ) ) {
+ $modelMsg = $this->getContext()->msg( 'content-model-' . $content->getModel() );
+ $modelName = $modelMsg->exists() ? $modelMsg->text() : $content->getModel();
+
+ $out = $this->context->getOutput();
+ $out->showErrorPage(
+ 'modeleditnotsupported-title',
+ 'modeleditnotsupported-text',
+ $modelName
+ );
return false;
}
+
$this->textbox1 = $this->toEditText( $content );
$user = $this->context->getUser();
# 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 );
}
$parserOptions = ParserOptions::newFromUser( $user );
- $content = $page->getContent( Revision::RAW );
+ $content = $page->getContent( RevisionRecord::RAW );
if ( !$content ) {
// TODO: somehow show a warning to the user!
// This is needed since PageUpdater no longer checks these rights!
// Allow bots to exempt some edits from bot flagging
- $bot = $this->context->getUser()->isAllowed( 'bot' ) && $this->bot;
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
+ $bot = $permissionManager->userHasRight( $this->context->getUser(), 'bot' ) && $this->bot;
$status = $this->internalAttemptSave( $resultDetails, $bot );
Hooks::run( 'EditPage::attemptSave:after', [ $this, $status, $resultDetails ] );
} elseif ( !$status->isOK() ) {
# ...or the hook could be expecting us to produce an error
// FIXME this sucks, we should just use the Status object throughout
+ if ( !$status->getErrors() ) {
+ // Provide a fallback error message if none was set
+ $status->fatal( 'hookaborted' );
+ }
$this->hookError = $this->formatStatusErrors( $status );
- $status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR_EXPECTED;
return false;
}
public function internalAttemptSave( &$result, $bot = false ) {
$status = Status::newGood();
$user = $this->context->getUser();
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
if ( !Hooks::run( 'EditPage::attemptSave', [ $this ] ) ) {
wfDebug( "Hook 'EditPage::attemptSave' aborted article saving\n" );
# Check image redirect
if ( $this->mTitle->getNamespace() == NS_FILE &&
$textbox_content->isRedirect() &&
- !$user->isAllowed( 'upload' )
+ !$permissionManager->userHasRight( $user, 'upload' )
) {
$code = $user->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
$status->setResult( false, $code );
return $status;
}
- if ( $user->isBlockedFrom( $this->mTitle ) ) {
+ if ( $permissionManager->isBlockedFrom( $user, $this->mTitle ) ) {
// Auto-block user's IP if the account was "hard" blocked
if ( !wfReadOnly() ) {
$user->spreadAnyEditBlock();
return $status;
}
- if ( !$user->isAllowed( 'edit' ) ) {
+ if ( !$permissionManager->userHasRight( $user, 'edit' ) ) {
if ( $user->isAnon() ) {
$status->setResult( false, self::AS_READ_ONLY_PAGE_ANON );
return $status;
}
}
- $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
-
$changingContentModel = false;
if ( $this->contentModel !== $this->mTitle->getContentModel() ) {
if ( !$config->get( 'ContentHandlerUseDB' ) ) {
$status->fatal( 'editpage-cannot-use-custom-model' );
$status->value = self::AS_CANNOT_USE_CUSTOM_MODEL;
return $status;
- } elseif ( !$user->isAllowed( 'editcontentmodel' ) ) {
+ } elseif ( !$permissionManager->userHasRight( $user, 'editcontentmodel' ) ) {
$status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
return $status;
}
}
} 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
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;
}
* - 'legacy-name' (optional): short name for backwards-compatibility
* @param array $checked Array of checkbox name (matching the 'legacy-name') => bool,
* where bool indicates the checked status of the checkbox
- * @return array
+ * @return array[]
*/
public function getCheckboxesDefinition( $checked ) {
$checkboxes = [];
$user = $this->context->getUser();
// don't show the minor edit checkbox if it's a new page or section
- if ( !$this->isNew && $user->isAllowed( 'minoredit' ) ) {
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
+ if ( !$this->isNew && $permissionManager->userHasRight( $user, 'minoredit' ) ) {
$checkboxes['wpMinoredit'] = [
'id' => 'wpMinoredit',
'label-message' => 'minoredit',
protected function addPageProtectionWarningHeaders() {
$out = $this->context->getOutput();
if ( $this->mTitle->isProtected( 'edit' ) &&
- MediaWikiServices::getInstance()->getNamespaceInfo()->getRestrictionLevels(
- $this->mTitle->getNamespace()
+ MediaWikiServices::getInstance()->getPermissionManager()->getNamespaceRestrictionLevels(
+ $this->getTitle()->getNamespace()
) !== [ '' ]
) {
# Is the title semi-protected?