alerts.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 not request.user.alerts_date:
  14. request.user.alerts_date = request.user.join_date
  15. if request.is_ajax():
  16. alerts_qs = request.user.alert_set.filter(date__gte=request.session.start).order_by('-id')
  17. response_html = render_to_string('alerts/modal.html',
  18. {'alerts': alerts_qs},
  19. context_instance=RequestContext(request))
  20. if request.user.alerts_date:
  21. request.user.alerts = 0
  22. request.user.alerts_date = timezone.now()
  23. request.user.save(force_update=True)
  24. return json_response(request,
  25. json={'html': response_html})
  26. now = localtime(timezone.now())
  27. yesterday = now - timedelta(days=1)
  28. alerts = {}
  29. for alert in request.user.alert_set.order_by('-id'):
  30. alert.new = alert.date > request.user.alerts_date
  31. alert_date = localtime(deepcopy(alert.date))
  32. diff = now - alert_date
  33. if now.date() == alert_date.date():
  34. try:
  35. alerts['today'].append(alert)
  36. except KeyError:
  37. alerts['today'] = [alert]
  38. elif yesterday.date() == alert_date.date():
  39. try:
  40. alerts['yesterday'].append(alert)
  41. except KeyError:
  42. alerts['yesterday'] = [alert]
  43. elif diff.days <= 7:
  44. try:
  45. alerts['week'].append(alert)
  46. except KeyError:
  47. alerts['week'] = [alert]
  48. elif diff.days <= 30:
  49. try:
  50. alerts['month'].append(alert)
  51. except KeyError:
  52. alerts['month'] = [alert]
  53. else:
  54. try:
  55. alerts['older'].append(alert)
  56. except KeyError:
  57. alerts['older'] = [alert]
  58. new_alerts = request.user.alerts
  59. request.user.alerts = 0
  60. request.user.alerts_date = now
  61. request.user.save(force_update=True)
  62. return render_to_response('alerts/list.html',
  63. {
  64. 'new_alerts': new_alerts,
  65. 'alerts': alerts,
  66. },
  67. context_instance=RequestContext(request))
  68. @block_guest
  69. @check_csrf
  70. def clear_recent(request):
  71. if not request.is_ajax() or not request.method == 'POST':
  72. return error404(request)
  73. del request.session['recent_alerts']
  74. response_html = render_to_string('alerts/cleared.html',
  75. context_instance=RequestContext(request))
  76. return json_response(request,
  77. json={'html': response_html})