app/soc/views/models/group.py
changeset 998 125257161908
parent 994 f05c02ba40fc
child 1002 11a2aff6c3ad
--- a/app/soc/views/models/group.py	Sun Jan 25 23:35:39 2009 +0000
+++ b/app/soc/views/models/group.py	Mon Jan 26 09:44:00 2009 +0000
@@ -73,7 +73,10 @@
     patterns += [
         (r'^%(url_name)s/(?P<access_type>list_requests)/%(key_fields)s$',
         'soc.views.models.%(module_name)s.list_requests',
-        'List of requests for %(name)s')]
+        'List of requests for %(name)s'),
+        (r'^%(url_name)s/(?P<access_type>list_roles)/%(key_fields)s$',
+        'soc.views.models.%(module_name)s.list_roles',
+        'List of roles for %(name)s')]
 
     new_params['extra_django_patterns'] = patterns
 
@@ -83,6 +86,8 @@
     new_params['list_row'] = 'soc/group/list/row.html'
     new_params['list_heading'] = 'soc/group/list/heading.html'
 
+    new_params['role_views'] = {}
+
     params = dicts.merge(params, new_params)
 
     super(View, self).__init__(params=params)
@@ -129,7 +134,7 @@
 
     group_entity = group_logic.getFromFields(**kwargs)
 
-    role_names = params['roles_logic'].keys()
+    role_names = params['role_views'].keys()
     
     # list all incoming requests
     filter = {
@@ -188,3 +193,69 @@
     contents = [inc_req_content, out_inv_content, ignored_content]
 
     return self._list(request, params, contents, page_name)
+
+
+  @decorators.merge_params
+  @decorators.check_access
+  def listRoles(self, request, access_type,
+                page_name=None, params=None, **kwargs):
+    """Gives an overview of all the roles in a specific group.
+
+    Args:
+      request: the standard Django HTTP request object
+      access_type : the name of the access type which should be checked
+      page_name: the page name displayed in templates as page and header title
+      params: a dict with params for this View
+      kwargs: the Key Fields for the specified entity
+    """
+
+    # set the pagename to include the link_id
+    page_name = '%s %s' %(page_name, kwargs['link_id'])
+
+    # get the group from the request
+    group_logic = params['logic']
+
+    group_entity = group_logic.getFromFields(**kwargs)
+
+    # create the filter
+    filter = {
+        'scope' : group_entity,
+        'state': 'active'
+        }
+
+    role_views = params['role_views']
+    contents = []
+    index = 0
+
+    # for each role we create a separate list
+    for role_name in role_views.keys():
+      # create the list parameters
+      list_params = role_views[role_name].getParams().copy()
+
+      # TODO(ljvderijk) define the list redirect action to the managing page
+      list_params['list_action'] = (redirects.getEditRedirect, list_params)
+      list_params['list_description'] = ugettext(
+          "An overview of the %s for this %s." % (
+          list_params['name_plural'], params['name']))
+    
+      new_list_content = list_helper.getListContent(
+          request, list_params, filter, index)
+
+      contents += [new_list_content]
+
+      index += 1
+
+    # call the _list method from base.View to show the list
+    return self._list(request, params, contents, page_name)
+
+
+  def registerRole(self, role_name, role_view):
+    """Adds a role to the role_views param.
+    
+    Args:
+      role_name: The name of the role that needs to be added
+      role_view: The view that needs to be added to role_views.
+    """
+
+    role_views = self._params['role_views']
+    role_views[role_name] = role_view