(bug 32498) Allow comparing pages using pageids

Change-Id: Ia2ab39e3b7b911f622aad96ca7b94ea7675c00ac
This commit is contained in:
Alex Monk 2012-04-08 00:30:54 +01:00
parent 7a894d24df
commit 8e2b0d2b8d
2 changed files with 28 additions and 5 deletions

View file

@ -85,6 +85,7 @@ production.
* (bug 31883) Limit of bkusers of list=blocks and titles of action=query is not documented in API help.
* (bug 32492) API now allows editing using pageid
* (bug 32497) API now allows changing of protection level using pageid
* (bug 32498) API now allows comparing pages using pageids
=== Languages updated in 1.20 ===

View file

@ -32,8 +32,8 @@ class ApiComparePages extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
$rev1 = $this->revisionOrTitle( $params['fromrev'], $params['fromtitle'] );
$rev2 = $this->revisionOrTitle( $params['torev'], $params['totitle'] );
$rev1 = $this->revisionOrTitleOrId( $params['fromrev'], $params['fromtitle'], $params['fromid'] );
$rev2 = $this->revisionOrTitleOrId( $params['torev'], $params['totitle'], $params['toid'] );
$de = new DifferenceEngine( $this->getContext(),
$rev1,
@ -46,10 +46,16 @@ class ApiComparePages extends ApiBase {
if ( isset( $params['fromtitle'] ) ) {
$vals['fromtitle'] = $params['fromtitle'];
}
if ( isset( $params['fromid'] ) ) {
$vals['fromid'] = $params['fromid'];
}
$vals['fromrevid'] = $rev1;
if ( isset( $params['totitle'] ) ) {
$vals['totitle'] = $params['totitle'];
}
if ( isset( $params['toid'] ) ) {
$vals['toid'] = $params['toid'];
}
$vals['torevid'] = $rev2;
$difftext = $de->getDiffBody();
@ -67,9 +73,10 @@ class ApiComparePages extends ApiBase {
/**
* @param $revision int
* @param $titleText string
* @param $titleId int
* @return int
*/
private function revisionOrTitle( $revision, $titleText ) {
private function revisionOrTitleOrId( $revision, $titleText, $titleId ) {
if( $revision ){
return $revision;
} elseif( $titleText ) {
@ -78,17 +85,29 @@ class ApiComparePages extends ApiBase {
$this->dieUsageMsg( array( 'invalidtitle', $titleText ) );
}
return $title->getLatestRevID();
} elseif ( $titleId ) {
$title = Title::newFromID( $titleId );
if( !$title ) {
$this->dieUsageMsg( array( 'nosuchpageid', $titleId ) );
}
return $title->getLatestRevID();
}
$this->dieUsage( 'inputneeded', 'A title or a revision number is needed for both the from and the to parameters' );
$this->dieUsage( 'inputneeded', 'A title, a page ID, or a revision number is needed for both the from and the to parameters' );
}
public function getAllowedParams() {
return array(
'fromtitle' => null,
'fromid' => array(
ApiBase::PARAM_TYPE => 'integer'
),
'fromrev' => array(
ApiBase::PARAM_TYPE => 'integer'
),
'totitle' => null,
'toid' => array(
ApiBase::PARAM_TYPE => 'integer'
),
'torev' => array(
ApiBase::PARAM_TYPE => 'integer'
),
@ -98,15 +117,17 @@ class ApiComparePages extends ApiBase {
public function getParamDescription() {
return array(
'fromtitle' => 'First title to compare',
'fromid' => 'First page ID to compare',
'fromrev' => 'First revision to compare',
'totitle' => 'Second title to compare',
'toid' => 'Second page ID to compare',
'torev' => 'Second revision to compare',
);
}
public function getDescription() {
return array(
'Get the difference between 2 pages',
'You must pass a revision number or a page title for each part (1 and 2)'
'You must pass a revision number or a page title or a page ID id for each part (1 and 2)'
);
}
@ -114,6 +135,7 @@ class ApiComparePages extends ApiBase {
return array_merge( parent::getPossibleErrors(), array(
array( 'code' => 'inputneeded', 'info' => 'A title or a revision is needed' ),
array( 'invalidtitle', 'title' ),
array( 'nosuchpageid', 'pageid' ),
array( 'code' => 'baddiff', 'info' => 'The diff cannot be retrieved. Maybe one or both revisions do not exist or you do not have permission to view them.' ),
) );
}