profiles.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.template import RequestContext
  4. from misago.forms import FormFields
  5. from misago.messages import Message
  6. from misago.users.forms import QuickFindUserForm
  7. from misago.users.models import User, Rank
  8. from misago.views import error404
  9. from misago.utils import slugify
  10. def list(request, rank_slug=None):
  11. ranks = Rank.objects.filter(as_tab=1).order_by('order')
  12. # Find active rank
  13. active_rank = None
  14. if rank_slug:
  15. for rank in ranks:
  16. if rank.name_slug == rank_slug:
  17. active_rank = rank
  18. if not active_rank:
  19. return error404(request)
  20. elif ranks:
  21. active_rank = ranks[0]
  22. # Empty Defaults
  23. message = None
  24. users = []
  25. in_search = False
  26. # Users search?
  27. if request.method == 'POST':
  28. in_search = True
  29. active_rank = None
  30. search_form = QuickFindUserForm(request.POST, request=request)
  31. if search_form.is_valid():
  32. # Direct hit?
  33. username = search_form.cleaned_data['username']
  34. try:
  35. user = User.objects.get(username__iexact=username)
  36. return redirect(reverse('user', args=(user.username_slug, user.pk)))
  37. except User.DoesNotExist:
  38. pass
  39. # Looks like well have to find near match
  40. if len(username) > 6:
  41. username = username[0:-3]
  42. elif len(username) > 5:
  43. username = username[0:-2]
  44. elif len(username) > 4:
  45. username = username[0:-1]
  46. username = slugify(username.strip())
  47. # Go for rought match
  48. if len(username) > 0:
  49. print username
  50. users = User.objects.filter(username_slug__startswith=username).order_by('username_slug')[:10]
  51. elif search_form.non_field_errors()[0] == 'form_contains_errors':
  52. message = Message(request, 'users/search_empty', 'error')
  53. else:
  54. message = Message(request, search_form.non_field_errors()[0], 'error')
  55. else:
  56. search_form = QuickFindUserForm(request=request)
  57. if active_rank:
  58. users = User.objects.filter(rank=active_rank).order_by('username_slug')
  59. return request.theme.render_to_response('users/list.html',
  60. {
  61. 'message': message,
  62. 'search_form': FormFields(search_form).fields,
  63. 'in_search': in_search,
  64. 'active_rank': active_rank,
  65. 'ranks': ranks,
  66. 'users': users,
  67. },
  68. context_instance=RequestContext(request));
  69. def list_search(request):
  70. ranks = Rank.objects.filter(as_tab=1).order_by('order')
  71. return request.theme.render_to_response('users/list_search.html',
  72. {
  73. 'search_form': FormFields(QuickFindUserForm(request=request)),
  74. 'ranks': ranks,
  75. 'users': users,
  76. },
  77. context_instance=RequestContext(request));
  78. def show(request, user, username):
  79. user = int(user)
  80. try:
  81. user = User.objects.get(pk=user)
  82. if user.username_slug != username:
  83. # Force crawlers to take notice of updated username
  84. return redirect(reverse('user', args=(user.username_slug, user.pk)), permanent=True)
  85. return request.theme.render_to_response('users/profile.html',
  86. {
  87. 'profile': user,
  88. },
  89. context_instance=RequestContext(request));
  90. except User.DoesNotExist:
  91. return error404(request)