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.

+ + +
{{ formset.management_form }} {% csrf_token %} {% for form in formset %} -

Nouvel événement #{{ forloop.counter }}

+
+
+

Nouvel événement #{{ forloop.counter }}

+
{{ form.as_p }} +
{% endfor %}
- - - -
- Veuillez patienter, lien en cours d'importation... -
-
+ + + {% endblock %} diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 45fb63a..dcc3709 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -695,6 +695,7 @@ class URLEventEvaluation: self.is_authenticated = is_authenticated self.cat = None + self.tags = [] self.existing = None self.url = form.cleaned_data.get('url') self.event = None @@ -708,6 +709,7 @@ class URLEventEvaluation: self.cat = form.cleaned_data.get('category') if self.cat is not None: self.cat = self.cat.name + self.tags = form.cleaned_data.get('tags') else: published = [ @@ -745,7 +747,7 @@ class URLEventEvaluation: def to_list(self): if self.is_new(): - return (self.url, self.cat) + return (self.url, self.cat, self.tags) def import_from_urls(request): @@ -830,7 +832,7 @@ def import_from_url(request): request, _('Integrating {} into our import process.').format(uc.url) ) - import_events_from_url.delay(uc.url, uc.cat) + import_events_from_url.delay(uc.url, uc.cat, uc.tags) return HttpResponseRedirect(reverse("thank_you"))