(bug 32498) Allow comparing pages using pageids
Change-Id: Ia2ab39e3b7b911f622aad96ca7b94ea7675c00ac
This commit is contained in:
parent
7a894d24df
commit
8e2b0d2b8d
2 changed files with 28 additions and 5 deletions
|
|
@ -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 ===
|
||||
|
||||
|
|
|
|||
|
|
@ -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.' ),
|
||||
) );
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue