views.py 2.2 KB

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