Merge branch 'url-cats'
This commit is contained in:
commit
71cfe1b130
@ -30,7 +30,7 @@ from src.agenda_culturel.import_tasks.extractor_facebook import *
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
u2e = URL2Events(ChromiumHeadlessDownloader(), FacebookEventExtractor())
|
u2e = URL2Events(ChromiumHeadlessDownloader(), FacebookEventExtractor())
|
||||||
url="https://www.facebook.com/events/s/tour-du-sud-invite-koum/430014373384441/"
|
url="https://www.facebook.com/events/3575802569389184/3575802576055850/?active_tab=about"
|
||||||
|
|
||||||
events = u2e.process(url, cache = "fb.html", published = True)
|
events = u2e.process(url, cache = "fb.html", published = True)
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ from django import forms
|
|||||||
from django.contrib.postgres.search import SearchQuery, SearchHeadline
|
from django.contrib.postgres.search import SearchQuery, SearchHeadline
|
||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
from urllib.parse import urlparse, parse_qs, urlencode
|
||||||
|
|
||||||
from django.http import QueryDict
|
from django.http import QueryDict
|
||||||
from django.contrib.gis.measure import D
|
from django.contrib.gis.measure import D
|
||||||
@ -98,15 +98,6 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
method="filter_recurrences",
|
method="filter_recurrences",
|
||||||
)
|
)
|
||||||
|
|
||||||
category = django_filters.ModelMultipleChoiceFilter(
|
|
||||||
label="Filtrer par catégories",
|
|
||||||
field_name="category__id",
|
|
||||||
to_field_name="id",
|
|
||||||
queryset=Category.objects.all(),
|
|
||||||
widget=MultipleHiddenInput,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
status = django_filters.MultipleChoiceFilter(
|
status = django_filters.MultipleChoiceFilter(
|
||||||
label="Filtrer par status",
|
label="Filtrer par status",
|
||||||
choices=Event.STATUS.choices,
|
choices=Event.STATUS.choices,
|
||||||
@ -116,7 +107,7 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Event
|
model = Event
|
||||||
fields = ["category", "tags", "exclude_tags", "status", "recurrences"]
|
fields = ["tags", "exclude_tags", "status", "recurrences"]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
@ -125,6 +116,28 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
self.form.fields["exclude_tags"].choices = Tag.get_tag_groups(exclude=True, nb_suggestions=0)
|
self.form.fields["exclude_tags"].choices = Tag.get_tag_groups(exclude=True, nb_suggestions=0)
|
||||||
self.form.fields["tags"].choices = Tag.get_tag_groups(include=True)
|
self.form.fields["tags"].choices = Tag.get_tag_groups(include=True)
|
||||||
|
|
||||||
|
def has_category_parameters(self):
|
||||||
|
url = self.request.get_full_path()
|
||||||
|
return "category=" in url and not url.startswith("/cat:")
|
||||||
|
|
||||||
|
def get_new_url(self):
|
||||||
|
url = self.request.get_full_path()
|
||||||
|
if url.startswith("/cat:"):
|
||||||
|
return url
|
||||||
|
else:
|
||||||
|
parsed_url = urlparse(url)
|
||||||
|
params = parse_qs(parsed_url.query)
|
||||||
|
if len(params['category']) == 0:
|
||||||
|
return url
|
||||||
|
else:
|
||||||
|
category = Category.objects.filter(pk=params['category'][0]).first()
|
||||||
|
del params["category"]
|
||||||
|
url = parsed_url._replace(query=urlencode(params, doseq=True)).geturl()
|
||||||
|
if category is None:
|
||||||
|
return url
|
||||||
|
else:
|
||||||
|
return "/cat:" + category.slug + url
|
||||||
|
|
||||||
def filter_recurrences(self, queryset, name, value):
|
def filter_recurrences(self, queryset, name, value):
|
||||||
# construct the full lookup expression
|
# construct the full lookup expression
|
||||||
lookup = "__".join([name, "isnull"])
|
lookup = "__".join([name, "isnull"])
|
||||||
@ -153,6 +166,20 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
return parent.exclude(exact_location=False).filter(exact_location__location__distance_lt=(p, D(km=d)))
|
return parent.exclude(exact_location=False).filter(exact_location__location__distance_lt=(p, D(km=d)))
|
||||||
|
|
||||||
|
def has_location(self):
|
||||||
|
d = self.get_cleaned_data("radius")
|
||||||
|
p = self.get_cleaned_data("position")
|
||||||
|
if not isinstance(d, str) or not isinstance(p, ReferenceLocation):
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
d = float(d)
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
if d <= 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def get_url(self):
|
def get_url(self):
|
||||||
if isinstance(self.form.data, QueryDict):
|
if isinstance(self.form.data, QueryDict):
|
||||||
return self.form.data.urlencode()
|
return self.form.data.urlencode()
|
||||||
@ -162,43 +189,8 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
def get_full_url(self):
|
def get_full_url(self):
|
||||||
return self.request.get_full_path()
|
return self.request.get_full_path()
|
||||||
|
|
||||||
def get_url_remove_categories(self, catpks, full_path = None):
|
def get_url_without_filters(self):
|
||||||
if full_path is None:
|
return self.request.get_full_path().split("?")[0]
|
||||||
full_path = self.request.get_full_path()
|
|
||||||
|
|
||||||
result = full_path
|
|
||||||
for catpk in catpks:
|
|
||||||
result = result.replace('category=' + str(catpk), '')
|
|
||||||
result = result.replace('?&', '?')
|
|
||||||
result = result.replace('&&', '&')
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_url_add_categories(self, catpks, full_path = None):
|
|
||||||
if full_path is None:
|
|
||||||
full_path = self.request.get_full_path()
|
|
||||||
|
|
||||||
result = full_path
|
|
||||||
for catpk in catpks:
|
|
||||||
result = result + ('&' if '?' in full_path else '?') + 'category=' + str(catpk)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_url_without_filters_only_cats(self):
|
|
||||||
return self.get_url_without_filters(True)
|
|
||||||
|
|
||||||
|
|
||||||
def get_url_without_filters(self, only_categories=False):
|
|
||||||
|
|
||||||
if only_categories:
|
|
||||||
# on repart d'une url sans option
|
|
||||||
result = self.request.get_full_path().split("?")[0]
|
|
||||||
# on ajoute toutes les catégories
|
|
||||||
result = self.get_url_add_categories([c.pk for c in self.get_categories()], result)
|
|
||||||
else:
|
|
||||||
# on supprime toutes les catégories
|
|
||||||
result = self.get_url_remove_categories([c.pk for c in self.get_categories()])
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def get_cleaned_data(self, name):
|
def get_cleaned_data(self, name):
|
||||||
|
|
||||||
@ -209,12 +201,6 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def get_categories(self):
|
|
||||||
return self.get_cleaned_data("category")
|
|
||||||
|
|
||||||
def has_category(self):
|
|
||||||
return "category" in self.form.cleaned_data and len(self.get_cleaned_data("category")) > 0
|
|
||||||
|
|
||||||
def get_tags(self):
|
def get_tags(self):
|
||||||
return self.get_cleaned_data("tags")
|
return self.get_cleaned_data("tags")
|
||||||
|
|
||||||
@ -232,7 +218,7 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
def to_str(self, prefix=''):
|
def to_str(self, prefix=''):
|
||||||
self.form.full_clean()
|
self.form.full_clean()
|
||||||
result = ' '.join([c.name for c in self.get_categories()] + [t for t in self.get_tags()] + ["~" + t for t in self.get_exclude_tags()] + [str(self.get_position()), str(self.get_radius())])
|
result = ' '.join([t for t in self.get_tags()] + ["~" + t for t in self.get_exclude_tags()] + [str(self.get_position()), str(self.get_radius())])
|
||||||
if len(result) > 0:
|
if len(result) > 0:
|
||||||
result = prefix + result
|
result = prefix + result
|
||||||
return result
|
return result
|
||||||
@ -256,29 +242,25 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
else:
|
else:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def is_resetable(self):
|
||||||
def is_resetable(self, only_categories=False):
|
if self.request.user.is_authenticated:
|
||||||
if only_categories:
|
if (
|
||||||
return len(self.get_cleaned_data("category")) != 0
|
len(self.get_cleaned_data("status")) != 1
|
||||||
|
or
|
||||||
|
self.get_cleaned_data("status")[0] != Event.STATUS.PUBLISHED
|
||||||
|
):
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
if self.request.user.is_authenticated:
|
if (
|
||||||
if (
|
len(self.get_cleaned_data("status")) != 0
|
||||||
len(self.get_cleaned_data("status")) != 1
|
):
|
||||||
or
|
return True
|
||||||
self.get_cleaned_data("status")[0] != Event.STATUS.PUBLISHED
|
return (
|
||||||
):
|
len(self.get_cleaned_data("tags")) != 0
|
||||||
return True
|
or len(self.get_cleaned_data("exclude_tags")) != 0
|
||||||
else:
|
or len(self.get_cleaned_data("recurrences")) != 0
|
||||||
if (
|
or ((not self.get_cleaned_data("position") is None) and (not self.get_cleaned_data("radius") is None))
|
||||||
len(self.get_cleaned_data("status")) != 0
|
)
|
||||||
):
|
|
||||||
return True
|
|
||||||
return (
|
|
||||||
len(self.get_cleaned_data("tags")) != 0
|
|
||||||
or len(self.get_cleaned_data("exclude_tags")) != 0
|
|
||||||
or len(self.get_cleaned_data("recurrences")) != 0
|
|
||||||
or ((not self.get_cleaned_data("position") is None) and (not self.get_cleaned_data("radius") is None))
|
|
||||||
)
|
|
||||||
|
|
||||||
def is_active(self, only_categories=False):
|
def is_active(self, only_categories=False):
|
||||||
if only_categories:
|
if only_categories:
|
||||||
@ -292,9 +274,6 @@ class EventFilter(django_filters.FilterSet):
|
|||||||
or ((not self.get_cleaned_data("position") is None) and (not self.get_cleaned_data("radius") is None))
|
or ((not self.get_cleaned_data("position") is None) and (not self.get_cleaned_data("radius") is None))
|
||||||
)
|
)
|
||||||
|
|
||||||
def is_selected(self, cat):
|
|
||||||
return "category" in self.form.cleaned_data and cat in self.form.cleaned_data["category"]
|
|
||||||
|
|
||||||
def is_selected_tag(self, tag):
|
def is_selected_tag(self, tag):
|
||||||
return "tags" in self.form.cleaned_data and tag in self.form.cleaned_data["tags"]
|
return "tags" in self.form.cleaned_data and tag in self.form.cleaned_data["tags"]
|
||||||
|
|
||||||
|
32
src/agenda_culturel/migrations/0137_category_slug.py
Normal file
32
src/agenda_culturel/migrations/0137_category_slug.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Generated by Django 4.2.9 on 2025-01-24 17:48
|
||||||
|
|
||||||
|
import autoslug.fields
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
def migrate_data_forward(apps, schema_editor):
|
||||||
|
Category = apps.get_model("agenda_culturel", "Category")
|
||||||
|
|
||||||
|
for instance in Category.objects.all():
|
||||||
|
print("Generating slug for %s"%instance)
|
||||||
|
instance.save() # Will trigger slug update
|
||||||
|
|
||||||
|
def migrate_data_backward(apps, schema_editor):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('agenda_culturel', '0136_alter_recurrentimport_processor'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='category',
|
||||||
|
name='slug',
|
||||||
|
field=autoslug.fields.AutoSlugField(default=None, editable=False, null=True, populate_from='name', unique=True),
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
migrate_data_forward,
|
||||||
|
migrate_data_backward,
|
||||||
|
),
|
||||||
|
]
|
@ -17,7 +17,7 @@ from django.core.files.storage import default_storage
|
|||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from autoslug import AutoSlugField
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -114,6 +114,8 @@ class Category(models.Model):
|
|||||||
verbose_name=_("Name"), help_text=_("Category name"), max_length=512
|
verbose_name=_("Name"), help_text=_("Category name"), max_length=512
|
||||||
)
|
)
|
||||||
|
|
||||||
|
slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name')
|
||||||
|
|
||||||
color = ColorField(
|
color = ColorField(
|
||||||
verbose_name=_("Color"),
|
verbose_name=_("Color"),
|
||||||
help_text=_("Color used as background for the category"),
|
help_text=_("Color used as background for the category"),
|
||||||
@ -176,7 +178,7 @@ class Category(models.Model):
|
|||||||
return "cat-" + str(self.id)
|
return "cat-" + str(self.id)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('home') + '?catgory=' + str(self.pk)
|
return reverse('home_category', kwargs={"cat": self.slug})
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -139,7 +139,7 @@ details[role="list"] summary + ul li.selected>a:hover {
|
|||||||
padding: 0.1em .2em;
|
padding: 0.1em .2em;
|
||||||
.titre {
|
.titre {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-right: .4em;
|
margin-right: .2em;
|
||||||
}
|
}
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: .1em 0;
|
margin: .1em 0;
|
||||||
@ -148,6 +148,12 @@ details[role="list"] summary + ul li.selected>a:hover {
|
|||||||
background: none;
|
background: none;
|
||||||
padding: 0.1em 0;
|
padding: 0.1em 0;
|
||||||
}
|
}
|
||||||
|
.developpe {
|
||||||
|
svg {
|
||||||
|
margin-right: .5em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.suggestions {
|
.suggestions {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<div>
|
<div>
|
||||||
<div class="categories">
|
<div class="categories">
|
||||||
{% show_legend filter=filter %}
|
{% show_legend category=category filter=filter %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filtres">
|
<div class="filtres">
|
||||||
@ -34,7 +34,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if filter.is_resetable %}
|
{% if filter.is_resetable %}
|
||||||
<a class="contrast simple-button" href="{{ filter.get_url_without_filters_only_cats }}" data-tooltip="Supprimer les filtres">{% picto_from_name "x-circle" %}</a>
|
<a class="contrast simple-button" href="{{ filter.get_url_without_filters }}" data-tooltip="Supprimer les filtres">{% picto_from_name "x-circle" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</summary>
|
</summary>
|
||||||
|
@ -14,10 +14,13 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block title %}{% block og_title %}
|
{% block title %}{% block og_title %}
|
||||||
|
{% if category %}{{ category.name }} en{% endif %}
|
||||||
{{ calendar.firstdate | date:"F o" }}
|
{{ calendar.firstdate | date:"F o" }}
|
||||||
{% endblock %}{% endblock %}
|
{% endblock %}{% endblock %}
|
||||||
|
|
||||||
{% block ce_mois_ci_parameters %}{% block cette_semaine_parameters %}{% block a_venir_parameters %}?{{ filter.get_url }}{% endblock %}{% endblock %}{% endblock %}
|
{% block navigation-menu %}
|
||||||
|
{% navigation_links filter category %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@ -26,16 +29,20 @@
|
|||||||
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=0 %}
|
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=0 %}
|
||||||
|
|
||||||
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
||||||
{% cache cache_timeout month user.is_authenticated calendar.firstdate filter.get_url %}
|
{% cache cache_timeout month user.is_authenticated calendar.firstdate category filter.get_url %}
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
<div class="title small"><h1>{{ calendar.firstdate | date:"F o" }}</h1></div>
|
<div class="title small"><h1>{% if category %}{{ category.name }} en {% endif %}{{ calendar.firstdate | date:"F o" }}{% if filter.has_location %} à {{ filter.get_position }}{% endif %}</h1></div>
|
||||||
<div class="navigation">
|
<div class="navigation">
|
||||||
<div>
|
<div>
|
||||||
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
||||||
{% if calendar.lastdate|not_after_last %}
|
{% if calendar.lastdate|not_after_last %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">
|
<a role="button" href="{% url 'month_view' calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">
|
||||||
|
{% endif %}
|
||||||
{% picto_from_name "chevron-left" %} précédent</a>
|
{% picto_from_name "chevron-left" %} précédent</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -43,7 +50,11 @@
|
|||||||
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
||||||
{% if calendar.lastdate|not_before_first %}
|
{% if calendar.lastdate|not_before_first %}
|
||||||
<div class="right">
|
<div class="right">
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">suivant
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">suivant
|
<a role="button" href="{% url 'month_view' calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">suivant
|
||||||
|
{% endif %}
|
||||||
{% picto_from_name "chevron-right" %}
|
{% picto_from_name "chevron-right" %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -55,15 +66,23 @@
|
|||||||
<div class="slider-button slider-button-inside button-left hidden">{% picto_from_name "arrow-left" %}</div>
|
<div class="slider-button slider-button-inside button-left hidden">{% picto_from_name "arrow-left" %}</div>
|
||||||
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
||||||
{% if calendar.lastdate|not_after_last %}
|
{% if calendar.lastdate|not_after_last %}
|
||||||
|
{% if category %}
|
||||||
|
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'month_view_category' category.slug calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
||||||
|
{% else %}
|
||||||
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'month_view' calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'month_view' calendar.previous_month.year calendar.previous_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="grid week-in-month">
|
<div class="grid week-in-month">
|
||||||
{% for day in calendar.calendar_days_list %}
|
{% for day in calendar.calendar_days_list %}
|
||||||
{% if forloop.counter0|divisibleby:7 %}
|
{% if forloop.counter0|divisibleby:7 %}
|
||||||
{% if not forloop.first %}</div><div class="grid week-in-month">{% endif %}
|
{% if not forloop.first %}</div><div class="grid week-in-month">{% endif %}
|
||||||
<div id="week-{{ day.date.isocalendar.1 }}" class="entete-semaine"><h2><a href="{% url 'week_view' calendar.year day.week %}?{{ filter.get_url }}">Semaine {{ d.week }}</a></h2></div>
|
{% if category %}
|
||||||
|
<div id="week-{{ day.date.isocalendar.1 }}" class="entete-semaine"><h2><a href="{% url 'week_view_category' category.slug calendar.year day.week %}?{{ filter.get_url }}">Semaine {{ d.week }}</a></h2></div>
|
||||||
|
{% else %}
|
||||||
|
<div id="week-{{ day.date.isocalendar.1 }}" class="entete-semaine"><h2><a href="{% url 'week_view' calendar.year day.week %}?{{ filter.get_url }}">Semaine {{ d.week }}</a></h2></div>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
@ -84,13 +103,13 @@
|
|||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<header{% if day.is_today %} id="today"{% endif %}>
|
<header{% if day.is_today %} id="today"{% endif %}>
|
||||||
<h3><a href="{{ day.date | url_day }}?{{ filter.get_url }}" class="visible-link">{{ day.date | date:"l j" }}</a></h3}>
|
<h3><a href="{{ day.date | url_day:category }}?{{ filter.get_url }}" class="visible-link">{{ day.date | date:"l j" }}</a></h3}>
|
||||||
</header>
|
</header>
|
||||||
{% if day.events %}
|
{% if day.events %}
|
||||||
<ul>
|
<ul>
|
||||||
{% for category, events in day.events_by_category_ordered %}
|
{% for category_group, events in day.events_by_category_ordered %}
|
||||||
<li>{{ events.0.category | circle_cat }}
|
<li>{{ events.0.category | circle_cat }}
|
||||||
<a href="{{ day.date | url_day }}?{{ filter.get_url|add_url_category:events.0.category }}" data-target="{{ daytag }}-category-{{ events.0.category.pk }}" onClick="toggleModal(event)">{{ events | length }} {{ category }}</a></li>
|
<a href="{{ day.date | url_day:category }}?{{ filter.get_url|add_url_category:events.0.category }}" data-target="{{ daytag }}-category-{{ events.0.category.pk }}" onClick="toggleModal(event)">{{ events | length }} {{ category_group }}</a></li>
|
||||||
<dialog id="{{ daytag }}-category-{{ events.0.category.pk }}">
|
<dialog id="{{ daytag }}-category-{{ events.0.category.pk }}">
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
@ -113,7 +132,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<footer>
|
<footer>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<a href="{{ day.date | url_day }}?{{ filter.get_url }}" role="button">Voir la journée <svg width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
<a href="{{ day.date | url_day:category }}?{{ filter.get_url }}" role="button">Voir la journée <svg width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
<use href="{% static 'images/feather-sprite.svg' %}#chevron-right" />
|
<use href="{% static 'images/feather-sprite.svg' %}#chevron-right" />
|
||||||
</svg></a>
|
</svg></a>
|
||||||
</div>
|
</div>
|
||||||
@ -121,7 +140,7 @@
|
|||||||
</article>
|
</article>
|
||||||
</dialog>
|
</dialog>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<li class="detail-link"><a href="{{ day.date | url_day }}?{{ filter.get_url }}" class="visible-link">voir en détail {% picto_from_name "chevrons-right" %}</a></li>
|
<li class="detail-link"><a href="{{ day.date | url_day:category }}?{{ filter.get_url }}" class="visible-link">voir en détail {% picto_from_name "chevrons-right" %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
@ -134,19 +153,31 @@
|
|||||||
</div>
|
</div>
|
||||||
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
||||||
{% if calendar.lastdate|not_before_first %}
|
{% if calendar.lastdate|not_before_first %}
|
||||||
|
{% if category %}
|
||||||
|
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'month_view_category' category.slug calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
||||||
|
{% else %}
|
||||||
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'month_view' calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'month_view' calendar.next_month.year calendar.next_month.month %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
<div class="slider-button slider-button-inside button-right hidden">{% picto_from_name "arrow-right" %}</div>
|
<div class="slider-button slider-button-inside button-right hidden">{% picto_from_name "arrow-right" %}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
{% if category %}
|
||||||
|
{% if calendar.today_in_calendar %}
|
||||||
|
<a role="button" href="{% url 'aujourdhui_category' category.slug %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
|
<a role="button" href="{% url 'cette_semaine_category' category.slug %}?{{ filter.get_url }}">Cette semaine</a>
|
||||||
|
{% endif %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical_category' category.slug %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
|
{% else %}
|
||||||
{% if calendar.today_in_calendar %}
|
{% if calendar.today_in_calendar %}
|
||||||
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
<a role="button" href="{% url 'cette_semaine' %}?{{ filter.get_url }}">Cette semaine</a>
|
<a role="button" href="{% url 'cette_semaine' %}?{{ filter.get_url }}">Cette semaine</a>
|
||||||
|
{% endif %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
|
||||||
</footer>
|
</footer>
|
||||||
</article>
|
</article>
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
<script src="{% static 'js/modal.js' %}"></script>
|
<script src="{% static 'js/modal.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block ce_mois_ci_parameters %}{% block cette_semaine_parameters %}{% block a_venir_parameters %}?{{ filter.get_url }}{% endblock %}{% endblock %}{% endblock %}
|
{% block navigation-menu %}
|
||||||
|
{% navigation_links filter category %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% block body-class %}a-venir{% endblock %}
|
{% block body-class %}a-venir{% endblock %}
|
||||||
@ -23,25 +25,30 @@
|
|||||||
|
|
||||||
<article id="filters">
|
<article id="filters">
|
||||||
<header><h1 id="index-avenir">{% block title %}{% block og_title %}
|
<header><h1 id="index-avenir">{% block title %}{% block og_title %}
|
||||||
|
{% if category %}{{ category.name }}{% else %}Événements{% endif %}
|
||||||
{% if calendar.calendar_days_list.0.is_today %}
|
{% if calendar.calendar_days_list.0.is_today %}
|
||||||
Événements à venir
|
à venir
|
||||||
{% else %}
|
{% else %}
|
||||||
Événements du {{ calendar.calendar_days_list.0.date| date:"l j F Y" }}
|
du {{ calendar.calendar_days_list.0.date| date:"l j F Y" }}
|
||||||
{% if calendar.calendar_days_list|length > 1 %}
|
{% if calendar.calendar_days_list|length > 1 %}
|
||||||
et suivants
|
et suivants
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}{% if filter.has_location %} à {{ filter.get_position }}{% endif %}
|
||||||
{% endblock %}{% endblock %}</h1></header>
|
{% endblock %}{% endblock %}</h1></header>
|
||||||
|
|
||||||
|
|
||||||
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=1 %}
|
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=1 %}
|
||||||
|
|
||||||
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
||||||
{% cache cache_timeout upcoming user.is_authenticated calendar.firstdate filter.get_url calendar.calendar_days_list|length %}
|
{% cache cache_timeout upcoming user.is_authenticated calendar.firstdate filter.get_url category calendar.calendar_days_list|length %}
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour' date_pred.year date_pred.month date_pred.day %}{% endif %}" aria-label="dates précédentes" role="button">
|
{% if category %}
|
||||||
{% picto_from_name "chevrons-left" %}
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view_category' category.slug date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour_category' category.slug date_pred.year date_pred.month date_pred.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates précédentes" role="button">
|
||||||
|
{% else %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour' date_pred.year date_pred.month date_pred.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates précédentes" role="button">
|
||||||
|
{% endif %}
|
||||||
|
{% picto_from_name "chevrons-left" %}
|
||||||
{% if calendar.calendar_days_list|length == 1 %}
|
{% if calendar.calendar_days_list|length == 1 %}
|
||||||
{{ date_pred }}
|
{{ date_pred }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -59,7 +66,11 @@
|
|||||||
{% picto_from_name "chevrons-down" %}</a>
|
{% picto_from_name "chevrons-down" %}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour' date_next.year date_next.month date_next.day %}{% endif %}" aria-label="dates suivantes" role="button">
|
{% if category %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view_category' category.slug date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour_category' category.slug date_next.year date_next.month date_next.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates suivantes" role="button">
|
||||||
|
{% else %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour' date_next.year date_next.month date_next.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates suivantes" role="button">
|
||||||
|
{% endif %}
|
||||||
{% if calendar.calendar_days_list|length == 1 %}
|
{% if calendar.calendar_days_list|length == 1 %}
|
||||||
{{ date_next }}
|
{{ date_next }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -138,25 +149,56 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
<article>
|
<article>
|
||||||
<header><h2>Voir aussi</h2></header>
|
<header><h2>Voir aussi</h2></header>
|
||||||
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour' date_pred.year date_pred.month date_pred.day %}{% endif %}" aria-label="dates précédentes" role="button">
|
{% if category %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view_category' category.slug date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour_category' category.slug date_pred.year date_pred.month date_pred.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates précédentes" role="button">
|
||||||
|
{% else %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_pred.year date_pred.month date_pred.day %}{% else %}{% url 'a_venir_jour' date_pred.year date_pred.month date_pred.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates précédentes" role="button">
|
||||||
|
{% endif %}
|
||||||
{% picto_from_name "chevrons-left" %}
|
{% picto_from_name "chevrons-left" %}
|
||||||
{% if calendar.calendar_days_list|length == 1 %}
|
{% if calendar.calendar_days_list|length == 1 %}
|
||||||
{{ date_pred }}
|
{{ date_pred }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% if calendar.today_in_calendar %}
|
{% if calendar.today_in_calendar %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'aujourdhui_category' category.slug %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
{% if calendar.calendar_days_list|length == 1 %}
|
{% if calendar.calendar_days_list|length == 1 %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'a_venir_jour_category' category.slug day.year day.month day.day %}?{{ filter.get_url }}">Autour du {{ day }}</a>
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'a_venir_jour' day.year day.month day.day %}?{{ filter.get_url }}">Autour du {{ day }}</a>
|
<a role="button" href="{% url 'a_venir_jour' day.year day.month day.day %}?{{ filter.get_url }}">Autour du {{ day }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a role="button" href="{% url 'week_view' calendar.firstdate.year calendar.firstdate|week %}?{{ filter.get_url }}">Semaine du {{ calendar.firstdate }}</a>
|
{% endif %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'week_view_category' category.slug calendar.firstdate.year calendar.firstdate|week %}?{{ filter.get_url }}">Semaine du {{ calendar.firstdate }}</a>
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" href="{% url 'week_view' calendar.firstdate.year calendar.firstdate|week %}?{{ filter.get_url }}">Semaine du {{ calendar.firstdate }}</a>
|
||||||
|
<a role="button" href="{% url 'month_view' calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
||||||
|
{% endif %}
|
||||||
{% if calendar.firstdate.month != calendar.lastdate.month %}
|
{% if calendar.firstdate.month != calendar.lastdate.month %}
|
||||||
|
{% if category %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
<a role="button" href="{% url 'month_view' calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
{% endif %}
|
||||||
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour' date_next.year date_next.month date_next.day %}{% endif %}" aria-label="dates suivantes" role="button">
|
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical_category' category.slug %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if category %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view_category' category.slug date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour_category' category.slug date_next.year date_next.month date_next.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates suivantes" role="button">
|
||||||
|
{% else %}
|
||||||
|
<a href="{% if calendar.calendar_days_list|length == 1 %}{% url 'day_view' date_next.year date_next.month date_next.day %}{% else %}{% url 'a_venir_jour' date_next.year date_next.month date_next.day %}{% endif %}?{{ filter.get_url }}" aria-label="dates suivantes" role="button">
|
||||||
|
{% endif %}
|
||||||
{% if calendar.calendar_days_list|length == 1 %}
|
{% if calendar.calendar_days_list|length == 1 %}
|
||||||
{{ date_next }}
|
{{ date_next }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -14,38 +14,49 @@
|
|||||||
<script src="{% static 'js/calendar-buttons.js' %}"></script>
|
<script src="{% static 'js/calendar-buttons.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block title %}{% block og_title %}{% if calendar.today_in_calendar %}Sorties culturelles cette semaine à Clermont-Ferrand et aux environs{% else %}Semaine du {{ calendar.firstdate|date|frdate }}{% endif %}{% endblock %}{% endblock %}
|
{% block title %}{% block og_title %}{% if calendar.today_in_calendar %}{% if category %}{{ category.name }}{% else %}Sorties culturelles{% endif %} cette semaine à Clermont-Ferrand et aux environs{% else %}{% if category %}{{ category.name }} la semaine{% else %}Semaine{% endif %} du {{ calendar.firstdate|date|frdate }}{% endif %}{% endblock %}{% endblock %}
|
||||||
|
|
||||||
{% block ce_mois_ci_parameters %}{% block cette_semaine_parameters %}{% block a_venir_parameters %}?{{ filter.get_url }}{% endblock %}{% endblock %}{% endblock %}
|
|
||||||
|
{% block navigation-menu %}
|
||||||
|
{% navigation_links filter category %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=0 %}
|
{% include "agenda_culturel/filter-inc.html" with filter=filter noarticle=0 category=category %}
|
||||||
|
|
||||||
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
{% with cache_timeout=user.is_authenticated|yesno:"30,600" %}
|
||||||
{% cache cache_timeout week user.is_authenticated calendar.firstdate filter.get_url %}
|
{% cache cache_timeout week user.is_authenticated calendar.firstdate category filter.get_url %}
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
<div class="title small"><h1>
|
<div class="title small"><h1>
|
||||||
{% if calendar.today_in_calendar %}
|
{% if calendar.today_in_calendar %}
|
||||||
Cette semaine
|
{% if category %}{{ category.name }} cette semaine{% else %}Cette semaine{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
semaine du {{ calendar.firstdate |date:"j F"|frdate }}
|
{% if category %}{{ category.name }} la {% endif %}semaine du {{ calendar.firstdate |date:"j F"|frdate }}
|
||||||
{% endif %}</h1></div>
|
{% endif %}{% if filter.has_location %}à {{ filter.get_position }}{% endif %}</h1></div>
|
||||||
<div class="navigation">
|
<div class="navigation">
|
||||||
<div>
|
<div>
|
||||||
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
||||||
{% if calendar.lastdate|not_after_last %}
|
{% if calendar.lastdate|not_after_last %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'week_view_category' category.slug calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'week_view' calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">
|
<a role="button" href="{% url 'week_view' calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">
|
||||||
{% picto_from_name "chevron-left" %} précédente</a>
|
{% endif %}
|
||||||
|
{% picto_from_name "chevron-left" %} précédente</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
||||||
{% if calendar.lastdate|not_before_first %}
|
{% if calendar.lastdate|not_before_first %}
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<a role="button" href="{% url 'week_view' calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">suivante
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'week_view_category' category.slug calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">suivante
|
||||||
|
{% else %}
|
||||||
|
<a role="button" href="{% url 'week_view' calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">suivante
|
||||||
|
{% endif %}
|
||||||
{% picto_from_name "chevron-right" %}
|
{% picto_from_name "chevron-right" %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -57,9 +68,13 @@
|
|||||||
<div class="slider-button slider-button-inside button-left hidden">{% picto_from_name "arrow-left" %}</div>
|
<div class="slider-button slider-button-inside button-left hidden">{% picto_from_name "arrow-left" %}</div>
|
||||||
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
{% if calendar.firstdate|shift_day:-1|not_before_first %}
|
||||||
{% if calendar.lastdate|not_after_last %}
|
{% if calendar.lastdate|not_after_last %}
|
||||||
|
{% if category %}
|
||||||
|
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'week_view_category' category.slug calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
||||||
|
{% else %}
|
||||||
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'week_view' calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
<div class="slider-button slider-button-page button-left hidden"><a href="{% url 'week_view' calendar.previous_week|weekyear calendar.previous_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-left" %}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
{% for day in calendar.calendar_days_list %}
|
{% for day in calendar.calendar_days_list %}
|
||||||
@ -173,22 +188,42 @@
|
|||||||
<div class="slider-button slider-button-inside button-right hidden">{% picto_from_name "arrow-right" %}</div>
|
<div class="slider-button slider-button-inside button-right hidden">{% picto_from_name "arrow-right" %}</div>
|
||||||
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
{% if calendar.lastdate|shift_day:+1|not_after_last %}
|
||||||
{% if calendar.lastdate|not_before_first %}
|
{% if calendar.lastdate|not_before_first %}
|
||||||
|
{% if category %}
|
||||||
|
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'week_view_category' category.slug calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
||||||
|
{% else %}
|
||||||
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'week_view' calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
<div class="slider-button slider-button-page button-right hidden"><a href="{% url 'week_view' calendar.next_week|weekyear calendar.next_week|week %}?{{ filter.get_url }}">{% picto_from_name "chevrons-right" %}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
{% if calendar.today_in_calendar %}
|
{% if calendar.today_in_calendar %}
|
||||||
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'aujourdhui_category' category.slug %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" href="{% url 'aujourdhui' %}?{{ filter.get_url }}">Aujourd'hui</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" href="{% url 'month_view' calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.firstdate.year calendar.firstdate.month %}?{{ filter.get_url }}">{{ calendar.firstdate | date:"F o" }}</a>
|
|
||||||
{% if calendar.firstdate.month != calendar.lastdate.month %}
|
{% if calendar.firstdate.month != calendar.lastdate.month %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" href="{% url 'month_view_category' category.slug calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
||||||
|
{% else %}
|
||||||
<a role="button" href="{% url 'month_view' calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
<a role="button" href="{% url 'month_view' calendar.lastdate.year calendar.lastdate.month %}?{{ filter.get_url }}">{{ calendar.lastdate | date:"F o" }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
{% endif %}
|
||||||
|
{% if category %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical_category' category.slug %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
|
{% else %}
|
||||||
|
<a role="button" data-tooltip="Copiez ce lien et importez-le dans votre agenda" href="{% url 'export_ical' %}?{{ filter.get_url }}">Export ical {% picto_from_name "calendar" %}</a>
|
||||||
|
{% endif %}
|
||||||
</footer>
|
</footer>
|
||||||
</article>
|
</article>
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
|
@ -52,9 +52,11 @@
|
|||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
{% block ajouter-menu %}<li id="menu-ajouter" class="ajouter-bouton"><a href="{% url 'add_event' %}">Ajouter un événement {% picto_from_name "plus-circle" %}</a></li>{% endblock %}
|
{% block ajouter-menu %}<li id="menu-ajouter" class="ajouter-bouton"><a href="{% url 'add_event' %}">Ajouter un événement {% picto_from_name "plus-circle" %}</a></li>{% endblock %}
|
||||||
{% block rechercher-menu %}<li id="menu-rechercher" class="rechercher-bouton"><a href="{% url 'event_search' %}">Rechercher {% picto_from_name "search" %}</a></li>{% endblock %}
|
{% block rechercher-menu %}<li id="menu-rechercher" class="rechercher-bouton"><a href="{% url 'event_search' %}">Rechercher {% picto_from_name "search" %}</a></li>{% endblock %}
|
||||||
<li><a href="{% url 'a_venir' %}{% block a_venir_parameters %}{% endblock %}">Maintenant</a></li>
|
{% block navigation-menu %}
|
||||||
<li><a href="{% url 'cette_semaine' %}{% block cette_semaine_parameters %}{% endblock %}">Cette semaine</a></li>
|
<li><a href="{% url 'a_venir' %}">Maintenant</a></li>
|
||||||
<li><a href="{% url 'ce_mois_ci' %}{% block ce_mois_ci_parameters %}{% endblock %}">Ce mois-ci</a></li>
|
<li><a href="{% url 'cette_semaine' %}">Cette semaine</a></li>
|
||||||
|
<li><a href="{% url 'ce_mois_ci' %}">Ce mois-ci</a></li>
|
||||||
|
{% endblock%}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<nav class="container-fluid">
|
<nav class="container-fluid">
|
||||||
|
@ -6,6 +6,11 @@ from agenda_culturel.models import Category
|
|||||||
import colorsys
|
import colorsys
|
||||||
from .utils_extra import *
|
from .utils_extra import *
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
@ -212,21 +217,14 @@ def legend_cat(category, url, selected=True, first=False, with_title=False):
|
|||||||
c = category.css_class()
|
c = category.css_class()
|
||||||
n = category.name
|
n = category.name
|
||||||
class_reduced = '' if selected else 'reduced'
|
class_reduced = '' if selected else 'reduced'
|
||||||
if first:
|
|
||||||
prefix = ""
|
|
||||||
else:
|
|
||||||
if selected:
|
|
||||||
prefix = "retirer "
|
|
||||||
else:
|
|
||||||
prefix = "ajouter "
|
|
||||||
|
|
||||||
if category.pictogram:
|
if category.pictogram:
|
||||||
result = '<span class="cat ' + class_reduced + ' ' + c + ' circ-cat circ-large" data-tooltip="' + prefix + n + '">' + '<img src="' + category.pictogram.url + '" alt="' + category.name + '" /></span>'
|
result = '<span class="cat ' + class_reduced + ' ' + c + ' circ-cat circ-large" data-tooltip="' + n + '">' + '<img src="' + category.pictogram.url + '" alt="' + category.name + '" /></span>'
|
||||||
else:
|
else:
|
||||||
result = '<span class="cat ' + class_reduced + ' ' + c + ' circ-cat circ-large" data-tooltip="' + prefix + n + '"></span>'
|
result = '<span class="cat ' + class_reduced + ' ' + c + ' circ-cat circ-large" data-tooltip="' + n + '"></span>'
|
||||||
|
|
||||||
if with_title and selected:
|
if with_title and selected:
|
||||||
result = '<div class="developpe">' + result + ' <span class="titre">' + n + '</span></div>'
|
result = '<div class="developpe">' + result + ' <span class="titre">' + n + '</span> ' + picto_from_name('x-circle') + '</div></div>'
|
||||||
else:
|
else:
|
||||||
result = '<div class="non-developpe">' + result + '</div>'
|
result = '<div class="non-developpe">' + result + '</div>'
|
||||||
|
|
||||||
@ -236,28 +234,29 @@ def legend_cat(category, url, selected=True, first=False, with_title=False):
|
|||||||
|
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def show_legend(filter):
|
def show_legend(filter, category):
|
||||||
filter.form.full_clean()
|
|
||||||
cats = Category.objects.all().order_by("position")
|
cats = Category.objects.all().order_by("position")
|
||||||
if filter.is_active(only_categories=True):
|
|
||||||
|
if not category is None:
|
||||||
|
url_nocat = "/" + "/".join(filter.request.get_full_path().split("/")[2:])
|
||||||
return mark_safe('<div class="button-bar">' +
|
return mark_safe('<div class="button-bar">' +
|
||||||
" ".join(
|
" ".join(
|
||||||
[
|
[
|
||||||
legend_cat(
|
legend_cat(
|
||||||
c,
|
c,
|
||||||
filter.get_url_add_categories([c.pk])
|
"/cat:" + c.slug + url_nocat
|
||||||
if not filter.is_selected(c)
|
if category != c
|
||||||
else filter.get_url_remove_categories([c.pk]),
|
else url_nocat,
|
||||||
selected=filter.is_selected(c),
|
selected=category == c,
|
||||||
with_title=True
|
with_title=True
|
||||||
)
|
)
|
||||||
for c in cats
|
for c in cats
|
||||||
]
|
]
|
||||||
) + ' <a class="contrast simple-button" href="' + filter.get_url_without_filters() + '">' + picto_from_name('x-circle') + '</a></div>'
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return mark_safe("<div>" +
|
return mark_safe("<div>" +
|
||||||
" ".join(
|
" ".join(
|
||||||
[legend_cat(c, filter.get_url_add_categories([c.pk]), True, True) for c in cats]
|
[legend_cat(c, "/cat:" + c.slug + filter.request.get_full_path()) for c in cats]
|
||||||
) + "</div>"
|
) + "</div>"
|
||||||
)
|
)
|
||||||
|
@ -88,10 +88,15 @@ def calendar_classes(d, fixed_style):
|
|||||||
|
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def url_day(d):
|
def url_day(d, category=None):
|
||||||
return reverse_lazy(
|
if category:
|
||||||
"day_view", kwargs={"year": d.year, "month": d.month, "day": d.day}
|
return reverse_lazy(
|
||||||
)
|
"day_view_category", kwargs={"year": d.year, "month": d.month, "day": d.day, "cat": category.slug}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return reverse_lazy(
|
||||||
|
"day_view", kwargs={"year": d.year, "month": d.month, "day": d.day}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
@ -162,3 +167,16 @@ def html_vide(val):
|
|||||||
@register.filter
|
@register.filter
|
||||||
def no_emoji(text):
|
def no_emoji(text):
|
||||||
return emoji.replace_emoji(text, replace='')
|
return emoji.replace_emoji(text, replace='')
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def navigation_links(filter, category):
|
||||||
|
extra = '?' + filter.get_url()
|
||||||
|
if category is None:
|
||||||
|
result = '<li><a href="' + reverse_lazy('a_venir') + extra + '">Maintenant</a></li>'
|
||||||
|
result += '<li><a href="' + reverse_lazy('cette_semaine') + extra + '">Cette semaine</a></li>'
|
||||||
|
result += '<li><a href="' + reverse_lazy('ce_mois_ci') + extra + '">Ce mois-ci</a></li>'
|
||||||
|
else:
|
||||||
|
result = '<li><a href="' + reverse_lazy('a_venir_category', kwargs={'cat': category.slug }) + extra + '">Maintenant</a></li>'
|
||||||
|
result += '<li><a href="' + reverse_lazy('cette_semaine_category', kwargs={'cat': category.slug }) + extra + '">Cette semaine</a></li>'
|
||||||
|
result += '<li><a href="' + reverse_lazy('ce_mois_ci_category', kwargs={'cat': category.slug }) + extra + '">Ce mois-ci</a></li>'
|
||||||
|
return mark_safe(result)
|
@ -21,17 +21,34 @@ place_dict = {
|
|||||||
organisation_dict = {
|
organisation_dict = {
|
||||||
"queryset": Organisation.objects.all(),
|
"queryset": Organisation.objects.all(),
|
||||||
}
|
}
|
||||||
|
category_dict = {
|
||||||
|
"queryset": Category.objects.all(),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sitemaps = {
|
sitemaps = {
|
||||||
"static": StaticViewSitemap,
|
"static": StaticViewSitemap,
|
||||||
"events": GenericSitemap(event_dict, priority=0.7),
|
"events": GenericSitemap(event_dict, priority=1.0),
|
||||||
"places": GenericSitemap(place_dict, priority=0.6),
|
"places": GenericSitemap(place_dict, priority=0.6),
|
||||||
|
"categories": GenericSitemap(category_dict, priority=0.8),
|
||||||
"organisations": GenericSitemap(organisation_dict, priority=0.2),
|
"organisations": GenericSitemap(organisation_dict, priority=0.2),
|
||||||
}
|
}
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", home, name="home"),
|
path("", home, name="home"),
|
||||||
|
|
||||||
|
path("cat:<cat>/", home, name="home_category"),
|
||||||
|
path("cat:<cat>/semaine/<int:year>/<int:week>/", week_view, name="week_view_category"),
|
||||||
|
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
|
||||||
|
path("cat:<cat>/mois/<int:year>/<int:month>/", month_view, name="month_view_category"),
|
||||||
|
path("cat:<cat>/jour/<int:year>/<int:month>/<int:day>/", day_view, name="day_view_category"),
|
||||||
|
path("cat:<cat>/a-venir/", upcoming_events, name="a_venir_category"),
|
||||||
|
path("cat:<cat>/aujourdhui/", day_view, name="aujourdhui_category"),
|
||||||
|
path("cat:<cat>/a-venir/<int:year>/<int:month>/<int:day>/", upcoming_events, name="a_venir_jour_category"),
|
||||||
|
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
|
||||||
|
path("cat:<cat>/ical", export_ical, name="export_ical_category"),
|
||||||
|
path("cat:<cat>/ce-mois-ci", month_view, name="ce_mois_ci_category"),
|
||||||
|
|
||||||
path("semaine/<int:year>/<int:week>/", week_view, name="week_view"),
|
path("semaine/<int:year>/<int:week>/", week_view, name="week_view"),
|
||||||
path("mois/<int:year>/<int:month>/", month_view, name="month_view"),
|
path("mois/<int:year>/<int:month>/", month_view, name="month_view"),
|
||||||
path("jour/<int:year>/<int:month>/<int:day>/", day_view, name="day_view"),
|
path("jour/<int:year>/<int:month>/<int:day>/", day_view, name="day_view"),
|
||||||
@ -40,6 +57,7 @@ urlpatterns = [
|
|||||||
path("a-venir/<int:year>/<int:month>/<int:day>/", upcoming_events, name="a_venir_jour"),
|
path("a-venir/<int:year>/<int:month>/<int:day>/", upcoming_events, name="a_venir_jour"),
|
||||||
path("cette-semaine/", week_view, name="cette_semaine"),
|
path("cette-semaine/", week_view, name="cette_semaine"),
|
||||||
path("ce-mois-ci", month_view, name="ce_mois_ci"),
|
path("ce-mois-ci", month_view, name="ce_mois_ci"),
|
||||||
|
|
||||||
path("tag/<t>/", view_tag, name="view_tag"),
|
path("tag/<t>/", view_tag, name="view_tag"),
|
||||||
path("tag/<t>/past", view_tag_past, name="view_tag_past"),
|
path("tag/<t>/past", view_tag_past, name="view_tag_past"),
|
||||||
path("tags/", tag_list, name="view_all_tags"),
|
path("tags/", tag_list, name="view_all_tags"),
|
||||||
|
@ -21,7 +21,7 @@ from django.core.mail import mail_admins
|
|||||||
from django.contrib.gis.geos import Point
|
from django.contrib.gis.geos import Point
|
||||||
from django.contrib.gis.measure import D
|
from django.contrib.gis.measure import D
|
||||||
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse
|
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseRedirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
import emoji
|
import emoji
|
||||||
@ -202,11 +202,11 @@ def about(request):
|
|||||||
return render(request, "agenda_culturel/page-rimports-list.html", context)
|
return render(request, "agenda_culturel/page-rimports-list.html", context)
|
||||||
|
|
||||||
|
|
||||||
def home(request):
|
def home(request, cat=None):
|
||||||
return week_view(request, home=True)
|
return week_view(request, home=True, cat=cat)
|
||||||
|
|
||||||
|
|
||||||
def month_view(request, year=None, month=None):
|
def month_view(request, year=None, month=None, cat=None):
|
||||||
now = date.today()
|
now = date.today()
|
||||||
if year is None:
|
if year is None:
|
||||||
year = now.year
|
year = now.year
|
||||||
@ -214,7 +214,18 @@ def month_view(request, year=None, month=None):
|
|||||||
month = now.month
|
month = now.month
|
||||||
|
|
||||||
request = EventFilter.set_default_values(request)
|
request = EventFilter.set_default_values(request)
|
||||||
filter = EventFilter(request.GET, get_event_qs(request), request=request)
|
qs = get_event_qs(request)
|
||||||
|
if cat is not None:
|
||||||
|
category = Category.objects.filter(slug=cat).first()
|
||||||
|
qs = qs.filter(category=category)
|
||||||
|
else:
|
||||||
|
category = None
|
||||||
|
|
||||||
|
filter = EventFilter(request.GET, qs, request=request)
|
||||||
|
|
||||||
|
if filter.has_category_parameters():
|
||||||
|
return HttpResponseRedirect(filter.get_new_url())
|
||||||
|
|
||||||
cmonth = CalendarMonth(year, month, filter)
|
cmonth = CalendarMonth(year, month, filter)
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
@ -222,33 +233,43 @@ def month_view(request, year=None, month=None):
|
|||||||
"month": cmonth.get_month_name(),
|
"month": cmonth.get_month_name(),
|
||||||
"calendar": cmonth,
|
"calendar": cmonth,
|
||||||
"filter": filter,
|
"filter": filter,
|
||||||
|
"category": category
|
||||||
}
|
}
|
||||||
return render(request, "agenda_culturel/page-month.html", context)
|
return render(request, "agenda_culturel/page-month.html", context)
|
||||||
|
|
||||||
|
|
||||||
def week_view(request, year=None, week=None, home=False):
|
def week_view(request, year=None, week=None, home=False, cat=None):
|
||||||
now = date.today()
|
now = date.today()
|
||||||
if year is None:
|
if year is None:
|
||||||
year = now.isocalendar()[0]
|
year = now.isocalendar()[0]
|
||||||
if week is None:
|
if week is None:
|
||||||
week = now.isocalendar()[1]
|
week = now.isocalendar()[1]
|
||||||
|
|
||||||
|
|
||||||
request = EventFilter.set_default_values(request)
|
request = EventFilter.set_default_values(request)
|
||||||
filter = EventFilter(request.GET, get_event_qs(request), request=request)
|
qs = get_event_qs(request)
|
||||||
|
if cat is not None:
|
||||||
|
category = Category.objects.filter(slug=cat).first()
|
||||||
|
qs = qs.filter(category=category)
|
||||||
|
else:
|
||||||
|
category = None
|
||||||
|
filter = EventFilter(request.GET, qs, request=request)
|
||||||
|
|
||||||
|
if filter.has_category_parameters():
|
||||||
|
return HttpResponseRedirect(filter.get_new_url())
|
||||||
|
|
||||||
cweek = CalendarWeek(year, week, filter)
|
cweek = CalendarWeek(year, week, filter)
|
||||||
|
|
||||||
context = {"year": year, "week": week, "calendar": cweek, "filter": filter}
|
context = {"year": year, "week": week, "calendar": cweek, "filter": filter, "category": category}
|
||||||
if home:
|
if home:
|
||||||
context["home"] = 1
|
context["home"] = 1
|
||||||
return render(request, "agenda_culturel/page-week.html", context)
|
return render(request, "agenda_culturel/page-week.html", context)
|
||||||
|
|
||||||
|
|
||||||
def day_view(request, year=None, month=None, day=None):
|
def day_view(request, year=None, month=None, day=None, cat=None):
|
||||||
return upcoming_events(request, year, month, day, 0)
|
return upcoming_events(request, year, month, day, 0, cat)
|
||||||
|
|
||||||
|
|
||||||
def upcoming_events(request, year=None, month=None, day=None, neighsize=1):
|
def upcoming_events(request, year=None, month=None, day=None, neighsize=1, cat=None):
|
||||||
now = date.today()
|
now = date.today()
|
||||||
if year is None:
|
if year is None:
|
||||||
year = now.year
|
year = now.year
|
||||||
@ -261,7 +282,18 @@ def upcoming_events(request, year=None, month=None, day=None, neighsize=1):
|
|||||||
day = day + timedelta(days=neighsize)
|
day = day + timedelta(days=neighsize)
|
||||||
|
|
||||||
request = EventFilter.set_default_values(request)
|
request = EventFilter.set_default_values(request)
|
||||||
filter = EventFilter(request.GET, get_event_qs(request), request=request)
|
qs = get_event_qs(request)
|
||||||
|
if cat is not None:
|
||||||
|
category = Category.objects.filter(slug=cat).first()
|
||||||
|
qs = qs.filter(category=category)
|
||||||
|
else:
|
||||||
|
category = None
|
||||||
|
|
||||||
|
filter = EventFilter(request.GET, qs, request=request)
|
||||||
|
|
||||||
|
if filter.has_category_parameters():
|
||||||
|
return HttpResponseRedirect(filter.get_new_url())
|
||||||
|
|
||||||
cal = CalendarList(day + timedelta(days=-neighsize), day + timedelta(days=neighsize), filter, True)
|
cal = CalendarList(day + timedelta(days=-neighsize), day + timedelta(days=neighsize), filter, True)
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
@ -270,7 +302,8 @@ def upcoming_events(request, year=None, month=None, day=None, neighsize=1):
|
|||||||
"day": day,
|
"day": day,
|
||||||
"filter": filter,
|
"filter": filter,
|
||||||
"date_pred": day + timedelta(days=-neighsize - 1),
|
"date_pred": day + timedelta(days=-neighsize - 1),
|
||||||
"date_next": day + timedelta(days=neighsize + 1)
|
"date_next": day + timedelta(days=neighsize + 1),
|
||||||
|
"category": category
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -827,11 +860,22 @@ def export_event_ical(request, year, month, day, pk):
|
|||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def export_ical(request):
|
def export_ical(request, cat=None):
|
||||||
now = date.today()
|
now = date.today()
|
||||||
|
|
||||||
|
qs = get_event_qs(request)
|
||||||
|
if cat is not None:
|
||||||
|
category = Category.objects.filter(slug=cat).first()
|
||||||
|
qs = qs.filter(category=category)
|
||||||
|
else:
|
||||||
|
category = None
|
||||||
|
|
||||||
request = EventFilter.set_default_values(request)
|
request = EventFilter.set_default_values(request)
|
||||||
filter = EventFilter(request.GET, queryset=get_event_qs(request), request=request)
|
filter = EventFilter(request.GET, queryset=qs, request=request)
|
||||||
|
|
||||||
|
if filter.has_category_parameters():
|
||||||
|
return HttpResponseRedirect(filter.get_new_url())
|
||||||
|
|
||||||
id_cache = hashlib.md5(filter.get_url().encode("utf8")).hexdigest()
|
id_cache = hashlib.md5(filter.get_url().encode("utf8")).hexdigest()
|
||||||
ical = cache.get(id_cache)
|
ical = cache.get(id_cache)
|
||||||
if not ical:
|
if not ical:
|
||||||
@ -841,8 +885,16 @@ def export_ical(request):
|
|||||||
|
|
||||||
response = HttpResponse(content_type="text/calendar")
|
response = HttpResponse(content_type="text/calendar")
|
||||||
response.content = ical.to_ical().decode("utf-8").replace("\r\n", "\n")
|
response.content = ical.to_ical().decode("utf-8").replace("\r\n", "\n")
|
||||||
|
extra = filter.to_str(' ')
|
||||||
|
if extra is None:
|
||||||
|
extra = ''
|
||||||
|
if not category is None:
|
||||||
|
if extra != '':
|
||||||
|
extra = ' ' + category.name + ' ' + extra
|
||||||
|
else:
|
||||||
|
extra = ' ' + category.name
|
||||||
response["Content-Disposition"] = "attachment; filename={0}{1}{2}".format(
|
response["Content-Disposition"] = "attachment; filename={0}{1}{2}".format(
|
||||||
'Pommes de lune', filter.to_str(' '), ".ics"
|
'Pommes de lune', extra, ".ics"
|
||||||
)
|
)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
@ -43,4 +43,5 @@ django-robots==6.1
|
|||||||
django-debug-toolbar==4.4.6
|
django-debug-toolbar==4.4.6
|
||||||
django-cache-cleaner==0.1.0
|
django-cache-cleaner==0.1.0
|
||||||
emoji==2.14.0
|
emoji==2.14.0
|
||||||
django-honeypot==1.2.1
|
django-honeypot==1.2.1
|
||||||
|
django-autoslug==1.9.9
|
Loading…
x
Reference in New Issue
Block a user