diff -r e85c47c17abc -r 5c0728efdefb app/soc/modules/ghop/views/models/task_subscription.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/modules/ghop/views/models/task_subscription.py Tue Sep 08 21:08:14 2009 +0200 @@ -0,0 +1,141 @@ +#!/usr/bin/python2.5 +# +# Copyright 2009 the Melange authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Views for GHOP Task Subscription. +""" + +__authors__ = [ + '"Madhusudan.C.S" ' + ] + + +from google.appengine.ext import db + +from django import http + +from soc.logic import dicts +from soc.logic.models import user as user_logic +from soc.views.helper import decorators +from soc.views.models import base + +from soc.modules.ghop.logic.models import task as ghop_task_logic +from soc.modules.ghop.logic.models import task_subscription as \ + ghop_task_subscription_logic +from soc.modules.ghop.views.helper import access as ghop_access + +import soc.modules.ghop.logic.models.task_subscription + + +class View(base.View): + """View methods for the Task Subscriptions. + """ + + def __init__(self, params=None): + """Defines the fields and methods required for the task_subscription. + + Params: + params: a dict with params for this View + """ + + rights = ghop_access.GHOPChecker(params) + rights['subscribe'] = ['checkIsUser'] + + new_params = {} + new_params['logic'] = soc.modules.ghop.logic.models.task_subscription.logic + new_params['rights'] = rights + + new_params['name'] = "Task Subscription" + new_params['module_name'] = "task_subscription" + + new_params['module_package'] = 'soc.modules.ghop.views.models' + new_params['url_name'] = 'ghop/task_subscription' + + patterns = [] + patterns += [ + (r'^%(url_name)s/(?Psubscribe)$', + '%(module_package)s.%(module_name)s.subscribe', + 'Subscribe to the %(name)s'), + ] + + new_params['extra_django_patterns'] = patterns + + params = dicts.merge(params, new_params, sub_merge=True) + + super(View, self).__init__(params=params) + + @decorators.merge_params + @decorators.check_access + def subscribe(self, request, access_type, page_name=None, + params=None, **kwargs): + """View that subscribes/unsubscribes an user. + + This view is accessed by an AJAX call from task public page. + + Args: + request: the standard Django HTTP request object + """ + + get_params = request.GET + + task_entity = ghop_task_logic.logic.getFromKeyNameOr404( + get_params['key_name']) + + user_account = user_logic.logic.getForCurrentAccount() + + fields = { + 'task': task_entity, + } + + entity = ghop_task_subscription_logic.logic.getForFields( + fields, unique=True) + + subscribers = db.get(entity.subscribers) + + # TODO: this should not loop over all subscribers but use GET argument + remove = False + + if entity: + for subscriber in subscribers: + if subscriber.key() == user_account.key(): + remove = True + break + + if remove: + subscribers.remove(subscriber) + data = 'remove' + else: + subscribers.append(user_account) + data = 'add' + + # TODO: missing description for this argument, is it even necessary? + if not get_params.get('no_toggle'): + sub_keys = [] + for subscriber in subscribers: + sub_keys.append(subscriber.key()) + + properties = { + 'subscribers': sub_keys, + } + + ghop_task_subscription_logic.logic.updateEntityProperties( + entity, properties) + + return http.HttpResponse(data) + + +view = View() + +subscribe = decorators.view(view.subscribe)