3 # Copyright 2009 the Melange authors.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 """Views for Organization Mentors.
21 '"Lennard de Rijk" <ljvderijk@gmail.com>'
22 '"Sverre Rabbelier" <sverre@rabbelier.nl>',
26 from django
import forms
27 from django
.utils
.translation
import ugettext
29 from soc
.logic
import dicts
30 from soc
.logic
.models
import organization
as org_logic
31 from soc
.views
.helper
import access
32 from soc
.views
.helper
import decorators
33 from soc
.views
.helper
import dynaform
34 from soc
.views
.helper
import params
as params_helper
35 from soc
.views
.helper
import widgets
36 from soc
.views
.models
import organization
as org_view
37 from soc
.views
.models
import role
39 import soc
.logic
.models
.mentor
40 import soc
.logic
.models
.org_admin
43 class View(role
.View
):
44 """View methods for the Organization Mentors model.
47 def __init__(self
, params
=None):
48 """Defines the fields and methods required for the base View class
49 to provide the user with list, public, create, edit and delete views.
52 params: a dict with params for this View
55 rights
= access
.Checker(params
)
56 rights
['create'] = ['checkIsDeveloper']
57 rights
['edit'] = [('checkHasActiveRoleForScope',
58 soc
.logic
.models
.mentor
.logic
)]
59 rights
['delete'] = ['checkIsDeveloper']
60 rights
['invite'] = [('checkHasActiveRoleForScope',
61 soc
.logic
.models
.org_admin
.logic
)]
62 rights
['accept_invite'] = [('checkCanCreateFromRequest', 'mentor'),
63 'checkIsNotStudentForProgramOfOrg']
64 rights
['request'] = ['checkIsNotStudentForProgramOfOrg',
65 ('checkCanMakeRequestToGroup', org_logic
)]
66 rights
['process_request'] = [
67 ('checkHasActiveRoleForScope', soc
.logic
.models
.org_admin
.logic
),
68 ('checkCanProcessRequest', 'mentor')]
70 ('checkIsAllowedToManageRole', [soc
.logic
.models
.mentor
.logic
,
71 soc
.logic
.models
.org_admin
.logic
])]
74 new_params
['logic'] = soc
.logic
.models
.mentor
.logic
75 new_params
['group_logic'] = org_logic
.logic
76 new_params
['group_view'] = org_view
.view
77 new_params
['rights'] = rights
79 new_params
['scope_view'] = org_view
81 new_params
['name'] = "Mentor"
82 new_params
['module_name'] = "mentor"
83 new_params
['sidebar_grouping'] = 'Organizations'
85 new_params
['extra_dynaexclude'] = ['agreed_to_tos', 'program']
87 new_params
['create_dynafields'] = [
88 {'name': 'scope_path',
89 'base': forms
.fields
.CharField
,
90 'widget': forms
.HiddenInput
,
93 {'name': 'mentor_agreement',
94 'base': forms
.fields
.CharField
,
96 'widget': widgets
.AgreementField
,
97 'group': ugettext("5. Terms of Service"),
99 {'name': 'agreed_to_mentor_agreement',
100 'base': forms
.fields
.BooleanField
,
103 'label': ugettext('I agree to the Mentor Agreement'),
104 'group': ugettext("5. Terms of Service"),
108 new_params
['allow_requests_and_invites'] = True
109 new_params
['show_in_roles_overview'] = True
111 params
= dicts
.merge(params
, new_params
)
113 super(View
, self
).__init
__(params
=params
)
115 # register the role with the group_view
116 params
['group_view'].registerRole(params
['module_name'], self
)
118 # create and store the special form for invited users
121 'base': forms
.CharField
,
122 'widget': widgets
.ReadOnlyInput(),
125 {'name': 'mentor_agreement',
126 'base': forms
.fields
.Field
,
128 'widget': widgets
.AgreementField
,
129 'group': ugettext("5. Terms of Service"),
133 dynaproperties
= params_helper
.getDynaFields(dynafields
)
135 invited_create_form
= dynaform
.extendDynaForm(
136 dynaform
=self
._params
['create_form'],
137 dynaproperties
=dynaproperties
)
139 params
['invited_create_form'] = invited_create_form
141 def _editPost(self
, request
, entity
, fields
):
142 """See base.View._editPost().
145 fields
['user'] = fields
['link_id']
146 fields
['link_id'] = fields
['user'].link_id
148 group_logic
= self
._params
['group_logic']
149 group_entity
= group_logic
.getFromKeyName(fields
['scope_path'])
150 fields
['program'] = group_entity
.scope
152 fields
['agreed_to_tos'] = fields
['agreed_to_mentor_agreement']
154 super(View
, self
)._editPost
(request
, entity
, fields
)
156 def _acceptInvitePost(self
, fields
, request
, context
, params
, **kwargs
):
157 """Fills in the fields that were missing in the invited_created_form.
159 For params see base.View._acceptInvitePost()
162 # fill in the appropriate fields that were missing in the form
163 fields
['user'] = fields
['link_id']
164 fields
['link_id'] = fields
['user'].link_id
165 fields
['agreed_to_tos'] = fields
['agreed_to_mentor_agreement']
167 group_logic
= params
['group_logic']
168 group_entity
= group_logic
.getFromKeyName(fields
['scope_path'])
169 fields
['program'] = group_entity
.scope
171 def _editGet(self
, request
, entity
, form
):
172 """Sets the content of the agreed_to_tos_on field and replaces.
174 Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed.
175 For params see base.View._editGet().
178 if entity
.agreed_to_tos
:
179 form
.fields
['agreed_to_mentor_agreement'] = forms
.fields
.BooleanField(
180 widget
=forms
.HiddenInput
, initial
=entity
.agreed_to_tos
,
183 super(View
, self
)._editGet
(request
, entity
, form
)
185 def _editContext(self
, request
, context
):
186 """See base.View._editContext.
189 entity
= context
['entity']
190 form
= context
['form']
192 if 'scope_path' in form
.initial
:
193 scope_path
= form
.initial
['scope_path']
194 elif 'scope_path' in request
.POST
:
195 # TODO: do this nicely
196 scope_path
= request
.POST
['scope_path']
198 # TODO: is this always sufficient?
199 form
.fields
['mentor_agreement'] = None
202 entity
= org_logic
.logic
.getFromKeyName(scope_path
)
204 if not (entity
and entity
.scope
and entity
.scope
.mentor_agreement
):
207 content
= entity
.scope
.mentor_agreement
.content
209 form
.fields
['mentor_agreement'].widget
.text
= content
213 accept_invite
= decorators
.view(view
.acceptInvite
)
214 admin
= decorators
.view(view
.admin
)
215 create
= decorators
.view(view
.create
)
216 delete
= decorators
.view(view
.delete
)
217 edit
= decorators
.view(view
.edit
)
218 invite
= decorators
.view(view
.invite
)
219 list = decorators
.view(view
.list)
220 manage
= decorators
.view(view
.manage
)
221 process_request
= decorators
.view(view
.processRequest
)
222 request
= decorators
.view(view
.request
)
223 public
= decorators
.view(view
.public
)
224 export
= decorators
.view(view
.export
)