lists.py 3.1 KB

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