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