// Get parameters
$params = $this->extractRequestParams();
- // No easy way to say that text & title are allowed together while the
- // rest aren't, so just do it in two calls.
+ // No easy way to say that text and title or revid are allowed together
+ // while the rest aren't, so just do it in three calls.
$this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'text' );
$this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'title' );
+ $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'revid' );
$text = $params['text'];
$title = $params['title'];
if ( !$titleObj || $titleObj->isExternal() ) {
$this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $title ) ] );
}
+ $revid = $params['revid'];
+ if ( $revid !== null ) {
+ $rev = Revision::newFromId( $revid );
+ if ( !$rev ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $revid ] );
+ }
+ $pTitleObj = $titleObj;
+ $titleObj = $rev->getTitle();
+ if ( $titleProvided ) {
+ if ( !$titleObj->equals( $pTitleObj ) ) {
+ $this->addWarning( [ 'apierror-revwrongpage', $rev->getId(),
+ wfEscapeWikiText( $pTitleObj->getPrefixedText() ) ] );
+ }
+ } else {
+ // Consider the title derived from the revid as having
+ // been provided.
+ $titleProvided = true;
+ }
+ }
$wgTitle = $titleObj;
if ( $titleObj->canExist() ) {
$pageObj = WikiPage::factory( $titleObj );
if ( !$textProvided ) {
if ( $titleProvided && ( $prop || $params['generatexml'] ) ) {
- $this->addWarning( 'apiwarn-parse-titlewithouttext' );
+ if ( $revid !== null ) {
+ $this->addWarning( 'apiwarn-parse-revidwithouttext' );
+ } else {
+ $this->addWarning( 'apiwarn-parse-titlewithouttext' );
+ }
}
// Prevent warning from ContentHandler::makeContent()
$text = '';
// Not cached (save or load)
if ( $params['pst'] ) {
- $p_result = $this->pstContent->getParserOutput( $titleObj, null, $popts );
+ $p_result = $this->pstContent->getParserOutput( $titleObj, $revid, $popts );
} else {
- $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
+ $p_result = $this->content->getParserOutput( $titleObj, $revid, $popts );
}
}
} else {
$result_array['headitems'] = $this->formatHeadItems( $p_result->getHeadItems() );
}
- $this->addDeprecation( 'apiwarn-deprecation-parse-headitems', 'action=parse&prop=headitems' );
}
if ( isset( $prop['headhtml'] ) ) {
'text' => [
ApiBase::PARAM_TYPE => 'text',
],
+ 'revid' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ],
'summary' => null,
'page' => null,
'pageid' => [
'sections',
'revid',
'displaytitle',
- 'headitems',
'headhtml',
'modules',
'jsconfigvars',
'limitreportdata',
'limitreporthtml',
'parsetree',
- 'parsewarnings'
+ 'parsewarnings',
+ 'headitems',
],
ApiBase::PARAM_HELP_MSG_PER_VALUE => [
'parsetree' => [ 'apihelp-parse-paramvalue-prop-parsetree', CONTENT_MODEL_WIKITEXT ],
],
+ ApiBase::PARAM_DEPRECATED_VALUES => [
+ 'headitems' => 'apiwarn-deprecation-parse-headitems',
+ ],
],
'wrapoutputclass' => 'mw-parser-output',
'pst' => false,