views.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. from django.core.urlresolvers import reverse as django_reverse
  2. from django import forms
  3. from django.utils.translation import ugettext as _
  4. from misago.admin import site
  5. from misago.admin.widgets import *
  6. from misago.forms import Form
  7. from misago.prune.forms import PolicyForm
  8. from misago.prune.models import Policy
  9. def reverse(route, target=None):
  10. if target:
  11. return django_reverse(route, kwargs={'target': target.pk})
  12. return django_reverse(route)
  13. """
  14. Views
  15. """
  16. class List(ListWidget):
  17. admin = site.get_action('prune_users')
  18. id = 'list'
  19. columns=(
  20. ('name', _("Pruning Policy")),
  21. )
  22. nothing_checked_message = _('You have to check at least one policy.')
  23. actions=(
  24. ('delete', _("Delete selected policies"), _("Are you sure you want to delete selected policies?")),
  25. )
  26. def sort_items(self, request, page_items, sorting_method):
  27. return page_items.order_by('name')
  28. def get_item_actions(self, request, item):
  29. return (
  30. self.action('pencil', _("Edit Pruning Policy"), reverse('admin_pruning_edit', item)),
  31. self.action('remove', _("Delete Pruning Policy"), reverse('admin_pruning_delete', item), post=True, prompt=_("Are you sure you want to delete this rank?")),
  32. )
  33. def action_delete(self, request, items, checked):
  34. if not request.user.is_god():
  35. return Message(_('Only system administrators can delete pruning policies.'), 'error'), reverse('admin_prune_users')
  36. Policy.objects.filter(id__in=checked).delete()
  37. return Message(_('Selected pruning policies have been deleted successfully.'), 'success'), reverse('admin_prune_users')
  38. class New(FormWidget):
  39. admin = site.get_action('prune_users')
  40. id = 'new'
  41. fallback = 'admin_prune_users'
  42. form = PolicyForm
  43. submit_button = _("Save Policy")
  44. def get_new_url(self, request, model):
  45. return reverse('admin_prune_users')
  46. def get_edit_url(self, request, model):
  47. return reverse('admin_pruning_edit', model)
  48. def submit_form(self, request, form, target):
  49. new_policy = Policy(
  50. name = form.cleaned_data['name'],
  51. email = form.cleaned_data['email'],
  52. posts = form.cleaned_data['posts'],
  53. registered = form.cleaned_data['registered'],
  54. last_visit = form.cleaned_data['last_visit'],
  55. )
  56. new_policy.save(force_insert=True)
  57. return new_policy, Message(_('New Pruning Policy has been created.'), 'success')
  58. def __call__(self, request, *args, **kwargs):
  59. if not request.user.is_god():
  60. request.messages.set_flash(Message(_('Only system administrators can set new pruning policies.')), 'error', self.admin.id)
  61. return redirect(reverse('admin_prune_users'))
  62. return super(New, self).__call__(request, *args, **kwargs)
  63. class Edit(FormWidget):
  64. admin = site.get_action('prune_users')
  65. id = 'edit'
  66. name = _("Edit Pruning Policy")
  67. fallback = 'admin_prune_users'
  68. form = PolicyForm
  69. target_name = 'name'
  70. notfound_message = _('Requested pruning policy could not be found.')
  71. submit_fallback = True
  72. def get_url(self, request, model):
  73. return reverse('admin_pruning_edit', model)
  74. def get_edit_url(self, request, model):
  75. return self.get_url(request, model)
  76. def get_initial_data(self, request, model):
  77. return {
  78. 'name': model.name,
  79. 'email': model.email,
  80. 'posts': model.posts,
  81. 'registered': model.registered,
  82. 'last_visit': model.last_visit,
  83. }
  84. def submit_form(self, request, form, target):
  85. target.name = form.cleaned_data['name']
  86. target.email = form.cleaned_data['email']
  87. target.posts = form.cleaned_data['posts']
  88. target.registered = form.cleaned_data['registered']
  89. target.last_visit = form.cleaned_data['last_visit']
  90. target.save(force_update=True)
  91. return target, Message(_('Changes in policy "%(name)s" have been saved.') % {'name': self.original_name}, 'success')
  92. def __call__(self, request, *args, **kwargs):
  93. if not request.user.is_god():
  94. request.messages.set_flash(Message(_('Only system administrators can edit pruning policies.')), 'error', self.admin.id)
  95. return redirect(reverse('admin_prune_users'))
  96. return super(Edit, self).__call__(request, *args, **kwargs)
  97. class Delete(ButtonWidget):
  98. admin = site.get_action('prune_users')
  99. id = 'delete'
  100. fallback = 'admin_prune_users'
  101. notfound_message = _('Requested pruning policy could not be found.')
  102. def action(self, request, target):
  103. if not request.user.is_god():
  104. return Message(_('Only system administrators can delete pruning policies.'), 'error'), False
  105. target.delete()
  106. return Message(_('Pruning policy "%(name)s" has been deleted.') % {'name': target.name}, 'success'), False