lists.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from django.conf import settings
  2. from django.contrib.auth import get_user_model
  3. from django.core.urlresolvers import reverse
  4. from django.shortcuts import redirect, render as django_render
  5. from misago.core.shortcuts import get_object_or_404, paginate
  6. from misago.users.models import Rank
  7. from misago.users.online import get_online_queryset
  8. from misago.users.permissions.profiles import (allow_browse_users_list,
  9. allow_see_users_online_list)
  10. from misago.users.sites import users_list
  11. def render(request, template, context):
  12. context['pages'] = users_list.get_pages(request)
  13. for page in context['pages']:
  14. page['reversed_link'] = reverse(page['link'])
  15. active_rank = context.get('rank')
  16. for rank in Rank.objects.filter(is_tab=True).order_by('name'):
  17. context['pages'].append({
  18. 'name': rank.name,
  19. 'reversed_link': reverse('misago:users_rank',
  20. kwargs={'rank_slug': rank.slug}),
  21. 'is_active': active_rank.pk == rank.pk if active_rank else None
  22. })
  23. for page in context['pages']:
  24. if page['is_active']:
  25. context['active_page'] = page
  26. break
  27. return django_render(request, template, context)
  28. def allow_see_list(permission=None):
  29. def permission_decorator(f):
  30. def decorator(request, *args, **kwargs):
  31. allow_browse_users_list(request.user)
  32. if permission:
  33. permission(request.user)
  34. return f(request, *args, **kwargs)
  35. return decorator
  36. return permission_decorator
  37. @allow_see_list()
  38. def lander(request):
  39. default = users_list.get_default_link()
  40. return redirect(default)
  41. def list_view(request, template, queryset, page, context=None):
  42. context = context or {}
  43. context['users'] = paginate(queryset, page, 6 * 3, 5)
  44. return render(request, template, context)
  45. @allow_see_list()
  46. def active_posters(request, page=0):
  47. tracked_period = settings.MISAGO_RANKING_LENGTH
  48. User = get_user_model()
  49. queryset = User.objects.all()
  50. template = "misago/userslists/active_posters.html"
  51. return list_view(request, template, queryset, page, {
  52. 'tracked_period': tracked_period
  53. })
  54. @allow_see_list(allow_see_users_online_list)
  55. def online(request, page=0):
  56. queryset = get_online_queryset(request.user).order_by('user__slug')
  57. template = "misago/userslists/online.html"
  58. return list_view(request, template, queryset, page)
  59. @allow_see_list()
  60. def rank(request, rank_slug, page=0):
  61. rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=rank_slug)
  62. queryset = rank.user_set.order_by('slug')
  63. template = "misago/userslists/rank.html"
  64. return list_view(request, template, queryset, page, {'rank': rank})