Allow to add declaration of accessibility (#5140)

* Allow to add declaration of accessibility

* add fallback for empty accessibility_title

* unify label format (not "Title for")

* move title to top and set helptext before text

---------

Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
Raphael Michel
2025-05-28 13:23:04 +02:00
committed by GitHub
parent 84a909b889
commit e46e689f01
10 changed files with 100 additions and 0 deletions

View File

@@ -426,6 +426,9 @@ class OrganizerSettingsSerializer(SettingsSerializer):
'organizer_logo_image_inherit',
'organizer_logo_image',
'privacy_url',
'accessibility_url',
'accessibility_title',
'accessibility_text',
'cookie_consent',
'cookie_consent_dialog_title',
'cookie_consent_dialog_text',

View File

@@ -2063,6 +2063,38 @@ DEFAULTS = {
),
'serializer_class': I18nURLField,
},
'accessibility_url': {
'default': None,
'type': LazyI18nString,
'form_class': I18nURLFormField,
'form_kwargs': dict(
label=_("Accessibility information URL"),
help_text=_("This should point e.g. to a part of your website that explains how your ticket shop complies "
"with accessibility regulation."),
widget=I18nTextInput,
),
'serializer_class': I18nURLField,
},
'accessibility_title': {
'default': LazyI18nString.from_gettext(gettext_noop("Accessibility information")),
'type': LazyI18nString,
'form_class': I18nFormField,
'form_kwargs': dict(
label=_("Accessibility information title"),
widget=I18nTextInput,
),
'serializer_class': I18nURLField,
},
'accessibility_text': {
'default': None,
'type': LazyI18nString,
'form_class': I18nFormField,
'form_kwargs': dict(
label=_("Accessibility information text"),
widget=I18nMarkdownTextarea,
),
'serializer_class': I18nURLField,
},
'confirm_texts': {
'default': LazyI18nStringList(),
'type': LazyI18nStringList,

View File

@@ -73,6 +73,7 @@ class EventSlugBanlistValidator(BanlistValidator):
'customer',
'account',
'lead',
'accessibility',
]

View File

@@ -498,6 +498,9 @@ class OrganizerSettingsForm(SettingsForm):
'theme_round_borders',
'primary_font',
'privacy_url',
'accessibility_url',
'accessibility_title',
'accessibility_text',
'cookie_consent',
'cookie_consent_dialog_title',
'cookie_consent_dialog_text',

View File

@@ -200,6 +200,24 @@
{% bootstrap_field sform.cookie_consent_dialog_button_yes layout="control" %}
{% bootstrap_field sform.cookie_consent_dialog_button_no layout="control" %}
</fieldset>
<fieldset id="tab-organizer-accessibility">
<legend>{% trans "Accessibility" %}</legend>
<div class="alert alert-legal">
{% blocktrans trimmed with a_href="https://docs.pretix.eu/trust/accessibility/" %}
Some jurisdictions, including the European Union, require you to publish information
about the accessibility of your ticket shop. You can find a template in
<a href="https://docs.pretix.eu/trust/accessibility/" target="_blank">our documentation</a>.
{% endblocktrans %}
</div>
{% bootstrap_field sform.accessibility_title layout="control" %}
{% bootstrap_field sform.accessibility_url layout="control" %}
<div class="row">
<div class="col-md-9 col-md-offset-3">
<p class="text-muted">{% trans "Instead of an URL, you can also configure a text that will be shown within pretix. This will be ignored if a URL is configured." %}</p>
</div>
</div>
{% bootstrap_field sform.accessibility_text layout="control" %}
</fieldset>
<fieldset>
<legend>{% trans "Reusable media" %}</legend>
{% bootstrap_field sform.reusable_media_active layout="control" %}

View File

@@ -224,6 +224,17 @@
{% if request.event.settings.privacy_url %}
<li><a href="{% safelink request.event.settings.privacy_url %}" target="_blank" rel="noopener">{% trans "Privacy policy" %}</a></li>
{% endif %}
{% if request.event.settings.accessibility_url %}
{% trans "Accessibility information" as accessibility_title %}
<li><a href="{% safelink request.event.settings.accessibility_url %}" target="_blank" rel="noopener">
{{ request.event.settings.accessibility_title|default:accessibility_title }}
</a></li>
{% elif request.event.settings.accessibility_text %}
{% trans "Accessibility information" as accessibility_title %}
<li><a href="{% abseventurl request.organizer "presale:organizer.accessibility" %}" target="_blank" rel="noopener">
{{ request.event.settings.accessibility_title|default:accessibility_title }}
</a></li>
{% endif %}
{% if request.event.settings.cookie_consent and cookie_providers %}
<li><button type="button" class="btn btn-link" id="cookie-consent-reopen">{% trans "Cookie settings" %}</button></li>
{% endif %}

View File

@@ -0,0 +1,9 @@
{% extends "pretixpresale/organizers/base.html" %}
{% load i18n %}
{% load rich_text %}
{% block title %}{{ request.organizer.settings.accessibility_title }}{% endblock %}
{% block content %}
{% trans "Accessibility information" as accessibility_title %}
<h2>{{ request.organizer.settings.accessibility_title|default:accessibility_title }}</h2>
{{ request.organizer.settings.accessibility_text|rich_text }}
{% endblock %}

View File

@@ -102,6 +102,17 @@
{% if not request.event and request.organizer.settings.privacy_url %}
<li><a href="{% safelink request.organizer.settings.privacy_url %}" target="_blank" rel="noopener">{% trans "Privacy policy" %}</a></li>
{% endif %}
{% if request.organizer.settings.accessibility_url %}
{% trans "Accessibility information" as accessibility_title %}
<li><a href="{% safelink request.organizer.settings.accessibility_url %}" target="_blank" rel="noopener">
{{ request.organizer.settings.accessibility_title|default:accessibility_title }}
</a></li>
{% elif request.organizer.settings.accessibility_text %}
{% trans "Accessibility information" as accessibility_title %}
<li><a href="{% abseventurl request.organizer "presale:organizer.accessibility" %}" target="_blank" rel="noopener">
{{ request.organizer.settings.accessibility_title|default:accessibility_title }}
</a></li>
{% endif %}
{% if not request.event and request.organizer.settings.cookie_consent and cookie_providers %}
<li><button type="button" class="btn btn-link" id="cookie-consent-reopen">{% trans "Cookie settings" %}</button></li>
{% endif %}

View File

@@ -199,6 +199,7 @@ organizer_patterns = [
re_path(r'^widget/v1.css$', pretix.presale.views.widget.widget_css, name='organizer.widget.css'),
re_path(r'^theme.css$', pretix.presale.views.theme.theme_css, name='organizer.theme.css'),
re_path(r'^accessibility$', pretix.presale.views.organizer.AccessibilityView.as_view(), name='organizer.accessibility'),
re_path(r'^account/login/(?P<provider>[0-9]+)/$', pretix.presale.views.customer.SSOLoginView.as_view(), name='organizer.customer.login'),
re_path(r'^account/login/(?P<provider>[0-9]+)/return$', pretix.presale.views.customer.SSOLoginReturnView.as_view(), name='organizer.customer.login.return'),

View File

@@ -1311,3 +1311,14 @@ class OrganizerFavicon(View):
class RedirectToOrganizerIndex(View):
def get(self, *args, **kwargs):
return redirect_to_url(build_absolute_uri(self.request.organizer, "presale:organizer.index"))
class AccessibilityView(OrganizerViewMixin, EventListMixin, TemplateView):
template_name = 'pretixpresale/organizers/accessibility.html'
def dispatch(self, request, *args, **kwargs):
if self.request.organizer.settings.accessibility_url:
raise Http404()
if not self.request.organizer.settings.accessibility_text:
raise Http404()
return super().dispatch(request, *args, **kwargs)