lists.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from django.shortcuts import get_object_or_404, redirect, render
  2. from django.urls import reverse
  3. from django.views import View
  4. from misago.core.utils import format_plaintext_for_html
  5. from misago.users.models import Rank
  6. from misago.users.pages import users_list
  7. from misago.users.permissions import allow_browse_users_list
  8. from misago.users.viewmodels import ActivePosters, RankUsers
  9. class ListView(View):
  10. def get(self, request, *args, **kwargs):
  11. allow_browse_users_list(request.user_acl)
  12. context_data = self.get_context_data(request, *args, **kwargs)
  13. sections = users_list.get_sections(request)
  14. context_data["pages"] = sections
  15. request.frontend_context["USERS_LISTS"] = []
  16. for page in sections:
  17. page["reversed_link"] = reverse(page["link"])
  18. request.frontend_context["USERS_LISTS"].append(
  19. {"name": str(page["name"]), "component": page["component"]}
  20. )
  21. active_rank = context_data.get("rank")
  22. for rank in Rank.objects.filter(is_tab=True).order_by("order"):
  23. context_data["pages"].append(
  24. {
  25. "name": rank.name,
  26. "reversed_link": reverse(
  27. "misago:users-rank", kwargs={"slug": rank.slug}
  28. ),
  29. "is_active": active_rank.pk == rank.pk if active_rank else None,
  30. }
  31. )
  32. if rank.description:
  33. description = {
  34. "plain": rank.description,
  35. "html": format_plaintext_for_html(rank.description),
  36. }
  37. else:
  38. description = None
  39. request.frontend_context["USERS_LISTS"].append(
  40. {
  41. "id": rank.pk,
  42. "name": rank.name,
  43. "slug": rank.slug,
  44. "css_class": rank.css_class,
  45. "description": description,
  46. "component": "rank",
  47. }
  48. )
  49. active_section = list(filter(lambda x: x["is_active"], sections))[0]
  50. context_data["active_section"] = active_section
  51. return render(request, self.template_name, context_data)
  52. def get_context_data(self, request, *args, **kwargs):
  53. return {}
  54. def landing(request):
  55. allow_browse_users_list(request.user_acl)
  56. return redirect(users_list.get_default_link())
  57. class ActivePostersView(ListView):
  58. template_name = "misago/userslists/active_posters.html"
  59. def get_context_data(self, request, *args, **kwargs):
  60. model = ActivePosters(request)
  61. request.frontend_context["USERS"] = model.get_frontend_context()
  62. return model.get_template_context()
  63. class RankUsersView(ListView):
  64. template_name = "misago/userslists/rank.html"
  65. def get_context_data(self, request, slug, page=0):
  66. rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug)
  67. users = RankUsers(request, rank, page)
  68. request.frontend_context["USERS"] = users.get_frontend_context()
  69. context = {"rank": rank}
  70. context.update(users.get_template_context())
  71. return context