33 from soc.logic.models import organization as org_logic |
33 from soc.logic.models import organization as org_logic |
34 from soc.logic.models import student as student_logic |
34 from soc.logic.models import student as student_logic |
35 from soc.logic.models import user as user_logic |
35 from soc.logic.models import user as user_logic |
36 from soc.views.helper import access |
36 from soc.views.helper import access |
37 from soc.views.helper import decorators |
37 from soc.views.helper import decorators |
|
38 from soc.views.helper import dynaform |
|
39 from soc.views.helper import params as params_helper |
38 from soc.views.helper import redirects |
40 from soc.views.helper import redirects |
39 from soc.views.helper import widgets |
41 from soc.views.helper import widgets |
40 from soc.views.models import base |
42 from soc.views.models import base |
41 from soc.views.models import student as student_view |
43 from soc.views.models import student as student_view |
42 |
44 |
87 |
89 |
88 new_params['no_create_with_key_fields'] = True |
90 new_params['no_create_with_key_fields'] = True |
89 |
91 |
90 patterns = [ |
92 patterns = [ |
91 (r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', |
93 (r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', |
92 'soc.views.models.%(module_name)s.create', |
94 'soc.views.models.%(module_name)s.apply', |
93 'Create a new %(name)s'), |
95 'Create a new %(name)s'), |
94 (r'^%(url_name)s/(?P<access_type>list_self)/%(scope)s$', |
96 (r'^%(url_name)s/(?P<access_type>list_self)/%(scope)s$', |
95 'soc.views.models.%(module_name)s.list_self', |
97 'soc.views.models.%(module_name)s.list_self', |
96 'List my %(name_plural)s'), |
98 'List my %(name_plural)s'), |
97 (r'^%(url_name)s/(?P<access_type>list_orgs)/%(scope)s$', |
99 (r'^%(url_name)s/(?P<access_type>list_orgs)/%(scope)s$', |
100 ] |
102 ] |
101 |
103 |
102 new_params['extra_django_patterns'] = patterns |
104 new_params['extra_django_patterns'] = patterns |
103 |
105 |
104 new_params['extra_dynaexclude'] = ['org', 'program', 'score', |
106 new_params['extra_dynaexclude'] = ['org', 'program', 'score', |
105 'status', 'mentor', 'link_id'] |
107 'status', 'mentor', 'link_id',] |
106 |
108 |
107 new_params['create_extra_dynaproperties'] = { |
109 new_params['create_extra_dynaproperties'] = { |
108 'content': forms.fields.CharField(required=True, |
110 'content': forms.fields.CharField(required=True, |
109 widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), |
111 widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), |
110 'scope_path': forms.CharField(widget=forms.HiddenInput, |
112 'scope_path': forms.CharField(widget=forms.HiddenInput, |
127 |
129 |
128 params = dicts.merge(params, new_params) |
130 params = dicts.merge(params, new_params) |
129 |
131 |
130 super(View, self).__init__(params=params) |
132 super(View, self).__init__(params=params) |
131 |
133 |
|
134 # create the special form for students |
|
135 dynafields = [ |
|
136 {'name': 'organization', |
|
137 'base': forms.CharField, |
|
138 'label': 'Organization Link ID', |
|
139 'widget': widgets.ReadOnlyInput(), |
|
140 'required': False, |
|
141 }, |
|
142 ] |
|
143 |
|
144 dynaproperties = params_helper.getDynaFields(dynafields) |
|
145 |
|
146 student_create_form = dynaform.extendDynaForm( |
|
147 dynaform=self._params['create_form'], |
|
148 dynaproperties=dynaproperties) |
|
149 |
|
150 params['student_create_form'] = student_create_form |
|
151 |
|
152 |
132 def _editGet(self, request, entity, form): |
153 def _editGet(self, request, entity, form): |
133 """See base.View._editGet(). |
154 """See base.View._editGet(). |
134 """ |
155 """ |
135 |
156 |
136 form.fields['link_id'].initial = entity.link_id |
157 form.fields['link_id'].initial = entity.link_id |
169 |
190 |
170 if entity.mentor: |
191 if entity.mentor: |
171 context['mentor_name'] = entity.mentor.name() |
192 context['mentor_name'] = entity.mentor.name() |
172 else: |
193 else: |
173 context['mentor_name'] = "No mentor assigned" |
194 context['mentor_name'] = "No mentor assigned" |
|
195 |
|
196 @decorators.merge_params |
|
197 @decorators.check_access |
|
198 def apply(self, request, access_type, |
|
199 page_name=None, params=None, **kwargs): |
|
200 """Special view used to prepopulate the form with the organization |
|
201 contributors template. |
|
202 |
|
203 For params see base.View.public() |
|
204 """ |
|
205 get_dict = request.GET |
|
206 |
|
207 if get_dict.get('organization'): |
|
208 # organization chosen, prepopulate with template |
|
209 |
|
210 # get the organization |
|
211 student_entity = student_logic.logic.getFromKeyName(kwargs['scope_path']) |
|
212 program_entity = student_entity.scope |
|
213 |
|
214 filter = {'link_id': get_dict['organization'], |
|
215 'scope': program_entity} |
|
216 |
|
217 org_entity = org_logic.logic.getForFields(filter, unique=True) |
|
218 |
|
219 if org_entity: |
|
220 # organization found use special form |
|
221 params['create_form'] = params['student_create_form'] |
|
222 kwargs['content'] = org_entity.contrib_template |
|
223 |
|
224 # Create page is an edit page with no key fields |
|
225 empty_kwargs = {} |
|
226 fields = self._logic.getKeyFieldNames() |
|
227 for field in fields: |
|
228 empty_kwargs[field] = None |
|
229 |
|
230 return super(View, self).edit(request, access_type, page_name=page_name, |
|
231 params=params, seed=kwargs, **empty_kwargs) |
174 |
232 |
175 @decorators.merge_params |
233 @decorators.merge_params |
176 @decorators.check_access |
234 @decorators.check_access |
177 def edit(self, request, access_type, |
235 def edit(self, request, access_type, |
178 page_name=None, params=None, seed=None, **kwargs): |
236 page_name=None, params=None, seed=None, **kwargs): |