diff --git a/src/agenda_culturel/filters.py b/src/agenda_culturel/filters.py index fc0e3f5..0c0131d 100644 --- a/src/agenda_culturel/filters.py +++ b/src/agenda_culturel/filters.py @@ -1,5 +1,6 @@ from datetime import date, timedelta from urllib.parse import parse_qs, urlencode, urlparse +import re import django_filters from django import forms @@ -46,6 +47,15 @@ class EventFilter(django_filters.FilterSet): empty_label=None, ) + include_local_events = django_filters.ChoiceFilter( + label="Inclure les événements de portée locale", + choices=[(False, _("No")), (True, _("Yes"))], + method="no_filter", + widget=forms.Select, + null_label=None, + empty_label=None, + ) + exclude_tags = django_filters.MultipleChoiceFilter( label="Exclure les étiquettes", choices=[], @@ -138,6 +148,10 @@ class EventFilter(django_filters.FilterSet): @property def qs(self): parent = super().qs + + if not self.with_local_events(): + parent = parent.filter(local_event=False) + if ( self.get_cleaned_data("position") is None or self.get_cleaned_data("radius") is None @@ -200,6 +214,9 @@ class EventFilter(django_filters.FilterSet): def get_exclude_tags(self): return self.get_cleaned_data("exclude_tags") + def with_local_events(self): + return self.get_cleaned_data("include_local_events") == "True" + def get_status(self): return self.get_cleaned_data("status") @@ -261,6 +278,7 @@ class EventFilter(django_filters.FilterSet): (self.get_cleaned_data("position") is not None) and (self.get_cleaned_data("radius") is not None) ) + or self.with_local_events() ) def is_active(self, only_categories=False): @@ -276,6 +294,7 @@ class EventFilter(django_filters.FilterSet): (self.get_cleaned_data("position") is not None) and (self.get_cleaned_data("radius") is not None) ) + or self.with_local_events() ) def is_selected_tag(self, tag): @@ -333,6 +352,14 @@ class EventFilter(django_filters.FilterSet): + str(location.suggested_distance) ) + def get_url_add_local_events(self): + result = self.request.get_full_path() + return result + ("&" if "?" in result else "?") + "include_local_events=True" + + def get_url_remove_local_events(self): + result = self.request.get_full_path() + return re.sub("[?&]include_local_events=True", "", result) + class EventFilterAdmin(django_filters.FilterSet): status = django_filters.MultipleChoiceFilter( @@ -593,6 +620,7 @@ class SearchEventFilter(django_filters.FilterSet): "category", "tags", "start_day", + "local_event", ] def __init__(self, *args, **kwargs): diff --git a/src/agenda_culturel/forms.py b/src/agenda_culturel/forms.py index 9a739a6..2d85989 100644 --- a/src/agenda_culturel/forms.py +++ b/src/agenda_culturel/forms.py @@ -355,6 +355,7 @@ class EventForm(GroupFormMixin, ModelForm): self.add_group("location", _("Location")) self.fields["location"].group_id = "location" self.fields["exact_location"].group_id = "location" + self.fields["local_event"].group_id = "location" self.add_group("illustration", _("Illustration")) self.fields["local_image"].group_id = "illustration" @@ -455,7 +456,14 @@ class EventModerateForm(ModelForm): class Meta: model = Event - fields = ["status", "category", "organisers", "exact_location", "tags"] + fields = [ + "status", + "category", + "organisers", + "exact_location", + "local_event", + "tags", + ] widgets = {"status": RadioSelect} def __init__(self, *args, **kwargs): diff --git a/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po b/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po index 1b2355d..64505af 100644 --- a/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po +++ b/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: agenda_culturel\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-02 21:58+0100\n" +"POT-Creation-Date: 2025-03-13 22:05+0100\n" "PO-Revision-Date: 2023-10-29 14:16+0000\n" "Last-Translator: Jean-Marie Favreau \n" "Language-Team: Jean-Marie Favreau \n" @@ -94,83 +94,83 @@ msgstr "Soir" msgid "Select a location" msgstr "Choisir une localité" -#: agenda_culturel/filters.py:339 +#: agenda_culturel/filters.py:343 msgid "Representative version" msgstr "Version représentative" -#: agenda_culturel/filters.py:340 agenda_culturel/filters.py:347 -#: agenda_culturel/filters.py:354 agenda_culturel/filters.py:482 +#: agenda_culturel/filters.py:344 agenda_culturel/filters.py:351 +#: agenda_culturel/filters.py:358 agenda_culturel/filters.py:486 msgid "Yes" msgstr "Oui" -#: agenda_culturel/filters.py:340 agenda_culturel/filters.py:347 -#: agenda_culturel/filters.py:354 agenda_culturel/filters.py:482 +#: agenda_culturel/filters.py:344 agenda_culturel/filters.py:351 +#: agenda_culturel/filters.py:358 agenda_culturel/filters.py:486 msgid "No" msgstr "Non" -#: agenda_culturel/filters.py:346 +#: agenda_culturel/filters.py:350 msgid "Pure import" msgstr "Événement importé" -#: agenda_culturel/filters.py:353 +#: agenda_culturel/filters.py:357 msgid "In recurrent import" msgstr "Inclut dans un import récurrent" -#: agenda_culturel/filters.py:360 +#: agenda_culturel/filters.py:364 msgid "Sort by" msgstr "Trier par" -#: agenda_culturel/filters.py:362 +#: agenda_culturel/filters.py:366 msgid "last moderated first" msgstr "dernier modéré d'abord" -#: agenda_culturel/filters.py:363 +#: agenda_culturel/filters.py:367 msgid "last modified first" msgstr "dernier modifié d'abord" -#: agenda_culturel/filters.py:364 +#: agenda_culturel/filters.py:368 msgid "last imported first" msgstr "dernier importé d'abord" -#: agenda_culturel/filters.py:365 +#: agenda_culturel/filters.py:369 msgid "last created first" msgstr "dernier créé d'abord" -#: agenda_culturel/filters.py:371 +#: agenda_culturel/filters.py:375 msgid "Imported from" msgstr "Importé depuis" -#: agenda_culturel/filters.py:439 agenda_culturel/models.py:718 -#: agenda_culturel/models.py:2661 +#: agenda_culturel/filters.py:443 agenda_culturel/models.py:718 +#: agenda_culturel/models.py:2675 msgid "Status" msgstr "Status" -#: agenda_culturel/filters.py:440 agenda_culturel/models.py:2427 +#: agenda_culturel/filters.py:444 agenda_culturel/models.py:2441 msgid "Closed" msgstr "Fermé" -#: agenda_culturel/filters.py:440 +#: agenda_culturel/filters.py:444 msgid "Open" msgstr "Ouvert" -#: agenda_culturel/filters.py:444 agenda_culturel/filters.py:445 -#: agenda_culturel/models.py:2421 +#: agenda_culturel/filters.py:448 agenda_culturel/filters.py:449 +#: agenda_culturel/models.py:2435 msgid "Spam" msgstr "Spam" -#: agenda_culturel/filters.py:445 +#: agenda_culturel/filters.py:449 msgid "Non spam" msgstr "Non spam" -#: agenda_culturel/filters.py:450 agenda_culturel/models.py:2442 +#: agenda_culturel/filters.py:454 agenda_culturel/models.py:2456 msgid "Type" msgstr "Type" -#: agenda_culturel/filters.py:469 +#: agenda_culturel/filters.py:473 msgid "Search" msgstr "Rechercher" -#: agenda_culturel/filters.py:481 +#: agenda_culturel/filters.py:485 msgid "In the past" msgstr "Dans le passé" @@ -193,11 +193,11 @@ msgstr "" msgid "Your email" msgstr "Votre adresse email" -#: agenda_culturel/forms.py:164 agenda_culturel/models.py:2409 +#: agenda_culturel/forms.py:164 agenda_culturel/models.py:2423 msgid "Your email address" msgstr "Votre adresse email" -#: agenda_culturel/forms.py:170 agenda_culturel/models.py:2434 +#: agenda_culturel/forms.py:170 agenda_culturel/models.py:2448 msgid "Comments" msgstr "Commentaires" @@ -213,19 +213,19 @@ msgid "Receive notification of publication or leave a message for moderation" msgstr "Être notifié de la publication ou laisser un message à la modération" #: agenda_culturel/forms.py:204 agenda_culturel/models.py:179 -#: agenda_culturel/models.py:726 agenda_culturel/models.py:2585 -#: agenda_culturel/models.py:2696 +#: agenda_culturel/models.py:726 agenda_culturel/models.py:2599 +#: agenda_culturel/models.py:2710 msgid "Category" msgstr "Catégorie" #: agenda_culturel/forms.py:210 agenda_culturel/forms.py:243 -#: agenda_culturel/forms.py:271 agenda_culturel/forms.py:441 -#: agenda_culturel/models.py:223 agenda_culturel/models.py:833 +#: agenda_culturel/forms.py:271 agenda_culturel/forms.py:442 +#: agenda_culturel/models.py:223 agenda_culturel/models.py:843 msgid "Tags" msgstr "Étiquettes" -#: agenda_culturel/forms.py:218 agenda_culturel/forms.py:594 -#: agenda_culturel/models.py:934 +#: agenda_culturel/forms.py:218 agenda_culturel/forms.py:595 +#: agenda_culturel/models.py:944 msgid "Event" msgstr "Événement" @@ -250,39 +250,39 @@ msgid "Details" msgstr "Détails" #: agenda_culturel/forms.py:355 agenda_culturel/models.py:755 -#: agenda_culturel/models.py:2560 +#: agenda_culturel/models.py:2574 msgid "Location" msgstr "Localisation" -#: agenda_culturel/forms.py:359 agenda_culturel/models.py:789 +#: agenda_culturel/forms.py:360 agenda_culturel/models.py:799 msgid "Illustration" msgstr "Illustration" -#: agenda_culturel/forms.py:363 +#: agenda_culturel/forms.py:364 msgid "URLs" msgstr "URLs" -#: agenda_culturel/forms.py:367 agenda_culturel/forms.py:372 +#: agenda_culturel/forms.py:368 agenda_culturel/forms.py:373 msgid "Meta information" msgstr "Méta-informations" -#: agenda_culturel/forms.py:387 +#: agenda_culturel/forms.py:388 msgid "The end date must be after the start date." msgstr "La date de fin doit être après la date de début." -#: agenda_culturel/forms.py:403 +#: agenda_culturel/forms.py:404 msgid "The end time cannot be earlier than the start time." msgstr "L'heure de fin ne peut pas être avant l'heure de début." -#: agenda_culturel/forms.py:442 +#: agenda_culturel/forms.py:443 msgid "Select tags from existing ones." msgstr "Sélectionner des étiquettes depuis celles existantes." -#: agenda_culturel/forms.py:447 +#: agenda_culturel/forms.py:448 msgid "New tags" msgstr "Nouvelles étiquettes" -#: agenda_culturel/forms.py:449 +#: agenda_culturel/forms.py:450 msgid "" "Create new labels (sparingly). Note: by starting your tag with the " "characters “TW:”, youll create a “trigger warning” tag, and the associated " @@ -293,92 +293,92 @@ msgstr "" "étiquette “trigger warning”, et les événements associés seront annoncés " "comme tels." -#: agenda_culturel/forms.py:491 +#: agenda_culturel/forms.py:492 msgid "JSON in the format expected for the import." msgstr "JSON dans le format attendu pour l'import" -#: agenda_culturel/forms.py:513 +#: agenda_culturel/forms.py:514 msgid " (locally modified version)" msgstr " (version modifiée localement)" -#: agenda_culturel/forms.py:517 +#: agenda_culturel/forms.py:518 msgid " (synchronized on import version)" msgstr " (version synchronisée sur l'import)" -#: agenda_culturel/forms.py:521 +#: agenda_culturel/forms.py:522 msgid "Select {} as representative version." msgstr "Sélectionner {} comme version représentative" -#: agenda_culturel/forms.py:531 +#: agenda_culturel/forms.py:532 msgid "Update {} using some fields from other versions (interactive mode)." msgstr "" "Mettre à jour {} en utilisant quelques champs des autres versions (mode " "interactif)." -#: agenda_culturel/forms.py:538 +#: agenda_culturel/forms.py:539 msgid " Warning: a version is already locally modified." msgstr " Attention: une version a déjà été modifiée localement." -#: agenda_culturel/forms.py:545 +#: agenda_culturel/forms.py:546 msgid "Create a new version by merging (interactive mode)." msgstr "Créer une nouvelle version par fusion (mode interactif)." -#: agenda_culturel/forms.py:553 +#: agenda_culturel/forms.py:554 msgid "Make {} independent." msgstr "Rendre {} indépendant." -#: agenda_culturel/forms.py:556 +#: agenda_culturel/forms.py:557 msgid "Make all versions independent." msgstr "Rendre toutes les versions indépendantes." -#: agenda_culturel/forms.py:628 agenda_culturel/forms.py:641 +#: agenda_culturel/forms.py:629 agenda_culturel/forms.py:642 msgid "Value of version {}" msgstr "Valeur de la version {}" -#: agenda_culturel/forms.py:633 +#: agenda_culturel/forms.py:634 msgid "Value of the selected version" msgstr "Valeur de la version sélectionnée" -#: agenda_culturel/forms.py:803 +#: agenda_culturel/forms.py:804 msgid "Apply category {} to the event {}" msgstr "Appliquer la catégorie {} à l'événement {}" -#: agenda_culturel/forms.py:820 agenda_culturel/models.py:554 -#: agenda_culturel/models.py:2748 +#: agenda_culturel/forms.py:821 agenda_culturel/models.py:554 +#: agenda_culturel/models.py:2762 msgid "Place" msgstr "Lieu" -#: agenda_culturel/forms.py:822 +#: agenda_culturel/forms.py:823 msgid "Create a missing place" msgstr "Créer un lieu manquant" -#: agenda_culturel/forms.py:832 +#: agenda_culturel/forms.py:833 msgid "Add \"{}\" to the aliases of the place" msgstr "Ajouter « {} » aux alias du lieu" -#: agenda_culturel/forms.py:861 +#: agenda_culturel/forms.py:862 msgid "On saving, use aliases to detect all matching events with missing place" msgstr "" "Lors de l'enregistrement, utiliser des alias pour détecter tous les " "événements correspondants dont la place est manquante." -#: agenda_culturel/forms.py:874 +#: agenda_culturel/forms.py:875 msgid "Header" msgstr "Entête" -#: agenda_culturel/forms.py:877 agenda_culturel/models.py:516 +#: agenda_culturel/forms.py:878 agenda_culturel/models.py:516 msgid "Address" msgstr "Adresse" -#: agenda_culturel/forms.py:883 +#: agenda_culturel/forms.py:884 msgid "Meta" msgstr "Méta" -#: agenda_culturel/forms.py:886 +#: agenda_culturel/forms.py:887 msgid "Information" msgstr "Informations" -#: agenda_culturel/forms.py:938 +#: agenda_culturel/forms.py:939 msgid "Add a comment" msgstr "Ajouter un commentaire" @@ -414,7 +414,7 @@ msgstr "" #: agenda_culturel/models.py:62 agenda_culturel/models.py:109 #: agenda_culturel/models.py:188 agenda_culturel/models.py:473 #: agenda_culturel/models.py:514 agenda_culturel/models.py:620 -#: agenda_culturel/models.py:2401 agenda_culturel/models.py:2510 +#: agenda_culturel/models.py:2415 agenda_culturel/models.py:2524 msgid "Name" msgstr "Nom" @@ -475,7 +475,7 @@ msgid "Tag name" msgstr "Nom de l'étiquette" #: agenda_culturel/models.py:195 agenda_culturel/models.py:537 -#: agenda_culturel/models.py:636 agenda_culturel/models.py:772 +#: agenda_culturel/models.py:636 agenda_culturel/models.py:782 msgid "Description" msgstr "Description" @@ -651,7 +651,7 @@ msgstr "Organisme" msgid "Organisations" msgstr "Organismes" -#: agenda_culturel/models.py:666 agenda_culturel/models.py:2555 +#: agenda_culturel/models.py:666 agenda_culturel/models.py:2569 msgid "Published" msgstr "Publié" @@ -715,11 +715,25 @@ msgstr "" "Adresse d'un événement si elle n'est pas déjà présente dans la liste des " "lieux disponibles (forme libre)" -#: agenda_culturel/models.py:780 +#: agenda_culturel/models.py:772 +msgid "Local event" +msgstr "Événement de portée locale" + +#: agenda_culturel/models.py:774 +msgid "" +"If the event is a local event, it will not be proposed by default in daily, " +"weekly or monthly views, unless the user has explicitly indicated that he " +"wishes to see these events." +msgstr "" +"Si l'événement est de portée locale, il ne sera pas proposé par défaut dans " +"les vues quotidiennes, hebdomadaires ou mensuelles, sauf si l'utilisateur " +"a explicitement indiqué qu'il souhaite voir ces événements." + +#: agenda_culturel/models.py:790 msgid "Organisers" msgstr "Organisateurs" -#: agenda_culturel/models.py:782 +#: agenda_culturel/models.py:792 msgid "" "list of event organisers. Organizers will only be displayed if one of them " "does not normally use the venue." @@ -727,112 +741,112 @@ msgstr "" "Liste des organisateurs de l'événements. Les organisateurs seront affichés " "uniquement si au moins un d'entre eux n'utilise pas habituellement le lieu." -#: agenda_culturel/models.py:796 +#: agenda_culturel/models.py:806 msgid "Illustration (URL)" msgstr "Illustration (URL)" -#: agenda_culturel/models.py:797 +#: agenda_culturel/models.py:807 msgid "External URL of the illustration image" msgstr "URL externe de l'image illustrative" -#: agenda_culturel/models.py:803 +#: agenda_culturel/models.py:813 msgid "Illustration description" msgstr "Description de l'illustration" -#: agenda_culturel/models.py:804 +#: agenda_culturel/models.py:814 msgid "Alternative text used by screen readers for the image" msgstr "Texte alternatif utiliser par les lecteurs d'écrans pour l'image" -#: agenda_culturel/models.py:812 +#: agenda_culturel/models.py:822 msgid "Importation source" msgstr "Source d'importation" -#: agenda_culturel/models.py:813 +#: agenda_culturel/models.py:823 msgid "Importation source used to detect removed entries." msgstr "Source d'importation utilisée pour détecter les éléments supprimés/" -#: agenda_culturel/models.py:819 +#: agenda_culturel/models.py:829 msgid "UUIDs" msgstr "UUIDs" -#: agenda_culturel/models.py:820 +#: agenda_culturel/models.py:830 msgid "UUIDs from import to detect duplicated entries." msgstr "UUIDs utilisés pendant l'import pour détecter les entrées dupliquées" -#: agenda_culturel/models.py:826 +#: agenda_culturel/models.py:836 msgid "Online sources or ticketing" msgstr "Sources en ligne ou billetterie" -#: agenda_culturel/models.py:840 +#: agenda_culturel/models.py:850 msgid "Other versions" msgstr "" -#: agenda_culturel/models.py:935 +#: agenda_culturel/models.py:945 msgid "Events" msgstr "Événements" -#: agenda_culturel/models.py:991 +#: agenda_culturel/models.py:1001 msgid "recurrent import" msgstr "import récurrent" -#: agenda_culturel/models.py:993 +#: agenda_culturel/models.py:1003 msgid "a non authenticated user" msgstr "un utilisateur non connecté" -#: agenda_culturel/models.py:1460 +#: agenda_culturel/models.py:1470 msgid "Your event has been published" msgstr "Ton événement a été publié" -#: agenda_culturel/models.py:1465 +#: agenda_culturel/models.py:1475 msgid "Your message has not been retained" msgstr "Ton événement n'a pas été retenu" -#: agenda_culturel/models.py:1553 agenda_culturel/models.py:2365 +#: agenda_culturel/models.py:1563 agenda_culturel/models.py:2379 msgid "Warning" msgstr "Warning" -#: agenda_culturel/models.py:1555 agenda_culturel/models.py:1657 +#: agenda_culturel/models.py:1565 agenda_culturel/models.py:1671 msgid "the date has not been imported correctly." msgstr "la date n'a pas été importée correctement." -#: agenda_culturel/models.py:1639 +#: agenda_culturel/models.py:1653 msgid "during import process" msgstr "pendant le processus d'import" -#: agenda_culturel/models.py:1655 agenda_culturel/models.py:1665 -#: agenda_culturel/models.py:1676 +#: agenda_culturel/models.py:1669 agenda_culturel/models.py:1679 +#: agenda_culturel/models.py:1690 msgid "warning" msgstr "attention" -#: agenda_culturel/models.py:1667 +#: agenda_culturel/models.py:1681 msgid "the title has not been imported correctly." msgstr "le titre n'a pas été importé correctement." -#: agenda_culturel/models.py:1679 +#: agenda_culturel/models.py:1693 msgid "The import was unable to find an event in the page." msgstr "L'import a été incapable de trouver un événement dans la page." -#: agenda_culturel/models.py:2027 +#: agenda_culturel/models.py:2041 msgid "Updated field(s): " msgstr "Champ(s) mis à jour: " -#: agenda_culturel/models.py:2031 +#: agenda_culturel/models.py:2045 msgid "Update" msgstr "Mise à jour" -#: agenda_culturel/models.py:2032 +#: agenda_culturel/models.py:2046 msgid "update process" msgstr "processus de mise à jour" -#: agenda_culturel/models.py:2101 +#: agenda_culturel/models.py:2115 msgid "Import" msgstr "Import" -#: agenda_culturel/models.py:2102 +#: agenda_culturel/models.py:2116 msgid "import process" msgstr "processus d'import" -#: agenda_culturel/models.py:2104 +#: agenda_culturel/models.py:2118 msgid "" "The duration of the event is a little too long for direct publication. " "Moderators can choose to publish it or not." @@ -840,191 +854,191 @@ msgstr "" "La durée de l'événement est un peu trop longue pour qu'il soit publié " "directement. Les modérateurs peuvent choisir de le publier ou non." -#: agenda_culturel/models.py:2356 +#: agenda_culturel/models.py:2370 msgid "From contributor" msgstr "D'un·e contributeurice" -#: agenda_culturel/models.py:2357 +#: agenda_culturel/models.py:2371 msgid "Import process" msgstr "Processus d'import" -#: agenda_culturel/models.py:2358 +#: agenda_culturel/models.py:2372 msgid "Update process" msgstr "Processus de mise à jour" -#: agenda_culturel/models.py:2359 +#: agenda_culturel/models.py:2373 msgid "Contact form" msgstr "Formulaire de contact" -#: agenda_culturel/models.py:2360 +#: agenda_culturel/models.py:2374 msgid "Event report" msgstr "Signalemet d'événement" -#: agenda_culturel/models.py:2363 +#: agenda_culturel/models.py:2377 msgid "From contributor (without message)" msgstr "D'un·e contributeurice (sans message)" -#: agenda_culturel/models.py:2368 agenda_culturel/models.py:2415 +#: agenda_culturel/models.py:2382 agenda_culturel/models.py:2429 msgid "Message" msgstr "Message" -#: agenda_culturel/models.py:2369 +#: agenda_culturel/models.py:2383 msgid "Messages" msgstr "Messages" -#: agenda_culturel/models.py:2378 +#: agenda_culturel/models.py:2392 msgid "Subject" msgstr "Sujet" -#: agenda_culturel/models.py:2379 +#: agenda_culturel/models.py:2393 msgid "The subject of your message" msgstr "Sujet de votre message" -#: agenda_culturel/models.py:2385 +#: agenda_culturel/models.py:2399 msgid "Related event" msgstr "Événement associé" -#: agenda_culturel/models.py:2386 +#: agenda_culturel/models.py:2400 msgid "The message is associated with this event." msgstr "Le message est associé à cet événement." -#: agenda_culturel/models.py:2394 +#: agenda_culturel/models.py:2408 msgid "Author of the message" msgstr "Auteur du message" -#: agenda_culturel/models.py:2402 +#: agenda_culturel/models.py:2416 msgid "Your name" msgstr "Votre nom" -#: agenda_culturel/models.py:2408 +#: agenda_culturel/models.py:2422 msgid "Email address" msgstr "Adresse email" -#: agenda_culturel/models.py:2415 +#: agenda_culturel/models.py:2429 msgid "Your message" msgstr "Votre message" -#: agenda_culturel/models.py:2422 +#: agenda_culturel/models.py:2436 msgid "This message is a spam." msgstr "Ce message est un spam." -#: agenda_culturel/models.py:2429 +#: agenda_culturel/models.py:2443 msgid "this message has been processed and no longer needs to be handled" msgstr "Ce message a été traité et ne nécessite plus d'être pris en charge" -#: agenda_culturel/models.py:2435 +#: agenda_culturel/models.py:2449 msgid "Comments on the message from the moderation team" msgstr "Commentaires sur ce message par l'équipe de modération" -#: agenda_culturel/models.py:2468 agenda_culturel/models.py:2643 +#: agenda_culturel/models.py:2482 agenda_culturel/models.py:2657 msgid "Recurrent import" msgstr "Import récurrent" -#: agenda_culturel/models.py:2469 +#: agenda_culturel/models.py:2483 msgid "Recurrent imports" msgstr "Imports récurrents" -#: agenda_culturel/models.py:2473 +#: agenda_culturel/models.py:2487 msgid "ical" msgstr "ical" -#: agenda_culturel/models.py:2474 +#: agenda_culturel/models.py:2488 msgid "ical no busy" msgstr "ical sans busy" -#: agenda_culturel/models.py:2475 +#: agenda_culturel/models.py:2489 msgid "ical no VC" msgstr "ical sans VC" -#: agenda_culturel/models.py:2476 +#: agenda_culturel/models.py:2490 msgid "ical naive timezone" msgstr "ical timezone naïve" -#: agenda_culturel/models.py:2477 +#: agenda_culturel/models.py:2491 msgid "lacoope.org" msgstr "lacoope.org" -#: agenda_culturel/models.py:2478 +#: agenda_culturel/models.py:2492 msgid "la comédie" msgstr "la comédie" -#: agenda_culturel/models.py:2479 +#: agenda_culturel/models.py:2493 msgid "le fotomat" msgstr "le fotomat" -#: agenda_culturel/models.py:2480 +#: agenda_culturel/models.py:2494 msgid "la puce à l'oreille" msgstr "la puce à loreille" -#: agenda_culturel/models.py:2481 +#: agenda_culturel/models.py:2495 msgid "Plugin wordpress MEC" msgstr "Plugin wordpress MEC" -#: agenda_culturel/models.py:2482 +#: agenda_culturel/models.py:2496 msgid "Événements d'une page FB" msgstr "Événements d'une page FB" -#: agenda_culturel/models.py:2483 +#: agenda_culturel/models.py:2497 msgid "Billetterie Clermont-Ferrand" msgstr "" -#: agenda_culturel/models.py:2484 +#: agenda_culturel/models.py:2498 msgid "Arachnée concert" msgstr "Arachnée concert" -#: agenda_culturel/models.py:2485 +#: agenda_culturel/models.py:2499 msgid "Le Rio" msgstr "Le Rio" -#: agenda_culturel/models.py:2486 +#: agenda_culturel/models.py:2500 msgid "La Raymonde" msgstr "La Raymone" -#: agenda_culturel/models.py:2487 +#: agenda_culturel/models.py:2501 msgid "Agenda apidae tourisme" msgstr "Agenda apidae tourisme" -#: agenda_culturel/models.py:2488 +#: agenda_culturel/models.py:2502 msgid "Agenda iguana (médiathèques)" msgstr "Agenda iguana (médiathèques)" -#: agenda_culturel/models.py:2489 +#: agenda_culturel/models.py:2503 msgid "Mille formes" msgstr "Mille Formes" -#: agenda_culturel/models.py:2490 +#: agenda_culturel/models.py:2504 msgid "Les Amis du Temps des Cerises" msgstr "Les Amis du Temps des Cerises" -#: agenda_culturel/models.py:2491 +#: agenda_culturel/models.py:2505 msgid "Mobilizon" msgstr "Mobilizon" -#: agenda_culturel/models.py:2494 +#: agenda_culturel/models.py:2508 msgid "simple" msgstr "simple" -#: agenda_culturel/models.py:2495 +#: agenda_culturel/models.py:2509 msgid "Headless Chromium" msgstr "chromium sans interface" -#: agenda_culturel/models.py:2498 +#: agenda_culturel/models.py:2512 msgid "Headless Chromium (pause)" msgstr "chromium sans interface (pause)" -#: agenda_culturel/models.py:2504 +#: agenda_culturel/models.py:2518 msgid "daily" msgstr "chaque jour" -#: agenda_culturel/models.py:2506 +#: agenda_culturel/models.py:2520 msgid "weekly" msgstr "chaque semaine" -#: agenda_culturel/models.py:2507 +#: agenda_culturel/models.py:2521 msgid "never" msgstr "jamais" -#: agenda_culturel/models.py:2512 +#: agenda_culturel/models.py:2526 msgid "" "Recurrent import name. Be careful to choose a name that is easy to " "understand, as it will be public and displayed on the sites About page." @@ -1032,151 +1046,151 @@ msgstr "" "Nom de l'import récurrent. Attention à choisir un nom compréhensible, car il " "sera public, et affiché sur la page à propos du site." -#: agenda_culturel/models.py:2519 +#: agenda_culturel/models.py:2533 msgid "Processor" msgstr "Processeur" -#: agenda_culturel/models.py:2525 +#: agenda_culturel/models.py:2539 msgid "Downloader" msgstr "Téléchargeur" -#: agenda_culturel/models.py:2532 +#: agenda_culturel/models.py:2546 msgid "Import recurrence" msgstr "Récurrence d'import" -#: agenda_culturel/models.py:2539 +#: agenda_culturel/models.py:2553 msgid "Source" msgstr "Source" -#: agenda_culturel/models.py:2540 +#: agenda_culturel/models.py:2554 msgid "URL of the source document" msgstr "URL du document source" -#: agenda_culturel/models.py:2545 +#: agenda_culturel/models.py:2559 msgid "Browsable url" msgstr "URL navigable" -#: agenda_culturel/models.py:2547 +#: agenda_culturel/models.py:2561 msgid "URL of the corresponding document that will be shown to visitors." msgstr "URL correspondant au document et qui sera montrée aux visiteurs" -#: agenda_culturel/models.py:2556 +#: agenda_culturel/models.py:2570 msgid "Status of each imported event (published or draft)" msgstr "Status de chaque événement importé (publié ou brouillon)" -#: agenda_culturel/models.py:2561 +#: agenda_culturel/models.py:2575 msgid "Address for each imported event" msgstr "Adresse de chaque événement importé" -#: agenda_culturel/models.py:2568 +#: agenda_culturel/models.py:2582 msgid "Force location" msgstr "Focer la localisation" -#: agenda_culturel/models.py:2569 +#: agenda_culturel/models.py:2583 msgid "force location even if another is detected." msgstr "Forcer la localisation même si une autre a été détectée." -#: agenda_culturel/models.py:2575 +#: agenda_culturel/models.py:2589 msgid "Organiser" msgstr "Organisateur" -#: agenda_culturel/models.py:2576 +#: agenda_culturel/models.py:2590 msgid "Organiser of each imported event" msgstr "Organisateur de chaque événement importé" -#: agenda_culturel/models.py:2586 +#: agenda_culturel/models.py:2600 msgid "Category of each imported event" msgstr "Catégorie de chaque événement importé" -#: agenda_culturel/models.py:2594 +#: agenda_culturel/models.py:2608 msgid "Tags for each imported event" msgstr "Étiquettes de chaque événement importé" -#: agenda_culturel/models.py:2595 +#: agenda_culturel/models.py:2609 msgid "A list of tags that describe each imported event." msgstr "Une liste d'étiquettes décrivant chaque événement importé" -#: agenda_culturel/models.py:2624 +#: agenda_culturel/models.py:2638 msgid "Running" msgstr "En cours" -#: agenda_culturel/models.py:2625 +#: agenda_culturel/models.py:2639 msgid "Canceled" msgstr "Annulé" -#: agenda_culturel/models.py:2626 +#: agenda_culturel/models.py:2640 msgid "Success" msgstr "Succès" -#: agenda_culturel/models.py:2627 +#: agenda_culturel/models.py:2641 msgid "Failed" msgstr "Erreur" -#: agenda_culturel/models.py:2630 +#: agenda_culturel/models.py:2644 msgid "Batch importation" msgstr "Importation par lot" -#: agenda_culturel/models.py:2631 +#: agenda_culturel/models.py:2645 msgid "Batch importations" msgstr "Importations par lot" -#: agenda_culturel/models.py:2644 +#: agenda_culturel/models.py:2658 msgid "Reference to the recurrent import processing" msgstr "Référence du processus d'import récurrent" -#: agenda_culturel/models.py:2652 +#: agenda_culturel/models.py:2666 msgid "URL (if not recurrent import)" msgstr "URL (si pas d'import récurrent)" -#: agenda_culturel/models.py:2653 +#: agenda_culturel/models.py:2667 msgid "Source URL if no RecurrentImport is associated." msgstr "URL source si aucun import récurrent n'est associé" -#: agenda_culturel/models.py:2668 +#: agenda_culturel/models.py:2682 msgid "Error message" msgstr "Votre message" -#: agenda_culturel/models.py:2672 +#: agenda_culturel/models.py:2686 msgid "Number of collected events" msgstr "Nombre d'événements collectés" -#: agenda_culturel/models.py:2675 +#: agenda_culturel/models.py:2689 msgid "Number of imported events" msgstr "Nombre d'événements importés" -#: agenda_culturel/models.py:2678 +#: agenda_culturel/models.py:2692 msgid "Number of updated events" msgstr "Nombre d'événements mis à jour" -#: agenda_culturel/models.py:2681 +#: agenda_culturel/models.py:2695 msgid "Number of removed events" msgstr "Nombre d'événements supprimés" -#: agenda_culturel/models.py:2689 +#: agenda_culturel/models.py:2703 msgid "Weight" msgstr "Poids" -#: agenda_culturel/models.py:2690 +#: agenda_culturel/models.py:2704 msgid "The lower is the weight, the earlier the filter is applied" msgstr "Plus le poids est léger, plus le filtre sera appliqué tôt" -#: agenda_culturel/models.py:2697 +#: agenda_culturel/models.py:2711 msgid "Category applied to the event" msgstr "Catégorie appliquée à l'événement" -#: agenda_culturel/models.py:2702 +#: agenda_culturel/models.py:2716 msgid "Contained in the title" msgstr "Contenu dans le titre" -#: agenda_culturel/models.py:2703 +#: agenda_culturel/models.py:2717 msgid "Text contained in the event title" msgstr "Texte contenu dans le titre de l'événement" -#: agenda_culturel/models.py:2709 +#: agenda_culturel/models.py:2723 msgid "Exact title extract" msgstr "Extrait exact du titre" -#: agenda_culturel/models.py:2711 +#: agenda_culturel/models.py:2725 msgid "" "If checked, the extract will be searched for in the title using the exact " "form (capitals, accents)." @@ -1184,19 +1198,19 @@ msgstr "" "Si coché, l'extrait sera recherché dans le titre en utilisant la forme " "exacte (majuscules, accents)" -#: agenda_culturel/models.py:2717 +#: agenda_culturel/models.py:2731 msgid "Contained in the description" msgstr "Contenu dans la description" -#: agenda_culturel/models.py:2718 +#: agenda_culturel/models.py:2732 msgid "Text contained in the description" msgstr "Texte contenu dans la description" -#: agenda_culturel/models.py:2724 +#: agenda_culturel/models.py:2738 msgid "Exact description extract" msgstr "Extrait exact de description" -#: agenda_culturel/models.py:2726 +#: agenda_culturel/models.py:2740 msgid "" "If checked, the extract will be searched for in the description using the " "exact form (capitals, accents)." @@ -1204,19 +1218,19 @@ msgstr "" "Si coché, l'extrait sera recherché dans la description en utilisant la forme " "exacte (majuscules, accents)" -#: agenda_culturel/models.py:2732 +#: agenda_culturel/models.py:2746 msgid "Contained in the location" msgstr "Contenu dans la localisation" -#: agenda_culturel/models.py:2733 +#: agenda_culturel/models.py:2747 msgid "Text contained in the event location" msgstr "Texte contenu dans la localisation de l'événement" -#: agenda_culturel/models.py:2739 +#: agenda_culturel/models.py:2753 msgid "Exact location extract" msgstr "Extrait exact de localisation" -#: agenda_culturel/models.py:2741 +#: agenda_culturel/models.py:2755 msgid "" "If checked, the extract will be searched for in the location using the exact " "form (capitals, accents)." @@ -1224,15 +1238,15 @@ msgstr "" "Si coché, l'extrait sera recherché dans la localisation en utilisant la " "forme exacte (majuscules, accents)" -#: agenda_culturel/models.py:2749 +#: agenda_culturel/models.py:2763 msgid "Location from place" msgstr "Localisation depuis le lieu" -#: agenda_culturel/models.py:2758 +#: agenda_culturel/models.py:2772 msgid "Categorisation rule" msgstr "Règle de catégorisation" -#: agenda_culturel/models.py:2759 +#: agenda_culturel/models.py:2773 msgid "Categorisation rules" msgstr "Règles de catégorisation" @@ -1240,35 +1254,35 @@ msgstr "Règles de catégorisation" msgid "French" msgstr "français" -#: agenda_culturel/views.py:155 +#: agenda_culturel/views.py:156 msgid "Recurrent import name" msgstr "Nome de l'import récurrent" -#: agenda_culturel/views.py:156 +#: agenda_culturel/views.py:157 msgid "Add another" msgstr "Ajouter un autre" -#: agenda_culturel/views.py:157 +#: agenda_culturel/views.py:158 msgid "Browse..." msgstr "Naviguer..." -#: agenda_culturel/views.py:158 +#: agenda_culturel/views.py:159 msgid "No file selected." msgstr "Pas de fichier sélectionné." -#: agenda_culturel/views.py:176 +#: agenda_culturel/views.py:177 msgid ": error 500" msgstr ": erreur 500" -#: agenda_culturel/views.py:177 +#: agenda_culturel/views.py:178 msgid "An internal error has occurred on site {} at address {}." msgstr "Une erreur interne s'est produite sur le site {} à l'adresse {}." -#: agenda_culturel/views.py:406 +#: agenda_culturel/views.py:411 msgid "The static content has been successfully updated." msgstr "Le contenu statique a été modifié avec succès." -#: agenda_culturel/views.py:417 +#: agenda_culturel/views.py:422 msgid "" "The event cannot be updated because the import process is not available for " "the referenced sources." @@ -1276,21 +1290,21 @@ msgstr "" "La mise à jour de l'événement n'est pas possible car le processus d'import " "n'est pas disponible pour les sources référencées." -#: agenda_culturel/views.py:430 +#: agenda_culturel/views.py:435 msgid "The event update has been queued and will be completed shortly." msgstr "" "La mise à jour de l'événement a été mise en attente et sera effectuée sous " "peu." -#: agenda_culturel/views.py:455 agenda_culturel/views.py:521 +#: agenda_culturel/views.py:460 agenda_culturel/views.py:532 msgid " A message has been sent to the person who proposed the event." msgstr " Un message a été envoyé à la personne qui a proposé l'événement." -#: agenda_culturel/views.py:459 +#: agenda_culturel/views.py:464 msgid "The event has been successfully modified." msgstr "L'événement a été modifié avec succès." -#: agenda_culturel/views.py:478 +#: agenda_culturel/views.py:483 msgid "" "Changes will be visible on a local copy of the event. The version identical " "to the imported source will be hidden." @@ -1298,19 +1312,19 @@ msgstr "" "Les modifications seront visibles sur une copie locale de l'événement. La " "version fidèle à la source importée sera masquée." -#: agenda_culturel/views.py:526 +#: agenda_culturel/views.py:537 msgid "The event {} has been moderated with success." msgstr "L'événement {} a été modéré avec succès." -#: agenda_culturel/views.py:662 +#: agenda_culturel/views.py:673 msgid "The event has been successfully deleted." msgstr "L'événement a été supprimé avec succès." -#: agenda_culturel/views.py:712 +#: agenda_culturel/views.py:723 msgid "Comment" msgstr "Commentaire" -#: agenda_culturel/views.py:738 +#: agenda_culturel/views.py:749 msgid "" "The status has been successfully modified and a message has been sent to the " "person who proposed the event." @@ -1318,15 +1332,15 @@ msgstr "" "Le status a été modifié avec succès et un message a été envoyé à la personne " "qui a proposé l'événement." -#: agenda_culturel/views.py:742 +#: agenda_culturel/views.py:753 msgid "The status has been successfully modified." msgstr "Le status a été modifié avec succès." -#: agenda_culturel/views.py:779 +#: agenda_culturel/views.py:793 msgid "The event was created: {}." msgstr "L'événement a été créé: {}." -#: agenda_culturel/views.py:785 +#: agenda_culturel/views.py:799 msgid "" "The event has been submitted and will be published as soon as it has been " "validated by the moderation team." @@ -1334,99 +1348,99 @@ msgstr "" "L'événement a été soumis et sera publié dès qu'il aura été validé par " "l'équipe de modération." -#: agenda_culturel/views.py:799 +#: agenda_culturel/views.py:813 msgid "during the creation process" msgstr "pendant le processus d'import" -#: agenda_culturel/views.py:822 +#: agenda_culturel/views.py:836 msgid "A message has been sent to the person who proposed the initial event." msgstr "" "Un message a été envoyé à la personne qui a proposé l'événement initial." -#: agenda_culturel/views.py:915 agenda_culturel/views.py:993 +#: agenda_culturel/views.py:929 agenda_culturel/views.py:1007 msgid "{} has not been submitted since its already known: {}." msgstr "{} n'a pas été soumis car il est déjà connu: {}." -#: agenda_culturel/views.py:924 agenda_culturel/views.py:1002 +#: agenda_culturel/views.py:938 agenda_culturel/views.py:1016 msgid "" "{} has not been submitted since its already known and currently into " "moderation process." msgstr "{} n'a pas été soumis car il est déjà connu et en cours de modération" -#: agenda_culturel/views.py:936 +#: agenda_culturel/views.py:950 msgid "Integrating {} url(s) into our import process." msgstr "Intégration de {} url(s) dans notre processus d'import." -#: agenda_culturel/views.py:1011 +#: agenda_culturel/views.py:1025 msgid "Integrating {} into our import process." msgstr "Intégration de {} dans notre processus d'import." -#: agenda_culturel/views.py:1097 +#: agenda_culturel/views.py:1141 msgid "Your message has been sent successfully." msgstr "Votre message a été envoyé avec succès." -#: agenda_culturel/views.py:1130 +#: agenda_culturel/views.py:1174 msgid "Reporting the event {} on {}" msgstr "Signaler l'événement {} du {}" -#: agenda_culturel/views.py:1140 +#: agenda_culturel/views.py:1184 msgid "The contact message has been successfully deleted." msgstr "Le message de contact a été supprimé avec succès." -#: agenda_culturel/views.py:1156 +#: agenda_culturel/views.py:1200 msgid "The contact message properties has been successfully modified." msgstr "Les propriétés du message de contact ont été modifié avec succès." -#: agenda_culturel/views.py:1334 +#: agenda_culturel/views.py:1378 msgid "Spam has been successfully deleted." msgstr "Le spam a été supprimé avec succès" -#: agenda_culturel/views.py:1511 +#: agenda_culturel/views.py:1555 msgid "The import has been run successfully." msgstr "L'import a été lancé avec succès" -#: agenda_culturel/views.py:1533 +#: agenda_culturel/views.py:1577 msgid "The import has been canceled." msgstr "L'import a été annulé" -#: agenda_culturel/views.py:1556 +#: agenda_culturel/views.py:1600 msgid "The orphan event update has been launched." msgstr "La mise à jour de l'événement orphelin a été lancée." -#: agenda_culturel/views.py:1652 +#: agenda_culturel/views.py:1696 msgid "The recurrent import has been successfully modified." msgstr "L'import récurrent a été modifié avec succès." -#: agenda_culturel/views.py:1664 +#: agenda_culturel/views.py:1708 msgid "The recurrent import has been successfully deleted." msgstr "L'import récurrent a été supprimé avec succès" -#: agenda_culturel/views.py:1710 +#: agenda_culturel/views.py:1754 msgid "The import has been launched." msgstr "L'import a été lancé" -#: agenda_culturel/views.py:1737 +#: agenda_culturel/views.py:1781 msgid "Imports has been launched." msgstr "Les imports ont été lancés" -#: agenda_culturel/views.py:1759 +#: agenda_culturel/views.py:1803 msgid "Facebook imports has been launched." msgstr "Les imports Facebook ont été lancés" -#: agenda_culturel/views.py:1822 +#: agenda_culturel/views.py:1866 msgid "Update successfully completed." msgstr "Mise à jour réalisée avec succès." -#: agenda_culturel/views.py:1890 +#: agenda_culturel/views.py:1934 msgid "Creation of a merged event has been successfully completed." msgstr "Création d'un événement fusionné réalisée avec succès." -#: agenda_culturel/views.py:1927 +#: agenda_culturel/views.py:1971 msgid "Events have been marked as unduplicated." msgstr "Les événements ont été marqués comme non dupliqués." -#: agenda_culturel/views.py:1944 agenda_culturel/views.py:1961 -#: agenda_culturel/views.py:1989 +#: agenda_culturel/views.py:1988 agenda_culturel/views.py:2005 +#: agenda_culturel/views.py:2033 msgid "" "The selected item is no longer included in the list of duplicates. Someone " "else has probably modified the list in the meantime." @@ -1434,23 +1448,23 @@ msgstr "" "L'élément sélectionné ne fait plus partie de la liste des dupliqués. Une " "autre personne a probablement modifié la liste entre temps." -#: agenda_culturel/views.py:1951 +#: agenda_culturel/views.py:1995 msgid "The selected event has been set as representative" msgstr "L'événement sélectionné a été défini comme representatif." -#: agenda_culturel/views.py:1975 +#: agenda_culturel/views.py:2019 msgid "The event has been withdrawn from the group and made independent." msgstr "L'événement a été retiré du groupe et rendu indépendant." -#: agenda_culturel/views.py:2025 +#: agenda_culturel/views.py:2069 msgid "Cleaning up duplicates: {} item(s) fixed." msgstr "Nettoyage des dupliqués: {} élément(s) corrigé(s)." -#: agenda_culturel/views.py:2074 +#: agenda_culturel/views.py:2118 msgid "The event was successfully duplicated." msgstr "L'événement a été marqué dupliqué avec succès." -#: agenda_culturel/views.py:2082 +#: agenda_culturel/views.py:2126 msgid "" "The event has been successfully flagged as a duplicate. The moderation team " "will deal with your suggestion shortly." @@ -1458,32 +1472,32 @@ msgstr "" "L'événement a été signalé comme dupliqué avec succès. Votre suggestion sera " "prochainement prise en charge par l'équipe de modération." -#: agenda_culturel/views.py:2144 +#: agenda_culturel/views.py:2188 msgid "The categorisation rule has been successfully modified." msgstr "La règle de catégorisation a été modifiée avec succès." -#: agenda_culturel/views.py:2156 +#: agenda_culturel/views.py:2200 msgid "The categorisation rule has been successfully deleted." msgstr "La règle de catégorisation a été supprimée avec succès" -#: agenda_culturel/views.py:2178 +#: agenda_culturel/views.py:2222 msgid "The rules were successfully applied and 1 event was categorised." msgstr "" "Les règles ont été appliquées avec succès et 1 événement a été catégorisé" -#: agenda_culturel/views.py:2185 +#: agenda_culturel/views.py:2229 msgid "The rules were successfully applied and {} events were categorised." msgstr "" "Les règles ont été appliquées avec succès et {} événements ont été " "catégorisés" -#: agenda_culturel/views.py:2192 agenda_culturel/views.py:2256 +#: agenda_culturel/views.py:2236 agenda_culturel/views.py:2300 msgid "The rules were successfully applied and no events were categorised." msgstr "" "Les règles ont été appliquées avec succès et aucun événement n'a été " "catégorisé" -#: agenda_culturel/views.py:2242 +#: agenda_culturel/views.py:2286 msgid "" "The rules were successfully applied and 1 event with default category was " "categorised." @@ -1491,7 +1505,7 @@ msgstr "" "Les règles ont été appliquées avec succès et 1 événement avec catégorie par " "défaut a été catégorisé" -#: agenda_culturel/views.py:2249 +#: agenda_culturel/views.py:2293 msgid "" "The rules were successfully applied and {} events with default category were " "categorised." @@ -1499,58 +1513,58 @@ msgstr "" "Les règles ont été appliquées avec succès et {} événements avec catégorie " "par défaut ont été catégorisés" -#: agenda_culturel/views.py:2355 agenda_culturel/views.py:2417 -#: agenda_culturel/views.py:2457 +#: agenda_culturel/views.py:2399 agenda_culturel/views.py:2461 +#: agenda_culturel/views.py:2501 msgid "{} events have been updated." msgstr "{} événements ont été mis à jour." -#: agenda_culturel/views.py:2358 agenda_culturel/views.py:2419 -#: agenda_culturel/views.py:2460 +#: agenda_culturel/views.py:2402 agenda_culturel/views.py:2463 +#: agenda_culturel/views.py:2504 msgid "1 event has been updated." msgstr "1 événement a été mis à jour" -#: agenda_culturel/views.py:2360 agenda_culturel/views.py:2421 -#: agenda_culturel/views.py:2462 +#: agenda_culturel/views.py:2404 agenda_culturel/views.py:2465 +#: agenda_culturel/views.py:2506 msgid "No events have been modified." msgstr "Aucun événement n'a été modifié." -#: agenda_culturel/views.py:2369 +#: agenda_culturel/views.py:2413 msgid "The place has been successfully updated." msgstr "Le lieu a été modifié avec succès." -#: agenda_culturel/views.py:2378 +#: agenda_culturel/views.py:2422 msgid "The place has been successfully created." msgstr "Le lieu a été créé avec succès." -#: agenda_culturel/views.py:2444 +#: agenda_culturel/views.py:2488 msgid "The selected place has been assigned to the event." msgstr "Le lieu sélectionné a été assigné à l'événement." -#: agenda_culturel/views.py:2449 +#: agenda_culturel/views.py:2493 msgid "A new alias has been added to the selected place." msgstr "Un nouvel alias a été créé pour le lieu sélectionné." -#: agenda_culturel/views.py:2576 +#: agenda_culturel/views.py:2620 msgid "The organisation has been successfully updated." msgstr "L'organisme a été modifié avec succès." -#: agenda_culturel/views.py:2583 +#: agenda_culturel/views.py:2627 msgid "The organisation has been successfully created." msgstr "L'organisme a été créé avec succès." -#: agenda_culturel/views.py:2602 +#: agenda_culturel/views.py:2646 msgid "The tag has been successfully updated." msgstr "L'étiquette a été modifiée avec succès." -#: agenda_culturel/views.py:2609 +#: agenda_culturel/views.py:2653 msgid "The tag has been successfully created." msgstr "L'étiquette a été créée avec succès." -#: agenda_culturel/views.py:2767 +#: agenda_culturel/views.py:2819 msgid "You have not modified the tag name." msgstr "Vous n'avez pas modifié le nom de l'étiquette." -#: agenda_culturel/views.py:2782 +#: agenda_culturel/views.py:2834 msgid "" "This tag {} is already in use, and is described by different information " "from the current tag. You can force renaming by checking the corresponding " @@ -1563,7 +1577,7 @@ msgstr "" "sera supprimée, et tous les événements associés à l'étiquette {} seront " "associés à l'étiquette {}." -#: agenda_culturel/views.py:2796 +#: agenda_culturel/views.py:2848 msgid "" "This tag {} is already in use. You can force renaming by checking the " "corresponding option." @@ -1571,15 +1585,15 @@ msgstr "" "Cette étiquette {} est déjà utilisée. Vous pouvez forcer le renommage en " "cochant l'option correspondante." -#: agenda_culturel/views.py:2829 +#: agenda_culturel/views.py:2881 msgid "The tag {} has been successfully renamed to {}." msgstr "L'étiquette {} a été renommée avec succès en {}." -#: agenda_culturel/views.py:2871 +#: agenda_culturel/views.py:2923 msgid "The tag {} has been successfully deleted." msgstr "L'événement {} a été supprimé avec succès." -#: agenda_culturel/views.py:2897 +#: agenda_culturel/views.py:2949 msgid "Cache successfully cleared." msgstr "Le cache a été vidé avec succès." diff --git a/src/agenda_culturel/migrations/0153_event_local_event.py b/src/agenda_culturel/migrations/0153_event_local_event.py new file mode 100644 index 0000000..732b9f6 --- /dev/null +++ b/src/agenda_culturel/migrations/0153_event_local_event.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.19 on 2025-03-13 22:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("agenda_culturel", "0152_alter_recurrentimport_recurrence"), + ] + + operations = [ + migrations.AddField( + model_name="event", + name="local_event", + field=models.BooleanField( + default=False, + help_text="If the event is a local event, it will not be proposed by default in daily, weekly or monthly views, unless the user has explicitly indicated that he wishes to see these events.", + verbose_name="Local event", + ), + ), + ] diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index f3de32e..5f5f3cc 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -768,6 +768,16 @@ class Event(models.Model): blank=True, ) + local_event = models.BooleanField( + verbose_name=_("Local event"), + help_text=_( + "If the event is a local event, it will not be proposed by default in daily, weekly or monthly views, unless the user has explicitly indicated that he wishes to see these events." + ), + default=False, + null=False, + blank=False, + ) + description = models.TextField( verbose_name=_("Description"), blank=True, diff --git a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html index 18b8545..c90e2b5 100644 --- a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html @@ -17,6 +17,7 @@ {% for s in filter.get_status_names %}{{ s }}{% endfor %} {{ filter.get_recurrence_filtering }} {{ filter.get_position_radius }} + {% if filter.with_local_events %}avec les événements de portée locale{% endif %} {% else %} Filtrer {% endif %} @@ -30,7 +31,7 @@
{% for f in filter.form.visible_fields %} - {% if f.id_for_label and f.id_for_label in "id_position,id_radius" %} + {% if f.id_for_label and f.id_for_label in "id_position,id_radius,id_include_local_events" %}
{{ f.errors }} {{ f.label_tag }} {{ f }} @@ -41,7 +42,7 @@
{% for f in filter.form.visible_fields %} - {% if not f.id_for_label or not f.id_for_label in "id_position,id_radius" %} + {% if not f.id_for_label or not f.id_for_label in "id_position,id_radius,id_include_local_events" %}

{{ f.errors }} {{ f.label_tag }} {{ f }} diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html index e92a4e3..e610997 100644 --- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-elegant-inc.html @@ -49,6 +49,11 @@ {% endif %} {% endif %} + {% if event.local_event %} +

+ Événement de portée locale +

+ {% endif %} {% if event|need_complete_display:True %}

{% picto_from_name "calendar" %} diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html index b9b5553..58562bf 100644 --- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html @@ -58,6 +58,11 @@ {% endif %} {% endif %}

+ {% if event.local_event %} + + {% endif %} {% if event.has_recurrences %}

+ Événement de portée locale +

+ {% endif %} {% with event.get_shown_organisers as organisers %} {% if organisers and organisers|length > 0 %}

diff --git a/src/agenda_culturel/templatetags/locations_extra.py b/src/agenda_culturel/templatetags/locations_extra.py index 4d735ca..f122018 100644 --- a/src/agenda_culturel/templatetags/locations_extra.py +++ b/src/agenda_culturel/templatetags/locations_extra.py @@ -13,7 +13,22 @@ def show_suggested_positions(filter): filter.form.full_clean() if filter.is_filtered_by_position_radius(): - return "" + if filter.with_local_events(): + return mark_safe( + ' ' + + picto_from_name("minus-circle") + + " cacher les événements de portée locale" + ) + else: + return mark_safe( + ' ' + + picto_from_name("plus-circle") + + " voir les événements de portée locale" + ) locations = ( ReferenceLocation.objects.all()