extractRequestParams(); $this->props = array_flip( $params['prop'] ); $this->neededNames = isset( $params['names'] ) ? array_flip( $params['names'] ) : false; $this->getMain()->setCacheMode( 'public' ); $this->getList(); } private function getList() { $data = array(); $result = $this->getResult(); $gadgets = Gadget::loadStructuredList(); foreach ( $gadgets as $category => $list ) { if ( !$this->neededNames || isset( $this->neededNames[$category] ) ) { $row = array(); if ( isset( $this->props['name'] ) ) { $row['name'] = $category; } if ( $category !== "" ) { if ( isset( $this->props['desc'] ) ) { $row['desc'] = wfMessage( "gadget-section-$category" )->parse(); } if ( isset( $this->props['desc-raw'] ) ) { $row['desc-raw'] = wfMessage( "gadget-section-$category" )->plain(); } } if ( isset( $this->props['members'] ) ) { $row['members'] = count( $list ); } $data[] = $row; } } $result->setIndexedTagName( $data, 'category' ); $result->addValue( 'query', $this->getModuleName(), $data ); } public function getAllowedParams() { return array( 'prop' => array( ApiBase::PARAM_DFLT => 'name', ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_TYPE => array( 'name', 'desc', 'desc-raw', 'members', ), ), 'names' => array( ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_ISMULTI => true, ), ); } public function getDescription() { return 'Returns a list of gadget categories'; } public function getParamDescription() { return array( 'prop' => array( 'What gadget category information to get:', ' name - Internal category name', ' desc - Category description transformed into HTML (can be slow, use only if really needed)', ' desc-raw - Category description in raw wikitext', ' members - Number of gadgets in category', ), 'names' => 'Name(s) of gadgets to retrieve', ); } protected function getExamples() { $params = $this->getAllowedParams(); $allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] ); return array( 'Get a list of existing gadget categories:', ' api.php?action=query&list=gadgetcategories', 'Get all information about categories named "foo" and "bar":', " api.php?action=query&list=gadgetcategories&gcnames=foo|bar&gcprop=$allProps", ); } public function getVersion() { return __CLASS__ . ': $Id$'; } }