Просмотр исходного кода

Prepare new data downloads from users admin

Rafał Pitoń 7 лет назад
Родитель
Сommit
c676275f0f
2 измененных файлов с 38 добавлено и 3 удалено
  1. 25 1
      misago/users/tests/test_useradmin_views.py
  2. 13 2
      misago/users/views/admin/users.py

+ 25 - 1
misago/users/tests/test_useradmin_views.py

@@ -7,7 +7,7 @@ from misago.acl.models import Role
 from misago.admin.testutils import AdminTestCase
 from misago.categories.models import Category
 from misago.threads.testutils import post_thread, reply_thread
-from misago.users.models import Ban, Rank
+from misago.users.models import Ban, DataDownload, Rank
 
 
 UserModel = get_user_model()
@@ -187,6 +187,30 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertEqual(response.status_code, 302)
         self.assertEqual(Ban.objects.count(), 24)
 
+
+    def test_mass_prepare_data_download(self):
+        """users list prepares data download for multiple users"""
+        user_pks = []
+        for i in range(10):
+            test_user = UserModel.objects.create_user(
+                'Bob%s' % i,
+                'bob%s@test.com' % i,
+                'pass123',
+                requires_activation=1,
+            )
+            user_pks.append(test_user.pk)
+
+        response = self.client.post(
+            reverse('misago:admin:users:accounts:index'),
+            data={
+                'action': 'prepare_data_download',
+                'selected_items': user_pks,
+            }
+        )
+        self.assertEqual(response.status_code, 302)
+
+        self.assertEqual(DataDownload.objects.filter(user_id__in=user_pks).count(), len(user_pks))
+
     def test_mass_delete_accounts_self(self):
         """its impossible to delete oneself"""
         user_pks = [self.user.pk]

+ 13 - 2
misago/users/views/admin/users.py

@@ -13,6 +13,7 @@ from misago.core.mail import mail_users
 from misago.core.pgutils import chunk_queryset
 from misago.threads.models import Thread
 from misago.users.avatars.dynamic import set_avatar as set_dynamic_avatar
+from misago.users.datadownload import prepare_user_data_download
 from misago.users.forms.admin import (
     BanUsersForm, EditUserForm, EditUserFormFactory, NewUserForm, SearchUsersForm)
 from misago.users.models import Ban
@@ -73,6 +74,11 @@ class UsersList(UserAdmin, generic.ListView):
             'icon': 'fa fa-lock',
         },
         {
+            'action': 'prepare_data_download',
+            'name': _("Prepare data download"),
+            'icon': 'fa fa-download',
+        },
+        {
             'action': 'delete_accounts',
             'name': _("Delete accounts"),
             'icon': 'fa fa-times-circle',
@@ -197,6 +203,12 @@ class UsersList(UserAdmin, generic.ListView):
             }
         )
 
+    def action_prepare_data_download(self, request, users):
+        for user in users:
+            prepare_user_data_download(user, requester=request.user)
+
+        messages.success(request, _("Data downloads are now being prepared for selected users."))
+
     def action_delete_accounts(self, request, users):
         for user in users:
             if user == request.user:
@@ -208,8 +220,7 @@ class UsersList(UserAdmin, generic.ListView):
         for user in users:
             user.delete()
 
-        message = _("Selected users have been deleted.")
-        messages.success(request, message)
+        messages.success(request, _("Selected users have been deleted."))
 
     def action_delete_all(self, request, users):
         for user in users: