From 7488d3eae19360972032c35bdd3a4e401c6cc6e9 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Sun, 9 Mar 2025 12:35:04 +0100 Subject: [PATCH] Ensure that all mails are translated --- participation/views.py | 53 +++++++++++++----------- registration/models.py | 94 +++++++++++++++++++++--------------------- registration/views.py | 20 ++++----- 3 files changed, 86 insertions(+), 81 deletions(-) diff --git a/participation/views.py b/participation/views.py index 59c5509..c0b742c 100644 --- a/participation/views.py +++ b/participation/views.py @@ -230,10 +230,11 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView) self.object.participation.save() mail_context = dict(team=self.object, domain=Site.objects.first().domain) - mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context) - mail_html = render_to_string("participation/mails/request_validation.html", mail_context) - send_mail(f"[{settings.APP_NAME}] {_('Team validation')}", mail_plain, settings.DEFAULT_FROM_EMAIL, - [self.object.participation.tournament.organizers_email], html_message=mail_html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context) + mail_html = render_to_string("participation/mails/request_validation.html", mail_context) + send_mail(f"[{settings.APP_NAME}] {_('Team validation')}", mail_plain, settings.DEFAULT_FROM_EMAIL, + [self.object.participation.tournament.organizers_email], html_message=mail_html) return super().form_valid(form) @@ -265,19 +266,21 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView) message=form.cleaned_data["message"]) mail_context_html = dict(domain=domain, registration=registration, team=self.object, payment=payment, message=form.cleaned_data["message"].replace('\n', '
')) - mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context_plain) - mail_html = render_to_string("participation/mails/team_validated.html", mail_context_html) - registration.user.email_user(f"[{settings.APP_NAME}] {_('Team validated')}", mail_plain, - html_message=mail_html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context_plain) + mail_html = render_to_string("participation/mails/team_validated.html", mail_context_html) + registration.user.email_user(f"[{settings.APP_NAME}] {_('Team validated')}", mail_plain, + html_message=mail_html) elif "invalidate" in self.request.POST: self.object.participation.valid = None self.object.participation.save() mail_context_plain = dict(team=self.object, message=form.cleaned_data["message"]) mail_context_html = dict(team=self.object, message=form.cleaned_data["message"].replace('\n', '
')) - mail_plain = render_to_string("participation/mails/team_not_validated.txt", mail_context_plain) - mail_html = render_to_string("participation/mails/team_not_validated.html", mail_context_html) - send_mail(f"[{settings.APP_NAME}] {_('Team not validated')}", mail_plain, - None, [self.object.email], html_message=mail_html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + mail_plain = render_to_string("participation/mails/team_not_validated.txt", mail_context_plain) + mail_html = render_to_string("participation/mails/team_not_validated.html", mail_context_html) + send_mail(f"[{settings.APP_NAME}] {_('Team not validated')}", mail_plain, + None, [self.object.email], html_message=mail_html) else: form.add_error(None, _("You must specify if you validate the registration or not.")) return self.form_invalid(form) @@ -1147,15 +1150,18 @@ class PoolJuryView(VolunteerMixin, FormView, DetailView): # Send welcome mail subject = f"[{settings.APP_NAME}] " + str(_("New jury account")) site = Site.objects.first() - message = render_to_string('registration/mails/add_organizer.txt', dict(user=user, - inviter=self.request.user, - password=password, - domain=site.domain)) - html = render_to_string('registration/mails/add_organizer.html', dict(user=user, - inviter=self.request.user, - password=password, - domain=site.domain)) - user.email_user(subject, message, html_message=html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + message = render_to_string('registration/mails/add_organizer.txt', + dict(user=user, + inviter=self.request.user, + password=password, + domain=site.domain)) + html = render_to_string('registration/mails/add_organizer.html', + dict(user=user, + inviter=self.request.user, + password=password, + domain=site.domain)) + user.email_user(subject, message, html_message=html) # Add the user in the jury self.object.juries.add(reg) @@ -1845,10 +1851,9 @@ class NotationSheetTemplateView(VolunteerMixin, DetailView): return context def render_to_response(self, context, **response_kwargs): - translation.activate(settings.PREFERRED_LANGUAGE_CODE) - template_name = self.get_template_names()[0] - tex = render_to_string(template_name, context=context, request=self.request) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + tex = render_to_string(template_name, context=context, request=self.request) temp_dir = mkdtemp() with open(os.path.join(temp_dir, "texput.tex"), "w") as f: f.write(tex) diff --git a/registration/models.py b/registration/models.py index e68bab6..e99741e 100644 --- a/registration/models.py +++ b/registration/models.py @@ -308,27 +308,27 @@ class ParticipantRegistration(Registration): """ The team is selected for final. """ - translation.activate(settings.PREFERRED_LANGUAGE_CODE) - subject = f"[{settings.APP_NAME}] " + str(_("Team selected for the final tournament")) - site = Site.objects.first() - from participation.models import Tournament - tournament = Tournament.final_tournament() - payment = self.payments.filter(final=True).first() if self.is_student else None - message = loader.render_to_string('registration/mails/final_selection.txt', - { - 'user': self.user, - 'domain': site.domain, - 'tournament': tournament, - 'payment': payment, - }) - html = loader.render_to_string('registration/mails/final_selection.html', - { - 'user': self.user, - 'domain': site.domain, - 'tournament': tournament, - 'payment': payment, - }) - self.user.email_user(subject, message, html_message=html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + subject = f"[{settings.APP_NAME}] " + str(_("Team selected for the final tournament")) + site = Site.objects.first() + from participation.models import Tournament + tournament = Tournament.final_tournament() + payment = self.payments.filter(final=True).first() if self.is_student else None + message = loader.render_to_string('registration/mails/final_selection.txt', + { + 'user': self.user, + 'domain': site.domain, + 'tournament': tournament, + 'payment': payment, + }) + html = loader.render_to_string('registration/mails/final_selection.html', + { + 'user': self.user, + 'domain': site.domain, + 'tournament': tournament, + 'payment': payment, + }) + self.user.email_user(subject, message, html_message=html) class Meta: verbose_name = _("participant registration") @@ -802,35 +802,35 @@ class Payment(models.Model): return checkout_intent def send_remind_mail(self): - translation.activate(settings.PREFERRED_LANGUAGE_CODE) - subject = f"[{settings.APP_NAME}] " + str(_("Reminder for your payment")) - site = Site.objects.first() - for registration in self.registrations.all(): - message = loader.render_to_string('registration/mails/payment_reminder.txt', - dict(registration=registration, payment=self, domain=site.domain)) - html = loader.render_to_string('registration/mails/payment_reminder.html', - dict(registration=registration, payment=self, domain=site.domain)) - registration.user.email_user(subject, message, html_message=html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + subject = f"[{settings.APP_NAME}] " + str(_("Reminder for your payment")) + site = Site.objects.first() + for registration in self.registrations.all(): + message = loader.render_to_string('registration/mails/payment_reminder.txt', + dict(registration=registration, payment=self, domain=site.domain)) + html = loader.render_to_string('registration/mails/payment_reminder.html', + dict(registration=registration, payment=self, domain=site.domain)) + registration.user.email_user(subject, message, html_message=html) def send_helloasso_payment_confirmation_mail(self): - translation.activate(settings.PREFERRED_LANGUAGE_CODE) - subject = f"[{settings.APP_NAME}] " + str(_("Payment confirmation")) - site = Site.objects.first() - for registration in self.registrations.all(): - message = loader.render_to_string('registration/mails/payment_confirmation.txt', - dict(registration=registration, payment=self, domain=site.domain)) - html = loader.render_to_string('registration/mails/payment_confirmation.html', - dict(registration=registration, payment=self, domain=site.domain)) - registration.user.email_user(subject, message, html_message=html) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + subject = f"[{settings.APP_NAME}] " + str(_("Payment confirmation")) + site = Site.objects.first() + for registration in self.registrations.all(): + message = loader.render_to_string('registration/mails/payment_confirmation.txt', + dict(registration=registration, payment=self, domain=site.domain)) + html = loader.render_to_string('registration/mails/payment_confirmation.html', + dict(registration=registration, payment=self, domain=site.domain)) + registration.user.email_user(subject, message, html_message=html) - payer = self.get_checkout_intent()['order']['payer'] - payer_name = f"{payer['firstName']} {payer['lastName']}" - if not self.registrations.filter(user__email=payer['email']).exists(): - message = loader.render_to_string('registration/mails/payment_confirmation.txt', - dict(registration=payer_name, payment=self, domain=site.domain)) - html = loader.render_to_string('registration/mails/payment_confirmation.html', - dict(registration=payer_name, payment=self, domain=site.domain)) - send_mail(subject, message, None, [payer['email']], html_message=html) + payer = self.get_checkout_intent()['order']['payer'] + payer_name = f"{payer['firstName']} {payer['lastName']}" + if not self.registrations.filter(user__email=payer['email']).exists(): + message = loader.render_to_string('registration/mails/payment_confirmation.txt', + dict(registration=payer_name, payment=self, domain=site.domain)) + html = loader.render_to_string('registration/mails/payment_confirmation.html', + dict(registration=payer_name, payment=self, domain=site.domain)) + send_mail(subject, message, None, [payer['email']], html_message=html) def get_absolute_url(self): return reverse_lazy("registration:update_payment", args=(self.pk,)) diff --git a/registration/views.py b/registration/views.py index f2d9c6d..7c3fdfd 100644 --- a/registration/views.py +++ b/registration/views.py @@ -137,16 +137,17 @@ class AddOrganizerView(VolunteerMixin, CreateView): form.instance.set_password(password) form.instance.save() - subject = f"[{settings.APP_NAME}] " + str(_("New organizer account")) - site = Site.objects.first() - message = render_to_string('registration/mails/add_organizer.txt', dict(user=registration.user, + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + subject = f"[{settings.APP_NAME}] " + str(_("New organizer account")) + site = Site.objects.first() + message = render_to_string('registration/mails/add_organizer.txt', dict(user=registration.user, + inviter=self.request.user, + password=password, + domain=site.domain)) + html = render_to_string('registration/mails/add_organizer.html', dict(user=registration.user, inviter=self.request.user, password=password, domain=site.domain)) - html = render_to_string('registration/mails/add_organizer.html', dict(user=registration.user, - inviter=self.request.user, - password=password, - domain=site.domain)) registration.user.email_user(subject, message, html_message=html) if registration.is_admin: @@ -461,10 +462,9 @@ class AuthorizationTemplateView(TemplateView): return context def render_to_response(self, context, **response_kwargs): - translation.activate(settings.PREFERRED_LANGUAGE_CODE) - template_name = self.get_template_names()[0] - tex = render_to_string(template_name, context=context, request=self.request) + with translation.override(settings.PREFERRED_LANGUAGE_CODE): + tex = render_to_string(template_name, context=context, request=self.request) temp_dir = mkdtemp() with open(os.path.join(temp_dir, "texput.tex"), "w") as f: f.write(tex)