added organizer color field

This commit is contained in:
Marvin Sipp
2017-07-30 18:05:22 +02:00
committed by Raphael Michel
parent 11d76656de
commit 28d074366e
5 changed files with 57 additions and 11 deletions

View File

@@ -11,23 +11,22 @@ from django.core.files.storage import default_storage
from django.dispatch import Signal
from django.templatetags.static import static as _static
from pretix.base.models import Event
from pretix.base.models import Event, Event_SettingsStore, Organizer
from pretix.base.services.async import ProfiledTask
from pretix.celery_app import app
from pretix.multidomain.urlreverse import get_domain
logger = logging.getLogger('pretix.presale.style')
affected_keys = ['primary_font', 'primary_color']
@app.task(base=ProfiledTask)
def regenerate_css(event_id: int):
event = Event.objects.select_related('organizer').get(pk=event_id)
def compile_scss(object):
sassdir = os.path.join(settings.STATIC_ROOT, 'pretixpresale/scss')
def static(path):
sp = _static(path)
if not settings.MEDIA_URL.startswith("/") and sp.startswith("/"):
domain = get_domain(event.organizer)
domain = get_domain(object.organizer if isinstance(object, Event) else object)
if domain:
siteurlsplit = urlsplit(settings.SITE_URL)
if siteurlsplit.port and siteurlsplit.port not in (80, 443):
@@ -38,15 +37,16 @@ def regenerate_css(event_id: int):
return '"{}"'.format(sp)
sassrules = []
if event.settings.get('primary_color'):
sassrules.append('$brand-primary: {};'.format(event.settings.get('primary_color')))
if object.settings.get('primary_color'):
sassrules.append('$brand-primary: {};'.format(object.settings.get('primary_color')))
font = event.settings.get('primary_font')
font = object.settings.get('primary_font')
if font != 'Open Sans':
sassrules.append(get_font_stylesheet(font))
sassrules.append('$font-family-sans-serif: "{}", "Open Sans", "OpenSans", "Helvetica Neue", Helvetica, Arial, sans-serif !default'.format(
font
))
sassrules.append(
'$font-family-sans-serif: "{}", "Open Sans", "OpenSans", "Helvetica Neue", Helvetica, Arial, sans-serif !default'.format(
font
))
sassrules.append('@import "main.scss";')
@@ -58,6 +58,14 @@ def regenerate_css(event_id: int):
custom_functions=cf
)
checksum = hashlib.sha1(css.encode('utf-8')).hexdigest()
return css, checksum
@app.task(base=ProfiledTask)
def regenerate_css(event_id: int):
event = Event.objects.select_related('organizer').get(pk=event_id)
css, checksum = compile_scss(event)
fname = '{}/{}/presale.{}.css'.format(
event.organizer.slug, event.slug, checksum[:16]
)
@@ -68,6 +76,28 @@ def regenerate_css(event_id: int):
event.settings.set('presale_css_checksum', checksum)
@app.task(base=ProfiledTask)
def regenerate_organizer_css(organizer_id: int):
organizer = Organizer.objects.get(pk=organizer_id)
css, checksum = compile_scss(organizer)
fname = '{}/presale.{}.css'.format(
organizer.slug, checksum[:16]
)
if organizer.settings.get('presale_css_checksum', '') != checksum:
newname = default_storage.save(fname, ContentFile(css.encode('utf-8')))
organizer.settings.set('presale_css_file', newname)
organizer.settings.set('presale_css_checksum', checksum)
non_inherited_events = set(Event_SettingsStore.objects.filter(
event__organizer=organizer, key__in=affected_keys
).values_list('event_id', flat=True))
for event in organizer.events.all():
if event.pk not in non_inherited_events:
regenerate_css.apply_async(args=(event.pk,))
register_fonts = Signal()
"""
Return a dictionaries of the following structure. Paths should be relative to static root.