pytask/profile/views.py
changeset 69 c6bca38c1cbf
parent 63 e346fd52baff
child 140 8fcde6f8f750
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pytask/profile/views.py	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,149 @@
+from django.shortcuts import render_to_response, redirect
+from django.http import Http404
+
+from django.contrib.auth.decorators import login_required
+from django.core.context_processors import csrf
+from django.views.decorators.csrf import csrf_protect
+
+from pytask.profile.forms import EditProfileForm
+from pytask.profile.utils import get_notification
+
+@login_required
+def view_profile(request):
+    """ Display the profile information.
+    """
+
+    user = request.user
+    profile = user.get_profile()
+
+    context = {"user": user,
+               "profile": profile,
+              }
+    return render_to_response("profile/view.html", context)
+
+@login_required
+def edit_profile(request):
+    """ Make only a few fields editable.
+    """
+
+    user = request.user
+    profile = user.get_profile()
+
+    context = {"user": user,
+               "profile": profile,
+              }
+
+    context.update(csrf(request))
+
+    if request.method == "POST":
+        form = EditProfileForm(request.POST, instance=profile)
+
+        if form.is_valid():
+            form.save()
+            return redirect("/profile/view")
+        else:
+            context.update({"form":form})
+            return render_to_response("profile/edit.html", context)
+    else:
+        form = EditProfileForm(instance=profile)
+        context.update({"form":form})
+        return render_to_response("profile/edit.html", context)
+
+@login_required
+def browse_notifications(request):
+    """ get the list of notifications that are not deleted and display in
+    datetime order."""
+
+    user = request.user
+
+    active_notifications = user.notification_sent_to.filter(is_deleted=False).order_by('sent_date').reverse()
+
+    context = {'user':user,
+               'notifications':active_notifications,
+              }                               
+
+    return render_to_response('profile/browse_notifications.html', context)
+
+@login_required
+def view_notification(request, nid):
+    """ get the notification depending on nid.
+    Display it.
+    """
+
+    user = request.user
+    newest, newer, notification, older, oldest = get_notification(nid, user)
+
+    if not notification:
+        raise Http404
+
+    notification.is_read = True
+    notification.save()
+
+    context = {'user':user,
+               'notification':notification,
+               'newest':newest,
+               'newer':newer,
+               'older':older,
+               'oldest':oldest,
+              }
+
+    return render_to_response('profile/view_notification.html', context)
+
+@login_required
+def delete_notification(request, nid):
+    """ check if the user owns the notification and delete it.
+    """
+
+    user = request.user
+    newest, newer, notification, older, oldest = get_notification(nid, user)
+
+    if not notification:
+        raise Http404
+
+    notification.is_deleted = True
+    notification.save()
+
+    context = {'user':user,
+               'notification':notification,
+               'newest':newest,
+               'newer':newer,
+               'older':older,
+               'oldest':oldest,
+              }
+
+    if older:
+        redirect_url = "/profile/notf/view/nid=%s"%older.uniq_key
+    else:
+        redirect_url = "/profile/notf/browse"
+
+    return redirect(redirect_url)
+
+@login_required
+def unread_notification(request, nid):
+
+    """ check if the user owns the notification and delete it.
+    """
+
+    user = request.user
+    newest, newer, notification, older, oldest = get_notification(nid, user)
+
+    if not notification:
+        raise Http404
+
+    notification.is_read = False
+    notification.save()
+
+    context = {'user':user,
+               'notification':notification,
+               'newest':newest,
+               'newer':newer,
+               'older':older,
+               'oldest':oldest,
+              }
+
+    if older:
+        redirect_url = "/profile/notf/view/nid=%s"%older.uniq_key
+    else:
+        redirect_url = "/profile/notf/browse"
+
+    return redirect(redirect_url)