Skip to content

Commit

Permalink
✨ Allow to set trusted via add group admin action
Browse files Browse the repository at this point in the history
  • Loading branch information
pajowu committed May 7, 2024
1 parent 0a61b89 commit 28cdb67
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 18 deletions.
55 changes: 42 additions & 13 deletions froide/account/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from typing import List, Optional

from django import forms
from django.apps import apps
from django.contrib import admin
from django.contrib.admin import helpers
Expand All @@ -19,12 +20,9 @@
from mfa.models import MFAKey

from froide.account.export import ExportCrossDomainMediaAuth
from froide.helper.admin_utils import (
MultiFilterMixin,
TaggitListFilter,
make_choose_object_action,
)
from froide.helper.admin_utils import MultiFilterMixin, TaggitListFilter
from froide.helper.csv_utils import export_csv_response
from froide.helper.forms import get_fk_raw_id_widget

from . import account_email_changed
from .auth import MFAAndRecentAuthRequiredAdminMixin, RecentAuthRequiredAdminMixin
Expand Down Expand Up @@ -66,6 +64,17 @@ class UserTagListFilter(MultiFilterMixin, TaggitListFilter):
lookup_name = "__in"


class AddToGroupForm(forms.Form):
group = forms.ModelChoiceField(
queryset=Group.objects.all(),
)
set_trusted = forms.BooleanField()

def __init__(self, *args, admin_site, **kwargs):
super().__init__(*args, **kwargs)
self.fields["group"].widget = get_fk_raw_id_widget(Group, admin_site)


@admin.register(User)
class UserAdmin(RecentAuthRequiredAdminMixin, DjangoUserAdmin):
# The forms to add and change user instances
Expand Down Expand Up @@ -380,15 +389,35 @@ def export_user_data(self, request, queryset):
)
return None

def execute_add_to_group_and_mail(self, request, queryset, action_obj):
for user in queryset:
AccountService(user).add_to_group(action_obj)

add_to_group_and_mail = make_choose_object_action(
Group,
execute_add_to_group_and_mail,
_("Add users to group and send mail..."),
@admin.action(
description=_("Add users to group and send mail..."),
permissions=("change",),
)
def add_to_group_and_mail(self, request, queryset):
form = AddToGroupForm(request.POST, admin_site=self.admin_site)
if form.is_valid():
for user in queryset:
if form.cleaned_data["set_trusted"]:
user.is_trusted = True
user.save(update_fields=["is_trusted"])
AccountService(user).add_to_group(form.cleaned_data["group"])
self.message_user(request, _("Successfully executed."))
return None

opts = self.model._meta
context = {
"opts": opts,
"queryset": queryset,
"media": self.media,
"action_checkbox_name": admin.helpers.ACTION_CHECKBOX_NAME,
"form": form,
"headline": _("Add users to group and send mail..."),
"actionname": request.POST.get("action"),
"applabel": opts.app_label,
}

# Display the confirmation page
return TemplateResponse(request, "helper/admin/apply_action.html", context)


@admin.register(AccountBlocklist)
Expand Down
14 changes: 9 additions & 5 deletions froide/helper/templates/helper/admin/apply_action.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{% extends "helper/admin_base_action.html" %}
{% load i18n l10n %}
{% block action_title %}{{ headline }}{% endblock %}
{% block breadcrumbs_action_label %}{{ headline }}{% endblock %}
{% block action_title %}
{{ headline }}
{% endblock action_title %}
{% block breadcrumbs_action_label %}
{{ headline }}
{% endblock breadcrumbs_action_label %}
{% block action_content %}
<form action="" method="post">
{% csrf_token %}
<div>
<p>{{ headline }}</p>
{{ form }}
{{ form.as_p }}
<ul>
{% for obj in queryset %}
<li>
Expand All @@ -19,7 +23,7 @@
{% endfor %}
</ul>
<input type="hidden" name="action" value="{{ actionname }}" />
<input type="submit" value="{% trans 'Execute' %}" />
<input type="submit" value="{% trans "Execute" %}" />
</div>
</form>
{% endblock %}
{% endblock action_content %}

0 comments on commit 28cdb67

Please sign in to comment.