views.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.template import RequestContext
  4. from django.utils.translation import ugettext as _
  5. from misago.forums.models import Forum
  6. from misago.readstracker.trackers import ForumsTracker
  7. from misago.sessions.models import Session
  8. def home(request):
  9. team_online = []
  10. team_pks = []
  11. for session in Session.objects.filter(team=1).filter(admin=0).filter(user__isnull=False).order_by('-start').select_related('user', 'user__rank'):
  12. if session.user.pk not in team_pks:
  13. team_pks.append(session.user.pk)
  14. team_online.append(session.user)
  15. reads_tracker = ForumsTracker(request.user)
  16. return request.theme.render_to_response('index.html',
  17. {
  18. 'forums_list': Forum.objects.treelist(request.acl.forums, tracker=reads_tracker),
  19. 'team_online': team_online,
  20. },
  21. context_instance=RequestContext(request));
  22. def category(request, forum, slug):
  23. if not request.acl.forums.can_see(forum):
  24. return error404(request)
  25. try:
  26. forum = Forum.objects.get(pk=forum, type='category')
  27. if not request.acl.forums.can_browse(forum):
  28. return error403(request, _("You don't have permission to browse this category."))
  29. except Forum.DoesNotExist:
  30. return error404(request)
  31. forum.subforums = Forum.objects.treelist(request.acl.forums, forum, tracker=ForumsTracker(request.user))
  32. return request.theme.render_to_response('category.html',
  33. {
  34. 'category': forum,
  35. 'parents': forum.get_ancestors().filter(level__gt=1),
  36. },
  37. context_instance=RequestContext(request));
  38. def redirection(request, forum, slug):
  39. if not request.acl.forums.can_see(forum):
  40. return error404(request)
  41. try:
  42. forum = Forum.objects.get(pk=forum, type='redirect')
  43. if not request.acl.forums.can_browse(forum):
  44. return error403(request, _("You don't have permission to follow this redirect."))
  45. forum.redirects += 1
  46. forum.redirects_delta += 1
  47. forum.save(force_update=True)
  48. return redirect(forum.redirect)
  49. except Forum.DoesNotExist:
  50. return error404(request)
  51. def redirect_message(request, message, type='info', owner=None):
  52. request.messages.set_flash(message, type, owner)
  53. return redirect(reverse('index'))
  54. def error403(request, message=None):
  55. return error_view(request, 403, message)
  56. def error404(request, message=None):
  57. return error_view(request, 404, message)
  58. def error_view(request, error, message):
  59. response = request.theme.render_to_response(('error%s.html' % error),
  60. {
  61. 'message': message,
  62. 'hide_signin': True,
  63. 'exception_response': True,
  64. },
  65. context_instance=RequestContext(request));
  66. response.status_code = error
  67. return response