admin.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. from django.core.urlresolvers import reverse as django_reverse
  2. from django.db.models import Q
  3. from django.utils.translation import ugettext as _
  4. from misago.admin import site
  5. from misago.admin.widgets import *
  6. from misago.banning.forms import BanForm, SearchBansForm
  7. from misago.banning.models import Ban
  8. def reverse(route, target=None):
  9. if target:
  10. return django_reverse(route, kwargs={'target': target.pk})
  11. return django_reverse(route)
  12. """
  13. Views
  14. """
  15. class List(ListWidget):
  16. """
  17. List Bans
  18. """
  19. admin = site.get_action('bans')
  20. id = 'list'
  21. columns=(
  22. ('ban', _("Ban"), 50),
  23. ('expires', _("Expires")),
  24. )
  25. default_sorting = 'expires'
  26. sortables={
  27. 'ban': 1,
  28. 'expires': 0,
  29. }
  30. pagination = 20
  31. search_form = SearchBansForm
  32. empty_message = _('No bans are currently set.')
  33. empty_search_message = _('No bans have been found.')
  34. nothing_checked_message = _('You have to check at least one ban.')
  35. actions=(
  36. ('delete', _("Lift selected bans"), _("Are you sure you want to lift selected bans?")),
  37. )
  38. def set_filters(self, model, filters):
  39. if 'ban' in filters:
  40. model = model.filter(ban__contains=filters['ban'])
  41. if 'reason' in filters:
  42. model = model.filter(Q(reason_user__contains=filters['reason']) | Q(reason_admin__contains=filters['reason']))
  43. if 'type' in filters:
  44. model = model.filter(type__in=filters['type'])
  45. return model
  46. def get_item_actions(self, request, item):
  47. return (
  48. self.action('pencil', _("Edit Ban"), reverse('admin_bans_edit', item)),
  49. self.action('remove', _("Lift Ban"), reverse('admin_bans_delete', item), post=True, prompt=_("Are you sure you want to lift this ban?")),
  50. )
  51. def action_delete(self, request, items, checked):
  52. Ban.objects.filter(id__in=checked).delete()
  53. request.monitor['bans_version'] = int(request.monitor['bans_version']) + 1
  54. return Message(_('Selected bans have been lifted successfully.'), 'success'), reverse('admin_bans')
  55. class New(FormWidget):
  56. """
  57. Create Ban
  58. """
  59. admin = site.get_action('bans')
  60. id = 'new'
  61. fallback = 'admin_bans'
  62. form = BanForm
  63. submit_button = _("Set Ban")
  64. def get_new_url(self, request, model):
  65. return reverse('admin_bans')
  66. def get_edit_url(self, request, model):
  67. return reverse('admin_bans_edit', model)
  68. def submit_form(self, request, form, target):
  69. new_ban = Ban(
  70. type = form.cleaned_data['type'],
  71. ban = form.cleaned_data['ban'],
  72. reason_user = form.cleaned_data['reason_user'],
  73. reason_admin = form.cleaned_data['reason_admin'],
  74. expires = form.cleaned_data['expires']
  75. )
  76. new_ban.save(force_insert=True)
  77. request.monitor['bans_version'] = int(request.monitor['bans_version']) + 1
  78. return new_ban, Message(_('New Ban has been set.'), 'success')
  79. class Edit(FormWidget):
  80. """
  81. Edit Ban
  82. """
  83. admin = site.get_action('bans')
  84. id = 'edit'
  85. name = _("Edit Ban")
  86. fallback = 'admin_bans'
  87. form = BanForm
  88. target_name = 'ban'
  89. notfound_message = _('Requested Ban could not be found.')
  90. submit_fallback = True
  91. def get_url(self, request, model):
  92. return reverse('admin_bans_edit', model)
  93. def get_edit_url(self, request, model):
  94. return self.get_url(request, model)
  95. def get_initial_data(self, request, model):
  96. return {
  97. 'type': model.type,
  98. 'ban': model.ban,
  99. 'reason_user': model.reason_user,
  100. 'reason_admin': model.reason_admin,
  101. 'expires': model.expires,
  102. }
  103. def submit_form(self, request, form, target):
  104. target.type = form.cleaned_data['type']
  105. target.ban = form.cleaned_data['ban']
  106. target.reason_user = form.cleaned_data['reason_user']
  107. target.reason_admin = form.cleaned_data['reason_admin']
  108. target.expires = form.cleaned_data['expires']
  109. target.save(force_update=True)
  110. request.monitor['bans_version'] = int(request.monitor['bans_version']) + 1
  111. return target, Message(_('Changes in ban have been saved.'), 'success')
  112. class Delete(ButtonWidget):
  113. """
  114. Delete Ban
  115. """
  116. admin = site.get_action('bans')
  117. id = 'delete'
  118. fallback = 'admin_bans'
  119. notfound_message = _('Requested Ban could not be found.')
  120. def action(self, request, target):
  121. target.delete()
  122. request.monitor['bans_version'] = int(request.monitor['bans_version']) + 1
  123. if target.type == 0:
  124. return Message(_('E-mail and username Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
  125. if target.type == 1:
  126. return Message(_('Username Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
  127. if target.type == 2:
  128. return Message(_('E-mail Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
  129. if target.type == 3:
  130. return Message(_('IP Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False