views.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 ..models import Agreement
  6. from .forms import AgreementForm, FilterAgreementsForm
  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. "name": _("Delete agreements"),
  30. "confirmation": _("Are you sure you want to delete those agreements?"),
  31. }
  32. ]
  33. def get_queryset(self):
  34. qs = super().get_queryset()
  35. return qs.select_related()
  36. def action_delete(self, request, items):
  37. items.delete()
  38. Agreement.objects.invalidate_cache()
  39. messages.success(request, _("Selected agreements have been deleted."))
  40. class NewAgreement(AgreementAdmin, generic.ModelFormView):
  41. message_submit = _('New agreement "%(title)s" has been saved.')
  42. def handle_form(self, form, request, target):
  43. super().handle_form(form, request, target)
  44. form.instance.set_created_by(request.user)
  45. form.instance.save()
  46. Agreement.objects.invalidate_cache()
  47. class EditAgreement(AgreementAdmin, generic.ModelFormView):
  48. message_submit = _('Agreement "%(title)s" has been edited.')
  49. def handle_form(self, form, request, target):
  50. super().handle_form(form, request, target)
  51. form.instance.last_modified_on = timezone.now()
  52. form.instance.set_last_modified_by(request.user)
  53. form.instance.save()
  54. Agreement.objects.invalidate_cache()
  55. class DeleteAgreement(AgreementAdmin, generic.ButtonView):
  56. def button_action(self, request, target):
  57. target.delete()
  58. Agreement.objects.invalidate_cache()
  59. message = _('Agreement "%(title)s" has been deleted.')
  60. messages.success(request, message % {"title": target.get_final_title()})
  61. class SetAgreementAsActive(AgreementAdmin, generic.ButtonView):
  62. def button_action(self, request, target):
  63. set_agreement_as_active(target, commit=True)
  64. message = _('Agreement "%(title)s" has been set as active for type "%(type)s".')
  65. targets_names = {
  66. "title": target.get_final_title(),
  67. "type": target.get_type_display(),
  68. }
  69. messages.success(request, message % targets_names)
  70. class DisableAgreement(AgreementAdmin, generic.ButtonView):
  71. def button_action(self, request, target):
  72. disable_agreement(target, commit=True)
  73. message = _('Agreement "%(title)s" has been disabled.') % {
  74. "title": target.get_final_title()
  75. }
  76. messages.success(request, message)