From 76fc789eb6e6bcc9d775278c368a950ddd1462f7 Mon Sep 17 00:00:00 2001 From: Quentin BEY Date: Wed, 15 Jan 2025 12:37:50 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(organization)=20add=20admin=20action?= =?UTF-8?q?=20for=20plugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows admin user to run the post creation plugins from the organization list. --- CHANGELOG.md | 1 + src/backend/core/admin.py | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 915d297..7be3091 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to ### Added +- ✨(organization) add admin action for plugin #640 - ✨(anct) fetch and display organization names of communes #583 - ✨(frontend) display email if no username #562 - 🧑‍💻(oidc) add ability to pull registration ID (e.g. SIRET) from OIDC #577 diff --git a/src/backend/core/admin.py b/src/backend/core/admin.py index 7df08d0..854d541 100644 --- a/src/backend/core/admin.py +++ b/src/backend/core/admin.py @@ -1,12 +1,16 @@ """Admin classes and registrations for People's core app.""" -from django.contrib import admin +from django.contrib import admin, messages from django.contrib.auth import admin as auth_admin from django.utils.translation import gettext_lazy as _ from mailbox_manager.admin import MailDomainAccessInline from . import models +from .plugins.loader import ( + get_organization_plugins, + organization_plugins_run_after_create, +) class TeamAccessInline(admin.TabularInline): @@ -206,10 +210,23 @@ class OrganizationServiceProviderInline(admin.TabularInline): extra = 0 +@admin.action(description=_("Run post creation plugins"), permissions=["change"]) +def run_post_creation_plugins(modeladmin, request, queryset): # pylint: disable=unused-argument + """Run the post creation plugins for the selected organizations.""" + for organization in queryset: + organization_plugins_run_after_create(organization) + + messages.success( + request, + _("Post creation plugins have been run for the selected organizations."), + ) + + @admin.register(models.Organization) class OrganizationAdmin(admin.ModelAdmin): """Admin interface for organizations.""" + actions = [run_post_creation_plugins] list_display = ( "name", "created_at", @@ -219,6 +236,13 @@ class OrganizationAdmin(admin.ModelAdmin): inlines = (OrganizationAccessInline, OrganizationServiceProviderInline) exclude = ("service_providers",) # Handled by the inline + def get_actions(self, request): + """Adapt actions list to the context.""" + actions = super().get_actions(request) + if not get_organization_plugins(): + actions.pop("run_post_creation_plugins", None) + return actions + @admin.register(models.OrganizationAccess) class OrganizationAccessAdmin(admin.ModelAdmin):