Simplify and refactor out api code for getting title or page id

Change-Id: I098dd36619fff3610be6894037220d3472b809d5
This commit is contained in:
Reedy 2012-04-07 22:47:06 +01:00
parent 8685e3adec
commit b9e6daa3aa
5 changed files with 46 additions and 66 deletions

View file

@ -698,6 +698,35 @@ abstract class ApiBase extends ContextSource {
);
}
/**
* @param $params array
* @return Title
*/
public function getTitleOrPageId( $params ) {
$this->requireOnlyOneParameter( $params, 'title', 'pageid' );
$titleObj = null;
if ( isset( $params['title'] ) ) {
$titleObj = Title::newFromText( $params['title'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
} elseif ( isset( $params['pageid'] ) ) {
$titleObj = Title::newFromID( $params['pageid'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
}
}
return $titleObj;
}
/**
* @return array
*/
public function getTitleOrPageIdErrorMessage( ) {
return $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) );
}
/**
* Callback function used in requireOnlyOneParameter to check whether reequired parameters are set
*

View file

@ -46,24 +46,11 @@ class ApiDelete extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
$this->requireOnlyOneParameter( $params, 'title', 'pageid' );
if ( isset( $params['title'] ) ) {
$titleObj = Title::newFromText( $params['title'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
$pageObj = WikiPage::factory( $titleObj );
$pageObj->loadPageData( 'fromdbmaster' );
if ( !$pageObj->exists() ) {
$this->dieUsageMsg( 'notanarticle' );
}
} elseif ( isset( $params['pageid'] ) ) {
$pageObj = WikiPage::newFromID( $params['pageid'] );
if ( !$pageObj ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
}
$titleObj = $pageObj->getTitle();
$titleObj = $this->getTitleOrPageId( $params );
$pageObj = WikiPage::factory( $titleObj );
$pageObj->loadPageData( 'fromdbmaster' );
if ( !$pageObj->exists() ) {
$this->dieUsageMsg( 'notanarticle' );
}
$reason = ( isset( $params['reason'] ) ? $params['reason'] : null );
@ -241,7 +228,7 @@ class ApiDelete extends ApiBase {
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
$this->getTitleOrPageIdErrorMessage(),
array(
array( 'invalidtitle', 'title' ),
array( 'nosuchpageid', 'pageid' ),

View file

@ -48,18 +48,9 @@ class ApiEditPage extends ApiBase {
$this->dieUsageMsg( 'missingtext' );
}
$this->requireOnlyOneParameter( $params, 'title', 'pageid' );
if ( isset( $params['title'] ) ) {
$titleObj = Title::newFromText( $params['title'] );
if ( !$titleObj || $titleObj->isExternal() ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
} elseif ( isset( $params['pageid'] ) ) {
$titleObj = Title::newFromID( $params['pageid'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
}
$titleObj = $this->getTitleOrPageId( $params );
if ( $titleObj->isExternal() ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
$apiResult = $this->getResult();
@ -378,7 +369,7 @@ class ApiEditPage extends ApiBase {
global $wgMaxArticleSize;
return array_merge( parent::getPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
$this->getTitleOrPageIdErrorMessage(),
array(
array( 'nosuchpageid', 'pageid' ),
array( 'missingtext' ),

View file

@ -37,22 +37,8 @@ class ApiProtect extends ApiBase {
global $wgRestrictionLevels;
$params = $this->extractRequestParams();
$this->requireOnlyOneParameter( $params, 'title', 'pageid' );
if ( isset( $params['title'] ) ) {
$titleObj = Title::newFromText( $params['title'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
$pageObj = WikiPage::factory( $titleObj );
$pageObj->loadPageData( 'fromdbmaster' );
} elseif ( isset( $params['pageid'] ) ) {
$pageObj = WikiPage::newFromID( $params['pageid'] );
if ( !$pageObj ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
}
$titleObj = $pageObj->getTitle();
}
$titleObj = $this->getTitleOrPageId( $params );
$pageObj = WikiPage::factory( $titleObj );
$errors = $titleObj->getUserPermissionsErrors( 'protect', $this->getUser() );
if ( $errors ) {
@ -204,7 +190,7 @@ class ApiProtect extends ApiBase {
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
$this->getTitleOrPageIdErrorMessage(),
array(
array( 'invalidtitle', 'title' ),
array( 'nosuchpageid', 'pageid' ),

View file

@ -54,22 +54,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
private function run( $resultPageSet = null ) {
$params = $this->extractRequestParams();
$this->requireOnlyOneParameter( $params, 'title', 'pageid' );
if ( isset( $params['title'] ) ) {
$categoryTitle = Title::newFromText( $params['title'] );
if ( is_null( $categoryTitle ) || $categoryTitle->getNamespace() != NS_CATEGORY ) {
$this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
}
} elseif( isset( $params['pageid'] ) ) {
$categoryTitle = Title::newFromID( $params['pageid'] );
if ( !$categoryTitle ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
} elseif ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
$this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
}
$categoryTitle = $this->getTitleOrPageId( $params );
if ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
$this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
}
$prop = array_flip( $params['prop'] );
@ -383,7 +370,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
$this->getTitleOrPageIdErrorMessage(),
array(
array( 'code' => 'invalidcategory', 'info' => 'The category name you entered is not valid' ),
array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),