From: daniel Date: Wed, 14 Nov 2012 11:17:13 +0000 (+0100) Subject: When returning rev content, always include model. X-Git-Tag: 1.31.0-rc.0~21631^2 X-Git-Url: http://git.cyclocoop.org/%28?a=commitdiff_plain;h=cef8005d3aa894b069ba659621c786e0255e2a8f;p=lhc%2Fweb%2Fwiklou.git When returning rev content, always include model. query=revisions can be used with rvprop=content to retrieve the content of revisions. The contentmodel should always be included with the content (just like the contenformat is), so the client is able to interpret the structure contained in the content blob. Change-Id: I67cf48f905ff83a86992e1a54f7ad0feaf2b2c94 --- diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php index ad40a6486a..4f08605f7b 100644 --- a/includes/api/ApiQueryRevisions.php +++ b/includes/api/ApiQueryRevisions.php @@ -546,9 +546,9 @@ class ApiQueryRevisions extends ApiQueryBase { if ( $text === null ) { $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat(); + $model = $content->getModel(); if ( !$content->isSupportedFormat( $format ) ) { - $model = $content->getModel(); $name = $title->getPrefixedDBkey(); $this->dieUsage( "The requested format {$this->contentFormat} is not supported ". @@ -556,7 +556,11 @@ class ApiQueryRevisions extends ApiQueryBase { } $text = $content->serialize( $format ); + + // always include format and model. + // Format is needed to deserialize, model is needed to interpret. $vals['contentformat'] = $format; + $vals['contentmodel'] = $model; } if ( $text !== false ) { diff --git a/tests/phpunit/includes/api/ApiQueryRevisionsTest.php b/tests/phpunit/includes/api/ApiQueryRevisionsTest.php new file mode 100644 index 0000000000..28dcb97668 --- /dev/null +++ b/tests/phpunit/includes/api/ApiQueryRevisionsTest.php @@ -0,0 +1,41 @@ +doEdit( 'Some text', 'inserting content' ); + + $apiResult = $this->doApiRequest( array( + 'action' => 'query', + 'prop' => 'revisions', + 'titles' => $pageName, + 'rvprop' => 'content', + ) ); + $this->assertArrayHasKey( 'query', $apiResult[0] ); + $this->assertArrayHasKey( 'pages', $apiResult[0]['query'] ); + foreach( $apiResult[0]['query']['pages'] as $page ) { + $this->assertArrayHasKey( 'revisions', $page ); + foreach( $page['revisions'] as $revision ) { + $this->assertArrayHasKey( 'contentformat', $revision, + 'contentformat should be included when asking content so' + . ' client knows how to interpretate it' + ); + $this->assertArrayHasKey( 'contentmodel', $revision, + 'contentmodel should be included when asking content so' + . ' client knows how to interpretate it' + ); + } + } + } +}