From ad8300665b981a5d5b2ebd16b02a8636e232c9b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 10 Dec 2017 15:40:28 +0100 Subject: [PATCH] show announcements on main page --- src/c3nav/site/models.py | 22 +++++++++++++++++++--- src/c3nav/site/views.py | 6 ++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/c3nav/site/models.py b/src/c3nav/site/models.py index fb6fd608..47dabc4a 100644 --- a/src/c3nav/site/models.py +++ b/src/c3nav/site/models.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.core.cache import cache from django.db import models from django.db.models import Q from django.utils import timezone @@ -22,8 +23,23 @@ class Announcement(models.Model): @classmethod def get_current(cls): + result = cache.get('site:announcement', None) + if result is not None: + return result + try: - return cls.objects.filter(Q(active=True) & (Q(active_until__isnull=True) | - Q(active_until__gt=timezone.now()))).latest() + result = cls.objects.filter(Q(active=True) & (Q(active_until__isnull=True) | + Q(active_until__gt=timezone.now()))).latest() except cls.DoesNotExist: - return None + result = None + + timeout = 300 + if result.active_until: + timeout = max(0, min(timeout, (result.active_until-timezone.now()).total_seconds())) + cache.set('site:announcement', result, timeout) + + return result + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + cache.delete('site:announcement') diff --git a/src/c3nav/site/views.py b/src/c3nav/site/views.py index a927dd1c..e156c964 100644 --- a/src/c3nav/site/views.py +++ b/src/c3nav/site/views.py @@ -25,6 +25,7 @@ from c3nav.mapdata.models.locations import LocationRedirect, SpecificLocation from c3nav.mapdata.utils.locations import get_location_by_slug_for_request, levels_by_short_label_for_request from c3nav.mapdata.utils.user import get_user_data from c3nav.mapdata.views import set_tile_access_cookie +from c3nav.site.models import Announcement def check_location(location: Optional[str], request) -> Optional[SpecificLocation]: @@ -89,6 +90,11 @@ def map_index(request, mode=None, slug=None, slug2=None, details=None, 'tile_cache_server': settings.TILE_CACHE_SERVER, 'embed': bool(embed), } + + announcement = Announcement.get_current() + if announcement: + messages.info(request, announcement.text) + response = render(request, 'site/map.html', ctx) set_tile_access_cookie(request, response) if embed: