Initial commit

This commit is contained in:
2024-08-27 20:33:44 +02:00
commit 1f1832267d
14794 changed files with 1599592 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
from .assign_role import AssignRoleBulkAction
from .delete import DeleteBulkAction
from .set_active_state import SetActiveStateBulkAction
__all__ = ["AssignRoleBulkAction", "DeleteBulkAction", "SetActiveStateBulkAction"]

View File

@@ -0,0 +1,46 @@
from django import forms
from django.contrib.auth.models import Group
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
from wagtail.users.views.users import change_user_perm
class RoleForm(forms.Form):
role = forms.ModelChoiceField(queryset=Group.objects.all())
class AssignRoleBulkAction(UserBulkAction):
display_name = _("Assign role")
action_type = "assign_role"
aria_label = _("Assign role to selected users")
template_name = "wagtailusers/bulk_actions/confirm_bulk_assign_role.html"
action_priority = 30
form_class = RoleForm
def check_perm(self, obj):
return self.request.user.has_perm(change_user_perm)
def get_execution_context(self):
return {
"role": self.cleaned_form.cleaned_data["role"],
}
@classmethod
def execute_action(cls, objects, role=None, **kwargs):
if role is None:
return
role.user_set.add(*objects)
num_parent_objects = len(objects)
return num_parent_objects, 0
def get_success_message(self, num_parent_objects, num_child_objects):
return ngettext(
"%(num_parent_objects)d user has been assigned as %(role)s",
"%(num_parent_objects)d users have been assigned as %(role)s",
num_parent_objects,
) % {
"num_parent_objects": num_parent_objects,
"role": self.cleaned_form.cleaned_data["role"].name,
}

View File

@@ -0,0 +1,34 @@
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext
from wagtail.users.utils import user_can_delete_user
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
class DeleteBulkAction(UserBulkAction):
display_name = _("Delete")
action_type = "delete"
aria_label = _("Delete selected users")
template_name = "wagtailusers/bulk_actions/confirm_bulk_delete.html"
action_priority = 10
classes = {"serious"}
def check_perm(self, obj):
return user_can_delete_user(self.request.user, obj)
def get_execution_context(self):
return {**super().get_execution_context(), "model": self.model}
@classmethod
def execute_action(cls, objects, model=None, **kwargs):
if model is None:
model = cls.get_default_model()
model.objects.filter(pk__in=[obj.pk for obj in objects]).delete()
return len(objects), 0
def get_success_message(self, num_parent_objects, num_child_objects):
return ngettext(
"%(num_parent_objects)d user has been deleted",
"%(num_parent_objects)d users have been deleted",
num_parent_objects,
) % {"num_parent_objects": num_parent_objects}

View File

@@ -0,0 +1,72 @@
from django import forms
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
from wagtail.users.views.users import change_user_perm
class ActivityForm(forms.Form):
mark_as_active = forms.TypedChoiceField(
choices=((True, _("Active")), (False, _("Inactive"))),
label=_("Mark as active"),
widget=forms.RadioSelect,
coerce=lambda x: x == "True",
)
class SetActiveStateBulkAction(UserBulkAction):
display_name = _("Set active state")
action_type = "set_active_state"
aria_label = _("Change the active state for selected users")
template_name = "wagtailusers/bulk_actions/confirm_bulk_set_active_state.html"
action_priority = 20
form_class = ActivityForm
def check_perm(self, obj):
return self.request.user.has_perm(change_user_perm)
def get_execution_context(self):
return {
"mark_as_active": self.cleaned_form.cleaned_data["mark_as_active"],
"user": self.request.user,
"model": self.model,
}
def get_actionable_objects(self):
objects, objects_without_access = super().get_actionable_objects()
user = self.request.user
users = list(filter(lambda x: x.pk != user.pk, objects))
if len(objects) != len(users):
objects_without_access["mark_self_as_inactive"] = [user]
return users, objects_without_access
@classmethod
def execute_action(cls, objects, mark_as_active=False, model=None, **kwargs):
if model is None:
model = cls.get_default_model()
user = kwargs.get("user", None)
if user is not None:
objects = list(filter(lambda x: x.pk != user.pk, objects))
num_parent_objects = model.objects.filter(
pk__in=[obj.pk for obj in objects]
).update(is_active=mark_as_active)
return num_parent_objects, 0
def get_success_message(self, num_parent_objects, num_child_objects):
if self.cleaned_form.cleaned_data["mark_as_active"]:
return ngettext(
"%(num_parent_objects)d user has been marked as active",
"%(num_parent_objects)d users have been marked as active",
num_parent_objects,
) % {
"num_parent_objects": num_parent_objects,
}
else:
return ngettext(
"%(num_parent_objects)d user has been marked as inactive",
"%(num_parent_objects)d users have been marked as inactive",
num_parent_objects,
) % {
"num_parent_objects": num_parent_objects,
}

View File

@@ -0,0 +1,25 @@
from django.contrib.auth import get_user_model
from wagtail.admin.views.bulk_action import BulkAction
from wagtail.admin.views.generic.permissions import PermissionCheckedMixin
from wagtail.permission_policies import ModelPermissionPolicy
from wagtail.users.views.users import get_users_filter_query
User = get_user_model()
class UserBulkAction(PermissionCheckedMixin, BulkAction):
models = [User]
permission_policy = ModelPermissionPolicy(User)
any_permission_required = ["add", "change", "delete"]
def get_all_objects_in_listing_query(self, parent_id):
listing_objects = self.model.objects.all().values_list("pk", flat=True)
if "q" in self.request.GET:
q = self.request.GET.get("q")
model_fields = {f.name for f in self.model._meta.get_fields()}
conditions = get_users_filter_query(q, model_fields)
listing_objects = listing_objects.filter(conditions)
return listing_objects