views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.contrib import messages
  2. from django.db.transaction import atomic
  3. from django.http import JsonResponse
  4. from django.shortcuts import redirect, render
  5. from django.utils.translation import ugettext as _, ungettext
  6. from misago.core.uiviews import uiview
  7. from misago.users.decorators import deny_guests
  8. from misago.notifications import (read_all_user_alerts,
  9. assert_real_new_notifications_count)
  10. @deny_guests
  11. def notifications(request):
  12. if request.method == 'POST':
  13. read_all(request)
  14. if not request.is_ajax():
  15. return redirect('misago:notifications')
  16. else:
  17. assert_real_new_notifications_count(request.user)
  18. if request.is_ajax():
  19. return dropdown(request)
  20. else:
  21. return full_page(request)
  22. def dropdown(request):
  23. template = render(request, 'misago/notifications/dropdown.html', {
  24. 'notifications_count': request.user.notifications.count(),
  25. 'items': request.user.notifications.order_by('-id')[:15],
  26. })
  27. return JsonResponse({
  28. 'is_error': False,
  29. 'count': request.user.new_notifications,
  30. 'html': template.content,
  31. })
  32. def full_page(request):
  33. return render(request, 'misago/notifications/full.html', {
  34. 'notifications_count': request.user.notifications.count(),
  35. 'items': request.user.notifications.order_by('-id'),
  36. })
  37. @atomic
  38. def read_all(request):
  39. if not request.is_ajax():
  40. messages.success(request, _("All notifications were set as read."))
  41. read_all_user_alerts(request.user)
  42. @uiview('misago_notifications')
  43. @deny_guests
  44. def event_sender(request, resolver_match):
  45. if request.user.new_notifications:
  46. message = ungettext("You have %(notifications)s new notification",
  47. "You have %(notifications)s new notifications",
  48. request.user.new_notifications)
  49. message = message % {'notifications': request.user.new_notifications}
  50. else:
  51. message = _("Your notifications")
  52. return {
  53. 'count': request.user.new_notifications,
  54. 'message': message,
  55. }