diff --git a/doc/development/api/general.rst b/doc/development/api/general.rst index 9e744c0c60..3bfa10ba4d 100644 --- a/doc/development/api/general.rst +++ b/doc/development/api/general.rst @@ -49,7 +49,7 @@ Backend .. automodule:: pretix.control.signals :members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings, - order_info, event_settings_widget, oauth_application_registered, order_position_buttons, nav_item, subevent_forms + order_info, event_settings_widget, oauth_application_registered, order_position_buttons, subevent_forms, item_formsets .. automodule:: pretix.base.signals diff --git a/doc/spelling_wordlist.txt b/doc/spelling_wordlist.txt index 0df17f0a7c..1d3eab6dde 100644 --- a/doc/spelling_wordlist.txt +++ b/doc/spelling_wordlist.txt @@ -36,6 +36,8 @@ eu filename filesystem fontawesome +formset +formsets frontend frontpage gettext diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 1afd83c941..3057139668 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -325,7 +325,7 @@ class EventSettingsForm(SettingsForm): ) timezone = forms.ChoiceField( choices=((a, a) for a in common_timezones), - label=_("Default timezone"), + label=_("Event timezone"), ) locales = forms.MultipleChoiceField( choices=settings.LANGUAGES, @@ -441,6 +441,96 @@ class EventSettingsForm(SettingsForm): required=False, help_text=_("We'll show this publicly to allow attendees to contact you.") ) + show_variations_expanded = forms.BooleanField( + label=_("Show variations of a product expanded by default"), + required=False + ) + hide_sold_out = forms.BooleanField( + label=_("Hide all products that are sold out"), + required=False + ) + meta_noindex = forms.BooleanField( + label=_('Ask search engines not to index the ticket shop'), + required=False + ) + redirect_to_checkout_directly = forms.BooleanField( + label=_('Directly redirect to check-out after a product has been added to the cart.'), + required=False + ) + frontpage_subevent_ordering = forms.ChoiceField( + label=pgettext('subevent', 'Date ordering'), + choices=[ + ('date_ascending', _('Event start time')), + ('date_descending', _('Event start time (descending)')), + ('name_ascending', _('Name')), + ('name_descending', _('Name (descending)')), + ], # When adding a new ordering, remember to also define it in the event model + ) + logo_image = ExtFileField( + label=_('Logo image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + required=False, + help_text=_('If you provide a logo image, we will by default not show your events name and date ' + 'in the page header. We will show your logo with a maximal height of 120 pixels.') + ) + frontpage_text = I18nFormField( + label=_("Frontpage text"), + required=False, + widget=I18nTextarea + ) + presale_has_ended_text = I18nFormField( + label=_("End of presale text"), + required=False, + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown above the ticket shop once the designated sales timeframe for this event " + "is over. You can use it to describe other options to get a ticket, such as a box office.") + ) + voucher_explanation_text = I18nFormField( + label=_("Voucher explanation"), + required=False, + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown next to the input for a voucher code. You can use it e.g. to explain " + "how to obtain a voucher code.") + ) + primary_color = forms.CharField( + label=_("Primary color"), + required=False, + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ) + theme_color_success = forms.CharField( + label=_("Accent color for success"), + help_text=_("We strongly suggest to use a shade of green."), + required=False, + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ) + theme_color_danger = forms.CharField( + label=_("Accent color for errors"), + help_text=_("We strongly suggest to use a dark shade of red."), + required=False, + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ) + primary_font = forms.ChoiceField( + label=_('Font'), + choices=[ + ('Open Sans', 'Open Sans') + ], + widget=FontSelect, + help_text=_('Only respected by modern browsers.') + ) def clean(self): data = super().clean() @@ -459,6 +549,7 @@ class EventSettingsForm(SettingsForm): return data def __init__(self, *args, **kwargs): + event = kwargs['obj'] super().__init__(*args, **kwargs) self.fields['confirm_text'].widget.attrs['rows'] = '3' self.fields['confirm_text'].widget.attrs['placeholder'] = _( @@ -479,6 +570,11 @@ class EventSettingsForm(SettingsForm): )) for k, v in PERSON_NAME_TITLE_GROUPS.items() ] + if not event.has_subevents: + del self.fields['frontpage_subevent_ordering'] + self.fields['primary_font'].choices += [ + (a, a) for a in get_fonts() + ] class CancelSettingsForm(SettingsForm): @@ -1137,108 +1233,6 @@ class MailSettingsForm(SettingsForm): raise ValidationError(_('You can activate either SSL or STARTTLS security, but not both at the same time.')) -class DisplaySettingsForm(SettingsForm): - primary_color = forms.CharField( - label=_("Primary color"), - required=False, - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ) - theme_color_success = forms.CharField( - label=_("Accent color for success"), - help_text=_("We strongly suggest to use a shade of green."), - required=False, - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ) - theme_color_danger = forms.CharField( - label=_("Accent color for errors"), - help_text=_("We strongly suggest to use a dark shade of red."), - required=False, - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ) - logo_image = ExtFileField( - label=_('Logo image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - required=False, - help_text=_('If you provide a logo image, we will by default not show your events name and date ' - 'in the page header. We will show your logo with a maximal height of 120 pixels.') - ) - primary_font = forms.ChoiceField( - label=_('Font'), - choices=[ - ('Open Sans', 'Open Sans') - ], - widget=FontSelect, - help_text=_('Only respected by modern browsers.') - ) - frontpage_text = I18nFormField( - label=_("Frontpage text"), - required=False, - widget=I18nTextarea - ) - presale_has_ended_text = I18nFormField( - label=_("End of presale text"), - required=False, - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown above the ticket shop once the designated sales timeframe for this event " - "is over. You can use it to describe other options to get a ticket, such as a box office.") - ) - voucher_explanation_text = I18nFormField( - label=_("Voucher explanation"), - required=False, - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown next to the input for a voucher code. You can use it e.g. to explain " - "how to obtain a voucher code.") - ) - show_variations_expanded = forms.BooleanField( - label=_("Show variations of a product expanded by default"), - required=False - ) - hide_sold_out = forms.BooleanField( - label=_("Hide all products that are sold out"), - required=False - ) - frontpage_subevent_ordering = forms.ChoiceField( - label=pgettext('subevent', 'Date ordering'), - choices=[ - ('date_ascending', _('Event start time')), - ('date_descending', _('Event start time (descending)')), - ('name_ascending', _('Name')), - ('name_descending', _('Name (descending)')), - ], # When adding a new ordering, remember to also define it in the event model - ) - meta_noindex = forms.BooleanField( - label=_('Ask search engines not to index the ticket shop'), - required=False - ) - redirect_to_checkout_directly = forms.BooleanField( - label=_('Directly redirect to check-out after a product has been added to the cart.'), - required=False - ) - - def __init__(self, *args, **kwargs): - event = kwargs['obj'] - super().__init__(*args, **kwargs) - self.fields['primary_font'].choices += [ - (a, a) for a in get_fonts() - ] - if not event.has_subevents: - del self.fields['frontpage_subevent_ordering'] - - class TicketSettingsForm(SettingsForm): ticket_download = forms.BooleanField( label=_("Use feature"), diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 51087c8719..b977b174ce 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -460,6 +460,9 @@ class ItemUpdateForm(I18nModelForm): class ItemVariationsFormSet(I18nFormSet): + template = "pretixcontrol/item/include_variations.html" + title = _('Variations') + def clean(self): super().clean() for f in self.forms: @@ -516,6 +519,9 @@ class ItemVariationForm(I18nModelForm): class ItemAddOnsFormSet(I18nFormSet): + title = _('Add-ons') + template = "pretixcontrol/item/include_addons.html" + def __init__(self, *args, **kwargs): self.event = kwargs.get('event') super().__init__(*args, **kwargs) @@ -581,6 +587,9 @@ class ItemAddOnForm(I18nModelForm): class ItemBundleFormSet(I18nFormSet): + template = "pretixcontrol/item/include_bundles.html" + title = _('Bundled products') + def __init__(self, *args, **kwargs): self.event = kwargs.get('event') self.item = kwargs.pop('item') diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index a427c6f7de..8649a00066 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -201,9 +201,6 @@ class OrganizerSettingsForm(SettingsForm): widget=I18nTextarea, help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.') ) - - -class OrganizerDisplaySettingsForm(SettingsForm): primary_color = forms.CharField( label=_("Primary color"), required=False, diff --git a/src/pretix/control/navigation.py b/src/pretix/control/navigation.py index 0a9e7aa1aa..8428741693 100644 --- a/src/pretix/control/navigation.py +++ b/src/pretix/control/navigation.py @@ -48,14 +48,6 @@ def get_event_navigation(request: HttpRequest): }), 'active': url.url_name == 'event.settings.plugins', }, - { - 'label': _('Display'), - 'url': reverse('control:event.settings.display', kwargs={ - 'event': request.event.slug, - 'organizer': request.event.organizer.slug, - }), - 'active': url.url_name == 'event.settings.display', - }, { 'label': _('Tickets'), 'url': reverse('control:event.settings.tickets', kwargs={ @@ -78,7 +70,7 @@ def get_event_navigation(request: HttpRequest): 'event': request.event.slug, 'organizer': request.event.organizer.slug, }), - 'active': url.url_name == 'event.settings.tax', + 'active': url.url_name.startswith('event.settings.tax'), }, { 'label': _('Invoicing'), @@ -425,13 +417,6 @@ def get_organizer_navigation(request): }), 'active': url.url_name == 'organizer.edit', }, - { - 'label': _('Display'), - 'url': reverse('control:organizer.display', kwargs={ - 'organizer': request.organizer.slug - }), - 'active': url.url_name == 'organizer.display', - }, ] }) if 'can_change_teams' in request.orgapermset: diff --git a/src/pretix/control/signals.py b/src/pretix/control/signals.py index f9eb4ba9b1..af87986eb8 100644 --- a/src/pretix/control/signals.py +++ b/src/pretix/control/signals.py @@ -237,24 +237,6 @@ As with all plugin signals, the ``sender`` keyword argument will contain the eve A second keyword argument ``request`` will contain the request object. """ -nav_item = EventPluginSignal( - providing_args=['request', 'item'] -) -""" -This signal is sent out to include tab links on the settings page of an item. -Receivers are expected to return a list of dictionaries. The dictionaries -should contain at least the keys ``label`` and ``url``. You should also return -an ``active`` key with a boolean set to ``True``, when this item should be marked -as active. - -If your linked view should stay in the tab-like context of this page, we recommend -that you use ``pretix.control.views.item.ItemDetailMixin`` for your view -and your template inherits from ``pretixcontrol/item/base.html``. - -As with all plugin signals, the ``sender`` keyword argument will contain the event. -A second keyword argument ``request`` will contain the request object. -""" - event_settings_widget = EventPluginSignal( providing_args=['request'] ) @@ -279,6 +261,24 @@ styles. It is advisable to set a prefix for your form to avoid clashes with othe As with all plugin signals, the ``sender`` keyword argument will contain the event. """ +item_formsets = EventPluginSignal( + providing_args=['request', 'item'] +) +""" +This signal allows you to return additional formsets that should be rendered on the product +modification page. You are passed ``request`` and ``item`` arguments and are expected to return +an instance of a formset class that you bind yourself when appropriate. Your formset will be +executed as part of the standard validation and rendering cycle and rendered using default +bootstrap styles. It is advisable to set a prefix for your formset to avoid clashes with other +plugins. + +Your formset needs to have two special properties: ``template`` with a template that will be +included to render the formset and ``title`` that will be used as a headline. Your template +will be passed a ``formset`` variable with your formset. + +As with all plugin signals, the ``sender`` keyword argument will contain the event. +""" + subevent_forms = EventPluginSignal( providing_args=['request', 'subevent'] ) diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html index c6ed2c525d..ff9bf22771 100644 --- a/src/pretix/control/templates/pretixcontrol/base.html +++ b/src/pretix/control/templates/pretixcontrol/base.html @@ -47,6 +47,7 @@ + diff --git a/src/pretix/control/templates/pretixcontrol/event/cancel.html b/src/pretix/control/templates/pretixcontrol/event/cancel.html index 004e701b42..59288aa387 100644 --- a/src/pretix/control/templates/pretixcontrol/event/cancel.html +++ b/src/pretix/control/templates/pretixcontrol/event/cancel.html @@ -6,31 +6,33 @@
{% csrf_token %} {% bootstrap_form_errors form %} -
- {% trans "Cancellation of unpaid or free orders" %} - {% bootstrap_field form.cancel_allow_user layout="control" %} - {% bootstrap_field form.cancel_allow_user_until layout="control" %} -
-
- {% trans "Cancellation of paid orders" %} - {% bootstrap_field form.cancel_allow_user_paid layout="control" %} - {% bootstrap_field form.cancel_allow_user_paid_keep layout="control" %} - {% bootstrap_field form.cancel_allow_user_paid_keep_percentage layout="control" %} - {% bootstrap_field form.cancel_allow_user_paid_keep_fees layout="control" %} - {% bootstrap_field form.cancel_allow_user_paid_until layout="control" %} - {% if not gets_notification %} -
- {% blocktrans trimmed %} - If a user requests cancels a paid order and the money can not be refunded automatically, e.g. - due to the selected payment method, you will need to take manual action. However, you have - currently turned off notifications for this event. - {% endblocktrans %} - - {% trans "Change notification settings" %} - -
- {% endif %} -
+
+
+ {% trans "Unpaid or free orders" %} + {% bootstrap_field form.cancel_allow_user layout="control" %} + {% bootstrap_field form.cancel_allow_user_until layout="control" %} +
+
+ {% trans "Paid orders" %} + {% bootstrap_field form.cancel_allow_user_paid layout="control" %} + {% bootstrap_field form.cancel_allow_user_paid_keep layout="control" %} + {% bootstrap_field form.cancel_allow_user_paid_keep_percentage layout="control" %} + {% bootstrap_field form.cancel_allow_user_paid_keep_fees layout="control" %} + {% bootstrap_field form.cancel_allow_user_paid_until layout="control" %} + {% if not gets_notification %} +
+ {% blocktrans trimmed %} + If a user requests cancels a paid order and the money can not be refunded automatically, e.g. + due to the selected payment method, you will need to take manual action. However, you have + currently turned off notifications for this event. + {% endblocktrans %} + + {% trans "Change notification settings" %} + +
+ {% endif %} +
+
-
-
-{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/event/invoicing.html b/src/pretix/control/templates/pretixcontrol/event/invoicing.html index a9870ac2df..b05f48cfa0 100644 --- a/src/pretix/control/templates/pretixcontrol/event/invoicing.html +++ b/src/pretix/control/templates/pretixcontrol/event/invoicing.html @@ -4,48 +4,50 @@ {% block inside %}

{% trans "Invoice settings" %}

- {% csrf_token %} - {% bootstrap_form_errors form %} -
- {% trans "General settings" %} - {% bootstrap_field form.invoice_generate layout="control" %} - {% bootstrap_field form.invoice_generate_sales_channels layout="control" %} - {% bootstrap_field form.invoice_email_attachment layout="control" %} - {% bootstrap_field form.invoice_numbers_prefix layout="control" %} - {% bootstrap_field form.invoice_numbers_consecutive layout="control" %} - {% bootstrap_field form.invoice_language layout="control" %} - {% bootstrap_field form.invoice_include_free layout="control" %} - {% bootstrap_field form.invoice_attendee_name layout="control" %} -
-
- {% trans "Invoice address form" %} - {% bootstrap_field form.invoice_address_asked layout="control" %} - {% bootstrap_field form.invoice_address_required layout="control" %} - {% bootstrap_field form.invoice_name_required layout="control" %} - {% bootstrap_field form.invoice_address_company_required layout="control" %} - {% bootstrap_field form.invoice_address_vatid layout="control" %} - {% bootstrap_field form.invoice_address_beneficiary layout="control" %} - {% bootstrap_field form.invoice_address_not_asked_free layout="control" %} -
-
- {% trans "Your invoice details" %} - {% bootstrap_field form.invoice_address_from_name layout="control" %} - {% bootstrap_field form.invoice_address_from layout="control" %} - {% bootstrap_field form.invoice_address_from_zipcode layout="control" %} - {% bootstrap_field form.invoice_address_from_city layout="control" %} - {% bootstrap_field form.invoice_address_from_country layout="control" %} - {% bootstrap_field form.invoice_address_from_tax_id layout="control" %} - {% bootstrap_field form.invoice_address_from_vat_id layout="control" %} -
-
- {% trans "Invoice customization" %} - {% bootstrap_field form.invoice_renderer layout="control" %} - {% bootstrap_field form.invoice_introductory_text layout="control" %} - {% bootstrap_field form.invoice_additional_text layout="control" %} - {% bootstrap_field form.invoice_footer_text layout="control" %} - {% bootstrap_field form.invoice_logo_image layout="control" %} - {% bootstrap_field form.invoice_address_explanation_text layout="control" %} -
+
+ {% csrf_token %} + {% bootstrap_form_errors form %} +
+ {% trans "Invoice generation" %} + {% bootstrap_field form.invoice_generate layout="control" %} + {% bootstrap_field form.invoice_generate_sales_channels layout="control" %} + {% bootstrap_field form.invoice_email_attachment layout="control" %} + {% bootstrap_field form.invoice_numbers_prefix layout="control" %} + {% bootstrap_field form.invoice_numbers_consecutive layout="control" %} + {% bootstrap_field form.invoice_language layout="control" %} + {% bootstrap_field form.invoice_include_free layout="control" %} + {% bootstrap_field form.invoice_attendee_name layout="control" %} +
+
+ {% trans "Address form" %} + {% bootstrap_field form.invoice_address_asked layout="control" %} + {% bootstrap_field form.invoice_address_required layout="control" %} + {% bootstrap_field form.invoice_name_required layout="control" %} + {% bootstrap_field form.invoice_address_company_required layout="control" %} + {% bootstrap_field form.invoice_address_vatid layout="control" %} + {% bootstrap_field form.invoice_address_beneficiary layout="control" %} + {% bootstrap_field form.invoice_address_not_asked_free layout="control" %} +
+
+ {% trans "Issuer details" %} + {% bootstrap_field form.invoice_address_from_name layout="control" %} + {% bootstrap_field form.invoice_address_from layout="control" %} + {% bootstrap_field form.invoice_address_from_zipcode layout="control" %} + {% bootstrap_field form.invoice_address_from_city layout="control" %} + {% bootstrap_field form.invoice_address_from_country layout="control" %} + {% bootstrap_field form.invoice_address_from_tax_id layout="control" %} + {% bootstrap_field form.invoice_address_from_vat_id layout="control" %} +
+
+ {% trans "Invoice customization" %} + {% bootstrap_field form.invoice_renderer layout="control" %} + {% bootstrap_field form.invoice_introductory_text layout="control" %} + {% bootstrap_field form.invoice_additional_text layout="control" %} + {% bootstrap_field form.invoice_footer_text layout="control" %} + {% bootstrap_field form.invoice_logo_image layout="control" %} + {% bootstrap_field form.invoice_address_explanation_text layout="control" %} +
+
+ +
+ {% trans "SMTP settings" %} + {% bootstrap_field form.smtp_use_custom layout="control" %} + {% bootstrap_field form.smtp_host layout="control" %} + {% bootstrap_field form.smtp_port layout="control" %} + {% bootstrap_field form.smtp_username layout="control" %} + {% bootstrap_field form.smtp_password layout="control" %} + {% bootstrap_field form.smtp_use_tls layout="control" %} + {% bootstrap_field form.smtp_use_ssl layout="control" %} +
+
- {% elif plugin.restricted and not staff_session %} - - {% elif plugin.module in plugins_active %} - - {% else %} - - {% endif %} -
- - -
- {% if plugin.author %} -

{% blocktrans trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} by {{ a }} - {% endblocktrans %}

- {% else %} -

{% blocktrans trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} - {% endblocktrans %}

- {% endif %} -

{{ plugin.description }}

- {% if plugin.restricted and not request.user.is_staff %} -
- {% trans "This plugin needs to be enabled by a system administrator for your event." %} -
- {% endif %} - {% if plugin.app.compatibility_errors %} -
- {% trans "This plugin cannot be enabled for the following reasons:" %} -
    - {% for e in plugin.app.compatibility_errors %} -
  • {{ e }}
  • - {% endfor %} -
-
- {% endif %} - {% if plugin.app.compatibility_warnings %} -
- {% trans "This plugin reports the following problems:" %} -
    - {% for e in plugin.app.compatibility_warnings %} -
  • {{ e }}
  • - {% endfor %} -
-
- {% endif %} -
- - - {% endfor %} + + {% csrf_token %} + {% if "success" in request.GET %} +
+ {% trans "Your changes have been saved." %}
- -
+ {% endif %} +
+ + {% for plugin in plugins %} + + + + + {% endfor %} +
+ {{ plugin.name }} + {% if plugin.author %} +

{% blocktrans trimmed with v=plugin.version a=plugin.author %} + Version {{ v }} by {{ a }} + {% endblocktrans %}

+ {% else %} +

{% blocktrans trimmed with v=plugin.version a=plugin.author %} + Version {{ v }} + {% endblocktrans %}

+ {% endif %} +

{{ plugin.description }}

+ {% if plugin.restricted and not request.user.is_staff %} + + {% trans "This plugin needs to be enabled by a system administrator for your event." %} + + {% endif %} + {% if plugin.app.compatibility_errors %} +
+ {% trans "This plugin cannot be enabled for the following reasons:" %} +
    + {% for e in plugin.app.compatibility_errors %} +
  • {{ e }}
  • + {% endfor %} +
+
+ {% endif %} + {% if plugin.app.compatibility_warnings %} +
+ {% trans "This plugin reports the following problems:" %} +
    + {% for e in plugin.app.compatibility_warnings %} +
  • {{ e }}
  • + {% endfor %} +
+
+ {% endif %} +
+ {% if plugin.app.compatibility_errors %} + + {% elif plugin.restricted and not staff_session %} + + {% elif plugin.module in plugins_active %} + + {% else %} + + {% endif %} +
+
+ {% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index 64bb3dabb1..683dd4c414 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -1,81 +1,119 @@ {% extends "pretixcontrol/event/settings_base.html" %} {% load i18n %} {% load bootstrap3 %} +{% load hierarkey_form %} +{% block custom_header %} + {{ block.super }} + +{% endblock %} {% block inside %}

{% trans "General settings" %}

-
+ + {% csrf_token %} {% bootstrap_form_errors form %} -
- {% trans "General information" %} - {% bootstrap_field form.name layout="control" %} - {% bootstrap_field form.slug layout="control" %} - {% bootstrap_field form.date_from layout="control" %} - {% bootstrap_field form.date_to layout="control" %} - {% bootstrap_field form.location layout="control" %} - {% bootstrap_field form.date_admission layout="control" %} - {% bootstrap_field form.currency layout="control" %} - {% bootstrap_field form.is_public layout="control" %} +
+
+ {% trans "Basics" %} + {% bootstrap_field form.name layout="control" %} + {% bootstrap_field form.slug layout="control" %} + {% bootstrap_field form.date_from layout="control" %} + {% bootstrap_field form.date_to layout="control" %} + {% bootstrap_field form.location layout="control" %} + {% bootstrap_field form.date_admission layout="control" %} + {% bootstrap_field form.currency layout="control" %} + {% bootstrap_field sform.contact_mail layout="control" %} + {% bootstrap_field sform.imprint_url layout="control" %} + {% bootstrap_field form.is_public layout="control" %} - {% if meta_forms %} -
-
- {% trans "Display settings" %} - {% bootstrap_field sform.locales layout="control" %} - {% bootstrap_field sform.locale layout="control" %} - {% bootstrap_field sform.timezone layout="control" %} - {% bootstrap_field sform.show_date_to layout="control" %} - {% bootstrap_field sform.show_times layout="control" %} - {% bootstrap_field sform.contact_mail layout="control" %} - {% bootstrap_field sform.imprint_url layout="control" %} - {% bootstrap_field sform.confirm_text layout="control" %} - {% bootstrap_field sform.show_quota_left layout="control" %} - {% bootstrap_field sform.display_net_prices layout="control" %} -
-
- {% trans "Timeline" %} - {% bootstrap_field form.presale_start layout="control" %} - {% bootstrap_field sform.presale_start_show_date layout="control" %} - {% bootstrap_field form.presale_end layout="control" %} - {% bootstrap_field sform.show_items_outside_presale_period layout="control" %} - {% bootstrap_field sform.last_order_modification_date layout="control" %} -
-
- {% trans "Orders" %} - {% bootstrap_field sform.reservation_time layout="control" %} - {% bootstrap_field sform.max_items_per_order layout="control" %} - {% bootstrap_field sform.attendee_names_asked layout="control" %} - {% bootstrap_field sform.attendee_names_required layout="control" %} - {% bootstrap_field sform.name_scheme layout="control" %} - {% bootstrap_field sform.name_scheme_titles layout="control" %} - {% bootstrap_field sform.order_email_asked_twice layout="control" %} - {% bootstrap_field sform.attendee_emails_asked layout="control" %} - {% bootstrap_field sform.attendee_emails_required layout="control" %} -
-
- {% trans "Waiting list" %} - {% bootstrap_field sform.waiting_list_enabled layout="control" %} - {% bootstrap_field sform.waiting_list_auto layout="control" %} - {% bootstrap_field sform.waiting_list_hours layout="control" %} -
+ {% endif %} +
+
+ {% trans "Localization" %} + {% bootstrap_field sform.locales layout="control" %} + {% bootstrap_field sform.locale layout="control" %} + {% bootstrap_field sform.timezone layout="control" %} +
+
+ {% trans "Attendee data" %} + {% bootstrap_field sform.attendee_names_asked layout="control" %} + {% bootstrap_field sform.attendee_names_required layout="control" %} + {% bootstrap_field sform.name_scheme layout="control" %} + {% bootstrap_field sform.name_scheme_titles layout="control" %} + {% bootstrap_field sform.order_email_asked_twice layout="control" %} + {% bootstrap_field sform.attendee_emails_asked layout="control" %} + {% bootstrap_field sform.attendee_emails_required layout="control" %} +
+
+ {% trans "Texts" %} + {% bootstrap_field sform.frontpage_text layout="control" %} + {% bootstrap_field sform.presale_has_ended_text layout="control" %} + {% bootstrap_field sform.voucher_explanation_text layout="control" %} + {% bootstrap_field sform.confirm_text layout="control" %} +
+
+ {% trans "Shop design" %} + {% bootstrap_field sform.logo_image layout="control" %} + {% url "control:organizer.edit" organizer=request.organizer.slug as org_url %} + {% propagated request.event org_url "primary_color" "primary_font" "theme_color_success" "theme_color_danger" %} + {% bootstrap_field sform.primary_color layout="control" %} + {% bootstrap_field sform.theme_color_success layout="control" %} + {% bootstrap_field sform.theme_color_danger layout="control" %} + {% bootstrap_field sform.primary_font layout="control" %} + {% endpropagated %} +
+
+ {% trans "Timeline" %} + {% bootstrap_field form.presale_start layout="control" %} + {% bootstrap_field sform.presale_start_show_date layout="control" %} + {% bootstrap_field form.presale_end layout="control" %} + {% bootstrap_field sform.show_items_outside_presale_period layout="control" %} + {% bootstrap_field sform.last_order_modification_date layout="control" %} +
+
+ {% trans "Display" %} + {% bootstrap_field sform.show_date_to layout="control" %} + {% bootstrap_field sform.show_times layout="control" %} + {% bootstrap_field sform.show_quota_left layout="control" %} + {% bootstrap_field sform.display_net_prices layout="control" %} + {% bootstrap_field sform.show_variations_expanded layout="control" %} + {% bootstrap_field sform.hide_sold_out layout="control" %} + {% bootstrap_field sform.meta_noindex layout="control" %} + {% if sform.frontpage_subevent_ordering %} + {% bootstrap_field sform.frontpage_subevent_ordering layout="control" %} + {% endif %} +
+
+ {% trans "Cart" %} + {% bootstrap_field sform.reservation_time layout="control" %} + {% bootstrap_field sform.max_items_per_order layout="control" %} + {% bootstrap_field sform.redirect_to_checkout_directly layout="control" %} +
+
+ {% trans "Waiting list" %} + {% bootstrap_field sform.waiting_list_enabled layout="control" %} + {% bootstrap_field sform.waiting_list_auto layout="control" %} + {% bootstrap_field sform.waiting_list_hours layout="control" %} +
+
-
- - {% endfor %} - - -

- -

- +
+
+ {% trans "General" %} + {% bootstrap_field form.name layout="control" %} + {% bootstrap_field form.rate addon_after="%" layout="control" %} + {% bootstrap_field form.price_includes_tax layout="control" %} +
+
+ {% trans "Advanced" %} + + {% bootstrap_field form.eu_reverse_charge layout="control" %} + {% bootstrap_field form.home_country layout="control" %} +

{% trans "Custom taxation rules" %}

+
+ {% blocktrans trimmed %} + These settings are intended for professional users with very specific taxation situations. + If you create any rule here, the reverse charge settings above will be ignored. The rules will be + checked in order and once the first rule matches the order, it will be used and all further rules will + be ignored. If no rule matches, tax will be charged. + {% endblocktrans %} + {% trans "All of these rules will only apply if an invoice address is set." %}
-
- - +
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} + {% bootstrap_form_errors form %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+ {% bootstrap_field form.country layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.address_type layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.action layout='inline' form_group_class="" %} +
+
+ +
+
+ {% endfor %} +
+ +

+ +

+
+ +
- - -
- - -
- {% bootstrap_form_errors form %} - {% bootstrap_field form.addon_category layout="control" %} - {% bootstrap_field form.min_count layout="control" %} - {% bootstrap_field form.max_count layout="control" %} - {% bootstrap_field form.price_included layout="control" %} -
- - {% endfor %} - - -

- -

- -
- -
-
-{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/item/base.html b/src/pretix/control/templates/pretixcontrol/item/base.html index 87d7854419..2aa73b18df 100644 --- a/src/pretix/control/templates/pretixcontrol/item/base.html +++ b/src/pretix/control/templates/pretixcontrol/item/base.html @@ -4,37 +4,6 @@ {% block content %} {% if object.id %}

{% trans "Modify product:" %} {{ object.name }}

- {% else %}

{% trans "Create product" %}

{% blocktrans trimmed %} diff --git a/src/pretix/control/templates/pretixcontrol/item/bundles.html b/src/pretix/control/templates/pretixcontrol/item/bundles.html deleted file mode 100644 index d19ca4c350..0000000000 --- a/src/pretix/control/templates/pretixcontrol/item/bundles.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends "pretixcontrol/item/base.html" %} -{% load i18n %} -{% load bootstrap3 %} -{% load formset_tags %} -{% block inside %} -

- {% blocktrans trimmed %} - With bundles, you can specify products that are always automatically added as add-ons in the cart for this product. - {% endblocktrans %} -

-
- {% csrf_token %} -
- {{ formset.management_form }} - {% bootstrap_formset_errors formset %} -
- {% for form in formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} -
-
-
-
-

{% trans "Bundled product" %}

-
-
- -
-
-
-
- {% bootstrap_form_errors form %} - {% bootstrap_field form.itemvar layout="control" %} - {% bootstrap_field form.count layout="control" %} - {% bootstrap_field form.designated_price layout="control" %} -
-
- {% endfor %} -
- -

- -

-
-
- -
-
-{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/item/include_addons.html b/src/pretix/control/templates/pretixcontrol/item/include_addons.html new file mode 100644 index 0000000000..317dc5edca --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/item/include_addons.html @@ -0,0 +1,87 @@ +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +

+ {% blocktrans trimmed %} + With add-ons, you can specify products that can be bought as an addition to this product. For example, if + you host a conference with a base conference ticket and a number of workshops, you could define the + workshops as add-ons to the conference ticket. With this configuration, the workshops cannot be bought + on their own but only in combination with a conference ticket. You can here specify categories of products + that can be used as add-ons to this product. You can also specify the minimum and maximum number of + add-ons of the given category that can or need to be chosen. The user can buy every add-on from the + category at most once. If an add-on product has multiple variations, only one of them can be bought. + {% endblocktrans %} +

+
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+
+
+

{% trans "Add-On" %}

+
+
+ + + +
+
+
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.addon_category layout="control" %} + {% bootstrap_field form.min_count layout="control" %} + {% bootstrap_field form.max_count layout="control" %} + {% bootstrap_field form.price_included layout="control" %} +
+
+ {% endfor %} +
+ +

+ +

+
diff --git a/src/pretix/control/templates/pretixcontrol/item/include_bundles.html b/src/pretix/control/templates/pretixcontrol/item/include_bundles.html new file mode 100644 index 0000000000..b09561c5eb --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/item/include_bundles.html @@ -0,0 +1,70 @@ +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +

+ {% blocktrans trimmed %} + With bundles, you can specify products that are always automatically added as add-ons in the cart for this product. + {% endblocktrans %} +

+ +
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+
+
+

{% trans "Bundled product" %}

+
+
+ +
+
+
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.itemvar layout="control" %} + {% bootstrap_field form.count layout="control" %} + {% bootstrap_field form.designated_price layout="control" %} +
+
+ {% endfor %} +
+ +

+ +

+
diff --git a/src/pretix/control/templates/pretixcontrol/item/include_variations.html b/src/pretix/control/templates/pretixcontrol/item/include_variations.html new file mode 100644 index 0000000000..b10793ea01 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/item/include_variations.html @@ -0,0 +1,88 @@ +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} + {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} +
+
+

+
+
+ {% bootstrap_field form.value layout='inline' form_group_class="" %} +
+
+ + + +
+
+

+
+
+ {% if form.instance.pk and not form.instance.quotas.exists %} +
+ {% blocktrans trimmed %} + Please note that your variation will not be available for sale + until you have added it to an existing or newly created quota. + {% endblocktrans %} +
+ {% endif %} + {% bootstrap_form_errors form %} + {% bootstrap_field form.active layout="control" %} + {% bootstrap_field form.default_price addon_after=request.event.currency layout="control" %} + {% bootstrap_field form.original_price addon_after=request.event.currency layout="control" %} + {% bootstrap_field form.description layout="control" %} +
+
+ {% endfor %} +
+ +

+ +

+
diff --git a/src/pretix/control/templates/pretixcontrol/item/index.html b/src/pretix/control/templates/pretixcontrol/item/index.html index a24ffe3e57..0dbe521e4b 100644 --- a/src/pretix/control/templates/pretixcontrol/item/index.html +++ b/src/pretix/control/templates/pretixcontrol/item/index.html @@ -1,56 +1,70 @@ {% extends "pretixcontrol/item/base.html" %} {% load i18n %} {% load bootstrap3 %} +{% load formset_tags %} {% block inside %}
{% csrf_token %}
-
- {% trans "General information" %} - {% bootstrap_field form.name layout="control" %} -
- {% bootstrap_field form.internal_name layout="control" %} -
- {% bootstrap_field form.active layout="control" %} - {% bootstrap_field form.category layout="control" %} - {% bootstrap_field form.admission layout="control" %} - {% bootstrap_field form.description layout="control" %} - {% bootstrap_field form.picture layout="control" %} -
-
- {% trans "Price settings" %} - {% bootstrap_field form.default_price addon_after=request.event.currency layout="control" %} - {% bootstrap_field form.tax_rule layout="control" %} - {% bootstrap_field form.free_price layout="control" %} -
-
- {% trans "Availability" %} - {% bootstrap_field form.sales_channels layout="control" %} - {% bootstrap_field form.available_from layout="control" %} - {% bootstrap_field form.available_until layout="control" %} - {% bootstrap_field form.max_per_order layout="control" %} - {% bootstrap_field form.min_per_order layout="control" %} - {% bootstrap_field form.hidden_if_available layout="control" %} - {% bootstrap_field form.require_voucher layout="control" %} - {% bootstrap_field form.hide_without_voucher layout="control" %} - {% bootstrap_field form.require_bundling layout="control" %} - {% bootstrap_field form.allow_cancel layout="control" %} -
-
- {% trans "Check-in" %} - {% bootstrap_field form.checkin_attention layout="control" %} -
-
- {% trans "Additional settings" %} - {% bootstrap_field form.original_price addon_after=request.event.currency layout="control" %} - {% bootstrap_field form.require_approval layout="control" %} - {% bootstrap_field form.generate_tickets layout="control" %} - {% bootstrap_field form.show_quota_left layout="control" %} - {% for f in plugin_forms %} - {% bootstrap_form f layout="control" %} +
+
+ {% trans "General" %} + {% bootstrap_field form.name layout="control" %} +
+ {% bootstrap_field form.internal_name layout="control" %} +
+ {% bootstrap_field form.category layout="control" %} + {% bootstrap_field form.active layout="control" %} + {% bootstrap_field form.admission layout="control" %} + {% bootstrap_field form.description layout="control" %} + {% bootstrap_field form.picture layout="control" %} + {% bootstrap_field form.require_approval layout="control" %} +
+
+ {% trans "Price" %} + {% bootstrap_field form.default_price addon_after=request.event.currency layout="control" %} + {% bootstrap_field form.tax_rule layout="control" %} + {% bootstrap_field form.free_price layout="control" %} + {% bootstrap_field form.original_price addon_after=request.event.currency layout="control" %} +
+
+ {% trans "Availability" %} + {% bootstrap_field form.sales_channels layout="control" %} + {% bootstrap_field form.available_from layout="control" %} + {% bootstrap_field form.available_until layout="control" %} + {% bootstrap_field form.max_per_order layout="control" %} + {% bootstrap_field form.min_per_order layout="control" %} + {% bootstrap_field form.hidden_if_available layout="control" %} + {% bootstrap_field form.require_voucher layout="control" %} + {% bootstrap_field form.hide_without_voucher layout="control" %} + {% bootstrap_field form.require_bundling layout="control" %} + {% bootstrap_field form.allow_cancel layout="control" %} +
+ {% for v in formsets.values %} +
+ {{ v.title }} + {% include v.template with formset=v %} +
{% endfor %} -
+
+ {% trans "Tickets & check-in" %} + {% bootstrap_field form.generate_tickets layout="control" %} + {% bootstrap_field form.checkin_attention layout="control" %} +
+
+ {% trans "Additional settings" %} + {% bootstrap_field form.show_quota_left layout="control" %} + {% for f in plugin_forms %} + {% bootstrap_form f layout="control" %} + {% endfor %} +
+
+
+ +
@@ -63,10 +77,5 @@
-
- -
{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/item/variations.html b/src/pretix/control/templates/pretixcontrol/item/variations.html deleted file mode 100644 index 2fc4b88c66..0000000000 --- a/src/pretix/control/templates/pretixcontrol/item/variations.html +++ /dev/null @@ -1,99 +0,0 @@ -{% extends "pretixcontrol/item/base.html" %} -{% load i18n %} -{% load bootstrap3 %} -{% load formset_tags %} -{% block inside %} -
- {% csrf_token %} -
- {{ formset.management_form }} - {% bootstrap_formset_errors formset %} -
- {% for form in formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} - {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} -
-
-

-
-
- {% bootstrap_field form.value layout='inline' form_group_class="" %} -
-
- - - -
-
-

-
-
- {% if form.instance.pk and not form.instance.quotas.exists %} -
- {% blocktrans trimmed %} - Please note that your variation will not be available for sale - until you have added it to an existing or newly created quota. - {% endblocktrans %} -
- {% endif %} - {% bootstrap_form_errors form %} - {% bootstrap_field form.active layout="control" %} - {% bootstrap_field form.default_price addon_after=request.event.currency layout="control" %} - {% bootstrap_field form.original_price addon_after=request.event.currency layout="control" %} - {% bootstrap_field form.description layout="control" %} -
-
- {% endfor %} -
- -

- -

-
-
- -
-
-{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/items/question_edit.html b/src/pretix/control/templates/pretixcontrol/items/question_edit.html index 64bd111854..0fa1549f0b 100644 --- a/src/pretix/control/templates/pretixcontrol/items/question_edit.html +++ b/src/pretix/control/templates/pretixcontrol/items/question_edit.html @@ -19,113 +19,115 @@
{% csrf_token %} {% bootstrap_form_errors form %} -
- {% trans "General information" %} - {% bootstrap_field form.question layout="control" %} - {% bootstrap_field form.type layout="control" %} - {% bootstrap_field form.items layout="control" %} - {% bootstrap_field form.required layout="control" %} -
-
- {% blocktrans trimmed %} - If you mark a Yes/No question as required, it means that the user has to select Yes and No is not - accepted. If you want to allow both options, do not make this field required. - {% endblocktrans %} -
-
- {% trans "Answer options" %} - -
- {{ formset.management_form }} - {% bootstrap_formset_errors formset %} -
- {% for form in formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} - {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} -
-
-
+
+
+ {% trans "General " %} + {% bootstrap_field form.question layout="control" %} + {% bootstrap_field form.type layout="control" %} + {% bootstrap_field form.items layout="control" %} + {% bootstrap_field form.required layout="control" %} +
+ {% blocktrans trimmed %} + If you mark a Yes/No question as required, it means that the user has to select Yes and No is not + accepted. If you want to allow both options, do not make this field required. + {% endblocktrans %} +
+
+

{% trans "Answer options" %}

+ +
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} + {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} +
+
+
{% blocktrans trimmed with id=form.instance.identifier %} Answer option {{ id }} {% endblocktrans %} - {% bootstrap_form_errors form %} - {% bootstrap_field form.answer layout='inline' form_group_class="" %} + {% bootstrap_form_errors form %} + {% bootstrap_field form.answer layout='inline' form_group_class="" %} +
+
+  
+ + + +
+
-
-  
- - - -
-
+ {% endfor %}
- {% endfor %} -
- -

- -

-
-
-
- {% trans "Advanced settings" %} - {% bootstrap_field form.help_text layout="control" %} - {% bootstrap_field form.identifier layout="control" %} - {% bootstrap_field form.ask_during_checkin layout="control" %} - {% bootstrap_field form.hidden layout="control" %} + {% endescapescript %} + +

+ +

+ + +
+
+ {% trans "Advanced" %} + {% bootstrap_field form.help_text layout="control" %} + {% bootstrap_field form.identifier layout="control" %} + {% bootstrap_field form.ask_during_checkin layout="control" %} + {% bootstrap_field form.hidden layout="control" %} -
- -
- {% bootstrap_field form.dependency_question layout="inline" form_group_class="inner" %} +
+ +
+ {% bootstrap_field form.dependency_question layout="inline" form_group_class="inner" %} +
+
+ + {% bootstrap_field form.dependency_values layout="inline" form_group_class="inner" %} +
-
- - {% bootstrap_field form.dependency_values layout="inline" form_group_class="inner" %} -
-
-
+ +
-
-
-{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/edit.html b/src/pretix/control/templates/pretixcontrol/organizers/edit.html index e262b6dcb5..b7409c7da0 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/edit.html @@ -16,79 +16,104 @@
{% csrf_token %} -
- {% trans "General information" %} - {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout="control" %} - {% bootstrap_field form.slug layout="control" %} - {% if form.domain %} - {% bootstrap_field form.domain layout="control" %} - {% endif %} -
-
- {% trans "Other" %} - {% bootstrap_form_errors sform %} - {% bootstrap_field sform.organizer_info_text layout="control" %} -
-
- {% trans "Event metadata (advanced)" %} -

- {% blocktrans trimmed %} - You can here define a set of metadata properties (i.e. variables) that you can later set for your - events and re-use in places like ticket layouts. This is an useful timesaver if you create lots and - lots of events. - {% endblocktrans %} -

-
- {{ formset.management_form }} - {% bootstrap_formset_errors formset %} -
- {% for form in formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} -
-
- {% bootstrap_form_errors form %} - {% bootstrap_field form.name layout='inline' form_group_class="" %} -
-
- {% bootstrap_field form.default layout='inline' form_group_class="" %} -
-
- -
-
- {% endfor %} -
- -

- + {% bootstrap_form_errors sform %} + {% bootstrap_form_errors form %} +

+
+ {% trans "General" %} + {% bootstrap_field form.name layout="control" %} + {% bootstrap_field form.slug layout="control" %} + {% if form.domain %} + {% bootstrap_field form.domain layout="control" %} + {% endif %} + {% bootstrap_field sform.organizer_info_text layout="control" %} +
+
+ {% trans "Organizer page" %} + {% bootstrap_field sform.organizer_logo_image layout="control" %} + {% bootstrap_field sform.organizer_homepage_text layout="control" %} + {% bootstrap_field sform.event_list_type layout="control" %} + {% bootstrap_field sform.event_list_availability layout="control" %} + {% bootstrap_field sform.organizer_link_back layout="control" %} +
+
+ {% trans "Localization" %} + {% bootstrap_field sform.locales layout="control" %} +
+
+ {% trans "Shop design" %} +

+ {% blocktrans trimmed %} + These settings will be used for the organizer page as well as for the default settings + for all events in this account that do not have their own design settings. + {% endblocktrans %}

-
-
+ {% bootstrap_field sform.primary_color layout="control" %} + {% bootstrap_field sform.theme_color_success layout="control" %} + {% bootstrap_field sform.theme_color_danger layout="control" %} + {% bootstrap_field sform.primary_font layout="control" %} + {% bootstrap_field sform.favicon layout="control" %} + +
+ {% trans "Event metadata" %} +

+ {% blocktrans trimmed %} + You can here define a set of metadata properties (i.e. variables) that you can later set for your + events and re-use in places like ticket layouts. This is an useful timesaver if you create lots and + lots of events. + {% endblocktrans %} +

+
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.name layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.default layout='inline' form_group_class="" %} +
+
+ +
+
+ {% endfor %} +
+ +

+ +

+
+
+