datadownloads.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from django.contrib import messages
  2. from django.utils.translation import gettext_lazy as _
  3. from ....admin.views import generic
  4. from ...datadownloads import (
  5. expire_user_data_download,
  6. request_user_data_download,
  7. user_has_data_download_request,
  8. )
  9. from ...models import DataDownload
  10. from ..forms import RequestDataDownloadsForm, FilterDataDownloadsForm
  11. class DataDownloadAdmin(generic.AdminBaseMixin):
  12. root_link = "misago:admin:users:data-downloads:index"
  13. templates_dir = "misago/admin/datadownloads"
  14. model = DataDownload
  15. class DataDownloadsList(DataDownloadAdmin, generic.ListView):
  16. items_per_page = 30
  17. ordering = [("-id", _("From newest")), ("id", _("From oldest"))]
  18. selection_label = _("With data downloads: 0")
  19. empty_selection_label = _("Select data downloads")
  20. mass_actions = [
  21. {
  22. "action": "expire",
  23. "name": _("Expire downloads"),
  24. "confirmation": _(
  25. "Are you sure you want to set selected data downloads as expired?"
  26. ),
  27. },
  28. {
  29. "action": "delete",
  30. "name": _("Delete downloads"),
  31. "confirmation": _(
  32. "Are you sure you want to delete selected data downloads?"
  33. ),
  34. },
  35. ]
  36. filter_form = FilterDataDownloadsForm
  37. def get_queryset(self):
  38. qs = super().get_queryset()
  39. return qs.select_related("user", "requester")
  40. def action_expire(self, request, data_downloads):
  41. for data_download in data_downloads:
  42. expire_user_data_download(data_download)
  43. messages.success(
  44. request, _("Selected data downloads have been set as expired.")
  45. )
  46. def action_delete(self, request, data_downloads):
  47. for data_download in data_downloads:
  48. data_download.delete()
  49. messages.success(request, _("Selected data downloads have been deleted."))
  50. class RequestDataDownloads(DataDownloadAdmin, generic.FormView):
  51. form_class = RequestDataDownloadsForm
  52. def handle_form(self, form, request):
  53. for user in form.cleaned_data["users"]:
  54. if not user_has_data_download_request(user):
  55. request_user_data_download(user, requester=request.user)
  56. messages.success(
  57. request, _("Data downloads have been requested for specified users.")
  58. )