17 """Views for Organization Mentors. |
17 """Views for Organization Mentors. |
18 """ |
18 """ |
19 |
19 |
20 __authors__ = [ |
20 __authors__ = [ |
21 '"Lennard de Rijk" <ljvderijk@gmail.com>' |
21 '"Lennard de Rijk" <ljvderijk@gmail.com>' |
|
22 '"Sverre Rabbelier" <sverre@rabbelier.nl>', |
22 ] |
23 ] |
23 |
24 |
24 |
25 |
25 from django import forms |
26 from django import forms |
|
27 from django.utils.translation import ugettext |
26 |
28 |
27 from soc.logic import dicts |
29 from soc.logic import dicts |
28 from soc.logic.models import organization as org_logic |
30 from soc.logic.models import organization as org_logic |
29 from soc.views.helper import access |
31 from soc.views.helper import access |
30 from soc.views.helper import dynaform |
32 from soc.views.helper import dynaform |
74 new_params['module_name'] = "mentor" |
76 new_params['module_name'] = "mentor" |
75 new_params['sidebar_grouping'] = 'Organizations' |
77 new_params['sidebar_grouping'] = 'Organizations' |
76 |
78 |
77 new_params['extra_dynaexclude'] = ['agreed_to_tos'] |
79 new_params['extra_dynaexclude'] = ['agreed_to_tos'] |
78 |
80 |
|
81 new_params['create_extra_dynafields'] = { |
|
82 'scope_path': forms.fields.CharField(widget=forms.HiddenInput, |
|
83 required=True), |
|
84 'mentor_agreement': forms.fields.CharField(required=False, |
|
85 widget=widgets.AgreementField), |
|
86 'agreed_to_mentor_agreement': forms.fields.BooleanField( |
|
87 initial=False, required=True, |
|
88 label=ugettext('I agree to the Mentor Agreement')), |
|
89 } |
|
90 |
79 new_params['allow_requests_and_invites'] = True |
91 new_params['allow_requests_and_invites'] = True |
80 |
92 |
81 params = dicts.merge(params, new_params) |
93 params = dicts.merge(params, new_params) |
82 |
94 |
83 super(View, self).__init__(params=params) |
95 super(View, self).__init__(params=params) |
86 params['group_view'].registerRole(params['module_name'], self) |
98 params['group_view'].registerRole(params['module_name'], self) |
87 |
99 |
88 # create and store the special form for invited users |
100 # create and store the special form for invited users |
89 updated_fields = { |
101 updated_fields = { |
90 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), |
102 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), |
91 required=False)} |
103 required=False), |
|
104 'mentor_agreement': forms.fields.Field(required=False, |
|
105 widget=widgets.AgreementField), |
|
106 } |
92 |
107 |
93 invited_create_form = dynaform.extendDynaForm( |
108 invited_create_form = dynaform.extendDynaForm( |
94 dynaform = self._params['create_form'], |
109 dynaform = self._params['create_form'], |
95 dynafields = updated_fields) |
110 dynafields = updated_fields) |
96 |
111 |
101 """ |
116 """ |
102 if not entity: |
117 if not entity: |
103 fields['user'] = fields['link_id'] |
118 fields['user'] = fields['link_id'] |
104 fields['link_id'] = fields['user'].link_id |
119 fields['link_id'] = fields['user'].link_id |
105 |
120 |
|
121 fields['agreed_to_tos'] = fields['agreed_to_mentor_agreement'] |
|
122 |
106 super(View, self)._editPost(request, entity, fields) |
123 super(View, self)._editPost(request, entity, fields) |
107 |
124 |
108 def _acceptInvitePost(self, fields, request, context, params, **kwargs): |
125 def _acceptInvitePost(self, fields, request, context, params, **kwargs): |
109 """Fills in the fields that were missing in the invited_created_form. |
126 """Fills in the fields that were missing in the invited_created_form. |
110 |
127 |
111 For params see base.View._acceptInvitePost() |
128 For params see base.View._acceptInvitePost() |
112 """ |
129 """ |
|
130 |
113 # fill in the appropriate fields that were missing in the form |
131 # fill in the appropriate fields that were missing in the form |
114 fields['user'] = fields['link_id'] |
132 fields['user'] = fields['link_id'] |
115 fields['link_id'] = fields['user'].link_id |
133 fields['link_id'] = fields['user'].link_id |
|
134 fields['agreed_to_tos'] = fields['agreed_to_mentor_agreement'] |
116 |
135 |
|
136 def _editGet(self, request, entity, form): |
|
137 """Sets the content of the agreed_to_tos_on field and replaces. |
|
138 |
|
139 Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed. |
|
140 For params see base.View._editGet(). |
|
141 """ |
|
142 |
|
143 if entity.agreed_to_tos: |
|
144 form.fields['agreed_to_mentor_agreement'] = forms.fields.BooleanField( |
|
145 widget=forms.HiddenInput, initial=entity.agreed_to_tos, |
|
146 required=True) |
|
147 |
|
148 super(View, self)._editGet(request, entity, form) |
|
149 |
|
150 def _editContext(self, request, context): |
|
151 """See base.View._editContext. |
|
152 """ |
|
153 |
|
154 entity = context['entity'] |
|
155 form = context['form'] |
|
156 |
|
157 if 'scope_path' in form.initial: |
|
158 scope_path = form.initial['scope_path'] |
|
159 elif 'scope_path' in request.POST: |
|
160 # TODO: do this nicely |
|
161 scope_path = request.POST['scope_path'] |
|
162 else: |
|
163 # TODO: is this always sufficient? |
|
164 form.fields['mentor_agreement'] = None |
|
165 return |
|
166 |
|
167 entity = org_logic.logic.getFromKeyName(scope_path) |
|
168 |
|
169 if not (entity and entity.scope and entity.scope.mentor_agreement): |
|
170 return |
|
171 |
|
172 content = entity.scope.mentor_agreement.content |
|
173 |
|
174 form.fields['mentor_agreement'].widget.text = content |
117 |
175 |
118 view = View() |
176 view = View() |
119 |
177 |
120 accept_invite = view.acceptInvite |
178 accept_invite = view.acceptInvite |
121 create = view.create |
179 create = view.create |