throw new InvalidArgumentException( '$parentId should match the parent of $revision' );
}
- if ( $revision
- && $user
- && $revision->getUser( RevisionRecord::RAW )->getName() !== $user->getName()
- ) {
- throw new InvalidArgumentException( '$user should match the author of $revision' );
- }
-
+ // NOTE: For null revisions, $user may be different from $this->revision->getUser
+ // and also from $revision->getUser.
+ // But $user should always match $this->user.
if ( $user && $this->user && $user->getName() !== $this->user->getName() ) {
return false;
}
return false;
}
- if ( $revision && !$user ) {
- $user = $revision->getUser( RevisionRecord::RAW );
- }
-
if ( $this->pageState
&& $revision
&& $revision->getParentId() !== null
return false;
}
- if ( $this->revision
- && $user
- && $this->revision->getUser( RevisionRecord::RAW )
- && $this->revision->getUser( RevisionRecord::RAW )->getName() !== $user->getName()
- ) {
- return false;
- }
-
- if ( $revision
- && $this->user
- && $this->revision->getUser( RevisionRecord::RAW )
- && $revision->getUser( RevisionRecord::RAW )->getName() !== $this->user->getName()
- ) {
- return false;
- }
-
// NOTE: this check is the primary reason for having the $this->slotsUpdate field!
if ( $this->slotsUpdate
&& $slotsUpdate
$stashedEdit = ApiStashEdit::checkCache( $title, $mainContent, $legacyUser );
}
- if ( $stashedEdit ) {
- /** @var ParserOutput $output */
- $output = $stashedEdit->output;
-
- // TODO: this should happen when stashing the ParserOutput, not now!
- $output->setCacheTime( $stashedEdit->timestamp );
-
- // TODO: MCR: allow output for all slots to be stashed.
- $this->canonicalParserOutput = $output;
- }
-
$userPopts = ParserOptions::newFromUserAndLang( $user, $this->contLang );
Hooks::run( 'ArticlePrepareTextForEdit', [ $wikiPage, $userPopts ] );
} else {
$this->parentRevision = $parentRevision;
}
+
+ $renderHints = [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ];
+
+ if ( $stashedEdit ) {
+ /** @var ParserOutput $output */
+ $output = $stashedEdit->output;
+
+ // TODO: this should happen when stashing the ParserOutput, not now!
+ $output->setCacheTime( $stashedEdit->timestamp );
+
+ $renderHints['known-revision-output'] = $output;
+ }
+
+ // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
+ // NOTE: the revision is either new or current, so we can bypass audience checks.
+ $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
+ $this->revision,
+ null,
+ null,
+ $renderHints
+ );
}
/**
* @return RenderedRevision
*/
public function getRenderedRevision() {
- if ( !$this->renderedRevision ) {
- $this->assertPrepared( __METHOD__ );
-
- // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
- // NOTE: the revision is either new or current, so we can bypass audience checks.
- $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
- $this->revision,
- null,
- null,
- [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ]
- );
- }
+ $this->assertPrepared( __METHOD__ );
return $this->renderedRevision;
}
// Prune any output that depends on the revision ID.
if ( $this->renderedRevision ) {
$this->renderedRevision->updateRevision( $revision );
+ } else {
+
+ // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
+ // NOTE: the revision is either new or current, so we can bypass audience checks.
+ $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
+ $this->revision,
+ null,
+ null,
+ [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ]
+ );
+
+ // XXX: Since we presumably are dealing with the current revision,
+ // we could try to get the ParserOutput from the parser cache.
}
// TODO: optionally get ParserOutput from the ParserCache here.