# HG changeset patch # User Lennard de Rijk # Date 1232792357 0 # Node ID 5ea2bd9e3fa668e7811830e5efab00c402b9dc9b # Parent 897d9efdb72836e13a57cc70938dfdbc0500db7b Refactored invite system from club_admin to role to make the system work with host as well. Patch by: Lennard de Rijk Reviewed by: to-be-reviewed diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/logic/models/club_admin.py --- a/app/soc/logic/models/club_admin.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/logic/models/club_admin.py Sat Jan 24 10:19:17 2009 +0000 @@ -23,7 +23,6 @@ ] -from soc.logic.helper import request from soc.logic.models import role from soc.logic.models import club as club_logic @@ -44,11 +43,4 @@ scope_logic=scope_logic) - def _onCreate(self, entity): - """Will mark any outstanding requests for the new Club Admin as completly accepted. - """ - # TODO(ljvderijk) apply this to all other role logics if this solution is accepted - request.completeRequestForRole(entity, 'club_admin') - - logic = Logic() diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/club.py --- a/app/soc/views/models/club.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/views/models/club.py Sat Jan 24 10:19:17 2009 +0000 @@ -57,10 +57,10 @@ """ rights = {} - rights['create'] = [access.checkIsHost] + rights['create'] = [access.checkIsDeveloper] rights['edit'] = [access.checkIsClubAdminForClub] - rights['delete'] = [access.checkIsHost] - rights['list'] = [access.checkIsHost] + rights['delete'] = [access.checkIsDeveloper] + rights['list'] = [access.checkIsDeveloper] rights['applicant'] = [access.checkIsApplicationAccepted(club_app_logic)] new_params = {} diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/club_admin.py --- 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/(?Pinvite)/%(lnp)s$', - 'soc.views.models.%(module_name)s.invite', - 'Create invite for %(name_plural)s'), - (r'^%(url_name)s/(?Paccept_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() diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/club_app.py --- a/app/soc/views/models/club_app.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/views/models/club_app.py Sat Jan 24 10:19:17 2009 +0000 @@ -61,7 +61,7 @@ rights['edit'] = [access.checkIsMyApplication(club_app_logic)] rights['list'] = [access.checkAgreesToSiteToS] rights['public'] = [access.checkIsMyApplication(club_app_logic)] - rights['review'] = [access.checkIsDeveloper] + rights['review'] = [access.checkIsHost] new_params = {} diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/host.py --- a/app/soc/views/models/host.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/views/models/host.py Sat Jan 24 10:19:17 2009 +0000 @@ -19,17 +19,24 @@ __authors__ = [ '"Sverre Rabbelier" ', + '"Lennard de Rijk" ', ] +from django import forms + +from soc.logic import cleaning from soc.logic import accounts from soc.logic import dicts from soc.logic.models import host as host_logic from soc.logic.models import user as user_logic +from soc.logic.models import sponsor as sponsor_logic from soc.views import helper +from soc.views.helper import access +from soc.views.helper import dynaform +from soc.views.helper import widgets from soc.views.models import role from soc.views.models import sponsor as sponsor_view -from soc.views.helper import access import soc.models.host import soc.logic.models.host @@ -40,47 +47,6 @@ # and remove this tolist assignment tolist = list - -class CreateForm(helper.forms.BaseForm): - """Django form displayed when creating a Host. - """ - - class Meta: - """Inner Meta class that defines some behavior for the form. - """ - - #: db.Model subclass for which the form will gather information - model = soc.models.host.Host - - #: list of model fields which will *not* be gathered by the form - exclude = ['scope', 'user', 'state'] - - def clean_empty(self, field): - data = self.cleaned_data.get(field) - if not data or data == u'': - return None - - return data - - def clean_home_page(self): - return self.clean_empty('home_page') - - def clean_blog(self): - return self.clean_empty('blog') - - def clean_photo_url(self): - return self.clean_empty('photo_url') - - -class EditForm(CreateForm): - """Django form displayed when editing a Host. - """ - - pass - -# TODO(ljvderijk) rewrite the Host View module to comply with the new request system -# so that non-developers can create Hosts - class View(role.View): """View methods for the Host model. """ @@ -94,31 +60,52 @@ """ rights = {} - rights['create'] = [access.checkIsDeveloper] - # TODO(ljvderijk) write the edit check - #rights['edit'] = [access.checkIsMyHost] + rights['create'] = [access.checkIsHost] + rights['edit'] = [access.checkIsMyActiveRole(soc.logic.models.host)] + rights['invite'] = [access.checkIsHost] rights['list'] = [access.checkIsHost] + rights['accept_invite'] = [access.checkCanCreateFromRequest('host')] + new_params = {} new_params['rights'] = rights new_params['logic'] = soc.logic.models.host.logic + new_params['group_logic'] = sponsor_logic.logic new_params['scope_view'] = sponsor_view - new_params['logic'] = soc.logic.models.host.logic new_params['group_view'] = soc.views.models.sponsor.view new_params['invite_filter'] = {'group_ln': 'link_id'} new_params['name'] = "Program Administrator" new_params['module_name'] = "host" - new_params['edit_form'] = EditForm - new_params['create_form'] = CreateForm + new_params['extra_dynaexclude'] = ['user', 'state'] + + new_params['create_extra_dynafields'] = { + 'scope_path': forms.CharField(widget=forms.HiddenInput, + required=True), + 'clean_link_id' : cleaning.clean_existing_user('link_id'), + 'clean_home_page' : cleaning.clean_url('home_page'), + 'clean_blog' : cleaning.clean_url('blog'), + 'clean_photo_url' : cleaning.clean_url('photo_url')} params = dicts.merge(params, new_params) super(View, self).__init__(params=params) + # create and store the special form for invited users + updated_fields = { + 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), + required=False)} + + invited_create_form = dynaform.extendDynaForm( + dynaform = self._params['create_form'], + dynafields = updated_fields) + + params['invited_create_form'] = invited_create_form + + def list(self, request, access_type, page_name=None, params=None, filter=None): """See base.View.list. @@ -144,18 +131,29 @@ """See base.View._editPost(). """ - user = user_logic.logic.getFromKeyName(fields['link_id']) - fields['user'] = user + fields['user'] = fields['link_id'] + fields['link_id'] = fields['link_id'].link_id super(View, self)._editPost(request, entity, fields) + 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() + """ + # fill in the appropriate fields that were missing in the form + fields['user'] = fields['link_id'] + fields['link_id'] = fields['link_id'].link_id + + view = View() +acceptInvite = view.acceptInvite create = view.create delete = view.delete edit = view.edit +invite = view.invite list = view.list public = view.public export = view.export -invite = view.invite diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/request.py --- a/app/soc/views/models/request.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/views/models/request.py Sat Jan 24 10:19:17 2009 +0000 @@ -66,7 +66,7 @@ rights = {} rights['listSelf'] = [access.checkAgreesToSiteToS] - rights['create'] = [access.allow] # TODO(ljvderijk) Set to deny once host has been converted + rights['create'] = [access.deny] rights['edit'] = [access.checkIsDeveloper] rights['process_invite'] = [access.checkIsMyGroupAcceptedRequest] rights['list'] = [access.checkIsDeveloper] @@ -92,6 +92,11 @@ 'clean_link_id': cleaning.clean_existing_user('link_id') } + new_params['edit_extra_dynafields'] = { + 'scope_path': forms.CharField(widget=forms.HiddenInput, + required=True), + } + patterns = [(r'^%(url_name)s/(?Pinvite)/%(lnp)s$', 'soc.views.models.%(module_name)s.invite', 'Create invite for %(name_plural)s'), @@ -210,23 +215,6 @@ return self._list(request, params, contents, page_name) - def _editPost(self, request, entity, fields): - """See base.View._editPost(). - """ - - # TODO(ljvderijk) remove this once host has been rewritten - callback, args, kwargs = urlresolvers.resolve(request.path) - - # fill in the fields via kwargs - fields['link_id'] = kwargs['link_id'] - fields['scope_path'] = kwargs['scope_path'] - fields['role'] = kwargs['role'] - fields['role_verbose'] = 'Some Role' - fields['state'] = 'group_accepted' - - super(View, self)._editPost(request, entity, fields) - - view = View() create = view.create diff -r 897d9efdb728 -r 5ea2bd9e3fa6 app/soc/views/models/role.py --- a/app/soc/views/models/role.py Sat Jan 24 10:18:30 2009 +0000 +++ b/app/soc/views/models/role.py Sat Jan 24 10:19:17 2009 +0000 @@ -19,19 +19,26 @@ __authors__ = [ '"Sverre Rabbelier" ', + '"Lennard de Rijk" ', ] +from django import http from django import forms from django.utils.translation import ugettext_lazy from soc.logic import dicts +from soc.logic.models import request as request_logic from soc.logic.models import user as user_logic +from soc.logic.helper import request as request_helper from soc.views import helper from soc.views import out_of_band from soc.views.helper import access +from soc.views.helper import decorators from soc.views.helper import redirects +from soc.views.helper import responses from soc.views.models import base +from soc.views.models import request as request_view from soc.views.models import user as user_view import soc.models.request @@ -40,29 +47,6 @@ import soc.views.helper.widgets -class RequestForm(helper.forms.BaseForm): - """Django form displayed when creating a new invititation/request. - """ - - class Meta: - """Inner Meta class that defines some behavior for the form. - """ - - #: db.Model subclass for which the form will gather information - model = soc.models.request.Request - - #: Exclude pretty much everything, model=None would - #: also remove the help text etc. - exclude = ['requester', 'to', 'role', - 'accepted', 'declined'] - - requester = forms.CharField(widget=helper.widgets.ReadOnlyInput()) - - role = forms.CharField(widget=helper.widgets.ReadOnlyInput()) - - to = forms.CharField(widget=helper.widgets.ReadOnlyInput()) - - class View(base.View): """Views for all entities that inherit from Role. @@ -80,10 +64,13 @@ """ new_params = {} - - patterns = [(r'^%(url_name)s/(?Pinvite)/%(lnp)s$', + # TODO(ljvderijk) add request and process_request + patterns = [(r'^%(url_name)s/(?Pinvite)/%(scope)s$', 'soc.views.models.%(module_name)s.invite', - 'Invite %(name_short)s')] + 'Create invite for %(name_plural)s'), + (r'^%(url_name)s/(?Paccept_invite)/%(scope)s/%(lnp)s$', + 'soc.views.models.%(module_name)s.acceptInvite', + 'Accept invite for %(name_plural)s')] new_params['extra_django_patterns'] = patterns new_params['scope_redirect'] = redirects.getInviteRedirect @@ -92,33 +79,211 @@ super(View, self).__init__(params=params) + @decorators.merge_params + @decorators.check_access def invite(self, request, access_type, - page_name=None, params=None, *args, **kwargs): - """Displays the request promotion to Role page. + page_name=None, params=None, **kwargs): + """Creates the page on which an invite can be send out. + + 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 attaining a certain Role. + + 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 attaining a certain Role. + + 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 """ - new_params = {} + # 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) - group_scope = kwargs['link_id'] + # collect the cleaned data from the valid form + key_name, form_fields = soc.views.helper.forms.collectCleanedFields(form) + + # get the group entity for which this request is via the scope_path + group_key_fields = kwargs['scope_path'].rsplit('/',1) + + if len(group_key_fields) == 1: + # there is only a link_id + fields = {'link_id' : group_key_fields[0]} + else: + # there is a scope_path and link_id + fields = {'scope_path' : group_key_fields[0], + 'link_id' : group_key_fields[1]} + + group = params['group_logic'].getForFields(fields, unique=True) + + if group.scope_path: + request_scope_path = '%s/%s' % [group.scope_path, group.link_id] + else: + request_scope_path = group.link_id - new_params['list_action'] = (redirects.getCreateRequestRedirect, - {'group_scope' : group_scope, - 'url_name' : self._params['url_name']}) - new_params['list_description'] = \ - self.DEF_INVITE_INSTRUCTION_MSG_FMT % self._params - new_params['logic'] = user_logic.logic + # create the fields for the new request entity + request_fields = {'link_id' : form_fields['link_id'].link_id, + 'scope' : group, + 'scope_path' : request_scope_path, + '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 group homepage + return http.HttpResponseRedirect('/') + + + @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 Role. + + 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.acceptInvitePost(request, context, params, **kwargs) + else: + # request.method == 'GET' + return self.acceptInviteGet(request, context, params, **kwargs) - new_params = dicts.merge(params, new_params) - params = dicts.merge(new_params, user_view.view._params) - rights = params['rights'] + def acceptInviteGet(self, request, context, params, **kwargs): + """Handles the GET request concerning the creation of a Role 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 Role 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) - try: - access.checkAccess(access_type, request, rights, args, kwargs) - except out_of_band.Error, error: - return helper.responses.errorResponse(error, request) + # collect the cleaned data from the valid form + key_name, fields = soc.views.helper.forms.collectCleanedFields(form) + + # call the post process method + self._acceptInvitePost(fields, request, context, params, **kwargs) + + group_logic = params['group_logic'] + group_entity = group_logic.getFromKeyName(fields['scope_path']) + fields['scope'] = group_entity + + # 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) - content = helper.lists.getListContent(request, params) - contents = [content] + # create new Role entity + entity = self._logic.updateOrCreateFromKeyName(fields, key_name) + + # mark the request as completed + request_helper.completeRequestForRole(entity, params['module_name']) + + # redirect to the roles overview page + return http.HttpResponseRedirect('/user/roles') + - return self._list(request, params, contents, page_name) + def _acceptInvitePost(self, fields, request, context, params, **kwargs): + """ Used to post-process data after the fields have been cleaned. + Args: + fields : the cleaned fields from the role form + 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 + """ + pass