Refactored applicant from club view to group view.
This is to accommodate the OrgApplication Process.
Patch by: Lennard de Rijk
Reviewed by: to-be-reviewed
--- a/app/soc/views/models/club.py Sun Feb 01 16:10:20 2009 +0000
+++ b/app/soc/views/models/club.py Sun Feb 01 16:11:54 2009 +0000
@@ -23,7 +23,6 @@
]
-from django import http
from django import forms
from soc.logic import cleaning
@@ -42,7 +41,6 @@
from soc.views.models import group
import soc.logic.models.club
-import soc.views.helper
class View(group.View):
@@ -77,15 +75,15 @@
patterns = []
- patterns += [(r'^%(url_name)s/(?P<access_type>applicant)/%(key_fields)s$',
- 'soc.views.models.%(module_name)s.applicant',
- "%(name)s Creation via Accepted Application"),
- (r'^%(url_name)s/(?P<access_type>apply_member)$',
+ patterns += [(r'^%(url_name)s/(?P<access_type>apply_member)$',
'soc.views.models.%(module_name)s.apply_member',
"List of all %(name_plural)s you can apply to"),]
new_params['extra_django_patterns'] = patterns
+ new_params['application_logic'] = club_app_logic
+ new_params['group_applicant_url'] = True
+
new_params['sidebar_additional'] = [
('/' + new_params['url_name'] + '/apply_member', 'Join a Club', 'apply_member'),]
@@ -115,93 +113,6 @@
@decorators.merge_params
@decorators.check_access
- def applicant(self, request, access_type,
- page_name=None, params=None, **kwargs):
- """Handles the creation of a club via an approved club application.
-
- 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
- """
-
- # get the context for this webpage
- context = responses.getUniversalContext(request)
- context['page_name'] = page_name
-
- if request.method == 'POST':
- return self.applicantPost(request, context, params, **kwargs)
- else:
- # request.method == 'GET'
- return self.applicantGet(request, context, params, **kwargs)
-
- def applicantGet(self, request, context, params, **kwargs):
- """Handles the GET request concerning the creation of a club via an
- approved club application.
-
- Args:
- request: the standard Django HTTP request object
- context: dictionary containing the context for this view
- params: a dict with params for this View
- kwargs: the Key Fields for the specified entity
- """
-
- # find the application
- key_fields = club_app_logic.logic.getKeyFieldsFromFields(kwargs)
- application = club_app_logic.logic.getFromKeyFields(key_fields)
-
- # extract the application fields
- field_names = application.properties().keys()
- fields = dict( [(i, getattr(application, i)) for i in field_names] )
-
- # create the form using the fields from the application as the initial value
- form = params['applicant_create_form'](initial=fields)
-
- # construct the appropriate response
- return super(View, self)._constructResponse(request, entity=None,
- context=context, form=form, params=params)
-
- def applicantPost(self, request, context, params, **kwargs):
- """Handles the POST request concerning the creation of a club via an
- approved club application.
-
- Args:
- request: the standard Django HTTP request object
- context: dictionary containing the context for this view
- params: a dict with params for this View
- kwargs: the Key Fields for the specified entity
- """
-
- # populate the form using the POST data
- form = params['applicant_create_form'](request.POST)
-
- if not form.is_valid():
- # return the invalid form response
- return self._constructResponse(request, entity=None, context=context,
- form=form, params=params)
-
- # collect the cleaned data from the valid form
- key_name, fields = soc.views.helper.forms.collectCleanedFields(form)
-
- # fill in the founder of the club
- user = user_logic.logic.getForCurrentAccount()
- fields['founder'] = user
-
- if not key_name:
- key_fields = self._logic.getKeyFieldsFromFields(fields)
- key_name = self._logic.getKeyNameFromFields(key_fields)
-
- # create the club entity
- entity = self._logic.updateOrCreateFromKeyName(fields, key_name)
-
- # redirect to notifications list to see the admin invite
- return http.HttpResponseRedirect('/notification/list')
-
-
- @decorators.merge_params
- @decorators.check_access
def applyMember(self, request, access_type,
page_name=None, params=None, **kwargs):
"""Shows a list of all clubs and you can choose one to apply to become a member.
--- a/app/soc/views/models/group.py Sun Feb 01 16:10:20 2009 +0000
+++ b/app/soc/views/models/group.py Sun Feb 01 16:11:54 2009 +0000
@@ -26,6 +26,7 @@
from google.appengine.api import users
from django import forms
+from django import http
from django.utils.translation import ugettext
from soc.logic import dicts
@@ -33,18 +34,19 @@
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 responses
from soc.views.helper import widgets
from soc.views.models import presence
from soc.views.models import document as document_view
from soc.views.models.request import view as request_view
from soc.views.sitemap import sidebar
+import soc.views.helper
class View(presence.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
@@ -74,6 +76,13 @@
'soc.views.models.%(module_name)s.list_roles',
'List of roles for %(name)s')]
+ if params.get('group_applicant_url'):
+ # add the applicant pattern
+ patterns += [
+ (r'^%(url_name)s/(?P<access_type>applicant)/%(key_fields)s$',
+ 'soc.views.models.%(module_name)s.applicant',
+ "%(name)s Creation via Accepted Application"),]
+
new_params['extra_django_patterns'] = patterns
# TODO(tlarsen): Add support for Django style template lookup
@@ -107,6 +116,119 @@
super(View, self)._editPost(request, entity, fields)
+
+ @decorators.merge_params
+ @decorators.check_access
+ def applicant(self, request, access_type,
+ page_name=None, params=None, **kwargs):
+ """Handles the creation of a group via an approved group application.
+
+ 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
+ """
+
+ # get the context for this webpage
+ context = responses.getUniversalContext(request)
+ context['page_name'] = page_name
+
+ if request.method == 'POST':
+ return self.applicantPost(request, context, params, **kwargs)
+ else:
+ # request.method == 'GET'
+ return self.applicantGet(request, context, params, **kwargs)
+
+ def applicantGet(self, request, context, params, **kwargs):
+ """Handles the GET request concerning the creation of a group via an
+ approved group application.
+
+ Args:
+ request: the standard Django HTTP request object
+ context: dictionary containing the context for this view
+ params: a dict with params for this View
+ kwargs: the Key Fields for the specified entity
+ """
+
+ # find the application
+ application_logic = params['application_logic']
+ key_fields = application_logic.logic.getKeyFieldsFromFields(kwargs)
+ application = application_logic.logic.getFromKeyFields(key_fields)
+
+ # extract the application fields
+ field_names = application.properties().keys()
+ fields = dict( [(i, getattr(application, i)) for i in field_names] )
+
+ # create the form using the fields from the application as the initial value
+ form = params['applicant_create_form'](initial=fields)
+
+ # construct the appropriate response
+ return super(View, self)._constructResponse(request, entity=None,
+ context=context, form=form, params=params)
+
+ def applicantPost(self, request, context, params, **kwargs):
+ """Handles the POST request concerning the creation of a group via an
+ approved group application.
+
+ Args:
+ request: the standard Django HTTP request object
+ context: dictionary containing the context for this view
+ params: a dict with params for this View
+ kwargs: the Key Fields for the specified entity
+ """
+
+ # populate the form using the POST data
+ form = params['applicant_create_form'](request.POST)
+
+ if not form.is_valid():
+ # return the invalid form response
+ return self._constructResponse(request, entity=None, context=context,
+ form=form, params=params)
+
+ # collect the cleaned data from the valid form
+ key_name, fields = soc.views.helper.forms.collectCleanedFields(form)
+
+ # do post processing
+ self._applicantPost(request, context, fields)
+
+ if not key_name:
+ key_fields = self._logic.getKeyFieldsFromFields(fields)
+ key_name = self._logic.getKeyNameFromFields(key_fields)
+
+ # create the group entity
+ entity = self._logic.updateOrCreateFromKeyName(fields, key_name)
+
+ # redirect to notifications list to see the admin invite
+ return http.HttpResponseRedirect('/notification/list')
+
+ def _applicantPost(self, request, context, fields):
+ """Performs any required processing on the entity to post its edit page.
+
+ Args:
+ request: the django request object
+ context: the context for the webpage
+ fields: the new field values
+ """
+
+ # fill in the founder of the group
+ user = user_logic.logic.getForCurrentAccount()
+ fields['founder'] = user
+
+ # If scope_logic is not defined, this entity has no scope
+ if not self._params['scope_logic']:
+ return
+
+ # If this entity is unscoped, do not try to retrieve a scope
+ if 'scope_path' not in fields:
+ return
+
+ scope = self._params['scope_logic'].logic.getFromKeyName(
+ fields['scope_path'])
+ fields['scope'] = scope
+
+
@decorators.merge_params
@decorators.check_access
def listRequests(self, request, access_type,