app/soc/modules/ghop/views/helper/access.py
author Daniel Hans <Daniel.M.Hans@gmail.com>
Sat, 14 Nov 2009 17:22:44 +0100
changeset 3088 08b9f4de6675
parent 3070 afd98e17a2b2
permissions -rw-r--r--
Users who claim or work on tasks may list them without having student role.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     2
#
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     4
#
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     8
#
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    10
#
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    16
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    17
"""Access control helper.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    18
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    19
See soc.views.helper.access module.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    20
"""
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    21
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    22
__authors__ = [
2922
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    23
    '"Madhusudan.C.S" <madhusudancs@gmail.com>',
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
    24
    '"Daniel Hans" <daniel.m.hans@gmail.com>',
2922
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    25
    '"Lennard de Rijk" <ljvderijk@gmail.com>',
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    26
  ]
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    27
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    28
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    29
from django.utils.translation import ugettext
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    30
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    31
from soc.logic.helper import timeline as timeline_helper
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
    32
from soc.logic.models import host as host_logic
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    33
from soc.logic.models import user as user_logic
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
from soc.views import out_of_band
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
from soc.views.helper import access
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
from soc.modules.ghop.logic.models import mentor as ghop_mentor_logic
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
from soc.modules.ghop.logic.models import org_admin as ghop_org_admin_logic
2922
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    39
from soc.modules.ghop.logic.models import program as ghop_program_logic
3088
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
    40
from soc.modules.ghop.logic.models.student import logic as ghop_student_logic
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    41
from soc.modules.ghop.logic.models import task as ghop_task_logic
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    44
DEF_CANT_EDIT_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    45
    'This task cannot be edited since it has been claimed at least '
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    46
    'once before.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    47
2922
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    48
DEF_CANT_REGISTER = ugettext(
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    49
    'You have not completed your first task to register as a student. ')
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
    50
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    51
DEF_MAX_TASKS_REACHED_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    52
    'You have reached the maximum number of Tasks allowed '
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    53
    'for your organization for this program.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    54
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    55
DEF_NEED_ROLE_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    56
    'You do not have the required role.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    57
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    58
DEF_NO_ACTIVE_ENTITY_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    59
    'There is no such active entity.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    60
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    61
DEF_NO_PUB_TASK_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    62
    'There is no such published task.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    63
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    64
DEF_PAGE_INACTIVE_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    65
    'This page is inactive at this time.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    66
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    67
DEF_SIGN_UP_AS_OA_MENTOR_MSG = ugettext(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    68
    'You first need to sign up as an Org Admin or a Mentor.')
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    69
3088
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
    70
DEF_NO_TASKS_ASSIGNED = ugettext(
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
    71
    'There are no tasks which have been assigned to you.')
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
    72
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    73
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    74
class GHOPChecker(access.Checker):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    75
  """See soc.views.helper.access.Checker.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    76
  """
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    77
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    78
  @access.allowDeveloper
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    79
  @access.denySidebar
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
    80
  def checkCanOrgAdminOrMentorEdit(self, django_args,
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    81
                                   key_location, check_limit):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    82
    """Checks if the mentors can create task for this program,
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    83
    and obeys the task quota limit assigned for their org when check_limit is
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    84
    True.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    85
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    86
    Args:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    87
      django_args: a dictionary with django's arguments
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    88
      key_location: the key for django_args in which the key_name
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    89
                    from the mentor is stored
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
    90
      check_limit: iff true checks if the organization reached the
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    91
                   task quota limit for the given program.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    92
    """
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    93
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    94
    self.checkIsUser(django_args)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    95
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    96
    user_account = user_logic.logic.getForCurrentAccount()
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    97
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    98
    filter = {
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    99
        'user': user_account,
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   100
        'scope_path': django_args[key_location],
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   101
        'status': 'active'
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   102
        }
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   103
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   104
    role_entity = ghop_org_admin_logic.logic.getForFields(filter, unique=True)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   105
    if not role_entity:
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   106
      role_entity = ghop_mentor_logic.logic.getForFields(filter, unique=True)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   107
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   108
    if not role_entity:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   109
      raise out_of_band.AccessViolation(
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   110
          message_fmt=DEF_SIGN_UP_AS_OA_MENTOR_MSG)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   111
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   112
    program_entity = role_entity.program
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   113
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   114
    if not timeline_helper.isActivePeriod(program_entity.timeline, 'program'):
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   115
      raise out_of_band.AccessViolation(message_fmt=DEF_PAGE_INACTIVE_MSG)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   116
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   117
    org_entity = role_entity.scope
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   118
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   119
    if check_limit:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   120
      # count all tasks from this organization
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   121
      fields = {'scope': org_entity}
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   122
      task_query = ghop_task_logic.logic.getQueryForFields(fields)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   123
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   124
      if task_query.count() >= org_entity.task_quota_limit:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   125
        # too many tasks access denied
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   126
        raise out_of_band.AccessViolation(
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   127
            message_fmt=DEF_MAX_TASKS_REACHED_MSG)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   128
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   129
    if 'link_id' in django_args:
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   130
      task_entity = ghop_task_logic.logic.getFromKeyFieldsOr404(django_args)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   131
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   132
      if task_entity.status not in ['Unapproved', 'Unpublished', 'Open']:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   133
        # task is claimed at least once
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   134
        raise out_of_band.AccessViolation(message_fmt=DEF_CANT_EDIT_MSG)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   135
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   136
    return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   137
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   138
  @access.allowDeveloper
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   139
  @access.denySidebar
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   140
  def checkRoleAndStatusForTask(self, django_args, allowed_roles,
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   141
                                role_status, task_status):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   142
    """Checks if the current user has access to the given task.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   143
2841
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   144
    This method checks if the current user is in one of the allowed_roles
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   145
    and has specified role_status, If yes, allows him to access the Task page.
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   146
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   147
    Args:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   148
      django_args: a dictionary with django's arguments
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   149
      allowed_roles: list with names for the roles allowed to pass access check
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   150
      role_status: list with states allowed for the role
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   151
      task_status: a list with states allowed for the task
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   152
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   153
     Raises:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   154
       AccessViolationResponse:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   155
         - If there is no task found
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   156
         - If the task is not in one of the required states.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   157
         - If the user does not have any of the required roles
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   158
    """
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   159
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   160
    self.checkIsUser(django_args)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   161
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   162
    if 'link_id' in django_args:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   163
      # bail out with 404 if no task is found
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   164
      task_entity = ghop_task_logic.logic.getFromKeyFieldsOr404(django_args)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   165
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   166
      if not task_entity.status in task_status:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   167
        # this task can not be accessed at the moment
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   168
        raise out_of_band.AccessViolation(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   169
            message_fmt=DEF_NO_ACTIVE_ENTITY_MSG)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   170
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   171
    user_entity = self.user
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   172
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   173
    filter = {
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   174
        'user': user_entity,
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   175
        'scope_path': django_args['scope_path'],
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   176
        'status': role_status
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   177
        }
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   178
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   179
    if 'host' in allowed_roles:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   180
      # check if the current user is a host for this proposal's program
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   181
      if host_logic.logic.getForFields(filter, unique=True):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   182
        return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   183
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   184
    if 'ghop/org_admin' in allowed_roles:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   185
      # check if the current user is an admin for this task's org
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   186
      if ghop_org_admin_logic.logic.getForFields(filter, unique=True):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   187
        return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   188
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   189
    if 'ghop/mentor' in allowed_roles:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   190
      # check if the current user is a mentor for this task's org
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   191
      if ghop_mentor_logic.logic.getForFields(filter, unique=True):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   192
        return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   193
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   194
    if 'public' in allowed_roles:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   195
      return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   196
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   197
    # no roles found, access denied
3070
afd98e17a2b2 Minor (mostly stylish and whitespace) fixes in GHOP access.py module.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3066
diff changeset
   198
    raise out_of_band.AccessViolation(message_fmt=DEF_NEED_ROLE_MSG)
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   199
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   200
  def checkStatusForTask(self, django_args):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   201
    """Checks if the current user has access to the given task.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   202
2841
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   203
    This method checks if the current user is either an GHOP Org Admin or a
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   204
    Mentor and is active, if yes it allows them to view the task page at any
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   205
    task state. If the user is none of the above, it checks the status of the
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   206
    task, and if it is in one of the valid published states it allows access
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   207
    to view the task page.
2289f97d6216 Updated the docstrings for GHOP access methods.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2840
diff changeset
   208
2840
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   209
    Args:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   210
      django_args: a dictionary with django's arguments
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   211
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   212
     Raises:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   213
       AccessViolationResponse:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   214
         - If there is no task found
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   215
         - If the task is not in one of the required states.
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   216
    """
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   217
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   218
    try:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   219
      self.checkIsUser(django_args)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   220
      user_entity = self.user
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   221
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   222
      filter = {
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   223
          'user': user_entity,
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   224
          'status': 'active',
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   225
          'scope_path': django_args['scope_path'],
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   226
          }
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   227
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   228
      if ghop_org_admin_logic.logic.getForFields(filter, unique=True):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   229
        return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   230
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   231
      if ghop_mentor_logic.logic.getForFields(filter, unique=True):
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   232
        return
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   233
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   234
    except out_of_band.Error:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   235
      pass
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   236
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   237
    # bail out with 404 if no task is found
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   238
    task_entity = ghop_task_logic.logic.getFromKeyFieldsOr404(django_args)
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   239
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   240
    if task_entity.status  in ['Unapproved', 'Unpublished', 'Invalid']:
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   241
      # this proposal can not be task at the moment
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   242
      raise out_of_band.AccessViolation(
41f7938a35b0 Added access checks for GHOP Module.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   243
          message_fmt=DEF_NO_PUB_TASK_MSG)
2922
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   244
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   245
  def checkCanApply(self, django_args):
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   246
    """Checks if the user has the completed at least one task to register as
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   247
    a student.
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   248
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   249
    Args:
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   250
      django_args: a dictionary with django's arguments
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   251
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   252
     Raises:
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   253
       AccessViolationResponse:
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   254
         - If student has not completed even a single task
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   255
    """
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   256
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   257
    self.checkIsUser(django_args)
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   258
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   259
    program_entity = ghop_program_logic.logic.getFromKeyNameOr404(
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   260
        django_args['scope_path'])
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   261
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   262
    filter = {
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   263
        'user': self.user,
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   264
        'program': program_entity,
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   265
        'status': 'AwaitingRegistration',
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   266
        }
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   267
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   268
    if ghop_task_logic.logic.getForFields(filter, unique=True):
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   269
      return
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   270
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   271
    # no completed tasks found, access denied
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   272
    raise out_of_band.AccessViolation(
6e373954bbf6 Added GHOPStudent view and access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2841
diff changeset
   273
        message_fmt=DEF_CANT_REGISTER)
3088
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   274
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   275
  def checkCanOpenTaskList(self, django_args):
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   276
    """Checks if the current user is allowed to see a list of his tasks.
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   277
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   278
    Args:
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   279
      django_args: a dictionary with django's arguments
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   280
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   281
    Raises:
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   282
      AccessViolationResponse:
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   283
        - if the user is not registered as a student; and
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   284
        - if the user has not claimed a single task
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   285
    """
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   286
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   287
    try:
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   288
      return self.checkHasActiveRoleForScope(django_args, ghop_student_logic)
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   289
    except out_of_band.Error:
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   290
      pass
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   291
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   292
    program = ghop_program_logic.logic.getFromKeyNameOr404(
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   293
        django_args['scope_path'])
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   294
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   295
    filter = {
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   296
        'user': self.user,
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   297
        'program': program,
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   298
        'status': ['ClaimRequested', 'Claimed', 'ActionNeeded', 'NeedsWork',
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   299
            'AwaitingRegistration', 'NeedsReview']
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   300
        }
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   301
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   302
    if not ghop_task_logic.logic.getForFields(filter, unique=True):
08b9f4de6675 Users who claim or work on tasks may list them without having student role.
Daniel Hans <Daniel.M.Hans@gmail.com>
parents: 3070
diff changeset
   303
      raise out_of_band.AccessViolation(message_fmt=DEF_NO_TASKS_ASSIGNED)