admin.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from django.contrib import messages
  2. from django.utils import timezone
  3. from django.utils.translation import gettext_lazy as _
  4. from misago.admin.views import generic
  5. from misago.legal.forms import AgreementForm, SearchAgreementsForm
  6. from misago.legal.models import Agreement
  7. from misago.legal.utils import set_agreement_as_active
  8. class AgreementAdmin(generic.AdminBaseMixin):
  9. root_link = "misago:admin:users: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. search_form = SearchAgreementsForm
  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. 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. class DeleteAgreement(AgreementAdmin, generic.ButtonView):
  55. def button_action(self, request, target):
  56. target.delete()
  57. Agreement.objects.invalidate_cache()
  58. message = _('Agreement "%(title)s" has been deleted.')
  59. messages.success(request, message % {"title": target.get_final_title()})
  60. class SetAgreementAsActive(AgreementAdmin, generic.ButtonView):
  61. def button_action(self, request, target):
  62. set_agreement_as_active(target, commit=True)
  63. message = _('Agreement "%(title)s" has been set as active for type "%(type)s".')
  64. targets_names = {
  65. "title": target.get_final_title(),
  66. "type": target.get_type_display(),
  67. }
  68. messages.success(request, message % targets_names)