annotate gpp/forums/views/favorites.py @ 429:d0f0800eef0c

Making the jquery tabbed version of the messages app the current version and removing the old. Also figured out how to dynamically update the base template's count of unread messages when messages are read.
author Brian Neal <bgneal@gmail.com>
date Tue, 03 May 2011 02:56:58 +0000
parents b2b37cdd020a
children 9d3bd7304050
rev   line source
bgneal@232 1 """
bgneal@232 2 This module contains view functions related to forum favorites (bookmarks).
bgneal@232 3 """
bgneal@232 4 from django.contrib.auth.decorators import login_required
bgneal@232 5 from django.core.urlresolvers import reverse
bgneal@232 6 from django.views.decorators.http import require_POST
bgneal@232 7 from django.shortcuts import get_object_or_404
bgneal@232 8 from django.shortcuts import render_to_response
bgneal@232 9 from django.template import RequestContext
bgneal@232 10 from django.http import HttpResponseRedirect
bgneal@232 11 from django.http import HttpResponseForbidden
bgneal@232 12 from django.http import Http404
bgneal@232 13
bgneal@232 14 from core.paginator import DiggPaginator
bgneal@232 15 from forums.models import Topic
bgneal@232 16
bgneal@232 17
bgneal@232 18 @login_required
bgneal@232 19 @require_POST
bgneal@232 20 def favorite_topic(request, topic_id):
bgneal@232 21 """
bgneal@232 22 This function handles the "favoriting" (bookmarking) of a forum topic by a
bgneal@232 23 user.
bgneal@232 24 """
bgneal@232 25 topic = get_object_or_404(Topic.objects.select_related(), id=topic_id)
bgneal@232 26 if topic.forum.category.can_access(request.user):
bgneal@232 27 topic.bookmarkers.add(request.user)
bgneal@232 28 return HttpResponseRedirect(
bgneal@232 29 reverse("forums-favorites_status", args=[topic.id]))
bgneal@232 30 raise Http404 # TODO return HttpResponseForbidden instead
bgneal@232 31
bgneal@232 32
bgneal@232 33 @login_required
bgneal@232 34 def manage_favorites(request):
bgneal@232 35 """Display a user's favorite topics and allow them to be deleted."""
bgneal@232 36
bgneal@232 37 user = request.user
bgneal@232 38 if request.method == "POST":
bgneal@232 39 if request.POST.get('delete_all'):
bgneal@232 40 user.favorite_topics.clear()
bgneal@232 41 else:
bgneal@232 42 delete_ids = request.POST.getlist('delete_ids')
bgneal@232 43 try:
bgneal@232 44 delete_ids = [int(id) for id in delete_ids]
bgneal@232 45 except ValueError:
bgneal@232 46 raise Http404
bgneal@232 47 for topic in user.favorite_topics.filter(id__in=delete_ids):
bgneal@232 48 user.favorite_topics.remove(topic)
bgneal@232 49
bgneal@383 50 return HttpResponseRedirect(reverse("forums-manage_favorites"))
bgneal@232 51
bgneal@383 52 page_num = request.GET.get('page', 1)
bgneal@232 53 topics = user.favorite_topics.select_related().order_by('-update_date')
bgneal@232 54 paginator = DiggPaginator(topics, 20, body=5, tail=2, margin=3, padding=2)
bgneal@232 55 try:
bgneal@232 56 page_num = int(page_num)
bgneal@232 57 except ValueError:
bgneal@232 58 page_num = 1
bgneal@232 59 try:
bgneal@232 60 page = paginator.page(page_num)
bgneal@232 61 except InvalidPage:
bgneal@232 62 raise Http404
bgneal@232 63
bgneal@232 64 return render_to_response('forums/manage_topics.html', {
bgneal@232 65 'page_title': 'Favorite Topics',
bgneal@232 66 'description': 'Your favorite topics are listed below.',
bgneal@232 67 'page': page,
bgneal@232 68 },
bgneal@232 69 context_instance=RequestContext(request))
bgneal@232 70
bgneal@232 71 @login_required
bgneal@232 72 def favorites_status(request, topic_id):
bgneal@232 73 """Display the favorite status for the given topic."""
bgneal@232 74 topic = get_object_or_404(Topic.objects.select_related(), id=topic_id)
bgneal@232 75 is_favorite = request.user in topic.bookmarkers.all()
bgneal@232 76 return render_to_response('forums/favorite_status.html', {
bgneal@232 77 'topic': topic,
bgneal@232 78 'is_favorite': is_favorite,
bgneal@232 79 },
bgneal@232 80 context_instance=RequestContext(request))
bgneal@232 81
bgneal@232 82 @login_required
bgneal@232 83 @require_POST
bgneal@232 84 def unfavorite_topic(request, topic_id):
bgneal@232 85 """
bgneal@232 86 Un-favorite the user from the requested topic.
bgneal@232 87 """
bgneal@232 88 topic = get_object_or_404(Topic, id=topic_id)
bgneal@232 89 topic.bookmarkers.remove(request.user)
bgneal@232 90 return HttpResponseRedirect(
bgneal@232 91 reverse("forums-favorites_status", args=[topic.id]))