app/soc/views/models/student.py
author Lennard de Rijk <ljvderijk@gmail.com>
Thu, 04 Jun 2009 21:58:05 +0200
changeset 2384 71780864a5ed
parent 2371 805400745f57
child 2656 25210120d67b
permissions -rw-r--r--
Now showing link to edit the home page document on the home page. This will only show up if you have the right to edit the document. Update issue 271 Now also working for home pages.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     2
#
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     4
#
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     8
#
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    10
#
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    16
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    17
"""Views for Student.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    18
"""
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    19
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    20
__authors__ = [
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    21
    '"Lennard de Rijk" <ljvderijk@gmail.com>'
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    22
  ]
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    23
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    24
2371
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
    25
import time
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
    26
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    27
from django import forms
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    28
from django.utils.translation import ugettext
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    29
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    30
from soc.logic import cleaning
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    31
from soc.logic import dicts
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    32
from soc.logic.models import program as program_logic
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    33
from soc.logic.models import student as student_logic
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    34
from soc.logic.models import user as user_logic
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    35
from soc.views import out_of_band
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    36
from soc.views.helper import access
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    37
from soc.views.helper import decorators
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    38
from soc.views.helper import dynaform
2186
eeb26c67cffa Add missing responses import and replace usage of helper.responses with just responses in soc.views.models.student module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2158
diff changeset
    39
from soc.views.helper import responses
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    40
from soc.views.helper import redirects
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    41
from soc.views.helper import widgets
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    42
from soc.views.models import program as program_view
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    43
from soc.views.models import role
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    44
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    45
import soc.logic.models.student
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    46
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    47
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    48
class View(role.View):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    49
  """View methods for the Student model.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    50
  """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    51
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    52
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    53
  def __init__(self, params=None):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    54
    """Defines the fields and methods required for the base View class
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    55
    to provide the user with list, public, create, edit and delete views.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    56
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    57
    Params:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    58
      params: a dict with params for this View
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    59
    """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    60
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    61
    rights = access.Checker(params)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    62
    rights['create'] = ['checkIsDeveloper']
2018
c584eb2f57db Added missing access checks to various roles.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1980
diff changeset
    63
    rights['edit'] = [('checkHasActiveRoleForScope', student_logic.logic),
2020
df3552deba66 Clarified docstring in access.py and changed edit access checks for role views.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2018
diff changeset
    64
        ('checkIsMyEntity', [student_logic.logic, 'user', True])]
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    65
    rights['delete'] = ['checkIsDeveloper']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    66
    rights['apply'] = [
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    67
        'checkIsUser',
1382
293a14668dc9 Students can now only get a student role during the student signup period.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1379
diff changeset
    68
        ('checkIsActivePeriod', ['student_signup', 'scope_path']),
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    69
        'checkIsNotParticipatingInProgramInScope',
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    70
        ]
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    71
    rights['manage'] = [
1724
d8d04e17b574 Students can not be kicked from a program by a organization admin.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1584
diff changeset
    72
        ('checkIsAllowedToManageRole', [soc.logic.models.host.logic])]
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    73
    rights['list_projects'] = [
2239
9a47a64dcc08 Students can not list their own projects before the accepted students announced deadline.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2186
diff changeset
    74
        ('checkHasActiveRoleForScope', student_logic.logic),
9a47a64dcc08 Students can not list their own projects before the accepted students announced deadline.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2186
diff changeset
    75
        ('checkIsAfterEvent', ['accepted_students_announced_deadline',
9a47a64dcc08 Students can not list their own projects before the accepted students announced deadline.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2186
diff changeset
    76
                               'scope_path'])]
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    77
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    78
    new_params = {}
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    79
    new_params['logic'] = soc.logic.models.student.logic
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    80
    new_params['group_logic'] = program_logic.logic
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    81
    new_params['group_view'] = program_view.view
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    82
    new_params['rights'] = rights
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    83
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    84
    new_params['scope_view'] = program_view
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    85
    new_params['scope_redirect'] = redirects.getCreateRedirect
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    86
    new_params['manage_redirect'] = redirects.getUserRolesRedirect
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    87
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    88
    new_params['name'] = "Student"
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    89
    new_params['module_name'] = "student"
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    90
    new_params['sidebar_grouping'] = 'Students'
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    91
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    92
    # add apply pattern
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    93
    patterns = [(r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$',
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
    94
        'soc.views.models.%(module_name)s.apply',
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    95
        'Become a %(name)s'),
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    96
        (r'^%(url_name)s/(?P<access_type>list_projects)/%(scope)s$',
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    97
        'soc.views.models.%(module_name)s.list_projects',
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    98
        'List of my Student Projects'),]
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
    99
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   100
    new_params['extra_django_patterns'] = patterns
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   101
1383
18383d2e5a5b Students now have a reference to school again.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1382
diff changeset
   102
    new_params['extra_dynaexclude'] = ['agreed_to_tos', 'school']
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   103
2371
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   104
    current_year = time.gmtime().tm_year
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   105
    # the current year is not the minimum because a program could span
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   106
    # more than one year
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   107
    allowed_years = range(current_year-1, current_year+20)
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   108
1980
db7c98580008 Added fields requested in Issue 392 to Student Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1949
diff changeset
   109
    new_params['create_extra_dynaproperties'] = {
2371
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   110
        'expected_graduation': forms.TypedChoiceField(
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   111
            choices=[(x,x) for x in allowed_years],
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   112
            coerce=lambda val: int(val)
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   113
            )
805400745f57 Changed University Student expected graduation date to be a dynamic dropdown.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2360
diff changeset
   114
        } 
1980
db7c98580008 Added fields requested in Issue 392 to Student Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1949
diff changeset
   115
1461
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   116
    new_params['create_dynafields'] = [
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   117
        {'name': 'scope_path',
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   118
         'base': forms.fields.CharField,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   119
         'widget': forms.HiddenInput,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   120
         'required': True,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   121
         },
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   122
        {'name': 'student_agreement',
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   123
         'base': forms.fields.CharField,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   124
         'required': False,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   125
         'widget': widgets.AgreementField,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   126
         'group': ugettext("5. Terms of Service"),
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   127
         },
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   128
        {'name': 'agreed_to_student_agreement',
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   129
         'base': forms.fields.BooleanField,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   130
         'initial': False,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   131
         'required':True,
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   132
         'label': ugettext('I agree to the Student Agreement'),
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   133
         'group': ugettext("5. Terms of Service"),
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   134
         },
92c5a390739a Convert student and org_admin to dynafield
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1430
diff changeset
   135
        ]
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   136
1384
bb22ea156567 Role overview membership is now determined by setting show_in_roles_overview param to true in the view.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1383
diff changeset
   137
    new_params['show_in_roles_overview'] = True
bb22ea156567 Role overview membership is now determined by setting show_in_roles_overview param to true in the view.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1383
diff changeset
   138
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   139
    params = dicts.merge(params, new_params)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   140
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   141
    super(View, self).__init__(params=params)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   142
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   143
    # create and store the special form for users
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   144
    updated_fields = {
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   145
        'link_id': forms.CharField(widget=forms.HiddenInput,
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   146
            required=True),
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   147
        'clean_link_id': cleaning.clean_user_is_current('link_id')
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   148
        }
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   149
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   150
    user_create_form = dynaform.extendDynaForm(
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   151
        dynaform = self._params['create_form'],
1430
ff8cc6b15e6a Rename dynafields to dynaproperties
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1394
diff changeset
   152
        dynaproperties = updated_fields)
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   153
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   154
    self._params['user_create_form'] = user_create_form
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   155
1384
bb22ea156567 Role overview membership is now determined by setting show_in_roles_overview param to true in the view.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1383
diff changeset
   156
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   157
  @decorators.merge_params
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   158
  @decorators.check_access
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   159
  def apply(self, request, access_type,
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   160
           page_name=None, params=None, **kwargs):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   161
    """Handles student role creation for the current user.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   162
    """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   163
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   164
    user_entity = user_logic.logic.getForCurrentAccount()
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   165
    params['create_form'] = params['user_create_form']
2360
e389d26949db Style and pylint fixes in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2239
diff changeset
   166
    
e389d26949db Style and pylint fixes in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2239
diff changeset
   167
    # pylint: disable-msg=E1103
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   168
    return self.create(request, access_type='unspecified', page_name=page_name,
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   169
        params=params, link_id=user_entity.link_id, **kwargs)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   170
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   171
  @decorators.merge_params
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   172
  @decorators.check_access
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   173
  def listProjects(self, request, access_type,
2157
139cd2731412 Indentation fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2154
diff changeset
   174
                   page_name=None, params=None, **kwargs):
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   175
    """View that lists all of the current user's Student Projects for the
2158
2cbadb6efe9f Indentation fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2157
diff changeset
   176
    Program given as Scope.
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   177
    """
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   178
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   179
    from soc.views.models import student_project as project_view
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   180
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   181
    user_entity = user_logic.logic.getForCurrentAccount()
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   182
2360
e389d26949db Style and pylint fixes in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2239
diff changeset
   183
    # pylint: disable-msg=E1103
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   184
    fields = {'link_id': user_entity.link_id,
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   185
        'scope_path': kwargs['scope_path']}
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   186
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   187
    try:
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   188
      student_entity = student_logic.logic.getFromKeyFieldsOr404(fields)
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   189
    except out_of_band.Error, error:
2186
eeb26c67cffa Add missing responses import and replace usage of helper.responses with just responses in soc.views.models.student module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2158
diff changeset
   190
      return responses.errorResponse(
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   191
          error, request, template=params['error_public'])
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   192
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   193
    # set the fields we need for the Student Project list
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   194
    fields = {'student': student_entity}
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   195
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   196
    list_params = project_view.view.getParams().copy()
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   197
    list_params['list_description'] = ugettext(
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   198
        'List of my Student Projects for %s') %(student_entity.scope.name)
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   199
    list_params['list_action'] = (redirects.getStudentEditRedirect, list_params)
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   200
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   201
    return project_view.view.list(request, access_type, page_name=page_name,
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   202
                                  params=list_params, filter=fields)
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   203
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   204
  def _editPost(self, request, entity, fields):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   205
    """See base.View._editPost().
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   206
    """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   207
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   208
    if not entity:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   209
      fields['user'] = fields['link_id']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   210
      fields['link_id'] = fields['user'].link_id
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   211
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   212
    fields['agreed_to_tos'] = fields['agreed_to_student_agreement']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   213
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   214
    super(View, self)._editPost(request, entity, fields)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   215
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   216
  def _editGet(self, request, entity, form):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   217
    """Sets the content of the agreed_to_tos_on field and replaces.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   218
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   219
    Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed.
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   220
    For params see base.View._editGet().
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   221
    """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   222
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   223
    if entity.agreed_to_tos:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   224
      form.fields['agreed_to_student_agreement'] = forms.fields.BooleanField(
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   225
          widget=forms.HiddenInput, initial=entity.agreed_to_tos,
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   226
          required=True)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   227
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   228
    super(View, self)._editGet(request, entity, form)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   229
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   230
  def _editContext(self, request, context):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   231
    """See base.View._editContext().
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   232
    """
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   233
2076
1cd180cc56c9 Style fixes and removal of unused imports in soc.views.models.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2050
diff changeset
   234
    # entity = context['entity']
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   235
    form = context['form']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   236
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   237
    if 'scope_path' in form.initial:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   238
      scope_path = form.initial['scope_path']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   239
    elif 'scope_path' in request.POST:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   240
      scope_path = request.POST['scope_path']
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   241
    else:
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   242
      form.fields['student_agreement'] = None
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   243
      return
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   244
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   245
    program = program_logic.logic.getFromKeyName(scope_path)
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   246
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   247
    if not (program and program.student_agreement):
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   248
      return
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   249
1726
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   250
    agreement = program.student_agreement
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   251
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   252
    content = agreement.content
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   253
    params = {'url_name': 'document'}
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   254
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   255
    widget = form.fields['student_agreement'].widget
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   256
    widget.text = content
711c8dcab67e Add a link to the full agreement text
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1724
diff changeset
   257
    widget.url = redirects.getPublicRedirect(agreement, params)
1379
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   258
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   259
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   260
view = View()
e6341549300c Added student view and accompanying templates.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
diff changeset
   261
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   262
apply = decorators.view(view.apply)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   263
create = decorators.view(view.create)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   264
delete = decorators.view(view.delete)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   265
edit = decorators.view(view.edit)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   266
list = decorators.view(view.list)
2154
a0a1594e58ae Added listing of Student Projects for Students themselves.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2076
diff changeset
   267
list_projects = decorators.view(view.listProjects)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   268
manage = decorators.view(view.manage)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   269
public = decorators.view(view.public)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1461
diff changeset
   270
export = decorators.view(view.export)