Skip to content

Commit

Permalink
✨ Add admin action to add user to group and inform
Browse files Browse the repository at this point in the history
  • Loading branch information
pajowu committed May 7, 2024
1 parent dbc1916 commit 0a61b89
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 1 deletion.
18 changes: 17 additions & 1 deletion froide/account/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.contrib import admin
from django.contrib.admin import helpers
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from django.contrib.auth.models import Group
from django.core.exceptions import PermissionDenied
from django.db.models import Count, Exists, OuterRef
from django.db.models.query import QuerySet
Expand All @@ -18,7 +19,11 @@
from mfa.models import MFAKey

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

from . import account_email_changed
Expand Down Expand Up @@ -138,6 +143,7 @@ class UserAdmin(RecentAuthRequiredAdminMixin, DjangoUserAdmin):
"export_user_data",
"merge_accounts",
"merge_accounts_keep_newer",
"add_to_group_and_mail",
]

def get_queryset(self, request):
Expand Down Expand Up @@ -374,6 +380,16 @@ 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.register(AccountBlocklist)
class AccountBlocklistAdmin(admin.ModelAdmin):
Expand Down
16 changes: 16 additions & 0 deletions froide/account/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from urllib.parse import urlencode

from django.conf import settings
from django.contrib.auth.models import Group
from django.urls import reverse
from django.utils import timezone
from django.utils.crypto import constant_time_compare
Expand Down Expand Up @@ -42,6 +43,9 @@ def get_user_for_email(email):
change_email_mail = mail_registry.register(
"account/emails/change_email", ("action_url", "name")
)
add_to_group_mail = mail_registry.register(
"account/emails/add_to_group", ("user", "group", "name")
)


class AccountService(object):
Expand Down Expand Up @@ -359,3 +363,15 @@ def get_user_redactions(self, replacements: Optional[Dict[str, str]] = None):

if self.user.organization_name:
yield (self.user.organization_name, repl["name"])

def add_to_group(self, group: Group):
if group not in self.user.groups.all():
self.user.groups.add(group)
add_to_group_mail.send(
user=self.user,
template_base=f"account/emails/add_to_group/{group.pk}",
context={
"group": group,
"name": self.user.get_full_name(),
},
)
8 changes: 8 additions & 0 deletions froide/account/templates/account/emails/add_to_group.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% load i18n %}{% autoescape off %}{% blocktrans with group_name=group.name %}Hello {{ name }},

You have been added to the group "{{ group_name }}".

Cheers
{{ site_name }}{% endblocktrans %}
{% endautoescape %}
{% include "emails/footer.txt" %}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% load i18n %}{% blocktrans with group_name=group.name %}{{ site_name }}: Added to group "{{ group_name }}"{% endblocktrans %}

0 comments on commit 0a61b89

Please sign in to comment.