__init__.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. allow_browse_forum(request.user, forum)
  20. if forum.level == 1:
  21. return dj_redirect(forum.get_absolute_url())
  22. forums = get_forums_list(request.user, forum)
  23. return render(request, 'misago/forums/category.html', {
  24. 'category': forum,
  25. 'forums': forums,
  26. 'path': get_forum_path(forum),
  27. })
  28. @forum_view('redirect')
  29. def redirect(request, forum):
  30. if forum.pk not in request.session.get('forum_redirects', []):
  31. request.session.setdefault('forum_redirects', []).append(forum.pk)
  32. forum.redirects_count = F('redirects_count') + 1
  33. forum.save(update_fields=['redirects_count'])
  34. return dj_redirect(forum.redirect_url)
  35. @forum_view('-')
  36. def forum(request, forum):
  37. pass