alerts.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. from copy import deepcopy
  2. from datetime import timedelta
  3. from django.template import RequestContext
  4. from django.utils import timezone
  5. from django.utils.timezone import localtime
  6. from django.utils.translation import ugettext as _
  7. from misago.apps.errors import error404
  8. from misago.decorators import block_guest, check_csrf
  9. from misago.shortcuts import render_to_response, json_response
  10. from misago.template.loader import render_to_string
  11. @block_guest
  12. def alerts(request):
  13. if request.is_ajax():
  14. if request.session.get('recent_alerts'):
  15. alerts_qs = request.user.alert_set.filter(date__gte=request.session['recent_alerts']).order_by('-id')
  16. else:
  17. alerts_qs = ()
  18. response_html = render_to_string('alerts/modal.html',
  19. {'alerts': alerts_qs},
  20. context_instance=RequestContext(request))
  21. if request.user.alerts:
  22. request.user.alerts = 0
  23. request.user.alerts_date = timezone.now()
  24. request.user.save(force_update=True)
  25. return json_response(request,
  26. json={'html': response_html})
  27. if not request.user.alerts_date:
  28. request.user.alerts_date = request.user.join_date
  29. now = localtime(timezone.now())
  30. yesterday = now - timedelta(days=1)
  31. alerts = {}
  32. for alert in request.user.alert_set.order_by('-id'):
  33. alert.new = alert.date > request.user.alerts_date
  34. alert_date = localtime(deepcopy(alert.date))
  35. diff = now - alert_date
  36. if now.date() == alert_date.date():
  37. try:
  38. alerts['today'].append(alert)
  39. except KeyError:
  40. alerts['today'] = [alert]
  41. elif yesterday.date() == alert_date.date():
  42. try:
  43. alerts['yesterday'].append(alert)
  44. except KeyError:
  45. alerts['yesterday'] = [alert]
  46. elif diff.days <= 7:
  47. try:
  48. alerts['week'].append(alert)
  49. except KeyError:
  50. alerts['week'] = [alert]
  51. elif diff.days <= 30:
  52. try:
  53. alerts['month'].append(alert)
  54. except KeyError:
  55. alerts['month'] = [alert]
  56. else:
  57. try:
  58. alerts['older'].append(alert)
  59. except KeyError:
  60. alerts['older'] = [alert]
  61. new_alerts = request.user.alerts
  62. request.user.alerts = 0
  63. request.user.alerts_date = now
  64. request.user.save(force_update=True)
  65. return render_to_response('alerts/list.html',
  66. {
  67. 'new_alerts': new_alerts,
  68. 'alerts': alerts,
  69. },
  70. context_instance=RequestContext(request))
  71. @block_guest
  72. @check_csrf
  73. def clear_recent(request):
  74. if not request.is_ajax() or not request.method == 'POST':
  75. return error404(request)
  76. try:
  77. del request.session['recent_alerts']
  78. except KeyError:
  79. pass
  80. response_html = render_to_string('alerts/cleared.html',
  81. context_instance=RequestContext(request))
  82. return json_response(request,
  83. json={'html': response_html})