# HG changeset patch # User nishanth # Date 1267189470 -19800 # Node ID a6b4234388c8f4b93f8b5036e1e9e3c58665e63d # Parent daee11bdfbaa1894cfec7934ac5ad87524f3f56d now notification depends on id and not pos. diff -r daee11bdfbaa -r a6b4234388c8 taskapp/models.py --- a/taskapp/models.py Fri Feb 26 17:49:26 2010 +0530 +++ b/taskapp/models.py Fri Feb 26 18:34:30 2010 +0530 @@ -155,12 +155,15 @@ class Notification(models.Model): - to = models.ManyToManyField(User, related_name = "%(class)s_to", blank = False) - is_read = models.BooleanField(default = False) - sent_date = models.DateTimeField() + sent_to = models.ManyToManyField(User, related_name = "%(class)s_sent_to", blank = False) + sent_from = models.ManyToManyField(User, related_name = "%(class)s_sent_from", blank = True) + sub = models.CharField(max_length = 100) message = models.TextField() - deleted = models.BooleanField(default = False) + + sent_date = models.DateTimeField() + is_read = models.BooleanField(default = False) + is_deleted = models.BooleanField(default = False) tagging.register(Profile) tagging.register(Task) diff -r daee11bdfbaa -r a6b4234388c8 taskapp/utilities/notification.py --- a/taskapp/utilities/notification.py Fri Feb 26 17:49:26 2010 +0530 +++ b/taskapp/utilities/notification.py Fri Feb 26 18:34:30 2010 +0530 @@ -1,5 +1,6 @@ +from datetime import datetime +from django.contrib.auth.models import User from pytask.taskapp.models import Notification -from datetime import datetime def create_notification(to,subject,message): """ @@ -10,7 +11,7 @@ """ notification = Notification(sent_date = datetime.now()) notification.save() - notification.to = to + notification.sent_to = to notification.sub = subject notification.message = message notification.save() @@ -39,6 +40,24 @@ notification = Notification.objects.get(id = notification_id) except Notification.DoesNotExist: return False - notification.deleted = True + notification.is_deleted = True notification.save() return True + +def get_notification(nid, user): + """ if notification exists, and belongs to the current user, return it. + else return None. + """ + + try: + notify_obj = Notification.objects.get(id=nid) + except Notification.DoesNotExist: + return None + + try: + notify_obj.sent_to.get(id=user.id) + except User.DoesNotExist: + return None + + if not notify_obj.is_deleted: + return notify_obj diff -r daee11bdfbaa -r a6b4234388c8 taskapp/views/user.py --- a/taskapp/views/user.py Fri Feb 26 17:49:26 2010 +0530 +++ b/taskapp/views/user.py Fri Feb 26 18:34:30 2010 +0530 @@ -6,10 +6,14 @@ from django.contrib.auth.decorators import login_required from pytask.taskapp.models import Task, Profile, Request + from pytask.taskapp.events.user import createUser, updateProfile +from pytask.taskapp.events.request import reply_to_request + from pytask.taskapp.forms.user import UserProfileEditForm -from pytask.taskapp.events.request import reply_to_request + from pytask.taskapp.utilities.request import get_request +from pytask.taskapp.utilities.notification import get_notification def show_msg(user, message, redirect_url=None, url_desc=None): """ simply redirect to homepage """ @@ -40,7 +44,7 @@ user_profile = user.get_profile() is_mentor = True if user.task_mentors.all() else False can_create_task = False if user_profile.rights == u"CT" else True - notifications = user.notification_to.filter(deleted=False,is_read=False) + notifications = user.notification_sent_to.filter(is_deleted=False,is_read=False) requests = user.request_sent_to.filter(is_replied=False) context = {'user':user, @@ -168,9 +172,7 @@ user = request.user - active_notifications = user.notification_to.filter(deleted=False).order_by('sent_date').reverse() - for pos, notification in enumerate(reversed(active_notifications)): - notification.pos = pos + active_notifications = user.notification_sent_to.filter(is_deleted=False).order_by('sent_date').reverse() context = { 'user':user, @@ -186,8 +188,10 @@ """ user = request.user - notifications = user.notification_to.filter(deleted=False).order_by('sent_date') - notification = notifications[int(nid)] + notification = get_notification(nid, user) + if not notification: + raise Http404 + notification.is_read = True notification.save() @@ -206,13 +210,16 @@ """ user = request.user - notifications = user.notification_to.filter(deleted=False).order_by('sent_date') - notification = notifications[int(nid)] + notification = get_notification(nid, user) + + if not notification: + raise Http404 + notifications_url = "/user/notifications/" if request.method == "POST": if action == "delete": - notification.deleted = True + notification.is_deleted = True elif action == "unread": notification.is_read = False diff -r daee11bdfbaa -r a6b4234388c8 templates/user/browse_notifications.html --- a/templates/user/browse_notifications.html Fri Feb 26 17:49:26 2010 +0530 +++ b/templates/user/browse_notifications.html Fri Feb 26 18:34:30 2010 +0530 @@ -4,7 +4,7 @@ You have no notifications. {% else %} {% for notification in notifications %} - + {% if not notification.is_read %} {% endif %} {{notification.sub}} {% if not notification.is_read %} {% endif %}