--- fas/templates/group/dump.txt.orig	2008-05-01 23:12:13.000000000 -0700
+++ fas/templates/group/dump.txt	2008-05-01 23:13:43.000000000 -0700
@@ -1,3 +1,3 @@
 #for person in people
-${person[0]},${person[1]},${person[2]},user,0
+${person[0]},${person[1]},${person[2]},${person[3]},${person[4]}
 #end
--- fas/group.py.orig	2008-05-01 23:21:33.000000000 -0700
+++ fas/group.py	2008-05-01 23:43:00.000000000 -0700
@@ -4,8 +4,12 @@
 
 import cherrypy
 import sqlalchemy
+from sqlalchemy import select, func
+from sqlalchemy.sql import literal_column
 
 import fas
+from fas.model import (People, PeopleTable, PersonRoles, PersonRolesTable, \
+        Groups, GroupsTable)
 from fas.auth import *
 from fas.user import KnownUser
 
@@ -477,27 +481,44 @@
 
     @identity.require(turbogears.identity.not_anonymous())
     @error_handler(error)
-    @expose(template="genshi-text:fas.templates.group.dump", format="text", content_type='text/plain; charset=utf-8')
+    @expose(template="genshi-text:fas.templates.group.dump", format="text",
+            content_type='text/plain; charset=utf-8')
     @expose(allow_json=True)
     def dump(self, groupname=None):
-        username = turbogears.identity.current.user_name
-        person = People.by_username(username)
+        sponsorTables = PeopleTable.join(PersonRolesTable,
+                People.id==PersonRoles.sponsor_id)
         if not groupname:
-#            groupname = config.get('cla_done_group')
-            people = People.query.order_by('username').all()
+            people = People.query.order_by('username').add_column(
+                    literal_column("'user'").label('role_type')).all()
+
+            # retrieve sponsorship info:
+            sponsorCount = select(
+                    [People.username, func.count(People.username)],
+                    from_obj = sponsorTables).group_by(People.username)
+            sponsorship = dict(pair for pair in sponsorCount.execute())
         else:
             people = []
-            groups = Groups.by_name(groupname)
-            for role in groups.approved_roles:
-                people.append(role.member)
-            if not canViewGroup(person, groups):
-                turbogears.flash(_("You cannot view '%s'") % group.name)
-                turbogears.redirect('/group/list')
-                return dict()
+
+            # Retrieve necessary info about the users who are approved in
+            # this group
+            people = People.query.join('roles').filter(
+                    PersonRoles.role_status=='approved').join(
+                        PersonRoles.group).add_column(
+                            PersonRoles.role_type).filter(
+                                Groups.name==groupname).order_by('username')
+
+            # retrieve sponsorship info:
+            sponsorCount = select(
+                    [People.username, func.count(People.username)],
+                    from_obj=sponsorTables.join(
+                        GroupsTable, PersonRoles.group_id==Groups.id)
+                    ).group_by(People.username).where(Groups.name==groupname)
+            sponsorship = dict(pair for pair in sponsorCount.execute())
 
         # We filter this so that sending information via json is quick(er)
-        filteredPeople = sorted([(p.username, p.email, p.human_name)
-                for p in people])
+        filteredPeople = sorted((p[0].username, p[0].email, p[0].human_name,
+            p[1], sponsorship.get(p[0].username, 0)) for p in people)
+
         return dict(people=filteredPeople)
 
     @identity.require(identity.not_anonymous())
