admin.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from django.contrib import messages
  2. from django.utils import timezone
  3. from django.utils.translation import gettext_lazy as _
  4. from ...admin.views import generic
  5. from ..forms import AgreementForm, FilterAgreementsForm
  6. from ..models import Agreement
  7. from ..utils import disable_agreement, set_agreement_as_active
  8. class AgreementAdmin(generic.AdminBaseMixin):
  9. root_link = "misago:admin:settings:agreements:index"
  10. model = Agreement
  11. form = AgreementForm
  12. templates_dir = "misago/admin/agreements"
  13. message_404 = _("Requested agreement does not exist.")
  14. def handle_form(self, form, request, target):
  15. form.save()
  16. if self.message_submit:
  17. messages.success(
  18. request, self.message_submit % {"title": target.get_final_title()}
  19. )
  20. class AgreementsList(AgreementAdmin, generic.ListView):
  21. items_per_page = 30
  22. ordering = [("-id", _("From newest")), ("id", _("From oldest"))]
  23. filter_form = FilterAgreementsForm
  24. selection_label = _("With agreements: 0")
  25. empty_selection_label = _("Select agreements")
  26. mass_actions = (
  27. {
  28. "action": "delete",
  29. "icon": "fa fa-times",
  30. "name": _("Delete agreements"),
  31. "confirmation": _("Are you sure you want to delete those agreements?"),
  32. },
  33. )
  34. def get_queryset(self):
  35. qs = super().get_queryset()
  36. return qs.select_related()
  37. def action_delete(self, request, items):
  38. items.delete()
  39. Agreement.objects.invalidate_cache()
  40. messages.success(request, _("Selected agreements have been deleted."))
  41. class NewAgreement(AgreementAdmin, generic.ModelFormView):
  42. message_submit = _('New agreement "%(title)s" has been saved.')
  43. def handle_form(self, form, request, target):
  44. super().handle_form(form, request, target)
  45. form.instance.set_created_by(request.user)
  46. form.instance.save()
  47. Agreement.objects.invalidate_cache()
  48. class EditAgreement(AgreementAdmin, generic.ModelFormView):
  49. message_submit = _('Agreement "%(title)s" has been edited.')
  50. def handle_form(self, form, request, target):
  51. super().handle_form(form, request, target)
  52. form.instance.last_modified_on = timezone.now()
  53. form.instance.set_last_modified_by(request.user)
  54. form.instance.save()
  55. Agreement.objects.invalidate_cache()
  56. class DeleteAgreement(AgreementAdmin, generic.ButtonView):
  57. def button_action(self, request, target):
  58. target.delete()
  59. Agreement.objects.invalidate_cache()
  60. message = _('Agreement "%(title)s" has been deleted.')
  61. messages.success(request, message % {"title": target.get_final_title()})
  62. class SetAgreementAsActive(AgreementAdmin, generic.ButtonView):
  63. def button_action(self, request, target):
  64. set_agreement_as_active(target, commit=True)
  65. message = _('Agreement "%(title)s" has been set as active for type "%(type)s".')
  66. targets_names = {
  67. "title": target.get_final_title(),
  68. "type": target.get_type_display(),
  69. }
  70. messages.success(request, message % targets_names)
  71. class DisableAgreement(AgreementAdmin, generic.ButtonView):
  72. def button_action(self, request, target):
  73. disable_agreement(target, commit=True)
  74. message = _('Agreement "%(title)s" has been disabled.') % {
  75. "title": target.get_final_title()
  76. }
  77. messages.success(request, message)