# checking, etc.
if ( 'initial' == $this->formtype || $this->firsttime ) {
if ( $this->initialiseForm() === false ) {
- $this->noSuchSectionPage();
+ $out = $this->context->getOutput();
+ if ( $out->getRedirect() === '' ) { // mcrundo hack redirects, don't override it
+ $this->noSuchSectionPage();
+ }
return;
}
$this->sectiontitle = $request->getVal( 'preloadtitle' );
// Once wpSummary isn't being use for setting section titles, we should delete this.
$this->summary = $request->getVal( 'preloadtitle' );
- } elseif ( $this->section != 'new' && $request->getVal( 'summary' ) ) {
+ } elseif ( $this->section != 'new' && $request->getVal( 'summary' ) !== '' ) {
$this->summary = $request->getText( 'summary' );
if ( $this->summary !== '' ) {
$this->hasPresetSummary = true;
!$oldrev->isDeleted( Revision::DELETED_TEXT )
) {
if ( WikiPage::hasDifferencesOutsideMainSlot( $undorev, $oldrev ) ) {
- // Cannot yet undo edits that involve anything other the main slot.
- $undoMsg = 'main-slot-only';
+ // Hack for undo while EditPage can't handle multi-slot editing
+ $this->context->getOutput()->redirect( $this->mTitle->getFullURL( [
+ 'action' => 'mcrundo',
+ 'undo' => $undo,
+ 'undoafter' => $undoafter,
+ ] ) );
+ return false;
} else {
$content = $this->page->getUndoContent( $undorev, $oldrev );
if ( $this->summary === '' ) {
$cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
return $this->context->msg( 'newsectionsummary' )
- ->rawParams( $cleanSectionTitle )->inContentLanguage()->text();
+ ->plaintextParams( $cleanSectionTitle )->inContentLanguage()->text();
}
} elseif ( $this->summary !== '' ) {
$sectionanchor = $this->guessSectionName( $this->summary );
# in the revision summary.
$cleanSummary = $wgParser->stripSectionName( $this->summary );
return $this->context->msg( 'newsectionsummary' )
- ->rawParams( $cleanSummary )->inContentLanguage()->text();
+ ->plaintextParams( $cleanSummary )->inContentLanguage()->text();
}
return $this->summary;
}
$this->autoSumm = md5( '' );
}
- $autosumm = $this->autoSumm ?: md5( $this->summary );
+ $autosumm = $this->autoSumm !== '' ? $this->autoSumm : md5( $this->summary );
$out->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
$out->addHTML( Html::hidden( 'oldid', $this->oldid ) );
/**
* Get the last log record of this page being deleted, if ever. This is
- * used to detect whether a delete occured during editing.
+ * used to detect whether a delete occurred during editing.
* @return bool|stdClass
*/
protected function getLastDelete() {
$parserOptions->setIsPreview( true );
$parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
$parserOptions->enableLimitReport();
+
+ // XXX: we could call $parserOptions->setCurrentRevisionCallback here to force the
+ // current revision to be null during PST, until setupFakeRevision is called on
+ // the ParserOptions. Currently, we rely on Parser::getRevisionObject() to ignore
+ // existing revisions in preview mode.
+
return $parserOptions;
}
protected function doPreviewParse( Content $content ) {
$user = $this->context->getUser();
$parserOptions = $this->getPreviewParserOptions();
+
+ // NOTE: preSaveTransform doesn't have a fake revision to operate on.
+ // Parser::getRevisionObject() will return null in preview mode,
+ // causing the context user to be used for {{subst:REVISIONUSER}}.
+ // XXX: Alternatively, we could also call setupFakeRevision() a second time:
+ // once before PST with $content, and then after PST with $pstContent.
$pstContent = $content->preSaveTransform( $this->mTitle, $user, $parserOptions );
- $scopedCallback = $parserOptions->setupFakeRevision(
- $this->mTitle, $pstContent, $user );
+ $scopedCallback = $parserOptions->setupFakeRevision( $this->mTitle, $pstContent, $user );
$parserOutput = $pstContent->getParserOutput( $this->mTitle, null, $parserOptions );
ScopedCallback::consume( $scopedCallback );
return [