views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django import forms
  2. from django.core.urlresolvers import reverse
  3. from django.db.models import F
  4. from django.shortcuts import redirect
  5. from django.template import RequestContext
  6. from django.utils.translation import ugettext as _
  7. from misago.decorators import block_guest
  8. from misago.forms import Form, FormLayout, FormFields
  9. from misago.messages import Message
  10. from misago.models import WatchedThread
  11. from misago.utils.pagination import make_pagination
  12. @block_guest
  13. def watched_threads(request, page=0, new=False):
  14. # Find mode and fetch threads
  15. queryset = WatchedThread.objects.filter(user=request.user).filter(forum_id__in=request.acl.threads.get_readable_forums(request.acl)).select_related('thread').filter(thread__moderated=False).filter(thread__deleted=False)
  16. if new:
  17. queryset = queryset.filter(last_read__lt=F('thread__last'))
  18. count = queryset.count()
  19. pagination = make_pagination(page, count, request.settings.threads_per_page)
  20. queryset = queryset.order_by('-thread__last')
  21. if request.settings.threads_per_page < count:
  22. queryset = queryset[pagination['start']:pagination['stop']]
  23. queryset.prefetch_related('thread__forum', 'thread__start_poster', 'thread__last_poster')
  24. threads = []
  25. for thread in queryset:
  26. thread.thread.send_email = thread.email
  27. thread.thread.is_read = thread.thread.last <= thread.last_read
  28. threads.append(thread.thread)
  29. # Display page
  30. return request.theme.render_to_response('watched.html',
  31. {
  32. 'items_total': count,
  33. 'pagination': pagination,
  34. 'new': new,
  35. 'threads': threads,
  36. 'message': request.messages.get_message('threads'),
  37. },
  38. context_instance=RequestContext(request))