|
3 | 3 | from urllib.parse import quote_plus, urlencode |
4 | 4 |
|
5 | 5 | from django.conf import settings |
| 6 | +from django.contrib.admin.models import CHANGE, LogEntry |
6 | 7 | from django.contrib.admin.utils import unquote |
7 | 8 | from django.contrib.auth.admin import GroupAdmin, UserAdmin |
8 | 9 | from django.contrib.auth.models import Group |
| 10 | +from django.contrib.contenttypes.models import ContentType |
9 | 11 | from django.core.exceptions import PermissionDenied |
10 | 12 | from django.db.models import Q |
11 | 13 | from django.forms.models import model_to_dict |
@@ -339,6 +341,47 @@ def user_change_password(self, request, id, form_url=""): |
339 | 341 | with reversion.create_revision(): |
340 | 342 | return super().user_change_password(request, id, form_url) |
341 | 343 |
|
| 344 | + def deactivate_users(self, request, queryset): |
| 345 | + for user in queryset: |
| 346 | + if not self.has_change_permission(request, obj=user): |
| 347 | + self.message_user( |
| 348 | + request, |
| 349 | + _("You don't have permission to deactivate user {}.").format( |
| 350 | + user.username |
| 351 | + ), |
| 352 | + level="error", |
| 353 | + ) |
| 354 | + continue |
| 355 | + user.is_active = False |
| 356 | + user.save() |
| 357 | + |
| 358 | + LogEntry.objects.log_action( |
| 359 | + user_id=request.user.pk, |
| 360 | + content_type_id=ContentType.objects.get_for_model(user).pk, |
| 361 | + object_id=user.pk, |
| 362 | + object_repr=str(user), |
| 363 | + action_flag=CHANGE, |
| 364 | + change_message="Deactivated user via admin action.", |
| 365 | + ) |
| 366 | + |
| 367 | + self.message_user( |
| 368 | + request, |
| 369 | + _("User {} has been deactivated.").format(user.username), |
| 370 | + level="info", |
| 371 | + ) |
| 372 | + |
| 373 | + deactivate_users.short_description = _("Deactivate users") |
| 374 | + |
| 375 | + actions = [deactivate_users] |
| 376 | + |
| 377 | + def get_actions(self, request): |
| 378 | + actions = super().get_actions(request) |
| 379 | + |
| 380 | + if not request.user.is_superuser: |
| 381 | + actions.pop(self.deactivate_users.__name__, None) |
| 382 | + |
| 383 | + return actions |
| 384 | + |
342 | 385 |
|
343 | 386 | @register(Group) |
344 | 387 | class RalphGroupAdmin(EditPermissionsFormMixin, GroupAdmin, RalphAdmin): |
|
0 commit comments