app/soc/views/models/group.py
changeset 989 f52654ea6350
parent 858 e79e7a22326f
child 993 99c46908b4b6
--- a/app/soc/views/models/group.py	Sun Jan 25 16:29:36 2009 +0000
+++ b/app/soc/views/models/group.py	Sun Jan 25 16:43:15 2009 +0000
@@ -19,23 +19,31 @@
 
 __authors__ = [
     '"Sverre Rabbelier" <sverre@rabbelier.nl>',
+    '"Lennard de Rijk" <ljvderijk@gmail.com>',
   ]
 
 
 from google.appengine.api import users
 
 from django import forms
+from django.utils.translation import ugettext
 
 from soc.logic import dicts
 from soc.logic.models import user as user_logic
+from soc.views.helper import decorators
+from soc.views.helper import lists as list_helper
+from soc.views.helper import redirects
 from soc.views.helper import widgets
 from soc.views.models import base
+from soc.views.models.request import view as request_view
 
 
 class View(base.View):
   """View methods for the Group model.
   """
 
+  # TODO(ljvderijk) add sidebar entry for listRequests to each group
+
   def __init__(self, params=None):
     """Defines the fields and methods required for the base View class
     to provide the user with list, public, create, edit and delete views.
@@ -56,6 +64,19 @@
                                    required=False),
         }
 
+    #set the extra_django_patterns and include the one from params
+    patterns = params.get('extra_django_patterns')
+
+    if not patterns:
+      patterns = []
+
+    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')]
+
+    new_params['extra_django_patterns'] = patterns
+
     # TODO(tlarsen): Add support for Django style template lookup
     new_params['public_template'] = 'soc/group/public.html'
 
@@ -86,3 +107,76 @@
 
     super(View, self)._editPost(request, entity, fields)
 
+  @decorators.merge_params
+  @decorators.check_access
+  def listRequests(self, request, access_type,
+                page_name=None, params=None, **kwargs):
+    """Gives an overview of all the requests for 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'])
+
+    role_names = params['role_names']
+
+    # list all incoming requests
+    filter = {
+        'role': role_names,
+        'state': 'new'
+        }
+
+    # create the list parameters
+    inc_req_params = request_view.getParams()
+
+    # define the list redirect action to the request processing page
+    inc_req_params['list_action'] = (redirects.getProcessRequestRedirect, None)
+    inc_req_params['list_description'] = ugettext(
+        "An overview of the %(name)s's incoming requests." % params)
+    
+    inc_req_content = list_helper.getListContent(
+        request, inc_req_params, filter, 0)
+
+    # list all outstanding invites
+    filter = {
+        'role': role_names,
+        'state': 'group_accepted'
+        }
+
+    # create the list parameters
+    out_inv_params = request_view.getParams()
+
+    # define the list redirect action to the request processing page
+    out_inv_params['list_action'] = (redirects.getProcessRequestRedirect, None)
+    out_inv_params['list_description'] = ugettext(
+        "An overview of the %(name)s's outstanding invites." % params)
+
+    out_inv_content = list_helper.getListContent(
+        request, out_inv_params, filter, 1)
+
+    # list all ignored requests
+    filter = {
+        'role': role_names,
+        'state': 'ignored'
+        }
+
+    # create the list parameters
+    ignored_params = request_view.getParams()
+
+    # define the list redirect action to the request processing page
+    ignored_params['list_action'] = (redirects.getProcessRequestRedirect, None)
+    ignored_params['list_description'] = ugettext(
+        "An overview of the %(name)s's ignored requests." % params)
+    
+    ignored_content = list_helper.getListContent(
+        request, ignored_params, filter, 2)
+
+    contents = [inc_req_content, out_inv_content, ignored_content]
+
+    return self._list(request, params, contents, page_name)