2017-08-20 00:39:19 +02:00
|
|
|
from datetime import timedelta, date
|
2017-08-19 01:32:26 +02:00
|
|
|
from django import template
|
|
|
|
from django.conf import settings
|
2017-08-20 00:39:19 +02:00
|
|
|
from django.utils import timezone
|
2017-08-26 18:05:20 +02:00
|
|
|
import locale
|
2017-08-20 00:39:19 +02:00
|
|
|
|
2018-01-28 23:44:48 +01:00
|
|
|
from django.utils.translation import ugettext as _
|
|
|
|
|
|
|
|
from ..models import COFActuPage, COFUtilPage
|
2017-08-19 01:32:26 +02:00
|
|
|
|
|
|
|
import re
|
|
|
|
|
|
|
|
register = template.Library()
|
|
|
|
|
|
|
|
@register.filter()
|
|
|
|
def obfuscate_mail(value):
|
2017-08-22 00:58:18 +02:00
|
|
|
val = value.replace('', '-').replace('@', 'arbre').replace('.', 'pont')[1:]
|
2017-08-19 01:32:26 +02:00
|
|
|
return val
|
2017-08-20 00:39:19 +02:00
|
|
|
|
2018-01-28 23:44:48 +01:00
|
|
|
@register.inclusion_tag("cofcms/calendar.html", takes_context=True)
|
|
|
|
def calendar(context, month=None, year=None):
|
2017-08-20 00:39:19 +02:00
|
|
|
now = timezone.now()
|
2018-01-28 23:44:48 +01:00
|
|
|
if month is None:
|
|
|
|
month_start = date(now.year, now.month, 1)
|
|
|
|
else:
|
|
|
|
month_start = date(year, month, 1)
|
2017-08-20 00:39:19 +02:00
|
|
|
next_month = month_start + timedelta(days=32)
|
|
|
|
next_month = date(next_month.year, next_month.month, 1)
|
2018-01-28 23:44:48 +01:00
|
|
|
prev_month = month_start - timedelta(days=2)
|
2017-08-22 00:58:18 +02:00
|
|
|
month_prestart = month_start - timedelta(days=month_start.weekday())
|
2017-08-20 00:39:19 +02:00
|
|
|
month_postend = next_month + timedelta(days=(next_month.weekday()+6)%7)
|
2018-01-22 21:24:20 +01:00
|
|
|
events = COFActuPage.objects.live()\
|
|
|
|
.filter(date_start__range=[month_prestart,
|
2018-01-28 23:44:48 +01:00
|
|
|
month_postend],
|
|
|
|
is_event=True)\
|
2018-01-22 21:24:20 +01:00
|
|
|
.order_by('-date_start')
|
2017-08-20 00:39:19 +02:00
|
|
|
events = list(events)
|
|
|
|
weeks = []
|
|
|
|
curday = month_prestart
|
|
|
|
deltaday = timedelta(days=1)
|
|
|
|
while curday < next_month and len(weeks)<10:
|
|
|
|
week = []
|
|
|
|
for k in range(7):
|
|
|
|
curevents = []
|
|
|
|
for k in range(len(events)-1, -1, -1):
|
|
|
|
e = events[k]
|
|
|
|
if e.date_start.date() > curday: break
|
|
|
|
if (e.date_start if e.date_end is None else e.date_end).date() < curday:
|
|
|
|
del events[k]
|
|
|
|
else:
|
|
|
|
curevents.append(e)
|
|
|
|
day = {'day': curday.day,
|
2018-01-28 23:44:48 +01:00
|
|
|
'date': curday,
|
2017-08-20 00:39:19 +02:00
|
|
|
'class': (('today ' if (curday.day == now.day
|
2018-01-28 23:44:48 +01:00
|
|
|
and curday.month == now.month
|
|
|
|
and curday.year == now.year) else '')
|
|
|
|
+ ('in ' if (curday.month == month_start.month
|
|
|
|
and curday.year == month_start.year)
|
|
|
|
else 'out ')
|
2017-08-26 18:05:20 +02:00
|
|
|
+ ('hasevent' if len(curevents) > 0 else '')),
|
2017-08-20 00:39:19 +02:00
|
|
|
'events': curevents}
|
|
|
|
week.append(day)
|
|
|
|
curday += deltaday
|
|
|
|
weeks.append(week)
|
2017-08-22 00:58:18 +02:00
|
|
|
|
2018-01-28 23:44:48 +01:00
|
|
|
|
|
|
|
# Calendar next/prev urls
|
2017-08-26 18:05:20 +02:00
|
|
|
try:
|
2018-01-28 23:44:48 +01:00
|
|
|
utilpage = COFUtilPage.objects.live()[0]
|
|
|
|
except COFUtilPage.DoesNotExist:
|
|
|
|
utilpage = None
|
|
|
|
request = context['request']
|
|
|
|
burl = utilpage.debugged_get_url(request) + "/"
|
|
|
|
prev_url = burl + utilpage.reverse_subpage("calendar",
|
|
|
|
args=["%d" % (prev_month.year,),
|
|
|
|
"%d" % (prev_month.month,)])
|
|
|
|
next_url = burl + utilpage.reverse_subpage("calendar",
|
|
|
|
args=["%d" % (next_month.year,),
|
|
|
|
"%d" % (next_month.month,)])
|
|
|
|
context.push({"events": events, "weeks": weeks, "this_month": month_start,
|
|
|
|
"prev_month": prev_url, "next_month": next_url})
|
|
|
|
return context
|
|
|
|
|
|
|
|
@register.inclusion_tag("cofcms/mini_calendar.html")
|
|
|
|
def mini_calendar(event):
|
2017-08-22 00:58:18 +02:00
|
|
|
days = []
|
|
|
|
today = timezone.now().date()
|
|
|
|
date_start = event.date_start.date()
|
|
|
|
date_end = event.date_end.date() if event.date_end else date_start
|
|
|
|
week_start = date_start - timedelta(days=date_start.weekday())
|
|
|
|
curday = week_start
|
|
|
|
for i in range(7):
|
|
|
|
days.append({'day': curday.day,
|
|
|
|
'hasevent': curday >= date_start and curday <= date_end,
|
|
|
|
'today': curday == today})
|
|
|
|
curday += timedelta(days=1)
|
|
|
|
return {"days": days}
|
2018-01-28 23:44:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
@register.filter()
|
|
|
|
def dates(event, loc=None):
|
|
|
|
try:
|
|
|
|
if loc == "fr":
|
|
|
|
locale.setlocale(locale.LC_TIME, "fr_FR.UTF-8")
|
|
|
|
else:
|
|
|
|
locale.setlocale(locale.LC_TIME, "en_US.UTF-8")
|
|
|
|
except locale.Error as e:
|
|
|
|
pass
|
|
|
|
if event.date_end:
|
|
|
|
if event.date_end.date() == event.date_start.date():
|
|
|
|
if event.all_day:
|
|
|
|
return event.date_start.strftime(_("le %A %d %B %Y"))
|
|
|
|
else:
|
|
|
|
return _("le %s de %s à %s") % \
|
|
|
|
(event.date_start.strftime("%A %d %B %Y"),
|
|
|
|
event.date_start.strftime(_("%Hh%M")),
|
|
|
|
event.date_end.strftime(_("%Hh%M")))
|
|
|
|
else:
|
|
|
|
tmpl = "%A %d %B %Y"
|
|
|
|
diff_i = len(tmpl)
|
|
|
|
if event.date_end.year != event.date_start.year:
|
|
|
|
diff_i = len(tmpl)
|
|
|
|
elif event.date_end.month != event.date_start.month:
|
|
|
|
diff_i = len(tmpl) - 3
|
|
|
|
elif event.date_end.day != event.date_start.day:
|
|
|
|
diff_i = len(tmpl) - 6
|
|
|
|
common = tmpl[diff_i:]
|
|
|
|
diff = tmpl[:diff_i]
|
|
|
|
if event.all_day:
|
|
|
|
return _("du %s au %s %s") % \
|
|
|
|
(event.date_start.strftime(diff),
|
|
|
|
event.date_end.strftime(diff),
|
|
|
|
event.date_end.strftime(common))
|
|
|
|
else:
|
|
|
|
return _("du %s %s à %s au %s à %s") % \
|
|
|
|
(event.date_start.strftime(diff),
|
|
|
|
event.date_start.strftime(common),
|
|
|
|
event.date_start.strftime("%Hh%M"),
|
|
|
|
event.date_end.strftime(diff),
|
|
|
|
event.date_end.strftime("%Hh%M"))
|
|
|
|
else:
|
|
|
|
if event.all_day:
|
|
|
|
return event.date_start.strftime(_("le %A %d %B %Y"))
|
|
|
|
else:
|
|
|
|
return event.date_start.strftime(_("le %A %d %B %Y à %Hh%M"))
|