123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- from django.contrib.auth import get_user_model
- from django.shortcuts import render as django_render
- from django.shortcuts import get_object_or_404, redirect
- from django.urls import reverse
- from django.utils import six
- from misago.conf import settings
- from misago.core.shortcuts import paginate, pagination_dict
- from misago.core.utils import format_plaintext_for_html
- from misago.users.activepostersranking import get_active_posters_ranking
- from misago.users.models import Rank
- from misago.users.pages import users_list
- from misago.users.permissions import allow_browse_users_list
- from misago.users.serializers import UserCardSerializer
- def render(request, template, context):
- request.frontend_context['USERS_LISTS'] = []
- context['pages'] = users_list.get_sections(request)
- for page in context['pages']:
- page['reversed_link'] = reverse(page['link'])
- request.frontend_context['USERS_LISTS'].append({
- 'name': six.text_type(page['name']),
- 'component': page['component'],
- })
- active_rank = context.get('rank')
- for rank in Rank.objects.filter(is_tab=True).order_by('order'):
- context['pages'].append({
- 'name': rank.name,
- 'reversed_link': reverse('misago:users-rank', kwargs={
- 'slug': rank.slug
- }),
- 'is_active': active_rank.pk == rank.pk if active_rank else None
- })
- if rank.description:
- description = {
- 'plain': rank.description,
- 'html': format_plaintext_for_html(rank.description)
- }
- else:
- description = None
- request.frontend_context['USERS_LISTS'].append({
- 'id': rank.pk,
- 'name': rank.name,
- 'slug': rank.slug,
- 'css_class': rank.css_class,
- 'description': description,
- 'component': 'rank',
- })
- for page in context['pages']:
- if page['is_active']:
- context['active_page'] = page
- break
- return django_render(request, template, context)
- def allow_see_list(f):
- def decorator(request, *args, **kwargs):
- allow_browse_users_list(request.user)
- return f(request, *args, **kwargs)
- return decorator
- @allow_see_list
- def landing(request):
- default = users_list.get_default_link()
- return redirect(default)
- @allow_see_list
- def active_posters(request):
- ranking = get_active_posters_ranking()
- request.frontend_context['USERS'] = {
- 'tracked_period': settings.MISAGO_RANKING_LENGTH,
- 'results': ScoredUserSerializer(ranking['users'], many=True).data,
- 'count': ranking['users_count']
- }
- template = "misago/userslists/active_posters.html"
- return render(request, template, {
- 'tracked_period': settings.MISAGO_RANKING_LENGTH,
- 'users': ranking['users'],
- 'users_count': ranking['users_count']
- })
- @allow_see_list
- def rank(request, slug, page=0):
- rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug)
- queryset = rank.user_set.select_related('rank').order_by('slug')
- if not request.user.is_staff:
- queryset = queryset.filter(is_active=True)
- page = paginate(queryset, page, settings.MISAGO_USERS_PER_PAGE, 4)
- data = pagination_dict(page)
- data.update({
- 'results': UserCardSerializer(page.object_list, many=True).data
- })
- request.frontend_context['USERS'] = data
- if rank.description:
- description = {
- 'plain': rank.description,
- 'html': format_plaintext_for_html(rank.description)
- }
- else:
- description = None
- template = "misago/userslists/rank.html"
- return render(request, template, {
- 'rank': rank,
- 'users': page.object_list,
- 'paginator': data
- })
- ScoredUserSerializer = UserCardSerializer.extend_fields('meta')
|