# HG changeset patch # User Lennard de Rijk # Date 1235856388 0 # Node ID 6347d0a4fa7bc886106d89f515ae907223ef13c9 # Parent cdbe6e86506cf3a54575d0b51efb90b5a46e8192 Students who follow the submit your student proposal link will now see their org's proposal template when creating their own proposal. Also made the org link_id field readonly. Patch by: Lennard de Rijk Reviewed by: to-be-reviewed diff -r cdbe6e86506c -r 6347d0a4fa7b app/soc/views/models/student_proposal.py --- a/app/soc/views/models/student_proposal.py Sat Feb 28 21:25:23 2009 +0000 +++ b/app/soc/views/models/student_proposal.py Sat Feb 28 21:26:28 2009 +0000 @@ -35,6 +35,8 @@ from soc.logic.models import user as user_logic from soc.views.helper import access from soc.views.helper import decorators +from soc.views.helper import dynaform +from soc.views.helper import params as params_helper from soc.views.helper import redirects from soc.views.helper import widgets from soc.views.models import base @@ -89,7 +91,7 @@ patterns = [ (r'^%(url_name)s/(?Papply)/%(scope)s$', - 'soc.views.models.%(module_name)s.create', + 'soc.views.models.%(module_name)s.apply', 'Create a new %(name)s'), (r'^%(url_name)s/(?Plist_self)/%(scope)s$', 'soc.views.models.%(module_name)s.list_self', @@ -102,7 +104,7 @@ new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = ['org', 'program', 'score', - 'status', 'mentor', 'link_id'] + 'status', 'mentor', 'link_id',] new_params['create_extra_dynaproperties'] = { 'content': forms.fields.CharField(required=True, @@ -129,6 +131,25 @@ super(View, self).__init__(params=params) + # create the special form for students + dynafields = [ + {'name': 'organization', + 'base': forms.CharField, + 'label': 'Organization Link ID', + 'widget': widgets.ReadOnlyInput(), + 'required': False, + }, + ] + + dynaproperties = params_helper.getDynaFields(dynafields) + + student_create_form = dynaform.extendDynaForm( + dynaform=self._params['create_form'], + dynaproperties=dynaproperties) + + params['student_create_form'] = student_create_form + + def _editGet(self, request, entity, form): """See base.View._editGet(). """ @@ -174,6 +195,43 @@ @decorators.merge_params @decorators.check_access + def apply(self, request, access_type, + page_name=None, params=None, **kwargs): + """Special view used to prepopulate the form with the organization + contributors template. + + For params see base.View.public() + """ + get_dict = request.GET + + if get_dict.get('organization'): + # organization chosen, prepopulate with template + + # get the organization + student_entity = student_logic.logic.getFromKeyName(kwargs['scope_path']) + program_entity = student_entity.scope + + filter = {'link_id': get_dict['organization'], + 'scope': program_entity} + + org_entity = org_logic.logic.getForFields(filter, unique=True) + + if org_entity: + # organization found use special form + params['create_form'] = params['student_create_form'] + kwargs['content'] = org_entity.contrib_template + + # Create page is an edit page with no key fields + empty_kwargs = {} + fields = self._logic.getKeyFieldNames() + for field in fields: + empty_kwargs[field] = None + + return super(View, self).edit(request, access_type, page_name=page_name, + params=params, seed=kwargs, **empty_kwargs) + + @decorators.merge_params + @decorators.check_access def edit(self, request, access_type, page_name=None, params=None, seed=None, **kwargs): """If the POST contains (action, Withdraw) the proposal in kwargs @@ -254,6 +312,7 @@ view = View() admin = view.admin +apply = view.apply create = view.create delete = view.delete edit = view.edit