Added custom logo support

This commit is contained in:
Raphael Michel
2016-07-29 20:53:19 +02:00
parent d32c1bd9c8
commit 4ab819aeed
8 changed files with 37 additions and 5 deletions

View File

@@ -217,6 +217,10 @@ Your {event} team"""))
'default': None,
'type': str
},
'logo_image': {
'default': None,
'type': File
},
}

View File

@@ -8,6 +8,7 @@ from pytz import common_timezones
from pretix.base.forms import I18nModelForm, SettingsForm
from pretix.base.i18n import I18nFormField, I18nTextarea
from pretix.base.models import Event
from pretix.control.forms import ExtFileField
class EventCreateForm(I18nModelForm):
@@ -359,6 +360,13 @@ class DisplaySettingsForm(SettingsForm):
message=_('Please enter the hexadecimal code of a color, e.g. #990000.'))
]
)
logo_image = ExtFileField(
label=_('Logo image'),
ext_whitelist=(".png", ".jpg", ".svg", ".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.')
)
class TicketSettingsForm(SettingsForm):

View File

@@ -8,6 +8,7 @@
<fieldset>
<legend>{% trans "Display settings" %}</legend>
{% bootstrap_field form.primary_color layout="horizontal" %}
{% bootstrap_field form.logo_image layout="horizontal" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -242,7 +242,10 @@ class EventSettingsFormView(EventPermissionRequiredMixin, FormView):
if form.has_changed():
self.request.event.log_action(
'pretix.event.settings', user=self.request.user, data={
k: form.cleaned_data.get(k) for k in form.changed_data
k: (form.cleaned_data.get(k).name
if isinstance(form.cleaned_data.get(k), File)
else form.cleaned_data.get(k))
for k in form.changed_data
}
)
messages.success(self.request, _('Your changes have been saved.'))
@@ -284,7 +287,10 @@ class DisplaySettings(EventSettingsFormView):
if form.has_changed():
self.request.event.log_action(
'pretix.event.settings', user=self.request.user, data={
k: form.cleaned_data.get(k) for k in form.changed_data
k: (form.cleaned_data.get(k).name
if isinstance(form.cleaned_data.get(k), File)
else form.cleaned_data.get(k))
for k in form.changed_data
}
)
regenerate_css(self.request.event.pk)

View File

@@ -29,6 +29,7 @@ def contextprocessor(request):
if request.event.settings.presale_css_file:
ctx['css_file'] = default_storage.url(request.event.settings.presale_css_file)
ctx['event_logo'] = request.event.settings.get('logo_image', as_type=str, default='')[7:]
ctx['html_head'] = "".join(_html_head)
ctx['footer'] = _footer

View File

@@ -1,6 +1,7 @@
{% extends "pretixpresale/base.html" %}
{% load i18n %}
{% load staticfiles %}
{% load thumbnail %}
{% load eventurl %}
{% block thetitle %}
{% block title %}{% endblock %}{% if url_name != "event.index" %} :: {% endif %}{{ event.name }}
@@ -21,9 +22,15 @@
{% block page %}
<div class="page-header">
<h1 class="pull-left">
<a href="{% eventurl event "presale:event.index" %}">{{ event.name }}</a>
<small>{{ event.date_from|date:"DATE_FORMAT" }}{% if event.settings.show_date_to %}
{{ event.date_to|date:"DATE_FORMAT" }}{% endif %}</small>
{% if event_logo %}
<a href="{% eventurl event "presale:event.index" %}" title="{{ event.name }}">
<img src="{{ event_logo|thumbnail_url:'logo' }}" alt="{{ event.name }}" class="event-logo" />
</a>
{% else %}
<a href="{% eventurl event "presale:event.index" %}">{{ event.name }}</a>
<small>{{ event.date_from|date:"DATE_FORMAT" }}{% if event.settings.show_date_to %}
{{ event.date_to|date:"DATE_FORMAT" }}{% endif %}</small>
{% endif %}
</h1>
<div class="pull-right loginbox">
{% if request.event.settings.locales|length > 1 %}

View File

@@ -325,6 +325,7 @@ MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
THUMBNAIL_ALIASES = {
'': {
'productlist': {'size': (60, 60), 'crop': True},
'logo': {'size': (5000, 120), 'crop': False},
},
}

View File

@@ -21,6 +21,10 @@ footer {
.loginbox {
padding-top: 15px;
}
.event-logo {
max-width: 100%;
height: auto;
}
}
.js-only {
display: none;