Organizer-level plugins (#5305)

* Add version notes to the docs

* Adapt signal handling

* Add UI

* Add API

* API and tests

* Fix registry

* Update doc/development/api/plugins.rst

Co-authored-by: Felix Rindt <felix@rindt.me>

* Fix failing tests

* Apply suggestions from code review

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Update src/pretix/control/templates/pretixcontrol/organizers/plugin_events.html

Co-authored-by: luelista <weller@rami.io>

* Update src/pretix/control/templates/pretixcontrol/organizers/plugins.html

Co-authored-by: luelista <weller@rami.io>

* Update src/pretix/control/templates/pretixcontrol/organizers/plugins.html

Co-authored-by: luelista <weller@rami.io>

* Update src/pretix/control/navigation.py

Co-authored-by: luelista <weller@rami.io>

* Update src/pretix/control/urls.py

Co-authored-by: luelista <weller@rami.io>

* Apply suggestion from @wiffbi

* REbase migration

* Fix review note

* Fix test cases

* Remove plugin from all events if disabled on org level

* Update doc/development/api/plugins.rst

* Unify registries

* Rebase migration

---------

Co-authored-by: Felix Rindt <felix@rindt.me>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Co-authored-by: luelista <weller@rami.io>
This commit is contained in:
Raphael Michel
2025-08-19 11:33:34 +02:00
committed by GitHub
parent 56964b6764
commit a51a6123f5
50 changed files with 1623 additions and 192 deletions

View File

@@ -31,12 +31,9 @@
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
from pretix.base.signals import EventPluginSignal, GlobalSignal
from django.dispatch import Signal
from pretix.base.signals import EventPluginSignal
global_html_head = Signal()
global_html_head = GlobalSignal()
"""
Arguments: ``request``
@@ -47,7 +44,7 @@ of every page in the frontend. You will get the request as the keyword argument
This signal is called regardless of whether your plugin is active for all pages of the system.
"""
global_html_page_header = Signal()
global_html_page_header = GlobalSignal()
"""
Arguments: ``request``
@@ -58,7 +55,7 @@ of every page in the frontend. You will get the request as the keyword argument
This signal is called regardless of whether your plugin is active for all pages of the system.
"""
global_html_footer = Signal()
global_html_footer = GlobalSignal()
"""
Arguments: ``request``
@@ -134,7 +131,7 @@ are expected to return a dictionary containing the keys ``label`` and ``url``.
As with all plugin signals, the ``sender`` keyword argument will contain the event.
"""
global_footer_link = Signal()
global_footer_link = GlobalSignal()
"""
Arguments: ``request``

View File

@@ -26,11 +26,10 @@ from urllib.parse import urljoin, urlsplit
import sass
from django.conf import settings
from django.contrib.staticfiles import finders
from django.dispatch import Signal
from django.templatetags.static import static as _static
from pretix.base.models import Event, Organizer
from pretix.base.signals import EventPluginSignal
from pretix.base.signals import EventPluginSignal, GlobalSignal
from pretix.multidomain.urlreverse import (
get_event_domain, get_organizer_domain,
)
@@ -38,7 +37,7 @@ from pretix.multidomain.urlreverse import (
logger = logging.getLogger('pretix.presale.style')
register_fonts = Signal()
register_fonts = GlobalSignal()
"""
Return a dictionaries of the following structure. Paths should be relative to static root or an absolute URL. In the
latter case, the fonts won't be available for PDF-rendering.