87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
from django import forms
|
|
from django.utils.translation import gettext_lazy as _
|
|
try:
|
|
# Available in pretix runtime
|
|
from pretix.base.models import SubEventMetaValue
|
|
except Exception: # pragma: no cover - during docs build or without pretix
|
|
SubEventMetaValue = None
|
|
|
|
|
|
class SubEventLanguageForm(forms.Form):
|
|
language = forms.ChoiceField(
|
|
label=_("Language"),
|
|
required=False,
|
|
help_text=_("Select the language for this tour."),
|
|
choices=[
|
|
('deen', _("Bilingual")),
|
|
('de', _("German")),
|
|
('en', _("English")),
|
|
],
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.event = kwargs.pop('event')
|
|
self.subevent = kwargs.pop('subevent', None)
|
|
super().__init__(*args, **kwargs)
|
|
# Pre-fill from subevent meta if available
|
|
if self.subevent:
|
|
val = (
|
|
SubEventMetaValue.objects
|
|
.filter(subevent=self.subevent, property__name='congressschedule_language')
|
|
.values_list('value', flat=True)
|
|
.first()
|
|
)
|
|
self.fields['language'].initial = val or ''
|
|
elif self.subevent and hasattr(self.subevent, 'settings'):
|
|
# Fallback (older pretix): might be event-wide, keep as last resort
|
|
self.fields['language'].initial = "deen"
|
|
|
|
@property
|
|
def title(self):
|
|
return _("Language")
|
|
|
|
def save(self):
|
|
if not self.subevent:
|
|
return
|
|
val = (self.cleaned_data.get('language') or '').strip() or 'none'
|
|
# Persist as real subevent meta value so it's scoped per subevent
|
|
from pretix.base.models import EventMetaProperty
|
|
|
|
property_obj, _ = EventMetaProperty.objects.get_or_create(
|
|
name='congressschedule_language',
|
|
defaults={'default': '', 'organizer': self.event.organizer}
|
|
)
|
|
SubEventMetaValue.objects.update_or_create(
|
|
subevent=self.subevent,
|
|
property=property_obj,
|
|
defaults={'value': val},
|
|
)
|
|
|
|
|
|
def subevent_forms(sender, request, subevent, **kwargs):
|
|
# Provide our additional subevent form
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
logger.debug("Providing congressschedule subevent form for event %s, subevent %s", sender.slug, getattr(subevent, 'name', 'no-subevent'))
|
|
form = SubEventLanguageForm(
|
|
data=request.POST if request.method == 'POST' else None,
|
|
event=sender,
|
|
subevent=subevent,
|
|
prefix='congressschedule',
|
|
)
|
|
return form
|
|
|
|
|
|
def connect_signals():
|
|
# Connect to pretix.control.signals.subevent_forms at import time
|
|
try:
|
|
from pretix.control import signals as control_signals
|
|
|
|
control_signals.subevent_forms.connect(subevent_forms, dispatch_uid='pretix_congressschedule_subevent_language')
|
|
except Exception:
|
|
# Pretix not fully loaded in some contexts (e.g., docs build)
|
|
pass
|
|
|
|
|
|
# Connect immediately when module is imported via AppConfig.ready()
|
|
connect_signals()
|