app/soc/views/models/notification.py
author Lennard de Rijk <ljvderijk@gmail.com>
Thu, 18 Dec 2008 07:02:48 +0000
changeset 760 48d38f8a50ab
parent 747 ad62f4c3245e
child 762 4e2623e68a0e
permissions -rw-r--r--
Overwrite default patterns in views/models/notification.py to disallow certain URL's. Patch by: Lennard de Rijk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     1
#!/usr/bin/python2.5
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     2
#
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     3
# Copyright 2008 the Melange authors.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     4
#
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     6
# you may not use this file except in compliance with the License.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     7
# You may obtain a copy of the License at
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     8
#
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    10
#
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    14
# See the License for the specific language governing permissions and
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    15
# limitations under the License.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    16
747
ad62f4c3245e In soc.views.models.notification module remove unused imports, add missing white space, change list() method definition to comply with base View list() method declaration. Add missing Meta class docstring.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 738
diff changeset
    17
"""This module contains the view code for Notifications.
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    18
"""
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    19
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    20
__authors__ = [
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    21
  '"Lennard de Rijk" <ljvderijk@gmail.com>',
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    22
]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    23
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    24
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    25
import time
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    26
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    27
from django import forms
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    28
from django.utils.translation import ugettext_lazy
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    29
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    30
from soc.logic import dicts
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    31
from soc.logic import validate
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    32
from soc.models import notification as notification_model
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    33
from soc.views import helper
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    34
from soc.views.helper import access
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    35
from soc.views.helper import redirects
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    36
from soc.views.models import base
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    37
from soc.logic.models import notification as notification_logic
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    38
from soc.logic.models import user as user_logic
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    39
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    40
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    41
class CreateForm(helper.forms.BaseForm):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    42
  """Form for creating a Notification.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    43
  """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    44
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    45
  # to user field
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    46
  to_user = forms.fields.CharField(label='To User')
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    47
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    48
  def __init__(self, *args, **kwargs):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    49
    """ Calls super and then redefines the order in which the fields appear.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    50
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    51
    for parameters see BaseForm.__init__()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    52
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    53
    super(CreateForm, self).__init__(*args, **kwargs)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    54
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    55
    # set form fields order
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    56
    self.fields.keyOrder = ['to_user', 'subject', 'message']
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    57
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    58
  class Meta:
747
ad62f4c3245e In soc.views.models.notification module remove unused imports, add missing white space, change list() method definition to comply with base View list() method declaration. Add missing Meta class docstring.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 738
diff changeset
    59
    """Inner Meta class that defines some behavior for the form.
ad62f4c3245e In soc.views.models.notification module remove unused imports, add missing white space, change list() method definition to comply with base View list() method declaration. Add missing Meta class docstring.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 738
diff changeset
    60
    """
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    61
    model = notification_model.Notification
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    62
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    63
    # exclude the necessary fields from the form
737
4c78ee183eb6 Notification property has_been_read changed into unread
Lennard de Rijk <ljvderijk@gmail.com>
parents: 736
diff changeset
    64
    exclude = ['link_id', 'scope', 'scope_path', 'from_user', 'unread']
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    65
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    66
  def clean_to_user(self):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    67
    """Check if the to_user field has been filled in correctly.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    68
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    69
    link_id = self.cleaned_data.get('to_user').lower()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    70
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    71
    if not validate.isLinkIdFormatValid(link_id):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    72
      raise forms.ValidationError("This link ID is in wrong format.")
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    73
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    74
    to_user = user_logic.logic.getForFields({'link_id' : link_id}, unique=True)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    75
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    76
    if not to_user:
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    77
      # user does not exist
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    78
      raise forms.ValidationError("This user does not exist")
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    79
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    80
    return link_id
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    81
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    82
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    83
class View(base.View):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    84
  """View methods for the Notification model.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    85
  """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    86
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    87
  def __init__(self, params=None):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    88
    """Defines the fields and methods required for the base View class
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    89
    to provide the user with list, public, create, edit and delete views.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    90
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    91
    Params:
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    92
      params: a dict with params for this View
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    93
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    94
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    95
    rights = {}
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    96
    rights['unspecified'] = [access.deny]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    97
    rights['show'] = [access.checkIsMyNotification]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    98
    rights['delete'] = [access.checkIsDeveloper]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
    99
    rights['list'] = [access.checkIsUser]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   100
    # create is developer only for the time being to test functionality
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   101
    rights['create'] = [access.checkIsDeveloper]
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   102
734
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   103
    new_params = {}
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   104
    new_params['logic'] = notification_logic.logic
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   105
    new_params['rights'] = rights
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   106
734
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   107
    new_params['name'] = "Notification"
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   108
    new_params['name_short'] = "Notification"
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   109
    new_params['name_plural'] = "Notifications"
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   110
    new_params['url_name'] = "notification"
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   111
    new_params['module_name'] = "notification"
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   112
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   113
    new_params['create_form'] = CreateForm
760
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   114
    
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   115
    new_params['django_patterns_defaults'] = [
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   116
      (r'^%(url_name)s/(?P<access_type>show)/%(key_fields)s$',
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   117
          'soc.views.models.%(module_name)s.public', 'Show %(name_short)s'),
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   118
      (r'^%(url_name)s/(?P<access_type>create)$',
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   119
          'soc.views.models.%(module_name)s.create', 'Create %(name_short)s'),
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   120
      (r'^%(url_name)s/(?P<access_type>create)/%(scope)s$',
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   121
          'soc.views.models.%(module_name)s.create', 'Create %(name_short)s'),
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   122
      (r'^%(url_name)s/(?P<access_type>delete)/%(key_fields)s$',
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   123
          'soc.views.models.%(module_name)s.delete', 'Delete %(name_short)s'),
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   124
      (r'^%(url_name)s/(?P<access_type>list)$',
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   125
          'soc.views.models.%(module_name)s.list', 'List %(name_plural)s'),
48d38f8a50ab Overwrite default patterns in views/models/notification.py to disallow certain URL's.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 747
diff changeset
   126
      ]
734
1ebd40380aa5 Make the place of the rights declaration consistent
Sverre Rabbelier <srabbelier@gmail.com>
parents: 733
diff changeset
   127
738
61867ffea8a8 Brown-paper-bag fix in notification.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 737
diff changeset
   128
    new_params['edit_redirect'] = '/%(url_name)s/list'
736
c70d56182ce2 No override needed in notifications.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 734
diff changeset
   129
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   130
    params = dicts.merge(params, new_params)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   131
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   132
    super(View, self).__init__(params=params)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   133
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   134
  def list(self, request, access_type,
747
ad62f4c3245e In soc.views.models.notification module remove unused imports, add missing white space, change list() method definition to comply with base View list() method declaration. Add missing Meta class docstring.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 738
diff changeset
   135
           page_name=None, params=None, filter=None):
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   136
    """Lists all notifications that the current logged in user has stored.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   137
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   138
    for parameters see base.list()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   139
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   140
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   141
    params = dicts.merge(params, self._params)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   142
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   143
    # get the current user
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   144
    user_entity = user_logic.logic.getForCurrentAccount()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   145
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   146
    # only select the notifications for this user so construct a filter
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   147
    filter = {'scope': user_entity}
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   148
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   149
    # create the list parameters
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   150
    list_params = params.copy()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   151
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   152
    # define the list redirect action to show the notification
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   153
    list_params['list_action'] = (redirects.getPublicRedirect, params)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   154
    list_params['list_description'] = ugettext_lazy(
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   155
        "An overview of your received Notifications.")
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   156
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   157
    # TODO(Lennard) when list sorting is implemented sort on descending date
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   158
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   159
    # use the generic list method with the filter. The access check in this
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   160
    # method will trigger an errorResponse when user_entity is None
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   161
    return super(View, self).list(request, access_type,
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   162
        page_name, list_params, filter)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   163
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   164
  def _editPost(self, request, entity, fields):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   165
    """See base.View._editPost().
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   166
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   167
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   168
    # get the current user
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   169
    current_user = user_logic.logic.getForCurrentAccount()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   170
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   171
    to_user = user_logic.logic.getForFields(
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   172
        {'link_id' : fields['to_user']}, unique=True)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   173
747
ad62f4c3245e In soc.views.models.notification module remove unused imports, add missing white space, change list() method definition to comply with base View list() method declaration. Add missing Meta class docstring.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 738
diff changeset
   174
    fields['link_id'] = '%i' % (time.time())
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   175
    fields['scope'] = to_user
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   176
    fields['from_user'] = current_user
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   177
    fields['scope_path'] = fields['to_user']
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   178
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   179
  def _editSeed(self, request, seed):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   180
    """Checks if scope_path is seeded and puts it into to_user.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   181
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   182
    for parameters see base._editSeed()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   183
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   184
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   185
    # if scope_path is present
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   186
    if 'scope_path' in seed.keys():
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   187
      # fill the to_user field with the scope path
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   188
      seed['to_user'] = seed['scope_path']
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   189
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   190
  def _public(self, request, entity, context):
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   191
    """Marks the Notification as read if that hasn't happened yet.
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   192
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   193
    for parameters see base._public()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   194
    """
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   195
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   196
    # if the user viewing is the user for which this notification is meant
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   197
    # and the notification has not been read yet
737
4c78ee183eb6 Notification property has_been_read changed into unread
Lennard de Rijk <ljvderijk@gmail.com>
parents: 736
diff changeset
   198
    if entity.unread:
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   199
      # get the current user
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   200
      user = user_logic.logic.getForCurrentAccount()
737
4c78ee183eb6 Notification property has_been_read changed into unread
Lennard de Rijk <ljvderijk@gmail.com>
parents: 736
diff changeset
   201
      
4c78ee183eb6 Notification property has_been_read changed into unread
Lennard de Rijk <ljvderijk@gmail.com>
parents: 736
diff changeset
   202
      # if the message is meant for the user that is reading it
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   203
      if entity.scope.key() == user.key():
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   204
        # mark the entity as read
737
4c78ee183eb6 Notification property has_been_read changed into unread
Lennard de Rijk <ljvderijk@gmail.com>
parents: 736
diff changeset
   205
        self._logic.updateModelProperties(entity, {'unread' : False} )
732
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   206
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   207
    context['entity_type_url'] = self._params['url_name']
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   208
    context['entity_suffix'] = self._logic.getKeySuffix(entity)
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   209
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   210
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   211
view = View()
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   212
create = view.create
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   213
edit = view.edit
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   214
delete = view.delete
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   215
list = view.list
0a8e60228311 Fix whitespace and EOL damage in notifcation.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 727
diff changeset
   216
public = view.public