__init__.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.db.models import F
  2. from django.shortcuts import redirect as dj_redirect, render
  3. from misago.core.shortcuts import get_object_or_404, validate_slug
  4. from misago.forums.lists import get_forums_list, get_forum_path
  5. from misago.forums.models import Forum
  6. from misago.forums.permissions import allow_see_forum, allow_browse_forum
  7. def forum_view(role):
  8. def wrap(f):
  9. def decorator(request, forum_slug, forum_id):
  10. allow_see_forum(request.user, forum_id)
  11. forums = Forum.objects.all_forums()
  12. forum = get_object_or_404(forums, pk=forum_id, role=role)
  13. validate_slug(forum, forum_slug)
  14. return f(request, forum)
  15. return decorator
  16. return wrap
  17. @forum_view('category')
  18. def category(request, forum):
  19. if forum.level == 1:
  20. return dj_redirect(forum.get_absolute_url())
  21. forums = get_forums_list(request.user, forum)
  22. return render(request, 'misago/forums/category.html', {
  23. 'category': forum,
  24. 'forums': forums,
  25. 'path': get_forum_path(forum),
  26. })
  27. @forum_view('redirect')
  28. def redirect(request, forum):
  29. if forum.pk not in request.session.get('forum_redirects', []):
  30. request.session.setdefault('forum_redirects', []).append(forum.pk)
  31. forum.redirects_count = F('redirects_count') + 1
  32. forum.save(update_fields=['redirects_count'])
  33. return dj_redirect(forum.redirect_url)
  34. @forum_view('-')
  35. def forum(request, forum):
  36. pass