views.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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.profiles.forms import QuickFindUserForm
  7. from misago.ranks.models import Rank
  8. from misago.users.models import User
  9. from misago.utils import slugify
  10. from misago.views import error404
  11. def list(request, rank_slug=None):
  12. ranks = Rank.objects.filter(as_tab=1).order_by('order')
  13. # Find active rank
  14. active_rank = None
  15. if rank_slug:
  16. for rank in ranks:
  17. if rank.name_slug == rank_slug:
  18. active_rank = rank
  19. if not active_rank:
  20. return error404(request)
  21. elif ranks:
  22. active_rank = ranks[0]
  23. # Empty Defaults
  24. message = None
  25. users = []
  26. in_search = False
  27. # Users search?
  28. if request.method == 'POST':
  29. in_search = True
  30. active_rank = None
  31. search_form = QuickFindUserForm(request.POST, request=request)
  32. if search_form.is_valid():
  33. # Direct hit?
  34. username = search_form.cleaned_data['username']
  35. try:
  36. user = User.objects.get(username__iexact=username)
  37. return redirect(reverse('user', args=(user.username_slug, user.pk)))
  38. except User.DoesNotExist:
  39. pass
  40. # Looks like well have to find near match
  41. if len(username) > 6:
  42. username = username[0:-3]
  43. elif len(username) > 5:
  44. username = username[0:-2]
  45. elif len(username) > 4:
  46. username = username[0:-1]
  47. username = slugify(username.strip())
  48. # Go for rought match
  49. if len(username) > 0:
  50. print username
  51. users = User.objects.filter(username_slug__startswith=username).order_by('username_slug')[:10]
  52. elif search_form.non_field_errors()[0] == 'form_contains_errors':
  53. message = Message(_("To search users you have to enter username in search field."), 'error')
  54. else:
  55. message = Message(search_form.non_field_errors()[0], 'error')
  56. else:
  57. search_form = QuickFindUserForm(request=request)
  58. if active_rank:
  59. users = User.objects.filter(rank=active_rank).order_by('username_slug')
  60. return request.theme.render_to_response('profiles/list.html',
  61. {
  62. 'message': message,
  63. 'search_form': FormFields(search_form).fields,
  64. 'in_search': in_search,
  65. 'active_rank': active_rank,
  66. 'ranks': ranks,
  67. 'users': users,
  68. },
  69. context_instance=RequestContext(request));
  70. def profile(request, user, username, tab='posts'):
  71. user = int(user)
  72. try:
  73. user = User.objects.get(pk=user)
  74. if user.username_slug != username:
  75. # Force crawlers to take notice of updated username
  76. return redirect(reverse('user', args=(user.username_slug, user.pk)), permanent=True)
  77. return globals()['profile_%s' % tab](request, user)
  78. except User.DoesNotExist:
  79. return error404(request)
  80. def profile_posts(request, user):
  81. return request.theme.render_to_response('profiles/profile.html',
  82. {
  83. 'profile': user,
  84. 'tab': 'posts',
  85. },
  86. context_instance=RequestContext(request));
  87. def profile_threads(request, user):
  88. return request.theme.render_to_response('profiles/profile.html',
  89. {
  90. 'profile': user,
  91. 'tab': 'threads',
  92. },
  93. context_instance=RequestContext(request));
  94. def profile_following(request, user):
  95. return request.theme.render_to_response('profiles/profile.html',
  96. {
  97. 'profile': user,
  98. 'tab': 'following',
  99. },
  100. context_instance=RequestContext(request));
  101. def profile_followers(request, user):
  102. return request.theme.render_to_response('profiles/profile.html',
  103. {
  104. 'profile': user,
  105. 'tab': 'followers',
  106. },
  107. context_instance=RequestContext(request));
  108. def profile_details(request, user):
  109. return request.theme.render_to_response('profiles/details.html',
  110. {
  111. 'profile': user,
  112. 'tab': 'details',
  113. },
  114. context_instance=RequestContext(request));