app/soc/views/models/mentor.py
changeset 1284 92f7a24d8f42
parent 1248 f318538394d9
child 1307 091a21cf3627
equal deleted inserted replaced
1283:438dceed3132 1284:92f7a24d8f42
    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