From 4af14c523cbb4ee91cf64dbcb72c38dd575ae37a Mon Sep 17 00:00:00 2001
From: Jean-Marie Favreau
Date: Fri, 15 Nov 2024 00:52:11 +0100
Subject: [PATCH] Ajout des tags au formulaire de soumission
Fix #158
---
src/agenda_culturel/celery.py | 11 ++--
src/agenda_culturel/forms.py | 13 +++++
src/agenda_culturel/models.py | 20 ++++---
src/agenda_culturel/static/style.scss | 20 +++----
.../templates/agenda_culturel/import.html | 31 ++++++++++
.../templates/agenda_culturel/import_set.html | 57 +++++++++++++++----
src/agenda_culturel/views.py | 6 +-
7 files changed, 121 insertions(+), 37 deletions(-)
diff --git a/src/agenda_culturel/celery.py b/src/agenda_culturel/celery.py
index 86852d8..fa79aa2 100644
--- a/src/agenda_culturel/celery.py
+++ b/src/agenda_culturel/celery.py
@@ -288,7 +288,7 @@ def weekly_imports(self):
run_recurrent_imports_from_list([imp.pk for imp in imports])
@app.task(base=ChromiumTask, bind=True)
-def import_events_from_url(self, url, cat, force=False):
+def import_events_from_url(self, url, cat, tags, force=False):
from .db_importer import DBImporterEvents
from agenda_culturel.models import RecurrentImport, BatchImportation
from agenda_culturel.models import Event, Category
@@ -322,7 +322,7 @@ def import_events_from_url(self, url, cat, force=False):
# set default values
values = {}
if cat is not None:
- values = {"category": cat}
+ values = {"category": cat, "tags": tags}
# get event
events = u2e.process(
@@ -351,13 +351,14 @@ def import_events_from_url(self, url, cat, force=False):
@app.task(base=ChromiumTask, bind=True)
-def import_events_from_urls(self, urls_and_cats):
- for ucat in urls_and_cats:
+def import_events_from_urls(self, urls_cat_tags):
+ for ucat in urls_cat_tags:
if ucat is not None:
url = ucat[0]
cat = ucat[1]
+ tags = ucat[2]
- import_events_from_url.delay(url, cat)
+ import_events_from_url.delay(url, cat, tags)
app.conf.beat_schedule = {
diff --git a/src/agenda_culturel/forms.py b/src/agenda_culturel/forms.py
index 2242c47..d423106 100644
--- a/src/agenda_culturel/forms.py
+++ b/src/agenda_culturel/forms.py
@@ -22,6 +22,7 @@ from .models import (
CategorisationRule,
Place,
Category,
+ Tag
)
from django.conf import settings
from django.core.files import File
@@ -48,6 +49,18 @@ class URLSubmissionForm(Form):
help_text=_('Optional. If you don''t specify a category, we''ll find it for you.'),
required=False,
)
+ tags = MultipleChoiceField(
+ label=_("Tags"),
+ initial=None,
+ choices=[],
+ help_text=_('Specifying labels will help you find the event more easily'),
+ required=False
+ )
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.fields["tags"].choices = Tag.get_tag_groups(all=True)
+
diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py
index 279258f..fbc5892 100644
--- a/src/agenda_culturel/models.py
+++ b/src/agenda_culturel/models.py
@@ -214,25 +214,26 @@ class Tag(models.Model):
def get_absolute_url(self):
return reverse("view_tag", kwargs={"t": self.name})
- def get_tag_groups(nb_suggestions=10, exclude=False, include=False):
+ def get_tag_groups(nb_suggestions=10, exclude=False, include=False, all=False):
id_cache = 'all_tags ' + str(exclude) + ' ' + str(include) + ' ' + str(nb_suggestions)
result = cache.get(id_cache)
- if not result: #
+
+ if not result:
free_tags = Event.get_all_tags(False)
obj_tags = Tag.objects
- try:
+ if all:
+ obj_tags = obj_tags.filter(Q(in_excluded_suggestions=True)|Q(in_included_suggestions=True)|Q(principal=True))
+ else:
if exclude:
obj_tags = obj_tags.filter(Q(in_excluded_suggestions=True))
if include:
obj_tags = obj_tags.filter(Q(in_included_suggestions=True)|Q(principal=True))
- except FieldDoesNotExist:
- pass
-
- if not exclude and not include:
- obj_tags = obj_tags.filter(principal=True)
+
+ if not exclude and not include:
+ obj_tags = obj_tags.filter(principal=True)
obj_tags = obj_tags.values_list("name", flat=True)
@@ -254,6 +255,9 @@ class Tag(models.Model):
cache.set(id_cache, result, 300) # 5mn
return result
+ def __str__(self):
+ return self.name
+
class DuplicatedEvents(models.Model):
diff --git a/src/agenda_culturel/static/style.scss b/src/agenda_culturel/static/style.scss
index bcf8a71..b2b7692 100644
--- a/src/agenda_culturel/static/style.scss
+++ b/src/agenda_culturel/static/style.scss
@@ -1284,17 +1284,15 @@ img.preview {
-article {
- .stick-bottom {
- background: var(--card-sectionning-background-color);
- margin-right: calc(var(--block-spacing-horizontal) * -1);
- margin-left: calc(var(--block-spacing-horizontal) * -1);
- padding: calc(var(--block-spacing-vertical) * 0.66) var(--block-spacing-horizontal);
- margin-bottom: calc(var(--block-spacing-vertical) * -1);
- position: sticky;
- bottom: 0;
- box-shadow: 0 -1px 0 rgba(115, 130, 140, 0.2);
- }
+.stick-bottom {
+ background: var(--card-sectionning-background-color);
+ margin-right: calc(var(--block-spacing-horizontal) * -1);
+ margin-left: calc(var(--block-spacing-horizontal) * -1);
+ padding: calc(var(--block-spacing-vertical) * 0.66) var(--block-spacing-horizontal);
+ margin-bottom: calc(var(--block-spacing-vertical) * -1);
+ position: sticky;
+ bottom: 0;
+ box-shadow: 0 -1px 0 rgba(115, 130, 140, 0.2);
}
/*#menu-rechercher, #menu-ajouter, #menu-configurer {
diff --git a/src/agenda_culturel/templates/agenda_culturel/import.html b/src/agenda_culturel/templates/agenda_culturel/import.html
index 0770ddc..c867298 100644
--- a/src/agenda_culturel/templates/agenda_culturel/import.html
+++ b/src/agenda_culturel/templates/agenda_culturel/import.html
@@ -31,4 +31,35 @@
tout de même ajouter l'événement en le décrivant sur la page d'ajout d'événement.
+
+
{% endblock %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/import_set.html b/src/agenda_culturel/templates/agenda_culturel/import_set.html
index 66c724f..dec6521 100644
--- a/src/agenda_culturel/templates/agenda_culturel/import_set.html
+++ b/src/agenda_culturel/templates/agenda_culturel/import_set.html
@@ -18,27 +18,62 @@
{% url 'event_import_urls' as local_url %}
{% include "agenda_culturel/static_content.html" with name="import_set" url_path=local_url %}
+
+
Si l'import automatique ne marche pas, ou si l'événement n'est pas en ligne, vous pouvez
+ tout de même ajouter l'événement en le décrivant sur la page d'ajout d'événement.