# HG changeset patch # User Lennard de Rijk # Date 1234137344 0 # Node ID 9fe8c6c5493386ccf2493af3d88c89c9292a0598 # Parent 6be0286ef003dc233ff8d8ba7375c6afe7e4138a Redone the listing in group_app.py. There is now a list_self that only shows the group application of the current user in the given a scope. The redirects point to edit or applicant when necessary. Review_overview will show all the group applications that can be reviewed in the given scope, the redirect points to review for all statusses. And list will just show all the group applications and redirect you to edit. Patch by: Lennard de Rijk Reviewed by: to-be-reviewed diff -r 6be0286ef003 -r 9fe8c6c54933 app/soc/views/models/club_app.py --- a/app/soc/views/models/club_app.py Sun Feb 08 23:49:29 2009 +0000 +++ b/app/soc/views/models/club_app.py Sun Feb 08 23:55:44 2009 +0000 @@ -54,7 +54,8 @@ [club_app_logic.logic])] rights['edit'] = [('checkCanEditGroupApp', [club_app_logic.logic])] - rights['list'] = ['checkIsUser'] + rights['list'] = ['checkIsDeveloper'] + rights['list_self'] = ['checkIsUser'] rights['public'] = [('checkCanEditGroupApp', [club_app_logic.logic])] # TODO(ljvderijk) make sure host role check is fixed @@ -86,6 +87,8 @@ new_params['review_template'] = 'soc/club_app/review.html' new_params['sidebar_additional'] = [ + ('/%(url_name)s/list_self/' % new_params, + 'List all my %(name_plural)s' % new_params, 'list_self'), ('/%(url_name)s/review_overview/' % new_params, 'Review %(name_plural)s' % new_params, 'review_overview')] @@ -100,6 +103,7 @@ delete = view.delete edit = view.edit list = view.list +list_self = view.listSelf public = view.public export = view.export review = view.review diff -r 6be0286ef003 -r 9fe8c6c54933 app/soc/views/models/group_app.py --- a/app/soc/views/models/group_app.py Sun Feb 08 23:49:29 2009 +0000 +++ b/app/soc/views/models/group_app.py Sun Feb 08 23:55:44 2009 +0000 @@ -24,6 +24,7 @@ from django import forms +from django import http from django.utils.translation import ugettext from soc.logic import accounts @@ -44,6 +45,10 @@ import soc.logic.models.group_app +DEF_APPLICATION_LIST_DESCRIPTION_FMT = ugettext( + 'Overview of %(name_plural)s which status is %(status)s') + + class View(base.View): """View methods for the Group App model. """ @@ -66,9 +71,12 @@ new_params['create_template'] = 'soc/models/twoline_edit.html' new_params['edit_template'] = 'soc/models/twoline_edit.html' - patterns = [(r'^%(url_name)s/(?Preview_overview)/%(scope)s$', + patterns = [(r'^%(url_name)s/(?Plist_self)/%(scope)s$', + 'soc.views.models.%(module_name)s.list_self', + 'List my %(name_plural)s'), + (r'^%(url_name)s/(?Preview_overview)/%(scope)s$', 'soc.views.models.%(module_name)s.review_overview', - 'Review %(name_plural)s'), + 'List of %(name_plural)s for reviewing'), (r'^%(url_name)s/(?Preview)/%(key_fields)s$', 'soc.views.models.%(module_name)s.review', 'Review %(name_short)s')] @@ -133,106 +141,57 @@ @decorators.merge_params @decorators.check_access def list(self, request, access_type, - page_name=None, params=None, filter=None): - """Lists all notifications that the current logged in user has stored. + page_name=None, params=None, filter={}, **kwargs): + """Lists all notifications in seperate tables, depending on their status. for parameters see base.list() """ - # get the current user - user_entity = user_logic.logic.getForCurrentAccount() - - is_developer = accounts.isDeveloper(user=user_entity) - contents = [] - - filter = { - 'status': 'needs review', - } - - if not is_developer: - # only select the applications for this user so construct a filter - filter['applicant'] = user_entity - - # get all the pending applications - - pa_params = params.copy() # pending applications + # create the selection list + selection=[('needs review',(redirects.getEditRedirect, params)), + ('pre-accepted', (redirects.getEditRedirect, params)), + ('accepted', (redirects.getEditRedirect, params)), + ('rejected', (redirects.getEditRedirect, params)), + ('ignored', (redirects.getEditRedirect, params)),] - if is_developer: - pa_params['list_description'] = ugettext( - "An overview of all pending %(name_plural)s.") % params - else: - pa_params['list_description'] = ugettext( - "An overview of your pending %(name_plural)s.") % params - - pa_list = list_helper.getListContent( - request, pa_params, filter, 0) - - # get all the reviewed applications now + return self._applicationListConstructor(request, params, page_name, + filter=filter, selection=selection, **kwargs) - # re-use the old filter, but set to only reviewed and accepted - filter['status'] = 'accepted' - - aa_params = params.copy() # accepted applications - - if is_developer: - aa_params['list_description'] = ugettext( - "An overview of all accepted %(name_plural)s.") % params - else: - aa_params['list_description'] = ugettext( - "An overview of your accepted %(name_plural)s.") % params - - aa_params['url_name'] = params['group_url_name'] - aa_params['list_action'] = (redirects.getApplicantRedirect, aa_params) - aa_list = list_helper.getListContent( - request, aa_params, filter, 1) - - if is_developer: - # re use the old filter, but this time only for pre-accepted apps - filter['status'] = 'pre-accepted' - - pa_params = params.copy() # pre-accepted applications - - pa_params['list_description'] = ugettext( - "An overview of all pre-accepted %(name_plural)s.") % params + def _applicationListConstructor(self, request, params, page_name, filter={}, + selection=[], **kwargs): + """Constructs the list containing applications for the given the arguments. + + Args: + filter: This is the filter used for all application + selection: This is a list containing tuples stating the status for an + application and the redirect action. + See base.View.public() for the rest. + + Returns: + HTTP Response containing the list view. - pa_list = list_helper.getListContent( - request, pa_params, filter, 4) - - contents += [pa_list] - - # get all the reviewed applications that were denied - - # re use the old filter, but this time only for denied apps - filter['status'] = 'rejected' - - da_params = params.copy() # denied applications + """ - if is_developer: - da_params['list_description'] = ugettext( - "An overview of all denied %(name_plural)s.") % params - else: - da_params['list_description'] = ugettext( - "An overview of your denied %(name_plural)s.") % params + contents = [] + list_params = params.copy() + index = 0 - da_list = list_helper.getListContent( - request, da_params, filter, 2) - - contents += [pa_list, aa_list, da_list] + for choice in selection: + # only select the requests that have been pre-accpeted + filter['status'] = choice[0] - if is_developer: - # re use the old filter, but this time only for ignored apps - filter['status'] = 'ignored' - - ia_params = params.copy() # ignored applications + list_params['list_description'] = ( + DEF_APPLICATION_LIST_DESCRIPTION_FMT % ( + {'name_plural': params['name_plural'], 'status': choice[0]})) + list_params['list_action'] = choice[1] - ia_params['list_description'] = ugettext( - "An overview of all ignored %(name_plural)s.") % params + list_content = list_helper.getListContent( + request, list_params, filter, index) - ia_list = list_helper.getListContent( - request, ia_params, filter, 3) + contents += [list_content] - contents += [ia_list] + index += 1 # call the _list method from base to display the list return self._list(request, params, contents, page_name) @@ -240,6 +199,30 @@ @decorators.merge_params @decorators.check_access + def listSelf(self, request, access_type, + page_name=None, params=None, **kwargs): + """List all applications from the current logged-in user. + + For params see base.View.public(). + """ + + user_entity = user_logic.logic.getForCurrentAccount() + filter = {'applicant' : user_entity} + + if kwargs['scope_path']: + filter['scope_path'] = kwargs['scope_path'] + + # create the selection list + selection=[('needs review',(redirects.getEditRedirect, params)), + ('accepted', (redirects.getApplicantRedirect, + {'url_name': params['group_url_name']})), + ('rejected', (redirects.getEditRedirect, params))] + + return self._applicationListConstructor(request, params, page_name, + filter=filter, selection=selection, **kwargs) + + @decorators.merge_params + @decorators.check_access def review(self, request, access_type, page_name=None, params=None, **kwargs): """Handles the view containing the review of an application. @@ -281,8 +264,19 @@ # the application has been accepted send out a notification notifications.sendNewGroupNotification(entity, params) - return self.reviewOverview(request, access_type, - page_name=page_name, params=params, **kwargs) + # redirect to the review overview + fields = {'url_name': params['url_name']} + + scope_path = entity.scope_path + + if not scope_path: + scope_path = '' + + # add scope_path to the dictionary + fields['scope_path'] = scope_path + + return http.HttpResponseRedirect( + '/%(url_name)s/review_overview/%(scope_path)s' %fields) # the application has not been reviewed so show the information # using the appropriate review template @@ -300,73 +294,17 @@ status of the application process. """ - params = dicts.merge(params, self._params) + selection = [('needs review',(redirects.getReviewRedirect, params)), + ('accepted', (redirects.getReviewRedirect, params)), + ('pre-accepted', (redirects.getReviewRedirect, params)), + ('rejected', (redirects.getReviewRedirect, params)), + ('ignored', (redirects.getReviewRedirect, params)),] filter = {} - if kwargs.get('scope_path'): + if kwargs['scope_path']: filter['scope_path'] = kwargs['scope_path'] - elif kwargs.get('link_id'): - filter['scope_path'] = kwargs['link_id'] - - # only select the requests that haven't been reviewed yet - filter['status'] = 'needs review' - - ur_params = params.copy() - ur_params['list_description'] = ugettext('A list of all unhandled ' - '%(name_plural)s.') % params - ur_params ['list_action'] = (redirects.getReviewRedirect, params) - - ur_list = list_helper.getListContent( - request, ur_params, filter, 0) - - # only select the requests that haven't been turned into a group yet - filter['status'] = 'accepted' - - uh_params = params.copy() - uh_params['list_description'] = ugettext('A list of all %(name_plural)s ' - 'that have been accepted but not completed yet') % params - uh_params ['list_action'] = (redirects.getReviewRedirect, params) - - uh_list = list_helper.getListContent( - request, uh_params, filter, 1) - - # only select the requests that have been pre-accpeted - filter['status'] = 'pre-accepted' - pa_params = params.copy() - pa_params['list_description'] = ugettext( - "An overview of all pre-accepted %(name_plural)s.") % params - pa_params ['list_action'] = (redirects.getReviewRedirect, params) - - pa_list = list_helper.getListContent( - request, pa_params, filter, 4) - - # only select the requests the have been rejected - filter ['status'] = 'rejected' - - den_params = params.copy() - den_params['list_description'] = ugettext('A list of all %(name_plural)s ' - 'that have been rejected') % params - den_params ['list_action'] = (redirects.getReviewRedirect, params) + return self._applicationListConstructor(request, params, page_name, + filter=filter, selection=selection, **kwargs) - den_list = list_helper.getListContent( - request, den_params, filter, 2) - - # only select the request that have been ignored - filter ['status'] = 'ignored' - - ign_params = params.copy() - ign_params['list_description'] = ugettext('A list of all %(name_plural)s ' - 'that have been ignored') % params - ign_params ['list_action'] = (redirects.getReviewRedirect, params) - - ign_list = list_helper.getListContent( - request, ign_params, filter, 3) - - # fill contents with all the needed lists - contents = [ur_list, uh_list, pa_list, den_list, ign_list] - - # call the _list method from base to display the list - return self._list(request, params, contents, page_name) - diff -r 6be0286ef003 -r 9fe8c6c54933 app/soc/views/models/org_app.py --- a/app/soc/views/models/org_app.py Sun Feb 08 23:49:29 2009 +0000 +++ b/app/soc/views/models/org_app.py Sun Feb 08 23:55:44 2009 +0000 @@ -58,9 +58,9 @@ [org_app_logic.logic]), ('checkIsActivePeriod', ['org_signup', 'scope_path'])] rights['list'] = ['checkIsDeveloper'] + rights['list_self'] = ['checkIsUser'] rights['public'] = [('checkCanEditGroupApp', [org_app_logic.logic])] - # TODO(ljvderijk) fix host access check rights['review'] = ['checkIsHostForProgramInScope', ('checkCanReviewGroupApp', [org_app_logic.logic])] rights['review_overview'] = ['checkIsHostForProgramInScope'] @@ -117,6 +117,7 @@ delete = view.delete edit = view.edit list = view.list +list_self = view.listSelf public = view.public export = view.export review = view.review