diff --git a/src/pretix/base/services/notifications.py b/src/pretix/base/services/notifications.py index 079e13e70a..cad4b92718 100644 --- a/src/pretix/base/services/notifications.py +++ b/src/pretix/base/services/notifications.py @@ -34,7 +34,9 @@ from pretix.base.models import ( from pretix.base.notifications import Notification, get_all_notification_types from pretix.base.services.mail import mail_send_task from pretix.base.services.tasks import ProfiledTask, TransactionAwareTask -from pretix.base.signals import notification +from pretix.base.signals import ( + event_notification_sent, organizer_notification_sent, +) from pretix.celery_app import app from pretix.helpers.celery import get_task_priority from pretix.helpers.urls import mainreverse_absolute @@ -118,8 +120,9 @@ def notify(logentry_ids: list): ) if logentry.event: - # FIXME: Signal is currently event-only - notification.send(logentry.event, logentry_id=logentry.id, notification_type=notification_type.action_type) + event_notification_sent.send(logentry.event, logentry_id=logentry.id, notification_type=notification_type.action_type) + elif logentry.organizer: + organizer_notification_sent.send(logentry.organizer, logentry_id=logentry.id, notification_type=notification_type.action_type) @app.task(base=ProfiledTask, acks_late=True, max_retries=9, default_retry_delay=900) diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index eda0a8a184..798b1bb17d 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -627,7 +627,7 @@ This signal is sent out to get all known permissions. Receivers should return an instance of pretix.base.permissions.PermissionGroup or a list of such instances. """ -notification = EventPluginSignal() +event_notification_sent = EventPluginSignal() """ Arguments: ``logentry_id``, ``notification_type`` @@ -636,6 +636,15 @@ This signal is sent out when a notification is sent. As with all event-plugin signals, the ``sender`` keyword argument will contain the event. """ +organizer_notification_sent = OrganizerPluginSignal() +""" +Arguments: ``logentry_id``, ``notification_type`` + +This signal is sent out when a notification is sent. + +As with all organizer-plugin signals, the ``sender`` keyword argument will contain the organizer. +""" + register_sales_channel_types = GlobalSignal() """ This signal is sent out to get all known sales channels types. Receivers should return an diff --git a/src/tests/base/test_permissions.py b/src/tests/base/test_permissions.py index 9ac989a671..422d3f3cd8 100644 --- a/src/tests/base/test_permissions.py +++ b/src/tests/base/test_permissions.py @@ -219,8 +219,14 @@ def test_specific_organizer_permission(event, user): def test_organizer_permissions_multiple_teams(event, user): team1 = Team.objects.create(organizer=event.organizer, limit_organizer_permissions={"organizer.settings.general:write": True}) team2 = Team.objects.create(organizer=event.organizer, limit_organizer_permissions={"organizer.events:create": True}) + assert set(event.organizer.get_users_with_permission('organizer.settings.general:write')) == set() + assert set(event.organizer.get_users_with_permission(None)) == set() team1.members.add(user) + assert set(event.organizer.get_users_with_permission('organizer.settings.general:write')) == {user} + assert set(event.organizer.get_users_with_permission(None)) == {user} + assert set(event.organizer.get_users_with_permission('organizer.events:create')) == set() team2.members.add(user) + assert set(event.organizer.get_users_with_permission('organizer.events:create')) == {user} orga2 = Organizer.objects.create(slug='d2', name='d2') team3 = Team.objects.create(organizer=orga2, limit_organizer_permissions={"organizer.teams:write": True}) team3.members.add(user)