views.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from django.core.urlresolvers import NoReverseMatch
  2. from django.shortcuts import redirect
  3. from django.utils.translation import ugettext as _
  4. from misago.authn.decorators import block_guest
  5. from misago.csrf.decorators import check_csrf
  6. from misago.messages import Message
  7. from misago.users.models import User
  8. from misago.profiles.decorators import user_view
  9. from misago.views import error404
  10. from misago.utils import ugettext_lazy
  11. def fallback(request):
  12. try:
  13. return redirect(request.POST.get('fallback', '/'))
  14. except NoReverseMatch:
  15. return redirect('index')
  16. @block_guest
  17. @check_csrf
  18. @user_view
  19. def follow(request, user):
  20. if request.user.pk == user.pk:
  21. return error404(request)
  22. if not request.user.is_following(user):
  23. request.messages.set_flash(Message(_("You are now following %(username)s") % {'username': user.username}), 'success')
  24. request.user.follows.add(user)
  25. request.user.following += 1
  26. request.user.save(force_update=True)
  27. user.followers += 1
  28. if not user.is_ignoring(request.user):
  29. alert = user.alert(ugettext_lazy("%(username)s is now following you").message)
  30. alert.profile('username', request.user)
  31. alert.save_all()
  32. else:
  33. user.save(force_update=True)
  34. return fallback(request)
  35. @block_guest
  36. @check_csrf
  37. @user_view
  38. def unfollow(request, user):
  39. if request.user.pk == user.pk:
  40. return error404(request)
  41. if request.user.is_following(user):
  42. request.messages.set_flash(Message(_("You have stopped following %(username)s") % {'username': user.username}))
  43. request.user.follows.remove(user)
  44. request.user.following -= 1
  45. request.user.save(force_update=True)
  46. user.followers -= 1
  47. user.save(force_update=True)
  48. return fallback(request)
  49. @block_guest
  50. @check_csrf
  51. @user_view
  52. def ignore(request, user):
  53. if request.user.pk == user.pk:
  54. return error404(request)
  55. if not request.user.is_ignoring(user):
  56. request.messages.set_flash(Message(_("You are now ignoring %(username)s") % {'username': user.username}), 'success')
  57. request.user.ignores.add(user)
  58. return fallback(request)
  59. @block_guest
  60. @check_csrf
  61. def unignore(request, user):
  62. if request.user.pk == user.pk:
  63. return error404(request)
  64. if request.user.is_ignoring(user):
  65. request.messages.set_flash(Message(_("You have stopped ignoring %(username)s") % {'username': user.username}))
  66. request.user.ignores.remove(user)
  67. return fallback(request)