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. context_data['pages'] = users_list.get_sections(request)
  16. request.frontend_context['USERS_LISTS'] = []
  17. for page in context_data['pages']:
  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={
  28. 'slug': rank.slug
  29. }),
  30. 'is_active': active_rank.pk == rank.pk if active_rank else None
  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. 'id': rank.pk,
  41. 'name': rank.name,
  42. 'slug': rank.slug,
  43. 'css_class': rank.css_class,
  44. 'description': description,
  45. 'component': 'rank',
  46. })
  47. for page in context_data['pages']:
  48. if page['is_active']:
  49. context_data['active_page'] = page
  50. break
  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)
  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 = {
  70. 'rank': rank,
  71. }
  72. context.update(users.get_template_context())
  73. return context