+ $result->setIndexedTagName( $data, 'db' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendStatistics( $property ) {
+ global $wgDisableCounters;
+ $data = array();
+ $data['pages'] = intval( SiteStats::pages() );
+ $data['articles'] = intval( SiteStats::articles() );
+ if ( !$wgDisableCounters ) {
+ $data['views'] = intval( SiteStats::views() );
+ }
+ $data['edits'] = intval( SiteStats::edits() );
+ $data['images'] = intval( SiteStats::images() );
+ $data['users'] = intval( SiteStats::users() );
+ $data['activeusers'] = intval( SiteStats::activeUsers() );
+ $data['admins'] = intval( SiteStats::numberingroup( 'sysop' ) );
+ $data['jobs'] = intval( SiteStats::jobs() );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendUserGroups( $property, $numberInGroup ) {
+ global $wgGroupPermissions, $wgAddGroups, $wgRemoveGroups, $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf;
+
+ $data = array();
+ foreach ( $wgGroupPermissions as $group => $permissions ) {
+ $arr = array(
+ 'name' => $group,
+ 'rights' => array_keys( $permissions, true ),
+ );
+
+ if ( $numberInGroup ) {
+ global $wgAutopromote;
+
+ if ( $group == 'user' ) {
+ $arr['number'] = SiteStats::users();
+
+ // '*' and autopromote groups have no size
+ } elseif ( $group !== '*' && !isset( $wgAutopromote[$group] ) ) {
+ $arr['number'] = SiteStats::numberInGroup( $group );
+ }
+ }
+
+ $groupArr = array(
+ 'add' => $wgAddGroups,
+ 'remove' => $wgRemoveGroups,
+ 'add-self' => $wgGroupsAddToSelf,
+ 'remove-self' => $wgGroupsRemoveFromSelf
+ );
+
+ foreach ( $groupArr as $type => $rights ) {
+ if ( isset( $rights[$group] ) ) {
+ $arr[$type] = $rights[$group];
+ $this->getResult()->setIndexedTagName( $arr[$type], 'group' );
+ }
+ }
+
+ $this->getResult()->setIndexedTagName( $arr['rights'], 'permission' );
+ $data[] = $arr;
+ }
+
+ $this->getResult()->setIndexedTagName( $data, 'group' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendFileExtensions( $property ) {
+ global $wgFileExtensions;
+
+ $data = array();
+ foreach ( $wgFileExtensions as $ext ) {
+ $data[] = array( 'ext' => $ext );
+ }
+ $this->getResult()->setIndexedTagName( $data, 'fe' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendExtensions( $property ) {
+ global $wgExtensionCredits;
+ $data = array();
+ foreach ( $wgExtensionCredits as $type => $extensions ) {
+ foreach ( $extensions as $ext ) {
+ $ret = array();
+ $ret['type'] = $type;
+ if ( isset( $ext['name'] ) ) {
+ $ret['name'] = $ext['name'];
+ }
+ if ( isset( $ext['description'] ) ) {
+ $ret['description'] = $ext['description'];
+ }
+ if ( isset( $ext['descriptionmsg'] ) ) {
+ // Can be a string or array( key, param1, param2, ... )
+ if ( is_array( $ext['descriptionmsg'] ) ) {
+ $ret['descriptionmsg'] = $ext['descriptionmsg'][0];
+ $ret['descriptionmsgparams'] = array_slice( $ext['descriptionmsg'], 1 );
+ $this->getResult()->setIndexedTagName( $ret['descriptionmsgparams'], 'param' );
+ } else {
+ $ret['descriptionmsg'] = $ext['descriptionmsg'];
+ }
+ }
+ if ( isset( $ext['author'] ) ) {
+ $ret['author'] = is_array( $ext['author'] ) ?
+ implode( ', ', $ext['author' ] ) : $ext['author'];
+ }
+ if ( isset( $ext['url'] ) ) {
+ $ret['url'] = $ext['url'];
+ }
+ if ( isset( $ext['version'] ) ) {
+ $ret['version'] = $ext['version'];
+ } elseif ( isset( $ext['svn-revision'] ) &&
+ preg_match( '/\$(?:Rev|LastChangedRevision|Revision): *(\d+)/',
+ $ext['svn-revision'], $m ) )
+ {
+ $ret['version'] = 'r' . $m[1];
+ }
+ $data[] = $ret;
+ }
+ }
+
+ $this->getResult()->setIndexedTagName( $data, 'ext' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+
+ protected function appendRightsInfo( $property ) {
+ global $wgRightsPage, $wgRightsUrl, $wgRightsText;
+ $title = Title::newFromText( $wgRightsPage );
+ $url = $title ? $title->getFullURL() : $wgRightsUrl;
+ $text = $wgRightsText;
+ if ( !$text && $title ) {
+ $text = $title->getPrefixedText();
+ }
+
+ $data = array(
+ 'url' => $url ? $url : '',
+ 'text' => $text ? $text : ''
+ );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function appendLanguages( $property ) {
+ $data = array();
+ foreach ( Language::getLanguageNames() as $code => $name ) {
+ $lang = array( 'code' => $code );
+ ApiResult::setContent( $lang, $name );
+ $data[] = $lang;
+ }
+ $this->getResult()->setIndexedTagName( $data, 'lang' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function appendSkins( $property ) {
+ $data = array();
+ foreach ( Skin::getSkinNames() as $name => $displayName ) {
+ $skin = array( 'code' => $name );
+ ApiResult::setContent( $skin, $displayName );
+ $data[] = $skin;
+ }
+ $this->getResult()->setIndexedTagName( $data, 'skin' );
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+