app/soc/views/models/org_admin.py
changeset 1283 438dceed3132
parent 1248 f318538394d9
child 1307 091a21cf3627
equal deleted inserted replaced
1282:005be2cf889d 1283:438dceed3132
    17 """Views for Organization Admins.
    17 """Views for Organization Admins.
    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.logic.models import org_admin as org_admin_logic
    31 from soc.logic.models import org_admin as org_admin_logic
    30 from soc.views.helper import access
    32 from soc.views.helper import access
    74     new_params['module_name'] = "org_admin"
    76     new_params['module_name'] = "org_admin"
    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         'admin_agreement': forms.fields.CharField(required=False,
       
    85             widget=widgets.AgreementField),
       
    86         'agreed_to_admin_agreement': forms.fields.BooleanField(
       
    87             initial=False, required=True,
       
    88             label=ugettext('I agree to the Admin Agreement')),
       
    89         }
       
    90 
    79     new_params['allow_invites'] = True
    91     new_params['allow_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         'admin_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 
    97     params['invited_create_form'] = invited_create_form
   112     params['invited_create_form'] = invited_create_form
    98 
   113 
    99   def _editPost(self, request, entity, fields):
   114   def _editPost(self, request, entity, fields):
   100     """See base.View._editPost().
   115     """See base.View._editPost().
   101     """
   116     """
       
   117 
   102     if not entity:
   118     if not entity:
   103       fields['user'] = fields['link_id']
   119       fields['user'] = fields['link_id']
   104       fields['link_id'] = fields['user'].link_id
   120       fields['link_id'] = fields['user'].link_id
       
   121 
       
   122     fields['agreed_to_tos'] = fields['agreed_to_admin_agreement']
   105 
   123 
   106     super(View, self)._editPost(request, entity, fields)
   124     super(View, self)._editPost(request, entity, fields)
   107 
   125 
   108   def _acceptInvitePost(self, fields, request, context, params, **kwargs):
   126   def _acceptInvitePost(self, fields, request, context, params, **kwargs):
   109     """Fills in the fields that were missing in the invited_created_form.
   127     """Fills in the fields that were missing in the invited_created_form.
   110     
   128 
   111     For params see base.View._acceptInvitePost()
   129     For params see base.View._acceptInvitePost()
   112     """
   130     """
       
   131 
   113     # fill in the appropriate fields that were missing in the form
   132     # fill in the appropriate fields that were missing in the form
   114     fields['user'] = fields['link_id']
   133     fields['user'] = fields['link_id']
   115     fields['link_id'] = fields['user'].link_id
   134     fields['link_id'] = fields['user'].link_id
       
   135     fields['agreed_to_tos'] = fields['agreed_to_admin_agreement']
       
   136 
       
   137   def _editGet(self, request, entity, form):
       
   138     """Sets the content of the agreed_to_tos_on field and replaces.
       
   139 
       
   140     Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed.
       
   141     For params see base.View._editGet().
       
   142     """
       
   143 
       
   144     if entity.agreed_to_tos:
       
   145       form.fields['agreed_to_admin_agreement'] = forms.fields.BooleanField(
       
   146           widget=forms.HiddenInput, initial=entity.agreed_to_tos,
       
   147           required=True)
       
   148 
       
   149     super(View, self)._editGet(request, entity, form)
       
   150 
       
   151   def _editContext(self, request, context):
       
   152     """See base.View._editContext.
       
   153     """
       
   154 
       
   155     entity = context['entity']
       
   156     form = context['form']
       
   157 
       
   158     if 'scope_path' in form.initial:
       
   159       scope_path = form.initial['scope_path']
       
   160     elif 'scope_path' in request.POST:
       
   161       # TODO: do this nicely
       
   162       scope_path = request.POST['scope_path']
       
   163     else:
       
   164       # TODO: is this always sufficient?
       
   165       form.fields['admin_agreement'] = None
       
   166       return
       
   167 
       
   168     entity = org_logic.logic.getFromKeyName(scope_path)
       
   169 
       
   170     if not (entity and entity.scope and entity.scope.org_admin_agreement):
       
   171       return
       
   172 
       
   173     content = entity.scope.org_admin_agreement.content
       
   174 
       
   175     form.fields['admin_agreement'].widget.text = content
   116 
   176 
   117 
   177 
   118 view = View()
   178 view = View()
   119 
   179 
   120 accept_invite = view.acceptInvite
   180 accept_invite = view.acceptInvite