diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 6215a5c7f5..d9ea658956 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -486,7 +486,15 @@ Your {event} team""")) 'update_check_id': { 'default': None, 'type': str - } + }, + 'banner_message': { + 'default': '', + 'type': LazyI18nString + }, + 'banner_message_detail': { + 'default': '', + 'type': LazyI18nString + }, } settings_hierarkey = Hierarkey(attribute_name='settings') diff --git a/src/pretix/control/context.py b/src/pretix/control/context.py index 42fe70b280..1aa21026dd 100644 --- a/src/pretix/control/context.py +++ b/src/pretix/control/context.py @@ -91,8 +91,9 @@ def contextprocessor(request): ctx['warning_update_available'] = False ctx['warning_update_check_active'] = False + gs = GlobalSettingsObject() + ctx['global_settings'] = gs.settings if request.user.is_superuser: - gs = GlobalSettingsObject() if gs.settings.update_check_result_warning: ctx['warning_update_available'] = True if not gs.settings.update_check_ack and 'runserver' not in sys.argv: diff --git a/src/pretix/control/forms/global_settings.py b/src/pretix/control/forms/global_settings.py index 63c3d34bbd..80c551f8bc 100644 --- a/src/pretix/control/forms/global_settings.py +++ b/src/pretix/control/forms/global_settings.py @@ -2,7 +2,7 @@ from collections import OrderedDict from django import forms from django.utils.translation import ugettext_lazy as _ -from i18nfield.forms import I18nFormField, I18nTextInput +from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput from pretix.base.forms import SettingsForm from pretix.base.settings import GlobalSettingsObject @@ -26,7 +26,17 @@ class GlobalSettingsForm(SettingsForm): required=False, label=_("Additional footer link"), help_text=_("Will be included as the link in the additional footer text.") - )) + )), + ('banner_message', I18nFormField( + widget=I18nTextarea, + required=False, + label=_("Global message banner"), + )), + ('banner_message_detail', I18nFormField( + widget=I18nTextarea, + required=False, + label=_("Global message banner detail text"), + )), ]) responses = register_global_settings.send(self) for r, response in sorted(responses, key=lambda r: str(r[0])): @@ -34,6 +44,9 @@ class GlobalSettingsForm(SettingsForm): # We need to be this explicit, since OrderedDict.update does not retain ordering self.fields[key] = value + self.fields['banner_message'].widget.attrs['rows'] = '2' + self.fields['banner_message_detail'].widget.attrs['rows'] = '3' + class UpdateSettingsForm(SettingsForm): update_check_perform = forms.BooleanField( diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html index dcd47d7eaf..b956916dd0 100644 --- a/src/pretix/control/templates/pretixcontrol/base.html +++ b/src/pretix/control/templates/pretixcontrol/base.html @@ -272,6 +272,17 @@ {% endif %} + {% if global_settings.banner_message %} +
+ + {{ global_settings.banner_message }} + {% if global_settings.banner_message %} + + {% trans "Read more" %} + + {% endif %} +
+ {% endif %}
{% if messages %} diff --git a/src/pretix/control/templates/pretixcontrol/global_message.html b/src/pretix/control/templates/pretixcontrol/global_message.html new file mode 100644 index 0000000000..ff89235932 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/global_message.html @@ -0,0 +1,9 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% load rich_text %} + +{% block title %}{% trans "System message" %}{% endblock %} +{% block content %} +

{% trans "System message" %}

+ {{ global_settings.banner_message_detail|rich_text }} +{% endblock %} diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 77fc34053f..05407d9287 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -17,6 +17,7 @@ urlpatterns = [ url(r'^$', dashboards.user_index, name='index'), url(r'^global/settings/$', global_settings.GlobalSettingsView.as_view(), name='global.settings'), url(r'^global/update/$', global_settings.UpdateCheckView.as_view(), name='global.update'), + url(r'^global/message/$', global_settings.MessageView.as_view(), name='global.message'), url(r'^reauth/$', user.ReauthView.as_view(), name='user.reauth'), url(r'^users/$', users.UserListView.as_view(), name='users'), url(r'^users/select2$', typeahead.users_select2, name='users.select2'), diff --git a/src/pretix/control/views/global_settings.py b/src/pretix/control/views/global_settings.py index a143c241f4..9108cad51d 100644 --- a/src/pretix/control/views/global_settings.py +++ b/src/pretix/control/views/global_settings.py @@ -1,7 +1,7 @@ from django.contrib import messages from django.shortcuts import redirect, reverse from django.utils.translation import ugettext_lazy as _ -from django.views.generic import FormView +from django.views.generic import FormView, TemplateView from pretix.base.services.update_check import check_result_table, update_check from pretix.base.settings import GlobalSettingsObject @@ -56,3 +56,7 @@ class UpdateCheckView(AdministratorPermissionRequiredMixin, FormView): def get_success_url(self): return reverse('control:global.update') + + +class MessageView(TemplateView): + template_name = 'pretixcontrol/global_message.html'