--- a/app/soc/views/models/club_admin.py Sat Jan 24 10:18:30 2009 +0000
+++ b/app/soc/views/models/club_admin.py Sat Jan 24 10:19:17 2009 +0000
@@ -37,14 +37,13 @@
from soc.views.helper import redirects
from soc.views.helper import responses
from soc.views.helper import widgets
-from soc.views.models import base
from soc.views.models import club as club_view
-from soc.views.models import request as request_view
+from soc.views.models import role
import soc.logic.models.club_admin
-class View(base.View):
+class View(role.View):
"""View methods for the Club Admin model.
"""
@@ -57,18 +56,18 @@
"""
rights = {}
- rights['create'] = [access.checkIsHost]
+ rights['create'] = [access.checkIsDeveloper]
rights['edit'] = [access.checkIsMyActiveRole(soc.logic.models.club_admin)]
- rights['delete'] = [access.checkIsHost]
+ rights['delete'] = [access.checkIsDeveloper]
rights['invite'] = [access.checkIsClubAdminForClub]
rights['accept_invite'] = [access.checkCanCreateFromRequest('club_admin')]
new_params = {}
new_params['logic'] = soc.logic.models.club_admin.logic
+ new_params['group_logic'] = club_logic.logic
new_params['rights'] = rights
new_params['scope_view'] = club_view
- new_params['scope_redirect'] = redirects.getCreateRedirect
new_params['name'] = "Club Admin"
@@ -82,15 +81,6 @@
'clean_blog' : cleaning.clean_url('blog'),
'clean_photo_url' : cleaning.clean_url('photo_url')}
- patterns = [(r'^%(url_name)s/(?P<access_type>invite)/%(lnp)s$',
- 'soc.views.models.%(module_name)s.invite',
- 'Create invite for %(name_plural)s'),
- (r'^%(url_name)s/(?P<access_type>accept_invite)/%(scope)s/%(lnp)s$',
- 'soc.views.models.%(module_name)s.acceptInvite',
- 'Accept invite for %(name_plural)s')]
-
- new_params['extra_django_patterns'] = patterns
-
params = dicts.merge(params, new_params)
super(View, self).__init__(params=params)
@@ -117,184 +107,15 @@
super(View, self)._editPost(request, entity, fields)
- @decorators.merge_params
- @decorators.check_access
- def acceptInvite(self, request, access_type,
- page_name=None, params=None, **kwargs):
- """Creates the page process an invite into a Club Admin.
-
- Args:
- request: the standard Django HTTP request object
- access_type : the name of the access type which should be checked
- context: dictionary containing the context for this view
- params: a dict with params for this View
- kwargs: the Key Fields for the specified entity
+ def _acceptInvitePost(self, fields, request, context, params, **kwargs):
+ """Fills in the fields that were missing in the invited_created_form
+
+ For params see base.View._acceptInvitePost()
"""
-
- # get the context for this webpage
- context = responses.getUniversalContext(request)
- context['page_name'] = page_name
-
- if request.method == 'POST':
- return self.acceptInvitePost(request, context, params, **kwargs)
- else:
- # request.method == 'GET'
- return self.acceptInviteGet(request, context, params, **kwargs)
-
- def acceptInviteGet(self, request, context, params, **kwargs):
- """Handles the GET request concerning the creation of a Club Admin via an
- invite.
-
- 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
- """
-
- # create the form using the scope_path and link_id from kwargs as initial value
- fields = {'link_id' : kwargs['link_id'],
- 'scope_path' : kwargs['scope_path']}
- form = params['invited_create_form'](initial=fields)
-
- # construct the appropriate response
- return super(View, self)._constructResponse(request, entity=None,
- context=context, form=form, params=params)
-
- def acceptInvitePost(self, request, context, params, **kwargs):
- """Handles the POST request concerning the creation of a Club Admin via an
- invite.
-
- 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['invited_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 appropriate fields that were missing in the form
fields['user'] = fields['link_id']
fields['link_id'] = fields['user'].link_id
- club = club_logic.logic.getFromKeyName(fields['scope_path'])
- fields['scope'] = club
-
- # make sure that this role becomes active once more in case this user
- # has been reinvited
- fields ['state'] = 'active'
-
- # get the key_name for the new entity
- key_fields = self._logic.getKeyFieldsFromDict(fields)
- key_name = self._logic.getKeyNameForFields(key_fields)
-
- # create new Club Admin entity
- entity = self._logic.updateOrCreateFromKeyName(fields, key_name)
-
- # redirect to the roles overview page
- return http.HttpResponseRedirect('/user/roles')
-
-
- @decorators.merge_params
- @decorators.check_access
- def invite(self, request, access_type,
- page_name=None, params=None, **kwargs):
- """Creates the page upon which a Club Admin can invite another Club Admin.
-
- Args:
- request: the standard Django HTTP request object
- access_type : the name of the access type which should be checked
- context: dictionary containing the context for this view
- 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.invitePost(request, context, params, **kwargs)
- else:
- # request.method == 'GET'
- return self.inviteGet(request, context, params, **kwargs)
-
- def inviteGet(self, request, context, params, **kwargs):
- """Handles the GET request concerning the view that creates an invite
- for becoming a Club Admin.
-
- Args:
- request: the standard Django HTTP request object
- 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 role to the right name
- fields = {'role' : '%(module_name)s' %(params)}
-
- # get the request view parameters and initialize the create form
- request_params = request_view.view.getParams()
- form = request_params['create_form'](initial=fields)
-
- # construct the appropriate response
- return super(View, self)._constructResponse(request, entity=None,
- context=context, form=form, params=params)
-
- def invitePost(self, request, context, params, **kwargs):
- """Handles the POST request concerning the view that creates an invite
- for becoming a Club Admin.
-
- Args:
- request: the standard Django HTTP request object
- 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 request view parameters and populate the form using POST data
- request_params = request_view.view.getParams()
- form = request_params['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, form_fields = soc.views.helper.forms.collectCleanedFields(form)
-
- # get the club entity for which this request is for from link_id in kwargs
- club = club_logic.logic.getForFields({'link_id' : kwargs['link_id']}, unique=True)
-
- # create the fields for the new request entity
- request_fields = {'link_id' : form_fields['link_id'].link_id,
- 'scope' : club,
- 'scope_path' : club.link_id,
- 'role' : params['module_name'],
- 'role_verbose' : params['name'],
- 'state' : 'group_accepted'}
-
- # extract the key_name for the new request entity
- key_fields = request_logic.logic.getKeyFieldsFromDict(request_fields)
- key_name = request_logic.logic.getKeyNameForFields(key_fields)
-
- # create the request entity
- entity = request_logic.logic.updateOrCreateFromKeyName(request_fields, key_name)
-
- # TODO(ljvderijk) redirect to a more useful place like the club homepage
- return http.HttpResponseRedirect('/')
-
view = View()