X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryPageProps.php;h=de1df347701360d034f65f9046d867be60d91114;hb=92d93c5d6dc6845600bd78ad668cfd9bbb1ac009;hp=1f992f8ff5631fc522e387a4be9ce5939aa71961;hpb=012248fc5a7d6d0257df1a0feadbda5ae4a477e2;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryPageProps.php b/includes/api/ApiQueryPageProps.php index 1f992f8ff5..de1df34770 100644 --- a/includes/api/ApiQueryPageProps.php +++ b/includes/api/ApiQueryPageProps.php @@ -40,63 +40,40 @@ class ApiQueryPageProps extends ApiQueryBase { public function execute() { # Only operate on existing pages $pages = $this->getPageSet()->getGoodTitles(); - if ( !count( $pages ) ) { - # Nothing to do - return; - } $this->params = $this->extractRequestParams(); - - $this->addTables( 'page_props' ); - $this->addFields( array( 'pp_page', 'pp_propname', 'pp_value' ) ); - $this->addWhereFld( 'pp_page', array_keys( $pages ) ); - if ( $this->params['continue'] ) { - $this->addWhere( 'pp_page >=' . intval( $this->params['continue'] ) ); - } - - if ( $this->params['prop'] ) { - $this->addWhereFld( 'pp_propname', $this->params['prop'] ); + $continueValue = intval( $this->params['continue'] ); + $this->dieContinueUsageIf( strval( $continueValue ) !== $this->params['continue'] ); + $filteredPages = []; + foreach ( $pages as $id => $page ) { + if ( $id >= $continueValue ) { + $filteredPages[$id] = $page; + } + } + $pages = $filteredPages; } - # Force a sort order to ensure that properties are grouped by page - # But only if pp_page is not constant in the WHERE clause. - if ( count( $pages ) > 1 ) { - $this->addOption( 'ORDER BY', 'pp_page' ); + if ( !count( $pages ) ) { + # Nothing to do + return; } - $res = $this->select( __METHOD__ ); - $currentPage = 0; # Id of the page currently processed - $props = array(); + $pageProps = PageProps::getInstance(); $result = $this->getResult(); + if ( $this->params['prop'] ) { + $propnames = $this->params['prop']; + $properties = $pageProps->getProperties( $pages, $propnames ); + } else { + $properties = $pageProps->getAllProperties( $pages ); + } - foreach ( $res as $row ) { - if ( $currentPage != $row->pp_page ) { - # Different page than previous row, so add the properties to - # the result and save the new page id - - if ( $currentPage ) { - if ( !$this->addPageProps( $result, $currentPage, $props ) ) { - # addPageProps() indicated that the result did not fit - # so stop adding data. Reset props so that it doesn't - # get added again after loop exit - - $props = array(); - break; - } - - $props = array(); - } + ksort( $properties ); - $currentPage = $row->pp_page; + foreach ( $properties as $page => $props ) { + if ( !$this->addPageProps( $result, $page, $props ) ) { + break; } - - $props[$row->pp_propname] = $row->pp_value; - } - - if ( count( $props ) ) { - # Add any remaining properties to the results - $this->addPageProps( $result, $currentPage, $props ); } } @@ -111,7 +88,7 @@ class ApiQueryPageProps extends ApiQueryBase { */ private function addPageProps( $result, $page, $props ) { ApiResult::setArrayType( $props, 'assoc' ); - $fit = $result->addValue( array( 'query', 'pages', $page ), 'pageprops', $props ); + $fit = $result->addValue( [ 'query', 'pages', $page ], 'pageprops', $props ); if ( !$fit ) { $this->setContinueEnumParameter( 'continue', $page ); @@ -125,21 +102,21 @@ class ApiQueryPageProps extends ApiQueryBase { } public function getAllowedParams() { - return array( - 'continue' => array( + return [ + 'continue' => [ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue', - ), - 'prop' => array( + ], + 'prop' => [ ApiBase::PARAM_ISMULTI => true, - ), - ); + ], + ]; } protected function getExamplesMessages() { - return array( + return [ 'action=query&prop=pageprops&titles=Main%20Page|MediaWiki' => 'apihelp-query+pageprops-example-simple', - ); + ]; } public function getHelpUrls() {