forked from CGM_Public/pretix_original
New handling of plugin URLs (#609)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
from django.urls import RegexURLPattern
|
||||
|
||||
|
||||
class PretixMultidomainConfig(AppConfig):
|
||||
@@ -7,3 +8,12 @@ class PretixMultidomainConfig(AppConfig):
|
||||
|
||||
|
||||
default_app_config = 'pretix.multidomain.PretixMultidomainConfig'
|
||||
|
||||
|
||||
def event_url(regex, view, kwargs=None, name=None, require_live=True):
|
||||
if callable(view):
|
||||
r = RegexURLPattern(regex, view, kwargs, name)
|
||||
r._require_live = require_live
|
||||
return r
|
||||
else:
|
||||
raise TypeError('view must be a callable.')
|
||||
|
||||
@@ -5,6 +5,7 @@ from django.apps import apps
|
||||
from django.conf.urls import include, url
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from pretix.multidomain.plugin_handler import plugin_event_urls
|
||||
from pretix.presale.urls import (
|
||||
event_patterns, locale_patterns, organizer_patterns,
|
||||
)
|
||||
@@ -27,8 +28,9 @@ for app in apps.get_app_configs():
|
||||
if hasattr(urlmod, 'urlpatterns'):
|
||||
single_plugin_patterns += urlmod.urlpatterns
|
||||
if hasattr(urlmod, 'event_patterns'):
|
||||
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
|
||||
single_plugin_patterns.append(url(r'^(?P<organizer>[^/]+)/(?P<event>[^/]+)/',
|
||||
include(urlmod.event_patterns)))
|
||||
include(patterns)))
|
||||
raw_plugin_patterns.append(
|
||||
url(r'', include((single_plugin_patterns, app.label)))
|
||||
)
|
||||
|
||||
@@ -50,6 +50,7 @@ class MultiDomainMiddleware(MiddlewareMixin):
|
||||
cache.set('pretix_multidomain_organizer_{}'.format(domain), orga.pk if orga else False, 3600)
|
||||
|
||||
if orga:
|
||||
request.organizer_domain = True
|
||||
request.organizer = orga if isinstance(orga, Organizer) else Organizer.objects.get(pk=orga)
|
||||
request.urlconf = "pretix.multidomain.subdomain_urlconf"
|
||||
else:
|
||||
|
||||
11
src/pretix/multidomain/plugin_handler.py
Normal file
11
src/pretix/multidomain/plugin_handler.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from pretix.presale.utils import _event_view
|
||||
|
||||
|
||||
def plugin_event_urls(urllist, plugin):
|
||||
for entry in urllist:
|
||||
if hasattr(entry, 'url_patterns'):
|
||||
plugin_event_urls(entry.url_patterns, plugin)
|
||||
elif hasattr(entry, 'callback'):
|
||||
entry.callback = _event_view(entry.callback, require_plugin=plugin,
|
||||
require_live=getattr(entry, '_require_live', True))
|
||||
return urllist
|
||||
@@ -4,6 +4,7 @@ import warnings
|
||||
from django.apps import apps
|
||||
from django.conf.urls import include, url
|
||||
|
||||
from pretix.multidomain.plugin_handler import plugin_event_urls
|
||||
from pretix.presale.urls import (
|
||||
event_patterns, locale_patterns, organizer_patterns,
|
||||
)
|
||||
@@ -22,9 +23,11 @@ for app in apps.get_app_configs():
|
||||
if importlib.util.find_spec(app.name + '.urls'):
|
||||
urlmod = importlib.import_module(app.name + '.urls')
|
||||
if hasattr(urlmod, 'event_patterns'):
|
||||
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
|
||||
raw_plugin_patterns.append(
|
||||
url(r'^(?P<event>[^/]+)/', include((urlmod.event_patterns, app.label)))
|
||||
url(r'^(?P<event>[^/]+)/', include((patterns, app.label)))
|
||||
)
|
||||
|
||||
elif importlib.util.find_spec(app.name + '.subdomain_urls'): # noqa
|
||||
warnings.warn('Please put your config in an \'urls\' module using the event_patterns '
|
||||
'attribute. Support for subdomain_urls in plugins will be dropped in the future.',
|
||||
|
||||
Reference in New Issue
Block a user