lists.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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)
  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']),
  20. 'component': page['component'],
  21. })
  22. active_rank = context_data.get('rank')
  23. for rank in Rank.objects.filter(is_tab=True).order_by('order'):
  24. context_data['pages'].append({
  25. 'name': rank.name,
  26. 'reversed_link': reverse('misago:users-rank', kwargs={'slug': rank.slug}),
  27. 'is_active': active_rank.pk == rank.pk if active_rank else None
  28. })
  29. if rank.description:
  30. description = {
  31. 'plain': rank.description,
  32. 'html': format_plaintext_for_html(rank.description)
  33. }
  34. else:
  35. description = None
  36. request.frontend_context['USERS_LISTS'].append({
  37. 'id': rank.pk,
  38. 'name': rank.name,
  39. 'slug': rank.slug,
  40. 'css_class': rank.css_class,
  41. 'description': description,
  42. 'component': 'rank',
  43. })
  44. active_section = list(filter(lambda x: x['is_active'], sections))[0]
  45. context_data['active_section'] = active_section
  46. return render(request, self.template_name, context_data)
  47. def get_context_data(self, request, *args, **kwargs):
  48. return {}
  49. def landing(request):
  50. allow_browse_users_list(request.user)
  51. return redirect(users_list.get_default_link())
  52. class ActivePostersView(ListView):
  53. template_name = 'misago/userslists/active_posters.html'
  54. def get_context_data(self, request, *args, **kwargs):
  55. model = ActivePosters(request)
  56. request.frontend_context['USERS'] = model.get_frontend_context()
  57. return model.get_template_context()
  58. class RankUsersView(ListView):
  59. template_name = 'misago/userslists/rank.html'
  60. def get_context_data(self, request, slug, page=0):
  61. rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug)
  62. users = RankUsers(request, rank, page)
  63. request.frontend_context['USERS'] = users.get_frontend_context()
  64. context = {
  65. 'rank': rank,
  66. }
  67. context.update(users.get_template_context())
  68. return context