datadownloads.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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, SearchDataDownloadsForm
  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. def get_queryset(self):
  39. qs = super().get_queryset()
  40. return qs.select_related("user", "requester")
  41. def get_search_form(self, request):
  42. return SearchDataDownloadsForm
  43. def action_expire(self, request, data_downloads):
  44. for data_download in data_downloads:
  45. expire_user_data_download(data_download)
  46. messages.success(
  47. request, _("Selected data downloads have been set as expired.")
  48. )
  49. def action_delete(self, request, data_downloads):
  50. for data_download in data_downloads:
  51. data_download.delete()
  52. messages.success(request, _("Selected data downloads have been deleted."))
  53. class RequestDataDownloads(DataDownloadAdmin, generic.FormView):
  54. form = RequestDataDownloadsForm
  55. def handle_form(self, form, request):
  56. for user in form.cleaned_data["users"]:
  57. if not user_has_data_download_request(user):
  58. request_user_data_download(user, requester=request.user)
  59. messages.success(
  60. request, _("Data downloads have been requested for specified users.")
  61. )