diff --git a/src/agenda_culturel/db_importer.py b/src/agenda_culturel/db_importer.py index 4b00652..505975a 100644 --- a/src/agenda_culturel/db_importer.py +++ b/src/agenda_culturel/db_importer.py @@ -377,6 +377,13 @@ class DBImporterEvents: + ": " + _("the date has not been imported correctly.") ) + if w == Extractor.Warning.NO_START_TIME: + event_structure["title"] += ( + " - " + + _("Warning") + + ": " + + _("the time has not been imported correctly.") + ) if "category" in event_structure and event_structure["category"] is not None: try: @@ -485,6 +492,16 @@ class DBImporterEvents: message_type=Message.TYPE.WARNING, ) ) + if w == Extractor.Warning.NO_START_TIME: + result.set_invalid_start_time() + result.add_message( + Message( + subject=_("warning"), + closed=False, + message=_("the time has not been imported correctly."), + message_type=Message.TYPE.WARNING, + ) + ) if w == Extractor.Warning.NO_TITLE: result.set_invalid_title() result.add_message( diff --git a/src/agenda_culturel/import_tasks/custom_extractors/laraymonde.py b/src/agenda_culturel/import_tasks/custom_extractors/laraymonde.py index b907343..625067a 100644 --- a/src/agenda_culturel/import_tasks/custom_extractors/laraymonde.py +++ b/src/agenda_culturel/import_tasks/custom_extractors/laraymonde.py @@ -29,7 +29,7 @@ class CExtractor(TwoStepsExtractorNoPause): title = soup.select_one(".showDesc h4 a.summary").text start_day = soup.select_one(".showDate .value-title") - start_time = None + start_time = "warning" if start_day is not None: start_day = start_day["title"] @@ -45,9 +45,6 @@ class CExtractor(TwoStepsExtractorNoPause): image = None image_alt = None - if start_time is None: - title += " - Attention: l'heure n'a pu être extraite" - self.add_event_with_props( default_values, event_url, diff --git a/src/agenda_culturel/import_tasks/extractor.py b/src/agenda_culturel/import_tasks/extractor.py index f9c7bcc..29edd99 100644 --- a/src/agenda_culturel/import_tasks/extractor.py +++ b/src/agenda_culturel/import_tasks/extractor.py @@ -12,7 +12,8 @@ class Extractor(ABC): class Warning(IntEnum): NO_TITLE = 1 NO_START_DATE = 2 - NOT_FOUND = 3 + NO_START_TIME = 3 + NOT_FOUND = 4 url_referer = None @@ -229,6 +230,11 @@ class Extractor(ABC): published = False start_day = datetime.now().date().strftime("%Y-%m-%d") warnings.append(Extractor.Warning.NO_START_DATE) + if isinstance(start_time, str): + print("WARNING: start time was not found") + published = False + start_time = None + warnings.append(Extractor.Warning.NO_START_TIME) if not_found: warnings.append(Extractor.Warning.NOT_FOUND) diff --git a/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po b/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po index 55b3a74..096d18a 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-04-15 23:20+0200\n" +"POT-Creation-Date: 2025-04-26 11:22+0200\n" "PO-Revision-Date: 2023-10-29 14:16+0000\n" "Last-Translator: Jean-Marie Favreau \n" "Language-Team: Jean-Marie Favreau \n" @@ -90,89 +90,147 @@ msgstr "Après-midi" msgid "Evening" msgstr "Soir" -#: agenda_culturel/filters.py:35 +#: agenda_culturel/db_importer.py:198 +msgid "Updated field(s): " +msgstr "Champ(s) mis à jour: " + +#: agenda_culturel/db_importer.py:202 +msgid "Update" +msgstr "Mise à jour" + +#: agenda_culturel/db_importer.py:203 +msgid "update process" +msgstr "processus de mise à jour" + +#: agenda_culturel/db_importer.py:272 +msgid "Import" +msgstr "Import" + +#: agenda_culturel/db_importer.py:273 +msgid "import process" +msgstr "processus d'import" + +#: agenda_culturel/db_importer.py:275 +msgid "" +"The duration of the event is a little too long for direct publication. " +"Moderators can choose to publish it or not." +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/db_importer.py:376 agenda_culturel/db_importer.py:383 +#: agenda_culturel/models.py:2372 +msgid "Warning" +msgstr "Warning" + +#: agenda_culturel/db_importer.py:378 agenda_culturel/db_importer.py:491 +msgid "the date has not been imported correctly." +msgstr "la date n'a pas été importée correctement." + +#: agenda_culturel/db_importer.py:385 agenda_culturel/db_importer.py:501 +msgid "the time has not been imported correctly." +msgstr "l'heure n'a pas été importée correctement." + +#: agenda_culturel/db_importer.py:473 +msgid "during import process" +msgstr "pendant le processus d'import" + +#: agenda_culturel/db_importer.py:489 agenda_culturel/db_importer.py:499 +#: agenda_culturel/db_importer.py:509 agenda_culturel/db_importer.py:520 +msgid "warning" +msgstr "attention" + +#: agenda_culturel/db_importer.py:511 +msgid "the title has not been imported correctly." +msgstr "le titre n'a pas été importé correctement." + +#: agenda_culturel/db_importer.py:523 +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/filters.py:43 msgid "Select a location" msgstr "Choisir une localité" -#: agenda_culturel/filters.py:52 agenda_culturel/filters.py:371 -#: agenda_culturel/filters.py:378 agenda_culturel/filters.py:385 -#: agenda_culturel/filters.py:513 +#: agenda_culturel/filters.py:60 agenda_culturel/filters.py:379 +#: agenda_culturel/filters.py:386 agenda_culturel/filters.py:393 +#: agenda_culturel/filters.py:521 msgid "No" msgstr "Non" -#: agenda_culturel/filters.py:52 agenda_culturel/filters.py:371 -#: agenda_culturel/filters.py:378 agenda_culturel/filters.py:385 -#: agenda_culturel/filters.py:513 +#: agenda_culturel/filters.py:60 agenda_culturel/filters.py:379 +#: agenda_culturel/filters.py:386 agenda_culturel/filters.py:393 +#: agenda_culturel/filters.py:521 msgid "Yes" msgstr "Oui" -#: agenda_culturel/filters.py:370 +#: agenda_culturel/filters.py:378 msgid "Representative version" msgstr "Version représentative" -#: agenda_culturel/filters.py:377 +#: agenda_culturel/filters.py:385 msgid "Pure import" msgstr "Événement importé" -#: agenda_culturel/filters.py:384 +#: agenda_culturel/filters.py:392 msgid "In recurrent import" msgstr "Inclut dans un import récurrent" -#: agenda_culturel/filters.py:391 +#: agenda_culturel/filters.py:399 msgid "Sort by" msgstr "Trier par" -#: agenda_culturel/filters.py:393 +#: agenda_culturel/filters.py:401 msgid "last moderated first" msgstr "dernier modéré d'abord" -#: agenda_culturel/filters.py:394 +#: agenda_culturel/filters.py:402 msgid "last modified first" msgstr "dernier modifié d'abord" -#: agenda_culturel/filters.py:395 +#: agenda_culturel/filters.py:403 msgid "last imported first" msgstr "dernier importé d'abord" -#: agenda_culturel/filters.py:396 +#: agenda_culturel/filters.py:404 msgid "last created first" msgstr "dernier créé d'abord" -#: agenda_culturel/filters.py:402 +#: agenda_culturel/filters.py:410 msgid "Imported from" msgstr "Importé depuis" -#: agenda_culturel/filters.py:470 agenda_culturel/models.py:872 -#: agenda_culturel/models.py:3023 +#: agenda_culturel/filters.py:478 agenda_culturel/models.py:872 +#: agenda_culturel/models.py:2671 msgid "Status" msgstr "Status" -#: agenda_culturel/filters.py:471 agenda_culturel/models.py:2786 +#: agenda_culturel/filters.py:479 agenda_culturel/models.py:2434 msgid "Closed" msgstr "Fermé" -#: agenda_culturel/filters.py:471 +#: agenda_culturel/filters.py:479 msgid "Open" msgstr "Ouvert" -#: agenda_culturel/filters.py:475 agenda_culturel/filters.py:476 -#: agenda_culturel/models.py:2780 +#: agenda_culturel/filters.py:483 agenda_culturel/filters.py:484 +#: agenda_culturel/models.py:2428 msgid "Spam" msgstr "Spam" -#: agenda_culturel/filters.py:476 +#: agenda_culturel/filters.py:484 msgid "Non spam" msgstr "Non spam" -#: agenda_culturel/filters.py:481 agenda_culturel/models.py:2801 +#: agenda_culturel/filters.py:489 agenda_culturel/models.py:2449 msgid "Type" msgstr "Type" -#: agenda_culturel/filters.py:500 +#: agenda_culturel/filters.py:508 msgid "Search" msgstr "Rechercher" -#: agenda_culturel/filters.py:512 +#: agenda_culturel/filters.py:520 msgid "In the past" msgstr "Dans le passé" @@ -195,11 +253,11 @@ msgstr "" msgid "Your email" msgstr "Votre adresse email" -#: agenda_culturel/forms.py:168 agenda_culturel/models.py:2768 +#: agenda_culturel/forms.py:168 agenda_culturel/models.py:2416 msgid "Your email address" msgstr "Votre adresse email" -#: agenda_culturel/forms.py:174 agenda_culturel/models.py:2793 +#: agenda_culturel/forms.py:174 agenda_culturel/models.py:2441 msgid "Comments" msgstr "Commentaires" @@ -214,32 +272,32 @@ msgstr "" 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:210 agenda_culturel/models.py:312 -#: agenda_culturel/models.py:880 agenda_culturel/models.py:2947 -#: agenda_culturel/models.py:3058 +#: agenda_culturel/forms.py:212 agenda_culturel/models.py:312 +#: agenda_culturel/models.py:880 agenda_culturel/models.py:2595 +#: agenda_culturel/models.py:2706 msgid "Category" msgstr "Catégorie" -#: agenda_culturel/forms.py:216 agenda_culturel/forms.py:249 -#: agenda_culturel/forms.py:295 agenda_culturel/forms.py:479 +#: agenda_culturel/forms.py:218 agenda_culturel/forms.py:251 +#: agenda_culturel/forms.py:297 agenda_culturel/forms.py:481 #: agenda_culturel/models.py:366 agenda_culturel/models.py:997 msgid "Tags" msgstr "Étiquettes" -#: agenda_culturel/forms.py:224 agenda_culturel/forms.py:644 +#: agenda_culturel/forms.py:226 agenda_culturel/forms.py:646 #: agenda_culturel/models.py:1127 msgid "Event" msgstr "Événement" -#: agenda_culturel/forms.py:274 agenda_culturel/models.py:68 +#: agenda_culturel/forms.py:276 agenda_culturel/models.py:68 msgid "The '/' character is not allowed." msgstr "Le caractère '/' n'est pas autorisé." -#: agenda_culturel/forms.py:281 agenda_culturel/forms.py:485 +#: agenda_culturel/forms.py:283 agenda_culturel/forms.py:487 msgid "New tags" msgstr "Nouvelles étiquettes" -#: agenda_culturel/forms.py:283 agenda_culturel/forms.py:487 +#: agenda_culturel/forms.py:285 agenda_culturel/forms.py:489 msgid "" "Create new labels (sparingly). Note: by starting your tag with the " "characters “TW:”, youll create a “trigger warning” tag, and the associated " @@ -250,154 +308,154 @@ msgstr "" "étiquette “trigger warning”, et les événements associés seront annoncés " "comme tels." -#: agenda_culturel/forms.py:355 +#: agenda_culturel/forms.py:357 msgid "Main fields" msgstr "Champs principaux" -#: agenda_culturel/forms.py:358 +#: agenda_culturel/forms.py:360 msgid "Start of event" msgstr "Début de l'événement" -#: agenda_culturel/forms.py:362 +#: agenda_culturel/forms.py:364 msgid "End of event" msgstr "Fin de l'événement" -#: agenda_culturel/forms.py:368 +#: agenda_culturel/forms.py:370 msgid "This is a recurring event" msgstr "Cet événement est récurrent" -#: agenda_culturel/forms.py:380 +#: agenda_culturel/forms.py:382 msgid "Details" msgstr "Détails" -#: agenda_culturel/forms.py:385 agenda_culturel/models.py:909 -#: agenda_culturel/models.py:2922 +#: agenda_culturel/forms.py:387 agenda_culturel/models.py:909 +#: agenda_culturel/models.py:2570 msgid "Location" msgstr "Localisation" -#: agenda_culturel/forms.py:390 agenda_culturel/models.py:110 +#: agenda_culturel/forms.py:392 agenda_culturel/models.py:110 #: agenda_culturel/models.py:953 msgid "Illustration" msgstr "Illustration" -#: agenda_culturel/forms.py:394 +#: agenda_culturel/forms.py:396 msgid "URLs" msgstr "URLs" -#: agenda_culturel/forms.py:398 agenda_culturel/forms.py:405 +#: agenda_culturel/forms.py:400 agenda_culturel/forms.py:407 msgid "Meta information" msgstr "Méta-informations" -#: agenda_culturel/forms.py:422 +#: agenda_culturel/forms.py:424 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:438 +#: agenda_culturel/forms.py:440 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:480 +#: agenda_culturel/forms.py:482 msgid "Select tags from existing ones." msgstr "Sélectionner des étiquettes depuis celles existantes." -#: agenda_culturel/forms.py:541 +#: agenda_culturel/forms.py:543 msgid "JSON in the format expected for the import." msgstr "JSON dans le format attendu pour l'import" -#: agenda_culturel/forms.py:563 +#: agenda_culturel/forms.py:565 msgid " (locally modified version)" msgstr " (version modifiée localement)" -#: agenda_culturel/forms.py:567 +#: agenda_culturel/forms.py:569 msgid " (synchronized on import version)" msgstr " (version synchronisée sur l'import)" -#: agenda_culturel/forms.py:571 +#: agenda_culturel/forms.py:573 msgid "Select {} as representative version." msgstr "Sélectionner {} comme version représentative" -#: agenda_culturel/forms.py:581 +#: agenda_culturel/forms.py:583 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:588 +#: agenda_culturel/forms.py:590 msgid " Warning: a version is already locally modified." msgstr " Attention: une version a déjà été modifiée localement." -#: agenda_culturel/forms.py:595 +#: agenda_culturel/forms.py:597 msgid "Create a new version by merging (interactive mode)." msgstr "Créer une nouvelle version par fusion (mode interactif)." -#: agenda_culturel/forms.py:603 +#: agenda_culturel/forms.py:605 msgid "Make {} independent." msgstr "Rendre {} indépendant." -#: agenda_culturel/forms.py:606 +#: agenda_culturel/forms.py:608 msgid "Make all versions independent." msgstr "Rendre toutes les versions indépendantes." -#: agenda_culturel/forms.py:678 agenda_culturel/forms.py:691 +#: agenda_culturel/forms.py:680 agenda_culturel/forms.py:693 msgid "Value of version {}" msgstr "Valeur de la version {}" -#: agenda_culturel/forms.py:683 +#: agenda_culturel/forms.py:685 msgid "Value of the selected version" msgstr "Valeur de la version sélectionnée" -#: agenda_culturel/forms.py:853 +#: agenda_culturel/forms.py:855 msgid "Apply category {} to the event {}" msgstr "Appliquer la catégorie {} à l'événement {}" -#: agenda_culturel/forms.py:870 agenda_culturel/models.py:697 -#: agenda_culturel/models.py:3110 +#: agenda_culturel/forms.py:872 agenda_culturel/models.py:697 +#: agenda_culturel/models.py:2758 msgid "Place" msgstr "Lieu" -#: agenda_culturel/forms.py:872 +#: agenda_culturel/forms.py:874 msgid "Create a missing place" msgstr "Créer un lieu manquant" -#: agenda_culturel/forms.py:882 +#: agenda_culturel/forms.py:884 msgid "Add \"{}\" to the aliases of the place" msgstr "Ajouter « {} » aux alias du lieu" -#: agenda_culturel/forms.py:911 +#: agenda_culturel/forms.py:913 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:924 +#: agenda_culturel/forms.py:926 msgid "Header" msgstr "Entête" -#: agenda_culturel/forms.py:927 agenda_culturel/models.py:659 +#: agenda_culturel/forms.py:929 agenda_culturel/models.py:659 msgid "Address" msgstr "Adresse" -#: agenda_culturel/forms.py:933 +#: agenda_culturel/forms.py:935 msgid "Meta" msgstr "Méta" -#: agenda_culturel/forms.py:936 +#: agenda_culturel/forms.py:938 msgid "Information" msgstr "Informations" -#: agenda_culturel/forms.py:988 +#: agenda_culturel/forms.py:990 msgid "Add a comment" msgstr "Ajouter un commentaire" -#: agenda_culturel/forms.py:1013 agenda_culturel/models.py:3211 +#: agenda_culturel/forms.py:1015 agenda_culturel/models.py:2859 msgid "Period type" msgstr "Type de période" -#: agenda_culturel/forms.py:1017 +#: agenda_culturel/forms.py:1019 msgid "ICAL file" msgstr "Fichier ICAL" -#: agenda_culturel/import_tasks/extractor.py:225 +#: agenda_culturel/import_tasks/extractor.py:226 msgid "Unknown title" msgstr "Titre inconnu" @@ -505,7 +563,7 @@ msgstr "" #: agenda_culturel/models.py:195 agenda_culturel/models.py:242 #: agenda_culturel/models.py:321 agenda_culturel/models.py:616 #: agenda_culturel/models.py:657 agenda_culturel/models.py:763 -#: agenda_culturel/models.py:2760 agenda_culturel/models.py:2872 +#: agenda_culturel/models.py:2408 agenda_culturel/models.py:2520 msgid "Name" msgstr "Nom" @@ -574,8 +632,8 @@ msgstr "Description" msgid "Description of the tag" msgstr "Description de l'étiquette" -#: agenda_culturel/models.py:336 agenda_culturel/models.py:2727 -#: agenda_culturel/models.py:2774 +#: agenda_culturel/models.py:336 agenda_culturel/models.py:2375 +#: agenda_culturel/models.py:2422 msgid "Message" msgstr "Message" @@ -753,7 +811,7 @@ msgstr "Organisme" msgid "Organisations" msgstr "Organismes" -#: agenda_culturel/models.py:809 agenda_culturel/models.py:2917 +#: agenda_culturel/models.py:809 agenda_culturel/models.py:2565 msgid "Published" msgstr "Publié" @@ -789,7 +847,7 @@ msgstr "Auteur de la dernière modération" msgid "Title" msgstr "Titre" -#: agenda_culturel/models.py:886 agenda_culturel/models.py:3196 +#: agenda_culturel/models.py:886 agenda_culturel/models.py:2844 msgid "Start day" msgstr "Date de début" @@ -797,7 +855,7 @@ msgstr "Date de début" msgid "Start time" msgstr "Heure de début" -#: agenda_culturel/models.py:894 agenda_culturel/models.py:3197 +#: agenda_culturel/models.py:894 agenda_culturel/models.py:2845 msgid "End day" msgstr "Date de fin" @@ -899,260 +957,207 @@ msgstr "import récurrent" msgid "a non authenticated user" msgstr "un utilisateur non connecté" -#: agenda_culturel/models.py:1807 +#: agenda_culturel/models.py:1813 msgid "Your event has been published" msgstr "Ton événement a été publié" -#: agenda_culturel/models.py:1812 +#: agenda_culturel/models.py:1818 msgid "Your message has not been retained" msgstr "Ton événement n'a pas été retenu" -#: agenda_culturel/models.py:1895 agenda_culturel/models.py:2724 -msgid "Warning" -msgstr "Warning" - -#: agenda_culturel/models.py:1897 agenda_culturel/models.py:2003 -msgid "the date has not been imported correctly." -msgstr "la date n'a pas été importée correctement." - -#: agenda_culturel/models.py:1985 -msgid "during import process" -msgstr "pendant le processus d'import" - -#: agenda_culturel/models.py:2001 agenda_culturel/models.py:2011 -#: agenda_culturel/models.py:2022 -msgid "warning" -msgstr "attention" - -#: agenda_culturel/models.py:2013 -msgid "the title has not been imported correctly." -msgstr "le titre n'a pas été importé correctement." - -#: agenda_culturel/models.py:2025 -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:2379 -msgid "Updated field(s): " -msgstr "Champ(s) mis à jour: " - -#: agenda_culturel/models.py:2383 -msgid "Update" -msgstr "Mise à jour" - -#: agenda_culturel/models.py:2384 -msgid "update process" -msgstr "processus de mise à jour" - -#: agenda_culturel/models.py:2453 -msgid "Import" -msgstr "Import" - -#: agenda_culturel/models.py:2454 -msgid "import process" -msgstr "processus d'import" - -#: agenda_culturel/models.py:2456 -msgid "" -"The duration of the event is a little too long for direct publication. " -"Moderators can choose to publish it or not." -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:2715 +#: agenda_culturel/models.py:2363 msgid "From contributor" msgstr "D'un·e contributeurice" -#: agenda_culturel/models.py:2716 +#: agenda_culturel/models.py:2364 msgid "Import process" msgstr "Processus d'import" -#: agenda_culturel/models.py:2717 +#: agenda_culturel/models.py:2365 msgid "Update process" msgstr "Processus de mise à jour" -#: agenda_culturel/models.py:2718 +#: agenda_culturel/models.py:2366 msgid "Contact form" msgstr "Formulaire de contact" -#: agenda_culturel/models.py:2719 +#: agenda_culturel/models.py:2367 msgid "Event report" msgstr "Signalemet d'événement" -#: agenda_culturel/models.py:2722 +#: agenda_culturel/models.py:2370 msgid "From contributor (without message)" msgstr "D'un·e contributeurice (sans message)" -#: agenda_culturel/models.py:2728 +#: agenda_culturel/models.py:2376 msgid "Messages" msgstr "Messages" -#: agenda_culturel/models.py:2737 +#: agenda_culturel/models.py:2385 msgid "Subject" msgstr "Sujet" -#: agenda_culturel/models.py:2738 +#: agenda_culturel/models.py:2386 msgid "The subject of your message" msgstr "Sujet de votre message" -#: agenda_culturel/models.py:2744 +#: agenda_culturel/models.py:2392 msgid "Related event" msgstr "Événement associé" -#: agenda_culturel/models.py:2745 +#: agenda_culturel/models.py:2393 msgid "The message is associated with this event." msgstr "Le message est associé à cet événement." -#: agenda_culturel/models.py:2753 +#: agenda_culturel/models.py:2401 msgid "Author of the message" msgstr "Auteur du message" -#: agenda_culturel/models.py:2761 +#: agenda_culturel/models.py:2409 msgid "Your name" msgstr "Votre nom" -#: agenda_culturel/models.py:2767 +#: agenda_culturel/models.py:2415 msgid "Email address" msgstr "Adresse email" -#: agenda_culturel/models.py:2774 +#: agenda_culturel/models.py:2422 msgid "Your message" msgstr "Votre message" -#: agenda_culturel/models.py:2781 +#: agenda_culturel/models.py:2429 msgid "This message is a spam." msgstr "Ce message est un spam." -#: agenda_culturel/models.py:2788 +#: agenda_culturel/models.py:2436 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:2794 +#: agenda_culturel/models.py:2442 msgid "Comments on the message from the moderation team" msgstr "Commentaires sur ce message par l'équipe de modération" -#: agenda_culturel/models.py:2827 agenda_culturel/models.py:3005 +#: agenda_culturel/models.py:2475 agenda_culturel/models.py:2653 msgid "Recurrent import" msgstr "Import récurrent" -#: agenda_culturel/models.py:2828 +#: agenda_culturel/models.py:2476 msgid "Recurrent imports" msgstr "Imports récurrents" -#: agenda_culturel/models.py:2832 +#: agenda_culturel/models.py:2480 msgid "ical" msgstr "ical" -#: agenda_culturel/models.py:2833 +#: agenda_culturel/models.py:2481 msgid "ical no busy" msgstr "ical sans busy" -#: agenda_culturel/models.py:2834 +#: agenda_culturel/models.py:2482 msgid "ical no VC" msgstr "ical sans VC" -#: agenda_culturel/models.py:2835 +#: agenda_culturel/models.py:2483 msgid "ical naive timezone" msgstr "ical timezone naïve" -#: agenda_culturel/models.py:2836 +#: agenda_culturel/models.py:2484 msgid "lacoope.org" msgstr "lacoope.org" -#: agenda_culturel/models.py:2837 +#: agenda_culturel/models.py:2485 msgid "la comédie" msgstr "la comédie" -#: agenda_culturel/models.py:2838 +#: agenda_culturel/models.py:2486 msgid "le fotomat" msgstr "le fotomat" -#: agenda_culturel/models.py:2839 +#: agenda_culturel/models.py:2487 msgid "la puce à l'oreille" msgstr "la puce à loreille" -#: agenda_culturel/models.py:2840 +#: agenda_culturel/models.py:2488 msgid "Plugin wordpress MEC" msgstr "Plugin wordpress MEC" -#: agenda_culturel/models.py:2841 +#: agenda_culturel/models.py:2489 msgid "Événements d'une page FB" msgstr "Événements d'une page FB" -#: agenda_culturel/models.py:2842 +#: agenda_culturel/models.py:2490 msgid "Billetterie Clermont-Ferrand" msgstr "" -#: agenda_culturel/models.py:2843 +#: agenda_culturel/models.py:2491 msgid "Arachnée concert" msgstr "Arachnée concert" -#: agenda_culturel/models.py:2844 +#: agenda_culturel/models.py:2492 msgid "Le Rio" msgstr "Le Rio" -#: agenda_culturel/models.py:2845 +#: agenda_culturel/models.py:2493 msgid "La Raymonde" msgstr "La Raymone" -#: agenda_culturel/models.py:2846 +#: agenda_culturel/models.py:2494 msgid "Agenda apidae tourisme" msgstr "Agenda apidae tourisme" -#: agenda_culturel/models.py:2847 +#: agenda_culturel/models.py:2495 msgid "Agenda iguana (médiathèques)" msgstr "Agenda iguana (médiathèques)" -#: agenda_culturel/models.py:2848 +#: agenda_culturel/models.py:2496 msgid "Mille formes" msgstr "Mille Formes" -#: agenda_culturel/models.py:2849 +#: agenda_culturel/models.py:2497 msgid "Les Amis du Temps des Cerises" msgstr "Les Amis du Temps des Cerises" -#: agenda_culturel/models.py:2850 +#: agenda_culturel/models.py:2498 msgid "Mobilizon" msgstr "Mobilizon" -#: agenda_culturel/models.py:2851 +#: agenda_culturel/models.py:2499 msgid "Le caméléon" msgstr "" -#: agenda_culturel/models.py:2852 +#: agenda_culturel/models.py:2500 msgid "Echosciences" msgstr "" -#: agenda_culturel/models.py:2853 +#: agenda_culturel/models.py:2501 msgid "Hello Asso" msgstr "Hello Asso" -#: agenda_culturel/models.py:2856 +#: agenda_culturel/models.py:2504 msgid "simple" msgstr "simple" -#: agenda_culturel/models.py:2857 +#: agenda_culturel/models.py:2505 msgid "Headless Chromium" msgstr "chromium sans interface" -#: agenda_culturel/models.py:2860 +#: agenda_culturel/models.py:2508 msgid "Headless Chromium (pause)" msgstr "chromium sans interface (pause)" -#: agenda_culturel/models.py:2866 +#: agenda_culturel/models.py:2514 msgid "daily" msgstr "chaque jour" -#: agenda_culturel/models.py:2868 +#: agenda_culturel/models.py:2516 msgid "weekly" msgstr "chaque semaine" -#: agenda_culturel/models.py:2869 +#: agenda_culturel/models.py:2517 msgid "never" msgstr "jamais" -#: agenda_culturel/models.py:2874 +#: agenda_culturel/models.py:2522 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." @@ -1160,151 +1165,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:2881 +#: agenda_culturel/models.py:2529 msgid "Processor" msgstr "Processeur" -#: agenda_culturel/models.py:2887 +#: agenda_culturel/models.py:2535 msgid "Downloader" msgstr "Téléchargeur" -#: agenda_culturel/models.py:2894 +#: agenda_culturel/models.py:2542 msgid "Import recurrence" msgstr "Récurrence d'import" -#: agenda_culturel/models.py:2901 +#: agenda_culturel/models.py:2549 msgid "Source" msgstr "Source" -#: agenda_culturel/models.py:2902 +#: agenda_culturel/models.py:2550 msgid "URL of the source document" msgstr "URL du document source" -#: agenda_culturel/models.py:2907 +#: agenda_culturel/models.py:2555 msgid "Browsable url" msgstr "URL navigable" -#: agenda_culturel/models.py:2909 +#: agenda_culturel/models.py:2557 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:2918 +#: agenda_culturel/models.py:2566 msgid "Status of each imported event (published or draft)" msgstr "Status de chaque événement importé (publié ou brouillon)" -#: agenda_culturel/models.py:2923 +#: agenda_culturel/models.py:2571 msgid "Address for each imported event" msgstr "Adresse de chaque événement importé" -#: agenda_culturel/models.py:2930 +#: agenda_culturel/models.py:2578 msgid "Force location" msgstr "Focer la localisation" -#: agenda_culturel/models.py:2931 +#: agenda_culturel/models.py:2579 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:2937 +#: agenda_culturel/models.py:2585 msgid "Organiser" msgstr "Organisation" -#: agenda_culturel/models.py:2938 +#: agenda_culturel/models.py:2586 msgid "Organiser of each imported event" msgstr "Organisme à l'origine de chaque événement importé" -#: agenda_culturel/models.py:2948 +#: agenda_culturel/models.py:2596 msgid "Category of each imported event" msgstr "Catégorie de chaque événement importé" -#: agenda_culturel/models.py:2956 +#: agenda_culturel/models.py:2604 msgid "Tags for each imported event" msgstr "Étiquettes de chaque événement importé" -#: agenda_culturel/models.py:2957 +#: agenda_culturel/models.py:2605 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:2986 +#: agenda_culturel/models.py:2634 msgid "Running" msgstr "En cours" -#: agenda_culturel/models.py:2987 +#: agenda_culturel/models.py:2635 msgid "Canceled" msgstr "Annulé" -#: agenda_culturel/models.py:2988 +#: agenda_culturel/models.py:2636 msgid "Success" msgstr "Succès" -#: agenda_culturel/models.py:2989 +#: agenda_culturel/models.py:2637 msgid "Failed" msgstr "Erreur" -#: agenda_culturel/models.py:2992 +#: agenda_culturel/models.py:2640 msgid "Batch importation" msgstr "Importation par lot" -#: agenda_culturel/models.py:2993 +#: agenda_culturel/models.py:2641 msgid "Batch importations" msgstr "Importations par lot" -#: agenda_culturel/models.py:3006 +#: agenda_culturel/models.py:2654 msgid "Reference to the recurrent import processing" msgstr "Référence du processus d'import récurrent" -#: agenda_culturel/models.py:3014 +#: agenda_culturel/models.py:2662 msgid "URL (if not recurrent import)" msgstr "URL (si pas d'import récurrent)" -#: agenda_culturel/models.py:3015 +#: agenda_culturel/models.py:2663 msgid "Source URL if no RecurrentImport is associated." msgstr "URL source si aucun import récurrent n'est associé" -#: agenda_culturel/models.py:3030 +#: agenda_culturel/models.py:2678 msgid "Error message" msgstr "Votre message" -#: agenda_culturel/models.py:3034 +#: agenda_culturel/models.py:2682 msgid "Number of collected events" msgstr "Nombre d'événements collectés" -#: agenda_culturel/models.py:3037 +#: agenda_culturel/models.py:2685 msgid "Number of imported events" msgstr "Nombre d'événements importés" -#: agenda_culturel/models.py:3040 +#: agenda_culturel/models.py:2688 msgid "Number of updated events" msgstr "Nombre d'événements mis à jour" -#: agenda_culturel/models.py:3043 +#: agenda_culturel/models.py:2691 msgid "Number of removed events" msgstr "Nombre d'événements supprimés" -#: agenda_culturel/models.py:3051 +#: agenda_culturel/models.py:2699 msgid "Weight" msgstr "Poids" -#: agenda_culturel/models.py:3052 +#: agenda_culturel/models.py:2700 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:3059 +#: agenda_culturel/models.py:2707 msgid "Category applied to the event" msgstr "Catégorie appliquée à l'événement" -#: agenda_culturel/models.py:3064 +#: agenda_culturel/models.py:2712 msgid "Contained in the title" msgstr "Contenu dans le titre" -#: agenda_culturel/models.py:3065 +#: agenda_culturel/models.py:2713 msgid "Text contained in the event title" msgstr "Texte contenu dans le titre de l'événement" -#: agenda_culturel/models.py:3071 +#: agenda_culturel/models.py:2719 msgid "Exact title extract" msgstr "Extrait exact du titre" -#: agenda_culturel/models.py:3073 +#: agenda_culturel/models.py:2721 msgid "" "If checked, the extract will be searched for in the title using the exact " "form (capitals, accents)." @@ -1312,19 +1317,19 @@ msgstr "" "Si coché, l'extrait sera recherché dans le titre en utilisant la forme " "exacte (majuscules, accents)" -#: agenda_culturel/models.py:3079 +#: agenda_culturel/models.py:2727 msgid "Contained in the description" msgstr "Contenu dans la description" -#: agenda_culturel/models.py:3080 +#: agenda_culturel/models.py:2728 msgid "Text contained in the description" msgstr "Texte contenu dans la description" -#: agenda_culturel/models.py:3086 +#: agenda_culturel/models.py:2734 msgid "Exact description extract" msgstr "Extrait exact de description" -#: agenda_culturel/models.py:3088 +#: agenda_culturel/models.py:2736 msgid "" "If checked, the extract will be searched for in the description using the " "exact form (capitals, accents)." @@ -1332,19 +1337,19 @@ msgstr "" "Si coché, l'extrait sera recherché dans la description en utilisant la forme " "exacte (majuscules, accents)" -#: agenda_culturel/models.py:3094 +#: agenda_culturel/models.py:2742 msgid "Contained in the location" msgstr "Contenu dans la localisation" -#: agenda_culturel/models.py:3095 +#: agenda_culturel/models.py:2743 msgid "Text contained in the event location" msgstr "Texte contenu dans la localisation de l'événement" -#: agenda_culturel/models.py:3101 +#: agenda_culturel/models.py:2749 msgid "Exact location extract" msgstr "Extrait exact de localisation" -#: agenda_culturel/models.py:3103 +#: agenda_culturel/models.py:2751 msgid "" "If checked, the extract will be searched for in the location using the exact " "form (capitals, accents)." @@ -1352,51 +1357,51 @@ msgstr "" "Si coché, l'extrait sera recherché dans la localisation en utilisant la " "forme exacte (majuscules, accents)" -#: agenda_culturel/models.py:3111 +#: agenda_culturel/models.py:2759 msgid "Location from place" msgstr "Localisation depuis le lieu" -#: agenda_culturel/models.py:3120 +#: agenda_culturel/models.py:2768 msgid "Categorisation rule" msgstr "Règle de catégorisation" -#: agenda_culturel/models.py:3121 +#: agenda_culturel/models.py:2769 msgid "Categorisation rules" msgstr "Règles de catégorisation" -#: agenda_culturel/models.py:3195 +#: agenda_culturel/models.py:2843 msgid "Period name" msgstr "Nom de la période" -#: agenda_culturel/models.py:3200 +#: agenda_culturel/models.py:2848 msgid "Special period" msgstr "Période remarquable" -#: agenda_culturel/models.py:3201 +#: agenda_culturel/models.py:2849 msgid "Special periods" msgstr "Périodes remarquables" -#: agenda_culturel/models.py:3207 +#: agenda_culturel/models.py:2855 msgid "public holidays" msgstr "Jour férié" -#: agenda_culturel/models.py:3208 +#: agenda_culturel/models.py:2856 msgid "school vacations" msgstr "Vacances scolaires" -#: agenda_culturel/models.py:3226 +#: agenda_culturel/models.py:2874 msgid "The end date must be after or equal to the start date." msgstr "La date de fin doit être après ou identique à la date de début." -#: agenda_culturel/models.py:3234 +#: agenda_culturel/models.py:2882 msgid " on " msgstr " du " -#: agenda_culturel/models.py:3237 +#: agenda_culturel/models.py:2885 msgid " from " msgstr " du " -#: agenda_culturel/models.py:3237 +#: agenda_culturel/models.py:2885 msgid " to " msgstr " au " @@ -1404,43 +1409,103 @@ msgstr " au " msgid "French" msgstr "français" -#: agenda_culturel/views.py:176 -msgid "Recurrent import name" -msgstr "Nome de l'import récurrent" +#: agenda_culturel/views/categorisation_rules_view.py:64 +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:177 -msgid "Add another" -msgstr "Ajouter un autre" +#: agenda_culturel/views/categorisation_rules_view.py:76 +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:178 -msgid "Browse..." -msgstr "Naviguer..." +#: agenda_culturel/views/categorisation_rules_view.py:98 +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:179 -msgid "No file selected." -msgstr "Pas de fichier sélectionné." +#: agenda_culturel/views/categorisation_rules_view.py:105 +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:197 +#: agenda_culturel/views/categorisation_rules_view.py:112 +#: agenda_culturel/views/categorisation_rules_view.py:176 +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/categorisation_rules_view.py:162 +msgid "" +"The rules were successfully applied and 1 event with default category was " +"categorised." +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/categorisation_rules_view.py:169 +msgid "" +"The rules were successfully applied and {} events with default category were " +"categorised." +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/errors.py:16 msgid ": error 500" msgstr ": erreur 500" -#: agenda_culturel/views.py:198 +#: agenda_culturel/views/errors.py:17 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:237 -msgid "Moderation rules" -msgstr "Règles de modération" +#: agenda_culturel/views/event_duplicate_views.py:72 +msgid "Update successfully completed." +msgstr "Mise à jour réalisée avec succès." -#: agenda_culturel/views.py:246 -msgid "Import requirements" -msgstr "Besoins pour l'import" +#: agenda_culturel/views/event_duplicate_views.py:140 +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:452 -msgid "The static content has been successfully updated." -msgstr "Le contenu statique a été modifié avec succès." +#: agenda_culturel/views/event_duplicate_views.py:177 +msgid "Events have been marked as unduplicated." +msgstr "Les événements ont été marqués comme non dupliqués." -#: agenda_culturel/views.py:463 +#: agenda_culturel/views/event_duplicate_views.py:194 +#: agenda_culturel/views/event_duplicate_views.py:211 +#: agenda_culturel/views/event_duplicate_views.py:240 +msgid "" +"The selected item is no longer included in the list of duplicates. Someone " +"else has probably modified the list in the meantime." +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/event_duplicate_views.py:201 +msgid "The selected event has been set as representative" +msgstr "L'événement sélectionné a été défini comme representatif." + +#: agenda_culturel/views/event_duplicate_views.py:226 +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/event_duplicate_views.py:278 +msgid "Cleaning up duplicates: {} item(s) fixed." +msgstr "Nettoyage des dupliqués: {} élément(s) corrigé(s)." + +#: agenda_culturel/views/event_duplicate_views.py:327 +msgid "The event was successfully duplicated." +msgstr "L'événement a été marqué dupliqué avec succès." + +#: agenda_culturel/views/event_duplicate_views.py:335 +msgid "" +"The event has been successfully flagged as a duplicate. The moderation team " +"will deal with your suggestion shortly." +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/event_views.py:66 msgid "" "The event cannot be updated because the import process is not available for " "the referenced sources." @@ -1448,21 +1513,22 @@ 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:476 +#: agenda_culturel/views/event_views.py:79 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:505 agenda_culturel/views.py:589 +#: agenda_culturel/views/event_views.py:108 +#: agenda_culturel/views/moderation_views.py:38 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:509 +#: agenda_culturel/views/event_views.py:112 msgid "The event has been successfully modified." msgstr "L'événement a été modifié avec succès." -#: agenda_culturel/views.py:533 +#: agenda_culturel/views/event_views.py:136 msgid "" "Changes will be visible on a local copy of the event. The version identical " "to the imported source will be hidden." @@ -1470,19 +1536,15 @@ 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:594 -msgid "The event {} has been moderated with success." -msgstr "L'événement {} a été modéré avec succès." - -#: agenda_culturel/views.py:743 +#: agenda_culturel/views/event_views.py:181 msgid "The event has been successfully deleted." msgstr "L'événement a été supprimé avec succès." -#: agenda_culturel/views.py:823 +#: agenda_culturel/views/event_views.py:261 msgid "Comment" msgstr "Commentaire" -#: agenda_culturel/views.py:847 +#: agenda_culturel/views/event_views.py:285 msgid "" "The status has been successfully modified and a message has been sent to the " "person who proposed the event." @@ -1490,23 +1552,27 @@ 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:851 +#: agenda_culturel/views/event_views.py:289 msgid "The status has been successfully modified." msgstr "Le status a été modifié avec succès." -#: agenda_culturel/views.py:879 agenda_culturel/views.py:1091 -#: agenda_culturel/views.py:1160 +#: agenda_culturel/views/event_views.py:319 +#: agenda_culturel/views/event_views.py:539 +#: agenda_culturel/views/event_views.py:608 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 actuellement en cours de modération." +msgstr "" +"{} n'a pas été soumis car il est déjà connu et actuellement en cours de " +"modération." -#: agenda_culturel/views.py:889 agenda_culturel/views.py:1082 -#: agenda_culturel/views.py:1151 +#: agenda_culturel/views/event_views.py:329 +#: agenda_culturel/views/event_views.py:530 +#: agenda_culturel/views/event_views.py:599 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:899 +#: agenda_culturel/views/event_views.py:346 msgid "" "This type of address is known to the calendar, so an automatic import is " "proposed." @@ -1514,7 +1580,7 @@ msgstr "" "Ce type d'adresse est connue du calendrier, alors un import automatique est " "proposé." -#: agenda_culturel/views.py:912 +#: agenda_culturel/views/event_views.py:359 msgid "" "This type of address is unknown to the agenda. As a logged-in user, you can " "still try to import the event, which may work if the page contains a google " @@ -1526,7 +1592,7 @@ msgstr "" "lorsque la page contient un lien google agenda par exemple. Dans le doute, " "privilégie une saisie manuelle." -#: agenda_culturel/views.py:923 +#: agenda_culturel/views/event_views.py:370 msgid "" "This type of address is unknown to the calendar, so we suggest that you " "enter the information for the event you wish to import, in addition to the " @@ -1536,11 +1602,11 @@ msgstr "" "informations de l'événement que tu souhaites importer, pour compléter " "l'adresse que tu nous as donnée." -#: agenda_culturel/views.py:959 +#: agenda_culturel/views/event_views.py:405 msgid "The event was created: {}." msgstr "L'événement a été créé: {}." -#: agenda_culturel/views.py:965 +#: agenda_culturel/views/event_views.py:411 msgid "" "The event has been submitted and will be published as soon as it has been " "validated by the moderation team." @@ -1548,214 +1614,192 @@ 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:979 +#: agenda_culturel/views/event_views.py:425 msgid "during the creation process" msgstr "pendant le processus d'import" -#: agenda_culturel/views.py:1002 +#: agenda_culturel/views/event_views.py:448 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:1103 +#: agenda_culturel/views/event_views.py:551 msgid "Integrating {} url(s) into our import process." msgstr "Intégration de {} url(s) dans notre processus d'import." -#: agenda_culturel/views.py:1169 +#: agenda_culturel/views/event_views.py:617 msgid "Integrating {} into our import process." msgstr "Intégration de {} dans notre processus d'import." -#: agenda_culturel/views.py:1291 -msgid "Your message has been sent successfully." -msgstr "Votre message a été envoyé avec succès." +#: agenda_culturel/views/general_pages_views.py:64 +msgid "Moderation rules" +msgstr "Règles de modération" -#: agenda_culturel/views.py:1324 -msgid "Reporting the event {} on {}" -msgstr "Signaler l'événement {} du {}" +#: agenda_culturel/views/general_pages_views.py:73 +msgid "Import requirements" +msgstr "Besoins pour l'import" -#: agenda_culturel/views.py:1334 -msgid "The contact message has been successfully deleted." -msgstr "Le message de contact a été supprimé avec succès." +#: agenda_culturel/views/general_pages_views.py:237 +msgid "The static content has been successfully updated." +msgstr "Le contenu statique a été modifié avec succès." -#: agenda_culturel/views.py:1350 -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/general_pages_views.py:243 +msgid "Cache successfully cleared." +msgstr "Le cache a été vidé avec succès." -#: agenda_culturel/views.py:1528 -msgid "Spam has been successfully deleted." -msgstr "Le spam a été supprimé avec succès" +#: agenda_culturel/views/general_pages_views.py:343 +msgid "Your user profile has been successfully modified." +msgstr "Votre profil utilisateur a été modifié avec succès." -#: agenda_culturel/views.py:1705 +#: agenda_culturel/views/import_batch_views.py:77 msgid "The import has been run successfully." msgstr "L'import a été lancé avec succès" -#: agenda_culturel/views.py:1727 +#: agenda_culturel/views/import_batch_views.py:99 msgid "The import has been canceled." msgstr "L'import a été annulé" -#: agenda_culturel/views.py:1750 +#: agenda_culturel/views/import_batch_views.py:122 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:1846 +#: agenda_culturel/views/import_recurrent_views.py:92 msgid "The recurrent import has been successfully modified." msgstr "L'import récurrent a été modifié avec succès." -#: agenda_culturel/views.py:1858 +#: agenda_culturel/views/import_recurrent_views.py:104 msgid "The recurrent import has been successfully deleted." msgstr "L'import récurrent a été supprimé avec succès" -#: agenda_culturel/views.py:1904 +#: agenda_culturel/views/import_recurrent_views.py:150 msgid "The import has been launched." msgstr "L'import a été lancé" -#: agenda_culturel/views.py:1931 +#: agenda_culturel/views/import_recurrent_views.py:177 msgid "Imports has been launched." msgstr "Les imports ont été lancés" -#: agenda_culturel/views.py:1953 +#: agenda_culturel/views/import_recurrent_views.py:199 msgid "Facebook imports has been launched." msgstr "Les imports Facebook ont été lancés" -#: agenda_culturel/views.py:2016 -msgid "Update successfully completed." -msgstr "Mise à jour réalisée avec succès." +#: agenda_culturel/views/message_views.py:28 +msgid "Your message has been sent successfully." +msgstr "Votre message a été envoyé avec succès." -#: agenda_culturel/views.py:2084 -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/message_views.py:61 +msgid "Reporting the event {} on {}" +msgstr "Signaler l'événement {} du {}" -#: agenda_culturel/views.py:2121 -msgid "Events have been marked as unduplicated." -msgstr "Les événements ont été marqués comme non dupliqués." +#: agenda_culturel/views/message_views.py:71 +msgid "The contact message has been successfully deleted." +msgstr "Le message de contact a été supprimé avec succès." -#: agenda_culturel/views.py:2138 agenda_culturel/views.py:2155 -#: agenda_culturel/views.py:2184 -msgid "" -"The selected item is no longer included in the list of duplicates. Someone " -"else has probably modified the list in the meantime." -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/message_views.py:87 +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:2145 -msgid "The selected event has been set as representative" -msgstr "L'événement sélectionné a été défini comme representatif." +#: agenda_culturel/views/message_views.py:131 +msgid "Spam has been successfully deleted." +msgstr "Le spam a été supprimé avec succès" -#: agenda_culturel/views.py:2170 -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/moderation_views.py:43 +msgid "The event {} has been moderated with success." +msgstr "L'événement {} a été modéré avec succès." -#: agenda_culturel/views.py:2220 -msgid "Cleaning up duplicates: {} item(s) fixed." -msgstr "Nettoyage des dupliqués: {} élément(s) corrigé(s)." +#: agenda_culturel/views/organisations_views.py:78 +msgid "The organisation has been successfully updated." +msgstr "L'organisme a été modifié avec succès." -#: agenda_culturel/views.py:2269 -msgid "The event was successfully duplicated." -msgstr "L'événement a été marqué dupliqué avec succès." +#: agenda_culturel/views/organisations_views.py:85 +msgid "The organisation has been successfully created." +msgstr "L'organisme a été créé avec succès." -#: agenda_culturel/views.py:2277 -msgid "" -"The event has been successfully flagged as a duplicate. The moderation team " -"will deal with your suggestion shortly." -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:2339 -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:2351 -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:2373 -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:2380 -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:2387 agenda_culturel/views.py:2451 -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:2437 -msgid "" -"The rules were successfully applied and 1 event with default category was " -"categorised." -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:2444 -msgid "" -"The rules were successfully applied and {} events with default category were " -"categorised." -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:2554 agenda_culturel/views.py:2621 -#: agenda_culturel/views.py:2665 +#: agenda_culturel/views/places_views.py:100 +#: agenda_culturel/views/places_views.py:167 +#: agenda_culturel/views/places_views.py:211 msgid "{} events have been updated." msgstr "{} événements ont été mis à jour." -#: agenda_culturel/views.py:2557 agenda_culturel/views.py:2623 -#: agenda_culturel/views.py:2668 +#: agenda_culturel/views/places_views.py:103 +#: agenda_culturel/views/places_views.py:169 +#: agenda_culturel/views/places_views.py:214 msgid "1 event has been updated." msgstr "1 événement a été mis à jour" -#: agenda_culturel/views.py:2559 agenda_culturel/views.py:2625 -#: agenda_culturel/views.py:2670 +#: agenda_culturel/views/places_views.py:105 +#: agenda_culturel/views/places_views.py:171 +#: agenda_culturel/views/places_views.py:216 msgid "No events have been modified." msgstr "Aucun événement n'a été modifié." -#: agenda_culturel/views.py:2568 +#: agenda_culturel/views/places_views.py:114 msgid "The place has been successfully updated." msgstr "Le lieu a été modifié avec succès." -#: agenda_culturel/views.py:2577 +#: agenda_culturel/views/places_views.py:123 msgid "The place has been successfully created." msgstr "Le lieu a été créé avec succès." -#: agenda_culturel/views.py:2650 +#: agenda_culturel/views/places_views.py:196 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:2657 +#: agenda_culturel/views/places_views.py:203 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:2784 -msgid "The organisation has been successfully updated." -msgstr "L'organisme a été modifié avec succès." +#: agenda_culturel/views/special_period_views.py:19 +msgid "The special period has been successfully created." +msgstr "La période remarquable a été créée avec succès." -#: agenda_culturel/views.py:2791 -msgid "The organisation has been successfully created." -msgstr "L'organisme a été créé avec succès." +#: agenda_culturel/views/special_period_views.py:40 +msgid "The special period has been successfully deleted." +msgstr "La période remarquable a été supprimée avec succès." -#: agenda_culturel/views.py:2810 +#: agenda_culturel/views/special_period_views.py:51 +msgid "The special period has been successfully updated." +msgstr "La période remarquable a été modifiée avec succès." + +#: agenda_culturel/views/special_period_views.py:68 +#, python-format +msgid "%(nb_created)d interval inserted." +msgid_plural "%(nb_created)d intervals inserted." +msgstr[0] "%(nb_created)d intervalle inséré." +msgstr[1] "%(nb_created)d intervalles insérés." + +#: agenda_culturel/views/special_period_views.py:79 +#, python-format +msgid "%(nb_overlap)d insersion was not possible due to overlap." +msgid_plural "%(nb_overlap)d insersion were not possible due to overlap." +msgstr[0] "%(nb_overlap)d insersion impossible à cause d'une intersection." +msgstr[1] "%(nb_overlap)d insersions impossibles à cause d'une intersection." + +#: agenda_culturel/views/special_period_views.py:90 +#, python-format +msgid "%(nb_error)d error while reading ical file." +msgid_plural "%(nb_error)d error while reading ical file." +msgstr[0] "%(nb_error)d erreur pendant la lecture du fichier ical." +msgstr[1] "%(nb_error)d erreurs pendant la lecture du fichier ical." + +#: agenda_culturel/views/special_period_views.py:98 +msgid "Error during file reading: {}" +msgstr "Erreur pendant la lecture du fichier: {}" + +#: agenda_culturel/views/tag_views.py:39 msgid "The tag has been successfully updated." msgstr "L'étiquette a été modifiée avec succès." -#: agenda_culturel/views.py:2817 +#: agenda_culturel/views/tag_views.py:46 msgid "The tag has been successfully created." msgstr "L'étiquette a été créée avec succès." -#: agenda_culturel/views.py:2917 +#: agenda_culturel/views/tag_views.py:146 msgid "You have not modified the tag name." msgstr "Vous n'avez pas modifié le nom de l'étiquette." -#: agenda_culturel/views.py:2932 +#: agenda_culturel/views/tag_views.py:161 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 " @@ -1768,7 +1812,7 @@ msgstr "" "sera supprimée, et tous les événements associés à l'étiquette {} seront " "associés à l'étiquette {}." -#: agenda_culturel/views.py:2946 +#: agenda_culturel/views/tag_views.py:175 msgid "" "This tag {} is already in use. You can force renaming by checking the " "corresponding option." @@ -1776,55 +1820,26 @@ msgstr "" "Cette étiquette {} est déjà utilisée. Vous pouvez forcer le renommage en " "cochant l'option correspondante." -#: agenda_culturel/views.py:2979 +#: agenda_culturel/views/tag_views.py:208 msgid "The tag {} has been successfully renamed to {}." msgstr "L'étiquette {} a été renommée avec succès en {}." -#: agenda_culturel/views.py:3021 +#: agenda_culturel/views/tag_views.py:250 msgid "The tag {} has been successfully deleted." msgstr "L'événement {} a été supprimé avec succès." -#: agenda_culturel/views.py:3168 -msgid "Cache successfully cleared." -msgstr "Le cache a été vidé avec succès." +#: agenda_culturel/views/utils.py:12 +msgid "Recurrent import name" +msgstr "Nome de l'import récurrent" -#: agenda_culturel/views.py:3188 -msgid "Your user profile has been successfully modified." -msgstr "Votre profil utilisateur a été modifié avec succès." +#: agenda_culturel/views/utils.py:13 +msgid "Add another" +msgstr "Ajouter un autre" -#: agenda_culturel/views.py:3206 -msgid "The special period has been successfully created." -msgstr "La période remarquable a été créée avec succès." +#: agenda_culturel/views/utils.py:14 +msgid "Browse..." +msgstr "Naviguer..." -#: agenda_culturel/views.py:3227 -msgid "The special period has been successfully deleted." -msgstr "La période remarquable a été supprimée avec succès." - -#: agenda_culturel/views.py:3238 -msgid "The special period has been successfully updated." -msgstr "La période remarquable a été modifiée avec succès." - -#: agenda_culturel/views.py:3255 -#, python-format -msgid "%(nb_created)d interval inserted." -msgid_plural "%(nb_created)d intervals inserted." -msgstr[0] "%(nb_created)d intervalle inséré." -msgstr[1] "%(nb_created)d intervalles insérés." - -#: agenda_culturel/views.py:3266 -#, python-format -msgid "%(nb_overlap)d insersion was not possible due to overlap." -msgid_plural "%(nb_overlap)d insersion were not possible due to overlap." -msgstr[0] "%(nb_overlap)d insersion impossible à cause d'une intersection." -msgstr[1] "%(nb_overlap)d insersions impossibles à cause d'une intersection." - -#: agenda_culturel/views.py:3277 -#, python-format -msgid "%(nb_error)d error while reading ical file." -msgid_plural "%(nb_error)d error while reading ical file." -msgstr[0] "%(nb_error)d erreur pendant la lecture du fichier ical." -msgstr[1] "%(nb_error)d erreurs pendant la lecture du fichier ical." - -#: agenda_culturel/views.py:3285 -msgid "Error during file reading: {}" -msgstr "Erreur pendant la lecture du fichier: {}" +#: agenda_culturel/views/utils.py:15 +msgid "No file selected." +msgstr "Pas de fichier sélectionné." diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index c472506..3fb32c5 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -1595,6 +1595,12 @@ class Event(models.Model): def is_in_moderation_process(self): return hasattr(self, "in_moderation_process") + def set_invalid_start_time(self): + self.invalid_start_time = True + + def has_invalid_start_time(self): + return hasattr(self, "invalid_start_time") + def set_invalid_start_date(self): self.invalid_start_date = True @@ -2040,6 +2046,10 @@ class Event(models.Model): self.has_invalid_start_date() or event.has_invalid_start_date() ): continue + if r["key"] == "start_time" and ( + self.has_invalid_start_time() or event.has_invalid_start_time() + ): + continue return False return True @@ -2122,7 +2132,12 @@ class Event(models.Model): self.organisers.set(other.pending_organisers) logger.info( - "process update " + other.title + " " + str(other.has_invalid_start_date()) + "process update " + + other.title + + " " + + str(other.has_invalid_start_date()) + + " " + + str(other.has_invalid_start_time()) ) # set attributes for attr in Event.data_fields(all=all, no_m2m=True): @@ -2130,6 +2145,8 @@ class Event(models.Model): continue if attr == "start_day" and other.has_invalid_start_date(): continue + if attr == "start_time" and other.has_invalid_start_time(): + continue if attr == "exact_location" and other.exact_location is None: continue setattr(self, attr, getattr(other, attr))