From b9e6daa3aaf029d8db8756766447463918d085df Mon Sep 17 00:00:00 2001 From: Reedy Date: Sat, 7 Apr 2012 22:47:06 +0100 Subject: [PATCH] Simplify and refactor out api code for getting title or page id Change-Id: I098dd36619fff3610be6894037220d3472b809d5 --- includes/api/ApiBase.php | 29 ++++++++++++++++++++++++ includes/api/ApiDelete.php | 25 +++++--------------- includes/api/ApiEditPage.php | 17 ++++---------- includes/api/ApiProtect.php | 20 +++------------- includes/api/ApiQueryCategoryMembers.php | 21 ++++------------- 5 files changed, 46 insertions(+), 66 deletions(-) diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index 458214ec3b..1103814143 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -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 * diff --git a/includes/api/ApiDelete.php b/includes/api/ApiDelete.php index b8ffff9f53..15c1f82312 100644 --- a/includes/api/ApiDelete.php +++ b/includes/api/ApiDelete.php @@ -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' ), diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php index 3153016223..290c5dff23 100644 --- a/includes/api/ApiEditPage.php +++ b/includes/api/ApiEditPage.php @@ -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' ), diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php index 596bc5ca71..57bf111c2e 100644 --- a/includes/api/ApiProtect.php +++ b/includes/api/ApiProtect.php @@ -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' ), diff --git a/includes/api/ApiQueryCategoryMembers.php b/includes/api/ApiQueryCategoryMembers.php index fb1237f9d6..7f0b827785 100644 --- a/includes/api/ApiQueryCategoryMembers.php +++ b/includes/api/ApiQueryCategoryMembers.php @@ -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' ), -- 2.20.1