app/soc/logic/models/request.py
author Mario Ferraro <fadinlight@gmail.com>
Sun, 15 Nov 2009 22:12:20 +0100
changeset 3093 d1be59b6b627
parent 3047 cdc652533fcc
permissions -rw-r--r--
GMaps related JS changed to use new google namespace. Google is going to change permanently in the future the way to load its services, so better stay safe. Also this commit shows uses of the new melange.js module. Fixes Issue 634.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
1308
35b75ffcbb37 Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1307
diff changeset
     3
# Copyright 2008 the Melange authors.
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
#
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    10
#
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
631
3763d36bcebc Fix typo and too long lines in soc.logic.models.request module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 620
diff changeset
    17
"""Request (Model) query functions.
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
"""
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
__authors__ = [
674
0158b11cbf6d More DI on scope_logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    21
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
618
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    22
  '"Lennard de Rijk" <ljvderijk@gmail.com>'
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
  ]
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
635
2f5322ad1f5b Moved sendInviteMessage to a new module in logic/helper/notifications.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 631
diff changeset
    25
import soc.models.request
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    26
635
2f5322ad1f5b Moved sendInviteMessage to a new module in logic/helper/notifications.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 631
diff changeset
    27
from soc.logic.helper import notifications
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    28
from soc.logic.models import base
1123
9b53bc4b2ea7 Changed scope_logic for requests to linkable_logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1115
diff changeset
    29
from soc.logic.models import linkable as linkable_logic
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    30
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    31
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    32
class Logic(base.Logic):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 495
diff changeset
    33
  """Logic methods for the Request model.
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    34
  """
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    35
535
9045b8888772 Refactor classes in soc/logic/models to make more use of inheritance. Add
Todd Larsen <tlarsen@google.com>
parents: 530
diff changeset
    36
  def __init__(self, model=soc.models.request.Request,
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    37
               base_model=None, id_based=True):
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    38
    """Defines the name, key_name and model for this entity.
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    39
    """
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    40
674
0158b11cbf6d More DI on scope_logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    41
    super(Logic, self).__init__(model, base_model=base_model,
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    42
                                id_based=id_based)
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    43
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    44
  def isValidNewRequest(self, fields, role_logic):
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    45
    """Returns True iff the given fields are for a valid new request.
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    46
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    47
    Args:
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    48
      fields: fields for the new Request
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    49
      logic: the Logic for the Role that is being requested
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    50
    """
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    51
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    52
    # check for already outstanding or ignored requests
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    53
    request_fields = {
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    54
        'user': fields['user'],
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    55
        'group': fields['group'],
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    56
        'status': ['new', 'group_accepted', 'ignored']
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    57
        }
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    58
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    59
    request_entity = self.getForFields(request_fields, unique=True)
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    60
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    61
    if request_entity:
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    62
      return False
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    63
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    64
    # check whether the user in the request already has the requested role
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    65
    role_fields = {
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    66
        'user': fields['user'],
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    67
        'scope': fields['group'],
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    68
        'status': ['active', 'inactive']
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    69
        }
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    70
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    71
    role_entity = role_logic.getForFields(role_fields, unique=True)
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    72
3047
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    73
    if role_entity:
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    74
      return False
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    75
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    76
    # seems to be a valid new request, so return True
cdc652533fcc Made Request Logic ID-based and added some helper methods.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2678
diff changeset
    77
    return True
1948
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    78
618
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    79
  def _onCreate(self, entity):
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    80
    """Sends out a message notifying users about the new invite/request.
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    81
    """
818
ddd102e82107 Fixed whitespace damage
Sverre Rabbelier <srabbelier@gmail.com>
parents: 676
diff changeset
    82
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 928
diff changeset
    83
    if entity.status == 'group_accepted':
618
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    84
      # this is an invite
635
2f5322ad1f5b Moved sendInviteMessage to a new module in logic/helper/notifications.py.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 631
diff changeset
    85
      notifications.sendInviteNotification(entity)
1085
0afbdd0905ef Renamed state to status where appropriate.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 928
diff changeset
    86
    elif entity.status == 'new':
618
b2319f2633bc Added invitation received message upon creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 562
diff changeset
    87
      # this is a request
2678
a525a55833f1 Send out a Notification upon creation of a new Request entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1954
diff changeset
    88
      notifications.sendNewRequestNotification(entity)
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    89
1106
e14b0995cf29 Flush sidebar when creating a new entity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1085
diff changeset
    90
    super(Logic, self)._onCreate(entity)
e14b0995cf29 Flush sidebar when creating a new entity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1085
diff changeset
    91
1948
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    92
  def _updateField(self, entity, entity_properties, name):
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    93
    """Called when the fields of the request are updated.
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    94
1954
7aef36e912bb Minor style fix.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1948
diff changeset
    95
      Sends out a message depending on the change of status.
1948
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    96
    """
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    97
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    98
    value = entity_properties[name]
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
    99
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   100
    if name == 'status' and entity.status != value:
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   101
      if value == 'group_accepted':
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   102
       # this is an invite
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   103
        notifications.sendInviteNotification(entity)
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   104
      elif value == 'new':
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   105
        # this is a request
2678
a525a55833f1 Send out a Notification upon creation of a new Request entity.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1954
diff changeset
   106
        notifications.sendNewRequestNotification(entity)
1948
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   107
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   108
    return super(Logic, self)._updateField(entity, entity_properties, name)
25cd704fdfdf Fixed double sending of notifications on creating a new invite.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1308
diff changeset
   109
495
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   110
87afae6e4c51 Added basic 'invite' functionality
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   111
logic = Logic()