lists.py 3.1 KB

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