app/soc/views/models/student_proposal.py
changeset 1569 6347d0a4fa7b
parent 1498 00293057b009
child 1584 d8ba8c917f37
equal deleted inserted replaced
1568:cdbe6e86506c 1569:6347d0a4fa7b
    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):
   252                      params=list_params, filter=filter, **kwargs)
   310                      params=list_params, filter=filter, **kwargs)
   253 
   311 
   254 view = View()
   312 view = View()
   255 
   313 
   256 admin = view.admin
   314 admin = view.admin
       
   315 apply = view.apply
   257 create = view.create
   316 create = view.create
   258 delete = view.delete
   317 delete = view.delete
   259 edit = view.edit
   318 edit = view.edit
   260 list = view.list
   319 list = view.list
   261 list_orgs = view.listOrgs
   320 list_orgs = view.listOrgs