Camp redirect has to account for an ongoing camp.

This commit is contained in:
Vidir Valberg Gudmundsson 2017-08-22 14:35:49 +02:00
parent 385e98d84f
commit dd9ef2380a

View file

@ -12,32 +12,42 @@ logger = logging.getLogger("bornhack.%s" % __name__)
class CampRedirectView(CampViewMixin, View): class CampRedirectView(CampViewMixin, View):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
# find the closest camp in the past now = timezone.now()
prevcamp = Camp.objects.filter(
camp__endswith__lt=timezone.now()
).order_by('-camp')[0]
# find the closest upcoming camp try:
nextcamp = Camp.objects.filter( camp = Camp.objects.get(
camp__startswith__gt=timezone.now() camp__contains=now
)
logger.debug("Redirecting to camp '%s' for page '%s' because it is now!" % (camp.slug, kwargs['page']))
except Camp.DoesNotExist:
# find the closest camp in the past
prevcamp = Camp.objects.filter(
camp__endswith__lt=now
).order_by('-camp')[0]
# find the closest upcoming camp
nextcamp = Camp.objects.filter(
camp__startswith__gt=now
).order_by('camp')[0] ).order_by('camp')[0]
# find the number of days between the two camps # find the number of days between the two camps
daysbetween = (nextcamp.camp.lower - prevcamp.camp.upper).days daysbetween = (nextcamp.camp.lower - prevcamp.camp.upper).days
# find the number of days since the last camp ended # find the number of days since the last camp ended
dayssinceprevcamp = (timezone.now() - prevcamp.camp.lower).days dayssinceprevcamp = (timezone.now() - prevcamp.camp.lower).days
# find the percentage of time passed # find the percentage of time passed
percentpassed = (dayssinceprevcamp / daysbetween) * 100 percentpassed = (dayssinceprevcamp / daysbetween) * 100
# do the redirect # do the redirect
if percentpassed > settings.CAMP_REDIRECT_PERCENT: if percentpassed > settings.CAMP_REDIRECT_PERCENT:
camp = nextcamp camp = nextcamp
else: else:
camp = prevcamp camp = prevcamp
logger.debug("Redirecting to camp '%s' for page '%s' because %s%% of the time between the camps passed" % (camp.slug, kwargs['page'], int(percentpassed)))
logger.debug("Redirecting to camp '%s' for page '%s' because %s%% of the time between the camps passed" % (camp.slug, kwargs['page'], int(percentpassed)))
return redirect(kwargs['page'], camp_slug=camp.slug) return redirect(kwargs['page'], camp_slug=camp.slug)