* (bug 9554) Extension-provided group name messages not used
authorRob Church <robchurch@users.mediawiki.org>
Wed, 11 Apr 2007 01:59:32 +0000 (01:59 +0000)
committerRob Church <robchurch@users.mediawiki.org>
Wed, 11 Apr 2007 01:59:32 +0000 (01:59 +0000)
* Clean up SpecialListusers::formatRow() a bit, make group link building a touch more efficient

RELEASE-NOTES
includes/SpecialListusers.php
includes/User.php

index 239319b..3bb7350 100644 (file)
@@ -310,6 +310,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * Fixed $wgFeedLimit
 * (bug 9270) Corrected help namespace name for Dutch Lower Saxon (nds-nl)
 * (bug 929, 4215) Expose "rcdays" user preference in Special:Preferences
+* (bug 9554) Extension-provided group name messages not used
 
 == Maintenance ==
 
index 543d041..39ac000 100644 (file)
@@ -80,33 +80,22 @@ class UsersPager extends AlphabeticPager {
                
        }
 
-       function formatRow($row) {
-               $userPage = Title::makeTitle(NS_USER, $row->user_name);
+       function formatRow( $row ) {
+               $userPage = Title::makeTitle( NS_USER, $row->user_name );
                $name = $this->getSkin()->makeLinkObj( $userPage, htmlspecialchars( $userPage->getText() ) );
-               $groups = array();
-               if ($row->numgroups > 1 || ( $this->requestedGroup and $row->numgroups == 1) ) {
-                       $dbr = wfGetDB(DB_SLAVE);
-                       $result = $dbr->select( 'user_groups', 'ug_group',
-                               array( 'ug_user' => $row->user_id ),
-                               'UsersPager::formatRow' );
-                       while ( $group = $dbr->fetchObject($result)) {
-                               $groups[$group->ug_group] = User::getGroupMember ( $group->ug_group );
-                       }
-                       $dbr->freeResult($result);
-               } elseif ($row->numgroups == 1 ) { // MAX hack inside query :)
-                       $groups[$row->singlegroup] = User::getGroupMember( $row->singlegroup );
-               }
-
-               if ( count($groups) > 0 ) {
-                       foreach( $groups as $group => $desc ) {
-                               $list[] = User::makeGroupLinkHTML( $group, $desc);
-                       }
-                       $groups = implode( ', ', $list);
+               
+               if( $row->numgroups > 1 || ( $this->requestedGroup && $row->numgroups == 1 ) ) {
+                       $list = array();
+                       foreach( self::getGroups( $row->user_id ) as $group )
+                               $list[] = self::buildGroupLink( $group );
+                       $groups = implode( ', ', $list );
+               } elseif( $row->numgroups == 1 ) {
+                       $groups = self::buildGroupLink( $row->singlegroup );
                } else {
-                       $groups ='';
+                       $groups = '';
                }
-               //$ulink = $skin->userLink( $result->user, $result->user_text ) . ' ' . $skin->userToolLinks( $result->user, $result->user_text );
-               return '<li>' . wfSpecialList ($name, $groups) .'</li>';
+               
+               return '<li>' . wfSpecialList( $name, $groups ) . '</li>';
        }
 
        function getBody() {
@@ -175,6 +164,38 @@ class UsersPager extends AlphabeticPager {
                        $query['username'] = $this->requestedUser;
                return $query;
        }
+       
+       /**
+        * Get a list of groups the specified user belongs to
+        *
+        * @param int $uid
+        * @return array
+        */
+       private static function getGroups( $uid ) {
+               $dbr = wfGetDB( DB_SLAVE );
+               $groups = array();
+               $res = $dbr->select( 'user_groups', 'ug_group', array( 'ug_user' => $uid ), __METHOD__ );
+               if( $res && $dbr->numRows( $res ) > 0 ) {
+                       while( $row = $dbr->fetchObject( $res ) )
+                               $groups[] = $row->ug_group;
+                       $dbr->freeResult( $res );
+               }
+               return $groups;
+       }       
+       
+       /**
+        * Format a link to a group description page
+        *
+        * @param string $group
+        * @return string
+        */
+       private static function buildGroupLink( $group ) {
+               static $cache = array();
+               if( !isset( $cache[$group] ) )
+                       $cache[$group] = User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) );
+               return $cache[$group];
+       }
+       
 }
 
 /**
index 8cdad6c..13158b9 100644 (file)
@@ -2463,13 +2463,12 @@ class User {
         * @static
         */
        static function getGroupName( $group ) {
+               MessageCache::loadAllMessages();
                $key = "group-$group";
                $name = wfMsg( $key );
-               if( $name == '' || wfEmptyMsg( $key, $name ) ) {
-                       return $group;
-               } else {
-                       return $name;
-               }
+               return $name = '' || wfEmptyMsg( $key, $name )
+                       ? $group
+                       : $name;
        }
 
        /**
@@ -2478,13 +2477,12 @@ class User {
         * @static
         */
        static function getGroupMember( $group ) {
+               MessageCache::loadAllMessages();
                $key = "group-$group-member";
                $name = wfMsg( $key );
-               if( $name == '' || wfEmptyMsg( $key, $name ) ) {
-                       return $group;
-               } else {
-                       return $name;
-               }
+               return $name = '' || wfEmptyMsg( $key, $name )
+                       ? $group
+                       : $name;
        }
 
        /**
@@ -2509,6 +2507,7 @@ class User {
         * @return mixed
         */
        static function getGroupPage( $group ) {
+               MessageCache::loadAllMessages();
                $page = wfMsgForContent( 'grouppage-' . $group );
                if( !wfEmptyMsg( 'grouppage-' . $group, $page ) ) {
                        $title = Title::newFromText( $page );