datadownloads.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 ...forms.admin import RequestDataDownloadsForm, FilterDataDownloadsForm
  10. from ...models import DataDownload
  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. "icon": "fa fa-ban",
  25. "confirmation": _(
  26. "Are you sure you want to set selected data downloads as expired?"
  27. ),
  28. },
  29. {
  30. "action": "delete",
  31. "name": _("Delete downloads"),
  32. "icon": "fa fa-times-circle",
  33. "confirmation": _(
  34. "Are you sure you want to delete selected data downloads?"
  35. ),
  36. },
  37. ]
  38. filter_form = FilterDataDownloadsForm
  39. def get_queryset(self):
  40. qs = super().get_queryset()
  41. return qs.select_related("user", "requester")
  42. def action_expire(self, request, data_downloads):
  43. for data_download in data_downloads:
  44. expire_user_data_download(data_download)
  45. messages.success(
  46. request, _("Selected data downloads have been set as expired.")
  47. )
  48. def action_delete(self, request, data_downloads):
  49. for data_download in data_downloads:
  50. data_download.delete()
  51. messages.success(request, _("Selected data downloads have been deleted."))
  52. class RequestDataDownloads(DataDownloadAdmin, generic.FormView):
  53. form = RequestDataDownloadsForm
  54. def handle_form(self, form, request):
  55. for user in form.cleaned_data["users"]:
  56. if not user_has_data_download_request(user):
  57. request_user_data_download(user, requester=request.user)
  58. messages.success(
  59. request, _("Data downloads have been requested for specified users.")
  60. )