app/soc/modules/ghop/views/models/task_subscription.py
author Mario Ferraro <fadinlight@gmail.com>
Sun, 15 Nov 2009 22:12:20 +0100
changeset 3093 d1be59b6b627
parent 2953 3c024d61290c
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:
2889
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     2
#
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     4
#
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     8
#
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    10
#
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    16
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    17
"""Views for GHOP Task Subscription.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    18
"""
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    19
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    20
__authors__ = [
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    21
    '"Madhusudan.C.S" <madhusudancs@gmail.com>'
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    22
  ]
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    23
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    24
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    25
from google.appengine.ext import db
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    26
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    27
from django import http
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    28
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    29
from soc.logic import dicts
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    30
from soc.logic.models import user as user_logic
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    31
from soc.views.helper import decorators
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    32
from soc.views.models import base
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    33
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
from soc.modules.ghop.logic.models import task as ghop_task_logic
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
from soc.modules.ghop.logic.models import task_subscription as \
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
    ghop_task_subscription_logic
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
from soc.modules.ghop.views.helper import access as ghop_access
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    39
import soc.modules.ghop.logic.models.task_subscription
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    40
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    41
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
class View(base.View):
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
  """View methods for the Task Subscriptions.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    44
  """
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    45
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    46
  def __init__(self, params=None):
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    47
    """Defines the fields and methods required for the task_subscription.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    48
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    49
    Params:
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    50
      params: a dict with params for this View
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    51
    """
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    52
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    53
    rights = ghop_access.GHOPChecker(params)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    54
    rights['subscribe'] = ['checkIsUser']
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    55
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    56
    new_params = {}
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    57
    new_params['logic'] = soc.modules.ghop.logic.models.task_subscription.logic
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    58
    new_params['rights'] = rights
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    59
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    60
    new_params['name'] = "Task Subscription"
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    61
    new_params['module_name'] = "task_subscription"
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    62
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    63
    new_params['module_package'] = 'soc.modules.ghop.views.models'
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    64
    new_params['url_name'] = 'ghop/task_subscription'
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    65
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    66
    patterns = []
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    67
    patterns += [
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    68
        (r'^%(url_name)s/(?P<access_type>subscribe)$',
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    69
        '%(module_package)s.%(module_name)s.subscribe',
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    70
        'Subscribe to the %(name)s'),
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    71
        ]
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    72
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    73
    new_params['extra_django_patterns'] = patterns
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    74
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    75
    params = dicts.merge(params, new_params, sub_merge=True)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    76
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    77
    super(View, self).__init__(params=params)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    78
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    79
  @decorators.merge_params
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    80
  @decorators.check_access
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    81
  def subscribe(self, request, access_type, page_name=None,
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    82
                params=None, **kwargs):
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    83
    """View that subscribes/unsubscribes an user.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    84
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    85
    This view is accessed by an AJAX call from task public page.
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    86
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    87
    Args:
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    88
      request: the standard Django HTTP request object
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    89
    """
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    90
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    91
    get_params = request.GET
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    92
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    93
    task_entity = ghop_task_logic.logic.getFromKeyNameOr404(
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    94
        get_params['key_name'])
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    95
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    96
    user_account = user_logic.logic.getForCurrentAccount()
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    97
2953
3c024d61290c Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2889
diff changeset
    98
    entity = params['logic'].getOrCreateTaskSubscriptionForTask(task_entity)
2889
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    99
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   100
    subscribers = db.get(entity.subscribers)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   101
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   102
    # TODO: this should not loop over all subscribers but use GET argument
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   103
    remove = False
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   104
2953
3c024d61290c Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2889
diff changeset
   105
    for subscriber in subscribers:
3c024d61290c Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2889
diff changeset
   106
      if subscriber.key() == user_account.key():
3c024d61290c Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2889
diff changeset
   107
        remove = True
3c024d61290c Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2889
diff changeset
   108
        break
2889
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   109
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   110
    if remove:
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   111
      subscribers.remove(subscriber)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   112
      data = 'remove'
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   113
    else:
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   114
      subscribers.append(user_account)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   115
      data = 'add'
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   116
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   117
    # TODO: missing description for this argument, is it even necessary?
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   118
    if not get_params.get('no_toggle'):
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   119
      sub_keys = []
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   120
      for subscriber in subscribers:
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   121
        sub_keys.append(subscriber.key())
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   122
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   123
      properties = {
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   124
          'subscribers': sub_keys,
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   125
          }
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   126
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   127
      ghop_task_subscription_logic.logic.updateEntityProperties(
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   128
          entity, properties)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   129
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   130
    return http.HttpResponse(data)
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   131
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   132
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   133
view = View()
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   134
5c0728efdefb Added GHOP Task Subscription View.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   135
subscribe = decorators.view(view.subscribe)