diff --git a/pod/locale/fr/LC_MESSAGES/django.po b/pod/locale/fr/LC_MESSAGES/django.po
index fc02727223..9f30f2ee76 100644
--- a/pod/locale/fr/LC_MESSAGES/django.po
+++ b/pod/locale/fr/LC_MESSAGES/django.po
@@ -17,6 +17,7 @@ msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
"POT-Creation-Date: 2023-08-30 12:33+0200\n"
=======
"POT-Creation-Date: 2023-07-05 15:50+0200\n"
@@ -54,8 +55,11 @@ msgstr ""
=======
"POT-Creation-Date: 2023-09-12 15:15+0000\n"
>>>>>>> b04f50a6 ([DONE] RGAA 10.07 (Fix focus visibility) (#940))
+=======
+"POT-Creation-Date: 2023-09-19 12:22+0000\n"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
"PO-Revision-Date: \n"
-"Last-Translator: obado \n"
+"Last-Translator: ptitloup \n"
"Language-Team: Pod Team pod@esup-portail.org\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -2346,8 +2350,8 @@ msgid ""
msgstr ""
"Les champs \"Début\" et \"Fin\" doivent contenir des valeurs en secondes. "
"Lancez la lecture de la vidéo, mettez sur pause et cliquez sur \"Récupérer "
-"le temps depuis le lecteur\" pour renseigner automatiquement le champ "
-"\"Début\". Vous pouvez le faire également pour remplir le champ \"Fin\"."
+"le temps depuis le lecteur\" pour renseigner automatiquement le champ \"Début"
+"\". Vous pouvez le faire également pour remplir le champ \"Fin\"."
#: pod/enrichment/templates/enrichment/edit_enrichment.html
msgid "You cannot overlap enrichments."
@@ -2855,6 +2859,7 @@ msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
"Cette vidéo a été téléversée sur Pod ; son origine est %(type)s : %(url)s"
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+"Cette vidéo a été téléversée sur Pod ; son origine est %(type)s : %(url)s"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
#: pod/import_video/views.py pod/meeting/views.py
msgid "Try changing the record type or address for this recording."
@@ -2881,8 +2890,8 @@ msgstr ""
#: pod/import_video/views.py
#, python-format
msgid ""
-"This video '%(name)s' was uploaded to Pod; its origin is Youtube : %(url)s"
+"This video '%(name)s' was uploaded to Pod; its origin is Youtube : %(url)s"
msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
@@ -5123,6 +5132,7 @@ msgstr "Enregistrement"
msgid "Recurring options"
msgstr "Options de récurrence"
+<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
@@ -5132,16 +5142,25 @@ msgstr "Options de récurrence"
>>>>>>> 776d6e3f ([DONE] Fix : accessibility issues (#913))
=======
>>>>>>> 43dd9c9b ([DONE] Update : Playlist (corrections) (#923))
+=======
+#: pod/meeting/forms.py pod/meeting/models.py
+msgid "Start date must be less than recurring until date"
+msgstr "La date de début doit être antérieure à la date de fin récurrente"
+
+#: pod/meeting/forms.py pod/meeting/templates/meeting/add_or_edit.html
+msgid ""
+"In case of weekly recurring, the day of the start date must be selected."
+msgstr ""
+"En cas de récurrence hebdomadaire, le jour de la date de début doit être "
+"sélectionné."
+
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
#: pod/meeting/forms.py pod/playlist/forms.py pod/video/forms.py
msgid "Owner of the video cannot be an additional owner too"
msgstr ""
"Le propriétaire de la video ne peut pas être propriétaire additionnel en "
"même temps"
-#: pod/meeting/forms.py pod/meeting/models.py
-msgid "Start date must be less than recurring until date"
-msgstr "La date de début doit être antérieure à la date de fin récurrente"
-
#: pod/meeting/forms.py
msgid "Voice bridge must be a 5-digit number in the range 10000 to 99999"
msgstr ""
@@ -5184,6 +5203,15 @@ msgstr "Mois"
msgid "Yearly"
msgstr "Année"
+#: pod/meeting/models.py
+msgid "Choose repeat frequency"
+msgstr "Choisissez la fréquence de répétition"
+
+#: pod/meeting/models.py
+#: pod/meeting/templates/meeting/recurring_options_modal_form.html
+msgid "Frequency"
+msgstr "Fréquence"
+
#: pod/meeting/models.py
msgid "Every month on this date"
msgstr "Tous les mois à cette date"
@@ -5654,10 +5682,6 @@ msgstr "Impossible de trouver des informations sur la réunion"
msgid "End the meeting"
msgstr "Terminer la réunion"
-#: pod/meeting/templates/meeting/recurring_options_modal_form.html
-msgid "Frequency"
-msgstr "Fréquence"
-
#: pod/meeting/templates/meeting/recurring_options_modal_form.html
msgid "Repeat every"
msgstr "Répéter tou(te)s les"
@@ -5765,16 +5789,16 @@ msgid ""
msgstr ""
"\n"
"
Bonjour,\n"
-"
%(owner)s vous invite à une réunion récurrente "
-"%(meeting_title)s.
\n"
+"
%(owner)s vous invite à une réunion récurrente "
+"%(meeting_title)s.
\n"
"
Date de début : %(start_date_time)s
\n"
"
Récurrent jusqu’à la date : %(end_date)s
\n"
"
La réunion se tiendra tou(te)s les %(frequency)s %(recurrence)s "
"p>\n"
"
Voici le lien pour rejoindre la réunion :\n"
" %(join_link)s
\n"
-"
Vous avez besoin de ce mot de passe pour entrer : "
-"%(password)s
\n"
+"
Vous avez besoin de ce mot de passe pour entrer : "
+"%(password)s
\n"
"
Cordialement
\n"
" "
@@ -5800,8 +5824,8 @@ msgstr ""
"
Date de fin : %(end_date)s
\n"
"
Voici le lien pour rejoindre la réunion :\n"
" %(join_link)s
\n"
-"
Vous avez besoin de ce mot de passe pour entrer : "
-"%(password)s
\n"
+"
Vous avez besoin de ce mot de passe pour entrer : "
+"%(password)s
%(link_url)s Si le lien n’est pas actif, il "
-"faut le copier-coller dans la barre d’adresse de votre navigateur."
-"i>
Cordialement
"
+"l’ajouter, cliquez sur le lien ci dessous."
+"%(link_url)s Si le lien n’est pas actif, il faut le copier-coller "
+"dans la barre d’adresse de votre navigateur.
Cordialement
"
#: pod/recorder/views.py
msgid "New recording added."
@@ -7499,8 +7522,8 @@ msgid ""
"%(url)s\n"
msgstr ""
"vous pouvez changer la date de suppression en éditant votre vidéo :\n"
-"
\n"
"\n"
#: pod/video/management/commands/check_obsolete_videos.py
@@ -8248,8 +8271,8 @@ msgid ""
"This video is chaptered. Click the chapter button on the video player to view them."
msgstr ""
-"Cette vidéo est chapitrée. Cliquez sur le bouton de chapitre sur le lecteur vidéo pour les voir."
+"Cette vidéo est chapitrée. Cliquez sur le bouton de chapitre sur le lecteur vidéo pour les voir."
#: pod/video/templates/videos/video-all-info.html
msgid "Other versions"
diff --git a/pod/locale/fr/LC_MESSAGES/djangojs.mo b/pod/locale/fr/LC_MESSAGES/djangojs.mo
index 5c3ce79261..e64905e29b 100644
Binary files a/pod/locale/fr/LC_MESSAGES/djangojs.mo and b/pod/locale/fr/LC_MESSAGES/djangojs.mo differ
diff --git a/pod/locale/fr/LC_MESSAGES/djangojs.po b/pod/locale/fr/LC_MESSAGES/djangojs.po
index 814263b0fc..e552359f60 100644
--- a/pod/locale/fr/LC_MESSAGES/djangojs.po
+++ b/pod/locale/fr/LC_MESSAGES/djangojs.po
@@ -16,6 +16,7 @@ msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
"POT-Creation-Date: 2023-08-30 12:33+0200\n"
=======
"POT-Creation-Date: 2023-07-05 15:50+0200\n"
@@ -50,6 +51,9 @@ msgstr ""
=======
"POT-Creation-Date: 2023-09-01 13:56+0000\n"
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+"POT-Creation-Date: 2023-09-19 12:22+0000\n"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
"PO-Revision-Date: \n"
"Last-Translator: obado \n"
"Language-Team: \n"
@@ -214,16 +218,6 @@ msgstr "Veuillez entrer un texte pour le segment compris entre %s et %s :"
msgid "Pause to enter caption for segment from %s to %s."
msgstr "Mettez en pause pour entrer le texte du segment entre %s et %s."
-#: pod/completion/static/js/caption_maker.js
-#: pod/podfile/static/podfile/js/filewidget.js
-msgid "Add"
-msgstr "Ajouter"
-
-#: pod/completion/static/js/caption_maker.js
-#: pod/video/static/js/comment-script.js
-msgid "Delete"
-msgstr "Supprimer"
-
#: pod/completion/static/js/caption_maker.js
msgid "Caption"
msgstr "Légende / Sous-titre"
@@ -615,11 +609,6 @@ msgstr "Chargement en cours…"
msgid "Network response was not ok."
msgstr "La réponse du réseau n'était pas correcte."
-#: pod/podfile/static/podfile/js/filewidget.js
-#: pod/video/static/js/change_video_owner.js
-msgid "Loading…"
-msgstr "Chargement en cours…"
-
#: pod/podfile/static/podfile/js/filewidget.js
msgid "Change image"
msgstr "Changer d’image"
@@ -648,6 +637,10 @@ msgstr "Retirer"
msgid "Server error"
msgstr "Erreur du serveur"
+#: pod/podfile/static/podfile/js/filewidget.js
+msgid "Add"
+msgstr "Ajouter"
+
#: pod/podfile/static/podfile/js/filewidget.js
msgid "Are you sure you want to delete this folder?"
msgstr "Êtes-vous sûr(e) de vouloir supprimer ce dossier ?"
@@ -664,6 +657,7 @@ msgstr "Ce dossier est vide"
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
=======
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
msgid "Channels"
@@ -677,6 +671,8 @@ msgstr "Chaînes"
>>>>>>> 43dd9c9b ([DONE] Update : Playlist (corrections) (#923))
=======
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
msgid "Channel"
msgstr "Chaîne"
@@ -698,6 +694,7 @@ msgstr "Aucun chaîne trouvée"
msgid "videos"
msgstr "vidéos"
+<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
#: pod/video/static/js/ajax-display-channels.js
@@ -714,10 +711,16 @@ msgid "video"
msgstr "vidéo"
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
#: pod/video/static/js/change_video_owner.js
msgid "No element found"
msgstr "Aucun élément trouvé"
+#: pod/video/static/js/change_video_owner.js
+msgid "Loading…"
+msgstr "Chargement en cours…"
+
#: pod/video/static/js/change_video_owner.js
msgid "An error occurred during the change of owner"
msgstr "Une erreur s’est produite lors du changement de propriétaire"
@@ -735,15 +738,12 @@ msgid "Answers"
msgstr "Réponses"
#: pod/video/static/js/comment-script.js
-msgid "Cancel"
-msgstr "Annuler"
+msgid "Delete"
+msgstr "Supprimer"
#: pod/video/static/js/comment-script.js
-#, javascript-format
-msgid "%s vote"
-msgid_plural "%s votes"
-msgstr[0] "%s vote"
-msgstr[1] "%s votes"
+msgid "Cancel"
+msgstr "Annuler"
#: pod/video/static/js/comment-script.js
msgid "Agree with the comment"
@@ -752,6 +752,7 @@ msgstr "D’accord avec ce commentaire"
#: pod/video/static/js/comment-script.js
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
#, fuzzy
#| msgid "Remove this comment"
msgid "Reply to comment"
@@ -771,17 +772,11 @@ msgstr "Répondre"
>>>>>>> 96067166 ([DONE] Update : Displaying channels via AJAX (#910))
=======
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
msgid "Remove this comment"
msgstr "Supprimer ce commentaire"
-#: pod/video/static/js/comment-script.js
-msgid "Add a public comment"
-msgstr "Ajouter un commentaire public"
-
-#: pod/video/static/js/comment-script.js
-msgid "Send"
-msgstr "Envoyer"
-
#: pod/video/static/js/comment-script.js
msgid "Show answers"
msgstr "Afficher les réponses"
@@ -794,6 +789,13 @@ msgstr "Mauvaise réponse du serveur."
msgid "Sorry, you're not allowed to vote by now."
msgstr "Désolé, vous n’êtes pas autorisé à voter maintenant."
+#: pod/video/static/js/comment-script.js
+#, javascript-format
+msgid "%s vote"
+msgid_plural "%s votes"
+msgstr[0] "%s vote"
+msgstr[1] "%s votes"
+
#: pod/video/static/js/comment-script.js
msgid "Sorry, you can't comment this video by now."
msgstr "Désolé, vous ne pouvez pas commenter cette vidéo maintenant."
@@ -814,47 +816,38 @@ msgstr[0] "%s commentaire"
msgstr[1] "%s commentaires"
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is password protected."
msgstr "Ce contenu est protégé par mot de passe."
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is chaptered."
msgstr "Ce contenu est chapitré."
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is in draft."
msgstr "Ce contenu est en brouillon."
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Video content."
msgstr "Contenu vidéo."
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Audio content."
msgstr "Contenu audio."
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Edit the video"
msgstr "Éditer la vidéo"
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Complete the video"
msgstr "Compléter la vidéo"
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Chapter the video"
msgstr "Chapitrer la vidéo"
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Delete the video"
msgstr "Supprimer la vidéo"
@@ -927,18 +920,6 @@ msgstr "Désolé, aucune vidéo trouvée"
msgid "Edit the category"
msgstr "Éditer la catégorie"
-#: pod/video/static/js/video_category.js
-msgid "Delete the category"
-msgstr "Supprimer la catégorie"
-
-#: pod/video/static/js/video_category.js
-msgid "Success!"
-msgstr "Succès !"
-
-#: pod/video/static/js/video_category.js
-msgid "Error…"
-msgstr "Erreur…"
-
#: pod/video/static/js/video_category.js
msgid "Category created successfully"
msgstr "Catégorie créée avec succès"
@@ -1011,6 +992,33 @@ msgstr "Ajouts en favoris total depuis la création"
msgid "Slug"
msgstr "Titre court"
+#~ msgid "Channels"
+#~ msgstr "Chaînes"
+
+#~ msgid "video"
+#~ msgstr "vidéo"
+
+#~ msgid "Reply to comment"
+#~ msgstr "Répondre au commentaire"
+
+#~ msgid "Reply"
+#~ msgstr "Répondre"
+
+#~ msgid "Add a public comment"
+#~ msgstr "Ajouter un commentaire public"
+
+#~ msgid "Send"
+#~ msgstr "Envoyer"
+
+#~ msgid "Delete the category"
+#~ msgstr "Supprimer la catégorie"
+
+#~ msgid "Success!"
+#~ msgstr "Succès !"
+
+#~ msgid "Error…"
+#~ msgstr "Erreur…"
+
#~ msgid "Are you sure you want to delete this element?"
#~ msgstr "Êtes-vous sûr(e) de vouloir supprimer cet élément ?"
diff --git a/pod/locale/nl/LC_MESSAGES/django.po b/pod/locale/nl/LC_MESSAGES/django.po
index 49ee9beae7..d495a584c3 100644
--- a/pod/locale/nl/LC_MESSAGES/django.po
+++ b/pod/locale/nl/LC_MESSAGES/django.po
@@ -17,6 +17,7 @@ msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
"POT-Creation-Date: 2023-08-30 12:33+0200\n"
=======
"POT-Creation-Date: 2023-07-05 15:50+0200\n"
@@ -54,6 +55,9 @@ msgstr ""
=======
"POT-Creation-Date: 2023-09-12 15:15+0000\n"
>>>>>>> b04f50a6 ([DONE] RGAA 10.07 (Fix focus visibility) (#940))
+=======
+"POT-Creation-Date: 2023-09-19 12:22+0000\n"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
"PO-Revision-Date: 2023-06-08 14:37+0200\n"
"Last-Translator: obado \n"
"Language-Team: \n"
@@ -2690,8 +2694,8 @@ msgstr ""
#: pod/import_video/views.py
#, python-format
msgid ""
-"This video '%(name)s' was uploaded to Pod; its origin is Youtube : %(url)s"
+"This video '%(name)s' was uploaded to Pod; its origin is Youtube : %(url)s"
msgstr ""
#: pod/import_video/views.py
@@ -4841,6 +4845,7 @@ msgid "Recurring options"
>>>>>>> 776d6e3f ([DONE] Fix : accessibility issues (#913))
msgstr ""
+<<<<<<< HEAD
<<<<<<< HEAD
#: pod/meeting/forms.py
msgid "Recurring options"
@@ -4852,10 +4857,21 @@ msgstr ""
msgid "Owner of the video cannot be an additional owner too"
msgstr ""
+=======
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
#: pod/meeting/forms.py pod/meeting/models.py
msgid "Start date must be less than recurring until date"
msgstr ""
+#: pod/meeting/forms.py pod/meeting/templates/meeting/add_or_edit.html
+msgid ""
+"In case of weekly recurring, the day of the start date must be selected."
+msgstr ""
+
+#: pod/meeting/forms.py pod/playlist/forms.py pod/video/forms.py
+msgid "Owner of the video cannot be an additional owner too"
+msgstr ""
+
#: pod/meeting/forms.py
msgid "Voice bridge must be a 5-digit number in the range 10000 to 99999"
msgstr ""
@@ -4896,6 +4912,15 @@ msgstr ""
msgid "Yearly"
msgstr ""
+#: pod/meeting/models.py
+msgid "Choose repeat frequency"
+msgstr ""
+
+#: pod/meeting/models.py
+#: pod/meeting/templates/meeting/recurring_options_modal_form.html
+msgid "Frequency"
+msgstr ""
+
#: pod/meeting/models.py
msgid "Every month on this date"
msgstr ""
@@ -5335,10 +5360,6 @@ msgstr ""
msgid "End the meeting"
msgstr ""
-#: pod/meeting/templates/meeting/recurring_options_modal_form.html
-msgid "Frequency"
-msgstr ""
-
#: pod/meeting/templates/meeting/recurring_options_modal_form.html
msgid "Repeat every"
msgstr ""
@@ -6616,8 +6637,8 @@ msgstr ""
#: pod/video/templates/videos/video-element.html
msgid ""
"To view this video please enable JavaScript, and consider upgrading to a web "
-"browser that supports HTML5 video"
+"browser that supports HTML5 video"
msgstr ""
#: pod/recorder/templates/recorder/link_record.html
diff --git a/pod/locale/nl/LC_MESSAGES/djangojs.po b/pod/locale/nl/LC_MESSAGES/djangojs.po
index 13689f247e..494186b997 100644
--- a/pod/locale/nl/LC_MESSAGES/djangojs.po
+++ b/pod/locale/nl/LC_MESSAGES/djangojs.po
@@ -16,6 +16,7 @@ msgstr ""
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
"POT-Creation-Date: 2023-08-30 12:33+0200\n"
=======
"POT-Creation-Date: 2023-07-05 15:50+0200\n"
@@ -50,6 +51,9 @@ msgstr ""
=======
"POT-Creation-Date: 2023-09-01 13:56+0000\n"
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+"POT-Creation-Date: 2023-09-19 12:22+0000\n"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
"PO-Revision-Date: 2023-02-08 15:22+0100\n"
"Last-Translator: obado \n"
"Language-Team: \n"
@@ -199,16 +203,6 @@ msgstr ""
msgid "Pause to enter caption for segment from %s to %s."
msgstr ""
-#: pod/completion/static/js/caption_maker.js
-#: pod/podfile/static/podfile/js/filewidget.js
-msgid "Add"
-msgstr ""
-
-#: pod/completion/static/js/caption_maker.js
-#: pod/video/static/js/comment-script.js
-msgid "Delete"
-msgstr ""
-
#: pod/completion/static/js/caption_maker.js
msgid "Caption"
msgstr ""
@@ -590,11 +584,6 @@ msgstr ""
msgid "Network response was not ok."
msgstr ""
-#: pod/podfile/static/podfile/js/filewidget.js
-#: pod/video/static/js/change_video_owner.js
-msgid "Loading…"
-msgstr ""
-
#: pod/podfile/static/podfile/js/filewidget.js
msgid "Change image"
msgstr ""
@@ -623,6 +612,10 @@ msgstr ""
msgid "Server error"
msgstr ""
+#: pod/podfile/static/podfile/js/filewidget.js
+msgid "Add"
+msgstr ""
+
#: pod/podfile/static/podfile/js/filewidget.js
msgid "Are you sure you want to delete this folder?"
msgstr ""
@@ -638,6 +631,7 @@ msgstr ""
#: pod/video/static/js/ajax-display-channels.js
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
=======
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
msgid "Channels"
@@ -649,6 +643,8 @@ msgstr ""
>>>>>>> 96067166 ([DONE] Update : Displaying channels via AJAX (#910))
=======
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
msgid "Channel"
msgstr ""
@@ -660,6 +656,7 @@ msgstr ""
msgid "videos"
msgstr ""
+<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
#: pod/video/static/js/ajax-display-channels.js
@@ -687,6 +684,14 @@ msgstr ""
#: pod/video/static/js/change_video_owner.js
msgid "No element found"
>>>>>>> 83c6f9de ([DONE] A11y for 3.4.0 (#914))
+=======
+#: pod/video/static/js/change_video_owner.js
+msgid "No element found"
+msgstr ""
+
+#: pod/video/static/js/change_video_owner.js
+msgid "Loading…"
+>>>>>>> c3c05541 ([DONE] fix recuring date in edit meeting (#946))
msgstr ""
#: pod/video/static/js/change_video_owner.js
@@ -707,40 +712,21 @@ msgid "Answers"
msgstr ""
#: pod/video/static/js/comment-script.js
-msgid "Cancel"
-msgstr ""
-
-#: pod/video/static/js/comment-script.js
-#, javascript-format
-msgid "%s vote"
-msgid_plural "%s votes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: pod/video/static/js/comment-script.js
-msgid "Agree with the comment"
+msgid "Delete"
msgstr ""
#: pod/video/static/js/comment-script.js
-msgid "Reply to comment"
+msgid "Cancel"
msgstr ""
#: pod/video/static/js/comment-script.js
-msgid "Reply"
+msgid "Agree with the comment"
msgstr ""
#: pod/video/static/js/comment-script.js
msgid "Remove this comment"
msgstr ""
-#: pod/video/static/js/comment-script.js
-msgid "Add a public comment"
-msgstr ""
-
-#: pod/video/static/js/comment-script.js
-msgid "Send"
-msgstr ""
-
#: pod/video/static/js/comment-script.js
msgid "Show answers"
msgstr ""
@@ -753,6 +739,13 @@ msgstr ""
msgid "Sorry, you're not allowed to vote by now."
msgstr ""
+#: pod/video/static/js/comment-script.js
+#, javascript-format
+msgid "%s vote"
+msgid_plural "%s votes"
+msgstr[0] ""
+msgstr[1] ""
+
#: pod/video/static/js/comment-script.js
msgid "Sorry, you can't comment this video by now."
msgstr ""
@@ -773,47 +766,38 @@ msgstr[0] ""
msgstr[1] ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is password protected."
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is chaptered."
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "This content is in draft."
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Video content."
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Audio content."
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Edit the video"
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Complete the video"
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Chapter the video"
msgstr ""
#: pod/video/static/js/regroup_videos_by_theme.js
-#: pod/video/static/js/video_category.js
msgid "Delete the video"
msgstr ""
@@ -885,18 +869,6 @@ msgstr ""
msgid "Edit the category"
msgstr ""
-#: pod/video/static/js/video_category.js
-msgid "Delete the category"
-msgstr ""
-
-#: pod/video/static/js/video_category.js
-msgid "Success!"
-msgstr ""
-
-#: pod/video/static/js/video_category.js
-msgid "Error…"
-msgstr ""
-
#: pod/video/static/js/video_category.js
msgid "Category created successfully"
msgstr ""
diff --git a/pod/meeting/forms.py b/pod/meeting/forms.py
index cf8b0770d8..46189c1e38 100644
--- a/pod/meeting/forms.py
+++ b/pod/meeting/forms.py
@@ -165,7 +165,7 @@ def get_rounded_time():
(
"main_fields",
{
- "legend": (' %s' % _("Main fields")),
+ "legend": (' %s' % _("Main fields")),
"fields": MEETING_MAIN_FIELDS,
},
),
@@ -173,18 +173,19 @@ def get_rounded_time():
"input-group",
{
"legend": (
- ''
+ ''
+ " %s" % _("Date and time options")
),
"fields": ["start", "start_time", "expected_duration"],
"additional_data": """
-
"""
% (
+ "see_recurring_fields",
"btn btn-primary btn-sm",
"modal",
"#recurring_fields",
@@ -199,7 +200,7 @@ def get_rounded_time():
"input-group",
{
"legend": (
- ''
+ ''
+ " %s" % _("Record session")
),
"fields": MEETING_RECORD_FIELDS,
@@ -212,7 +213,7 @@ def get_rounded_time():
"modal",
{
"legend": (
- ' '
+ ' '
+ " %s" % _("Recurring options")
),
"id": "recurring_fields",
@@ -224,7 +225,7 @@ def get_rounded_time():
"advanced_options",
{
"legend": (
- ''
+ ''
+ " %s" % _("Advanced options")
),
"classes": "collapse border border-primary p-1 m-1",
@@ -242,15 +243,43 @@ def filter_fields_admin(form):
else:
form.remove_field("days_of_week")
- def clean_add_owner(self, cleaned_data):
- if "additional_owners" in cleaned_data.keys() and isinstance(
+ def clean_start_date(self):
+ """Check two things:
+ - the start date is before the recurrence deadline.
+ - in the case of weekly recurrence, the start day must be selected from the list of weekdays.
+ The function raise a validation error if a condition is not met."""
+ if ("start" in self.cleaned_data.keys()
+ and "recurring_until" in self.cleaned_data.keys()
+ and self.cleaned_data["recurring_until"] is not None
+ and (
+ self.cleaned_data["start"] > self.cleaned_data["recurring_until"]
+ )):
+ raise ValidationError(_("Start date must be less than recurring until date"))
+
+ if (self.cleaned_data.get("weekdays")
+ and self.cleaned_data.get("start")
+ and self.cleaned_data.get("recurrence") == "weekly"
+ and (
+ str(self.cleaned_data.get("start").weekday())
+ not in self.cleaned_data.get("weekdays")
+ )):
+ raise ValidationError(
+ _("In case of weekly recurring, the day of the start date must be selected.")
+ )
+
+ if not self.cleaned_data.get('recurring_until'):
+ self.instance.recurring_until = None
+
+ def clean_add_owner(self):
+ """Check if meeting owner not in additional owners."""
+ if "additional_owners" in self.cleaned_data.keys() and isinstance(
self.cleaned_data["additional_owners"], QuerySet
):
meetingowner = (
self.instance.owner
if hasattr(self.instance, "owner")
- else cleaned_data["owner"]
- if "owner" in cleaned_data.keys()
+ else self.cleaned_data["owner"]
+ if "owner" in self.cleaned_data.keys()
else self.current_user
)
if (
@@ -262,31 +291,26 @@ def clean_add_owner(self, cleaned_data):
)
def clean(self):
- cleaned_data = super(MeetingForm, self).clean()
- if "expected_duration" in cleaned_data.keys():
+ self.cleaned_data = super(MeetingForm, self).clean()
+ if "expected_duration" in self.cleaned_data.keys():
self.cleaned_data["expected_duration"] = timezone.timedelta(
hours=self.cleaned_data["expected_duration"]
)
- if "days_of_week" in cleaned_data.keys():
+ if "days_of_week" in self.cleaned_data.keys():
tab = self.cleaned_data["days_of_week"]
self.cleaned_data["weekdays"] = "".join(tab)
+ self.clean_start_date()
+
+ self.clean_add_owner()
if (
- "start" in cleaned_data.keys()
- and "recurring_until" in cleaned_data.keys()
- and cleaned_data["recurring_until"] is not None
- and cleaned_data["start"] > cleaned_data["recurring_until"]
- ):
- raise ValidationError(_("Start date must be less than recurring until date"))
- self.clean_add_owner(cleaned_data)
- if (
- "restrict_access_to_groups" in cleaned_data.keys()
- and len(cleaned_data["restrict_access_to_groups"]) > 0
+ "restrict_access_to_groups" in self.cleaned_data.keys()
+ and len(self.cleaned_data["restrict_access_to_groups"]) > 0
):
- cleaned_data["is_restricted"] = True
+ self.cleaned_data["is_restricted"] = True
- if "start_time" in cleaned_data.keys() and "start" in cleaned_data.keys():
+ if "start_time" in self.cleaned_data.keys() and "start" in self.cleaned_data.keys():
start_time = datetime.datetime.strptime(
self.cleaned_data["start_time"], "%H:%M:%S"
).time()
@@ -296,7 +320,7 @@ def clean(self):
start_datetime = timezone.make_aware(start_datetime)
self.instance.start_at = start_datetime
- if "voice_bridge" in cleaned_data.keys() and cleaned_data[
+ if "voice_bridge" in self.cleaned_data.keys() and self.cleaned_data[
"voice_bridge"
] not in range(10000, 99999):
raise ValidationError(
@@ -344,6 +368,8 @@ def __init__(self, *args, **kwargs):
self.remove_field(field)
# remove start_at
self.remove_field("start_at")
+ # set min frequency to 1
+ self.fields["frequency"].widget.attrs["min"] = 1
def remove_field(self, field):
if self.fields.get(field):
diff --git a/pod/meeting/models.py b/pod/meeting/models.py
index 1d897c045d..11c1b4f823 100644
--- a/pod/meeting/models.py
+++ b/pod/meeting/models.py
@@ -26,6 +26,8 @@
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django.core.validators import MinLengthValidator
+from django.core.validators import MaxValueValidator
+from django.core.validators import MinValueValidator
from django.db.models import F, Q
@@ -140,13 +142,18 @@ class Meeting(models.Model):
DAILY, WEEKLY, MONTHLY, YEARLY = "daily", "weekly", "monthly", "yearly"
- INTERVAL_CHOICES = (
+ INTERVAL_FREQUENCIES = (
(DAILY, _("Daily")),
(WEEKLY, _("Weekly")),
(MONTHLY, _("Monthly")),
(YEARLY, _("Yearly")),
)
+ INTERVAL_CHOICES = (
+ ('', '%s' % _("Choose repeat frequency")),
+ ('-- %s --' % _("Frequency"), INTERVAL_FREQUENCIES),
+ )
+
DATE_DAY, NTH_DAY = "date_day", "nth_day"
MONTHLY_TYPE_CHOICES = (
(DATE_DAY, _("Every month on this date")),
@@ -208,6 +215,7 @@ class Meeting(models.Model):
frequency = models.PositiveIntegerField(
verbose_name=_("Repeat each time"),
default=1,
+ validators=[MinValueValidator(1), MaxValueValidator(100)],
help_text=_(
"The meeting will be repeat each time of value specify."
" i.e: each 3 days if recurring daily"
@@ -472,16 +480,12 @@ def get_hashkey(self):
# ############################## Meeting occurences
def next_occurrence_from_today(self):
- if self.start == timezone.now().date():
- # start_datetime = dt.combine(self.start, self.start_time)
- # start_datetime = timezone.make_aware(start_datetime)
+ """Returns the date of the next occurrence for the meeting from today."""
+ if self.start_at == timezone.now().date():
start_datetime = self.start_at + self.expected_duration
if start_datetime > timezone.now():
- return self.start
- next_one = self.next_occurrence(self.start)
- while next_one < timezone.now().date():
- next_one = self.next_occurrence(next_one)
- return next_one
+ return self.start_at
+ return self.next_occurrence(timezone.now().date())
def next_occurrence(self, current_date): # noqa: C901
"""
@@ -507,15 +511,13 @@ def next_occurrence(self, current_date): # noqa: C901
+ timedelta(days=increment)
+ timedelta(weeks=self.frequency - 1)
)
-
# Look in this week and be sure to find
weekday = 0
- increment = 1
+ increment = 0
while weekday + increment <= 6:
if str(weekday + increment) in self.weekdays:
return next_date + timedelta(days=increment)
increment += 1
-
raise RuntimeError("You should have found the next weekly occurrence by now.")
if self.recurrence == Meeting.MONTHLY:
@@ -582,6 +584,7 @@ def is_active(self):
# ############################## BBB API
def create(self, request=None):
+ """Make the url with goods parameters to create the meeting on the BBB instance and call it."""
action = "create"
parameters = {}
for param in meeting_to_bbb:
diff --git a/pod/meeting/templates/meeting/add_or_edit.html b/pod/meeting/templates/meeting/add_or_edit.html
index a6e079b5ad..df7377e031 100644
--- a/pod/meeting/templates/meeting/add_or_edit.html
+++ b/pod/meeting/templates/meeting/add_or_edit.html
@@ -191,10 +191,88 @@
{{ options.legend|safe }}
/* Add event listener to use advanced options button with keyboard */
var advanced_options_btn = document.getElementById('advanced_options_btn');
-advanced_options_btn.addEventListener("keydown", function(event) {
- if (event.key === "Enter" || event.key === " ") {
- advanced_options_btn.click();
+if (advanced_options_btn) {
+ advanced_options_btn.addEventListener("keydown", function(event) {
+ if (event.key === "Enter" || event.key === " ") {
+ advanced_options_btn.click();
+ }
+ });
+}
+
+/**
+ * fixed calendar display in a modal
+ * change position from absolute to fixed
+*/
+const myModals = document.getElementsByClassName('modal');
+for (let i = 0; i < myModals.length; i++) {
+ myModals[i].addEventListener('shown.bs.modal', () => {
+ // looking for calendarlink
+ var calendarLinks = myModals[i].querySelectorAll('[id^="calendarlink"]');
+ for(let i = 0; i < calendarLinks.length; i++) {
+ // console.log(calendarLinks[i].getAttribute("id"));
+ var calendarlinkid = calendarLinks[i].getAttribute("id");
+ var targetNode = document.getElementById(calendarlinkid.replace('calendarlink','calendarbox'));
+ var observer = new MutationObserver(function(){
+ if(targetNode.style.display != 'none'){
+ targetNode.style.position = "fixed";
+ }
+ });
+ observer.observe(targetNode, { attributes: true, childList: true });
+ }
+ })
+}
+var day_of_start_date = -1;
+let id_start = document.querySelector("#id_start");
+let start_date_formats = {{start_date_formats|safe}};
+if(id_start) {
+ function setDayOfWeekForStartDate() {
+ let id_start_value = id_start.value;
+ for(let i = 0; i < start_date_formats.length; i++) {
+ let index_day = start_date_formats[i].indexOf('%d');
+ let index_month = start_date_formats[i].indexOf('%m');
+ let index_little_year = start_date_formats[i].indexOf('%y');
+ let index_year = start_date_formats[i].indexOf('%Y');
+ let regex_date_format = "^" + start_date_formats[i].replace('%d', '\\d{2}').replace('%m', '\\d{2}').replace('%y', '\\d{2}').replace('%Y', '\\d{4}') + "$";
+ regex_date_format = regex_date_format.replace("-", "[-]").replace(".", "[.]").replace("/", "[/]");
+ let match = id_start_value.match(new RegExp(regex_date_format, "g"));
+ if(match) {
+ let day = id_start_value.substring(index_day, index_day+2);
+ let monthIndex = parseInt(id_start_value.substring(index_month, index_month+2))-1;
+ let year = 0;
+ if(index_year == -1) {
+ year = id_start_value.substring(index_little_year, index_little_year+2);
+ } else {
+ year = id_start_value.substring(index_year, index_year+4);
+ }
+ let corresponding_day = [6,0,1,2,3,4,5];
+ day_of_start_date = corresponding_day[new Date(year, monthIndex, day).getDay()];
+ return
+ }
+ }
}
-});
+ setDayOfWeekForStartDate();
+}
+
+var modal_recurring_fields = document.getElementById('recurring_fields');
+if(modal_recurring_fields) {
+ modal_recurring_fields.addEventListener('shown.bs.modal', () => {
+ setDayOfWeekForStartDate();
+ change_weekdays_display();
+ });
+ modal_recurring_fields.addEventListener('hidden.bs.modal', function (e) {
+ setDayOfWeekForStartDate();
+ var select_days = document.querySelectorAll('input[name="days_of_week"]:checked');
+ let select_days_values = [];
+ for(let i = 0; i < select_days.length; i++) {
+ select_days_values.push(select_days[i].value);
+ }
+ if(recurrence.value == "weekly" && !select_days_values.includes(""+day_of_start_date)) {
+ alert("{% trans "In case of weekly recurring, the day of the start date must be selected." %}");
+ let see_recurring_fields_btn = document.getElementById('see_recurring_fields');
+ if (see_recurring_fields_btn) see_recurring_fields_btn.click();
+ }
+ })
+}
+
{% endblock more_script %}
diff --git a/pod/meeting/templates/meeting/recurring_options_modal_form.html b/pod/meeting/templates/meeting/recurring_options_modal_form.html
index 3128e38e7c..86cb945ed4 100644
--- a/pod/meeting/templates/meeting/recurring_options_modal_form.html
+++ b/pod/meeting/templates/meeting/recurring_options_modal_form.html
@@ -61,21 +61,31 @@
let recurrence = document.getElementById("id_recurrence");
// recurrence.onchange = function() { console.log("Changed!" + recurrence.value);
recurrence.addEventListener('change', function(ev) {
- console.log("Changed!" + recurrence.value);
+ // console.log("Changed!" + recurrence.value);
change_weekdays_display()
})
change_weekdays_display = function() {
if (recurrence.value == "weekly") {
document.getElementById("weekdays_recurring").style.display = 'block';
+ if(day_of_start_date != -1) {
+ let day = document.getElementById("id_days_of_week_" + day_of_start_date);
+ if(day) day.checked = true;
+ }
} else {
document.getElementById("weekdays_recurring").style.display = 'none';
}
if (recurrence.value == "monthly") {
document.getElementById("monthly_recurring").style.display = 'block';
+ /* In case of monthly recurring, we unchecked all days */
+ for(let i = 0; i < 7; i++) {
+ let day = document.getElementById("id_days_of_week_" + i);
+ if(day) day.checked = false;
+ }
} else {
document.getElementById("monthly_recurring").style.display = 'none';
}
}
- change_weekdays_display()
+document.addEventListener("load", change_weekdays_display);
+
diff --git a/pod/meeting/tests/test_models.py b/pod/meeting/tests/test_models.py
index 9497896a3f..005a42c4b6 100644
--- a/pod/meeting/tests/test_models.py
+++ b/pod/meeting/tests/test_models.py
@@ -9,6 +9,7 @@
from django.test import TestCase
from django.template.defaultfilters import slugify
from pod.authentication.models import AccessGroup
+from django.utils import timezone
class MeetingTestCase(TestCase):
@@ -164,7 +165,7 @@ def setUp(self):
def test_models_meetings_get_occurrences_no_recurrence(self):
"""A meeting without recurrence should return 1 occurence."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = None
meeting.save()
self.assertEqual(
@@ -180,7 +181,7 @@ def test_models_meetings_get_occurrences_daily_nb_occurrences_filled(self):
"""Daily occurences with date of end of reccurrence filled in but not \
number of occurrences."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = "daily"
meeting.frequency = 1
meeting.recurring_until = date(2022, 8, 2)
@@ -220,7 +221,7 @@ def test_models_meetings_get_occurrences_daily_reset_recurring_until(self):
"""Daily occurences with date of end of reccurrence not leaving any \
possibliity of repeated occurence."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = "daily"
meeting.frequency = 3
meeting.recurring_until = date(2022, 7, 9)
@@ -242,7 +243,7 @@ def test_models_meetings_get_occurrences_daily_recurring_until_filled(self):
end of occurence. The date of end of reccurrence shoud be calculated if \
the number of occurrences is repeated."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = "daily"
meeting.frequency = 1
meeting.recurring_until = None
@@ -315,25 +316,20 @@ def test_models_meetings_get_occurrences_weekly_null_weekdays_is_reset(self):
def test_models_meetings_get_occurrences_weekly_weekdays_include_start(self):
"""For weekly recurrence, the weekday of the start date should be included \
in weekdays."""
- meeting = meeting = Meeting.objects.get(id=1)
+ meeting = Meeting.objects.get(id=1)
with self.assertRaises(ValidationError) as context:
- # 2022-7-7 is a Thursday, and weekday 2 is Tuesday
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ # 2022-7-7 is a Thursday, and weekday 2 is not Tuesday
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = "weekly"
meeting.weekdays = "2"
meeting.save()
- msg = "The day of the start date of the meeting must be "
- msg += "included in the recurrence weekdays."
- self.assertEqual(
- context.exception.messages,
- [msg],
- )
+ self.assertTrue("weekdays" in context.exception.message_dict)
def test_models_meetings_get_occurrences_weekly_recurring_until_filled(self):
"""Weekly occurences with date of end of reccurrence filled in but not \
number of occurrences."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 7, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 7, 14, 0, 0))
meeting.recurrence = "weekly"
meeting.frequency = 1
meeting.recurring_until = date(2022, 8, 2)
@@ -388,7 +384,7 @@ def test_models_meetings_get_occurrences_weekly_nb_occurrences_filled(self):
"""Weekly occurences with number of occurrences filled in but not date \
of end of reccurrence."""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 6, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 6, 14, 0, 0))
meeting.recurrence = "weekly"
meeting.frequency = 1
meeting.recurring_until = None
@@ -436,7 +432,7 @@ def test_models_meetings_get_occurrences_weekly_nb_occurrences_filled(self):
def test_models_meetings_get_occurrences_weekly_reset_weekdays(self):
"""reset weekdays if recurrence not equal to weekly"""
meeting = Meeting.objects.get(id=1)
- meeting.start_at = datetime(2022, 7, 6, 14, 0, 0)
+ meeting.start_at = timezone.make_aware(datetime(2022, 7, 6, 14, 0, 0))
meeting.recurrence = "weekly"
meeting.frequency = 1
meeting.recurring_until = None
@@ -457,6 +453,23 @@ def test_models_meetings_get_occurrences_weekly_reset_weekdays(self):
meeting.refresh_from_db()
self.assertEqual(meeting.weekdays, "126")
+ def test_models_meetings_get_occurrences_weekly_on_monday(self):
+ """check a recurring meeting each monday"""
+ meeting = Meeting.objects.get(id=1)
+ meeting.start_at = timezone.make_aware(datetime(2023, 9, 18, 10, 0, 0))
+ meeting.recurrence = "weekly"
+ meeting.frequency = 1
+ meeting.recurring_until = None
+ meeting.nb_occurrences = 12
+ meeting.weekdays = "0" # on monday
+ meeting.save()
+ meeting.refresh_from_db()
+ occurrences = meeting.get_occurrences(meeting.start, meeting.recurring_until)
+ self.assertEqual(len(occurrences), 12)
+ next_occurrence = meeting.next_occurrence(meeting.start)
+ self.assertEqual(next_occurrence, date(2023, 9, 25))
+ self.assertEqual(next_occurrence.weekday(), 0)
+
# Monthly
def test_models_meetings_get_occurrences_monthly_nb_occurrences_filled_date(self):
diff --git a/pod/meeting/views.py b/pod/meeting/views.py
index b8e84a40bd..964b749263 100644
--- a/pod/meeting/views.py
+++ b/pod/meeting/views.py
@@ -184,10 +184,11 @@ def add_or_edit(request, meeting_id=None):
if meeting
else _("Add a new meeting")
)
+ start_date_formats = '["%s"]' % '","'.join(form.fields["start"].input_formats)
return render(
request,
"meeting/add_or_edit.html",
- {"form": form, "page_title": mark_safe(page_title)},
+ {"form": form, "start_date_formats": start_date_formats, "page_title": mark_safe(page_title)},
)