feat!: Removes XML endpoint and adds fields for German and English tour details
This commit is contained in:
parent
b8deff0b68
commit
f5e32a6649
4 changed files with 119 additions and 229 deletions
|
|
@ -7,7 +7,7 @@ except Exception: # pragma: no cover - during docs build or without pretix
|
|||
SubEventMetaValue = None
|
||||
|
||||
|
||||
class SubEventLanguageForm(forms.Form):
|
||||
class SubEventHackertoursForm(forms.Form):
|
||||
language = forms.ChoiceField(
|
||||
label=_("Language"),
|
||||
required=False,
|
||||
|
|
@ -18,6 +18,16 @@ class SubEventLanguageForm(forms.Form):
|
|||
('en', _("English")),
|
||||
],
|
||||
)
|
||||
website_en = forms.URLField(
|
||||
label=_("Website (English)"),
|
||||
required=False,
|
||||
help_text=_("Link to the English tour details on https://hackertours.hamburg.ccc.de/en/"),
|
||||
)
|
||||
website_de = forms.URLField(
|
||||
label=_("Website (German)"),
|
||||
required=False,
|
||||
help_text=_("Link to the German tour details on https://hackertours.hamburg.ccc.de/de/"),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.event = kwargs.pop('event')
|
||||
|
|
@ -25,45 +35,83 @@ class SubEventLanguageForm(forms.Form):
|
|||
super().__init__(*args, **kwargs)
|
||||
# Pre-fill from subevent meta if available
|
||||
if self.subevent:
|
||||
val = (
|
||||
languageValue = (
|
||||
SubEventMetaValue.objects
|
||||
.filter(subevent=self.subevent, property__name='congressschedule_language')
|
||||
.values_list('value', flat=True)
|
||||
.first()
|
||||
)
|
||||
self.fields['language'].initial = val or ''
|
||||
self.fields['language'].initial = languageValue or ''
|
||||
websiteENValue = (
|
||||
SubEventMetaValue.objects
|
||||
.filter(subevent=self.subevent, property__name='congressschedule_website_en')
|
||||
.values_list('value', flat=True)
|
||||
.first()
|
||||
)
|
||||
self.fields['website_en'].initial = websiteENValue or ''
|
||||
websiteDEValue = (
|
||||
SubEventMetaValue.objects
|
||||
.filter(subevent=self.subevent, property__name='congressschedule_website_de')
|
||||
.values_list('value', flat=True)
|
||||
.first()
|
||||
)
|
||||
self.fields['website_de'].initial = websiteDEValue 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"
|
||||
self.fields['website_en'].initial = ""
|
||||
self.fields['website_de'].initial = ""
|
||||
|
||||
@property
|
||||
def title(self):
|
||||
return _("Language")
|
||||
return _("Hackertours Settings")
|
||||
|
||||
def save(self):
|
||||
if not self.subevent:
|
||||
return
|
||||
val = (self.cleaned_data.get('language') or '').strip() or 'deen'
|
||||
languageValue = (self.cleaned_data.get('language') or '').strip() or 'deen'
|
||||
websiteENValue = (self.cleaned_data.get('website_en') or '').strip()
|
||||
websiteDEValue = (self.cleaned_data.get('website_de') or '').strip()
|
||||
# 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(
|
||||
language_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},
|
||||
property=language_property_obj,
|
||||
defaults={'value': languageValue},
|
||||
)
|
||||
|
||||
website_en_property_obj, _ = EventMetaProperty.objects.get_or_create(
|
||||
name='congressschedule_website_en',
|
||||
defaults={'default': '', 'organizer': self.event.organizer}
|
||||
)
|
||||
SubEventMetaValue.objects.update_or_create(
|
||||
subevent=self.subevent,
|
||||
property=website_en_property_obj,
|
||||
defaults={'value': websiteENValue},
|
||||
)
|
||||
|
||||
website_de_property_obj, _ = EventMetaProperty.objects.get_or_create(
|
||||
name='congressschedule_website_de',
|
||||
defaults={'default': '', 'organizer': self.event.organizer}
|
||||
)
|
||||
SubEventMetaValue.objects.update_or_create(
|
||||
subevent=self.subevent,
|
||||
property=website_de_property_obj,
|
||||
defaults={'value': websiteDEValue},
|
||||
)
|
||||
|
||||
|
||||
def subevent_forms(sender, request, subevent, **kwargs):
|
||||
def subevent_hackertours_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(
|
||||
form = SubEventHackertoursForm(
|
||||
data=request.POST if request.method == 'POST' else None,
|
||||
event=sender,
|
||||
subevent=subevent,
|
||||
|
|
@ -73,11 +121,10 @@ def subevent_forms(sender, request, subevent, **kwargs):
|
|||
|
||||
|
||||
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')
|
||||
control_signals.subevent_forms.connect(subevent_hackertours_forms, dispatch_uid='pretix_congressschedule_subevent_hackertours')
|
||||
except Exception:
|
||||
# Pretix not fully loaded in some contexts (e.g., docs build)
|
||||
pass
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue