show announcements on main page
This commit is contained in:
parent
6adaf4ab40
commit
ad8300665b
2 changed files with 25 additions and 3 deletions
|
@ -1,4 +1,5 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.cache import cache
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -22,8 +23,23 @@ class Announcement(models.Model):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_current(cls):
|
def get_current(cls):
|
||||||
|
result = cache.get('site:announcement', None)
|
||||||
|
if result is not None:
|
||||||
|
return result
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return cls.objects.filter(Q(active=True) & (Q(active_until__isnull=True) |
|
result = cls.objects.filter(Q(active=True) & (Q(active_until__isnull=True) |
|
||||||
Q(active_until__gt=timezone.now()))).latest()
|
Q(active_until__gt=timezone.now()))).latest()
|
||||||
except cls.DoesNotExist:
|
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')
|
||||||
|
|
|
@ -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.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.utils.user import get_user_data
|
||||||
from c3nav.mapdata.views import set_tile_access_cookie
|
from c3nav.mapdata.views import set_tile_access_cookie
|
||||||
|
from c3nav.site.models import Announcement
|
||||||
|
|
||||||
|
|
||||||
def check_location(location: Optional[str], request) -> Optional[SpecificLocation]:
|
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,
|
'tile_cache_server': settings.TILE_CACHE_SERVER,
|
||||||
'embed': bool(embed),
|
'embed': bool(embed),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
announcement = Announcement.get_current()
|
||||||
|
if announcement:
|
||||||
|
messages.info(request, announcement.text)
|
||||||
|
|
||||||
response = render(request, 'site/map.html', ctx)
|
response = render(request, 'site/map.html', ctx)
|
||||||
set_tile_access_cookie(request, response)
|
set_tile_access_cookie(request, response)
|
||||||
if embed:
|
if embed:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue