diff --git a/doc/admin/config.rst b/doc/admin/config.rst index b059314d5..cf0858974 100644 --- a/doc/admin/config.rst +++ b/doc/admin/config.rst @@ -53,6 +53,10 @@ Example:: A comma-separated list of plugins that are enabled by default for all new events. Defaults to ``pretix.plugins.sendmail,pretix.plugins.statistics``. +``plugins_exclude`` + A comma-separated list of plugins that are not available even though they are installed. + Defaults to an empty string. + ``cookie_domain`` The cookie domain to be set. Defaults to ``None``. diff --git a/src/pretix/base/plugins.py b/src/pretix/base/plugins.py index f2a80dfc2..72081a213 100644 --- a/src/pretix/base/plugins.py +++ b/src/pretix/base/plugins.py @@ -2,6 +2,7 @@ from enum import Enum from typing import List from django.apps import apps +from django.conf import settings class PluginType(Enum): @@ -26,5 +27,7 @@ def get_all_plugins() -> List[type]: meta = app.PretixPluginMeta meta.module = app.name meta.app = app + if app.name in settings.PRETIX_PLUGINS_EXCLUDE: + continue plugins.append(meta) return plugins diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index fb5350971..f48a8420d 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -42,7 +42,8 @@ class EventPluginSignal(django.dispatch.Signal): searchpath, _ = searchpath.rsplit(".", 1) # Only fire receivers from active plugins and core modules - if core_module or (sender and app and app.name in sender.get_plugins()): + excluded = settings.PRETIX_PLUGINS_EXCLUDE + if core_module or (sender and app and app.name in sender.get_plugins() and app.name not in excluded): if not hasattr(app, 'compatibility_errors') or not app.compatibility_errors: return True return False diff --git a/src/pretix/settings.py b/src/pretix/settings.py index 66da306a9..9a0acaafe 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -99,6 +99,7 @@ CSRF_TRUSTED_ORIGINS = [urlparse(SITE_URL).hostname] PRETIX_PLUGINS_DEFAULT = config.get('pretix', 'plugins_default', fallback='pretix.plugins.sendmail,pretix.plugins.statistics,pretix.plugins.checkinlists') +PRETIX_PLUGINS_EXCLUDE = config.get('pretix', 'plugins_exclude', fallback='').split(',') FETCH_ECB_RATES = config.getboolean('pretix', 'ecb_rates', fallback=True)