123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- from django.core.urlresolvers import reverse
- from django.shortcuts import redirect
- from django.template import RequestContext
- from misago.apps.errors import error403, error404
- from misago.forms import FormFields
- from misago.messages import Message
- from misago.models import Rank, User
- from misago.utils.strings import slugify
- from misago.utils.pagination import make_pagination
- from misago.apps.profiles.forms import QuickFindUserForm
- def list(request, slug=None, page=1):
- ranks = Rank.objects.filter(as_tab=1).order_by('order')
- # Find active rank
- default_rank = False
- active_rank = None
- if slug:
- for rank in ranks:
- if rank.slug == slug:
- active_rank = rank
- if not active_rank:
- return error404(request)
- elif ranks:
- default_rank = True
- active_rank = ranks[0]
- # Empty Defaults
- message = None
- users = []
- items_total = 0
- pagination = None
- in_search = False
- # Users search?
- if request.method == 'POST':
- if not request.acl.users.can_search_users():
- return error403(request)
- in_search = True
- active_rank = None
- search_form = QuickFindUserForm(request.POST, request=request)
- if search_form.is_valid():
- # Direct hit?
- username = search_form.cleaned_data['username']
- try:
- user = User.objects.get(username__iexact=username)
- return redirect(reverse('user', args=(user.username_slug, user.pk)))
- except User.DoesNotExist:
- pass
- # Looks like well have to find near match
- if len(username) > 6:
- username = username[0:-3]
- elif len(username) > 5:
- username = username[0:-2]
- elif len(username) > 4:
- username = username[0:-1]
- username = slugify(username.strip())
- # Go for rought match
- if len(username) > 0:
- users = User.objects.filter(username_slug__startswith=username).order_by('username_slug')[:10]
- elif search_form.non_field_errors()[0] == 'form_contains_errors':
- message = Message(_("To search users you have to enter username in search field."), 'error')
- else:
- message = Message(search_form.non_field_errors()[0], 'error')
- else:
- search_form = QuickFindUserForm(request=request)
- if active_rank:
- users = User.objects.filter(rank=active_rank)
- items_total = users.count()
- pagination = make_pagination(page, items_total, request.settings['profiles_per_list'])
- users = users.order_by('username_slug')[pagination['start']:pagination['stop']]
- return request.theme.render_to_response('profiles/list.html',
- {
- 'message': message,
- 'search_form': FormFields(search_form).fields,
- 'in_search': in_search,
- 'active_rank': active_rank,
- 'default_rank': default_rank,
- 'items_total': items_total,
- 'ranks': ranks,
- 'users': users,
- 'pagination': pagination,
- },
- context_instance=RequestContext(request));
|