From c165cca3239c9a1249aae9e5e712f7e34fb01107 Mon Sep 17 00:00:00 2001 From: Fringg Date: Sat, 7 Mar 2026 04:26:09 +0300 Subject: [PATCH] fix: use get_rendered_override for proper variable substitution in guest email overrides Admin-created email template overrides were not substituting {tariff_name}, {period_days}, {cabinet_url} etc. because get_template_override returns raw body_html. Switched to get_rendered_override which performs variable substitution with html.escape. Also removed dead is_existing_user from sample context. --- app/cabinet/routes/admin_email_templates.py | 1 - app/services/guest_purchase_service.py | 24 +++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/cabinet/routes/admin_email_templates.py b/app/cabinet/routes/admin_email_templates.py index 1445901c..9db66541 100644 --- a/app/cabinet/routes/admin_email_templates.py +++ b/app/cabinet/routes/admin_email_templates.py @@ -403,7 +403,6 @@ SAMPLE_CONTEXTS: dict[str, dict[str, Any]] = { 'tariff_name': 'Premium', 'period_days': 30, 'cabinet_url': 'https://example.com/cabinet', - 'is_existing_user': False, }, 'guest_activation_required': { 'tariff_name': 'Premium', diff --git a/app/services/guest_purchase_service.py b/app/services/guest_purchase_service.py index b329f50a..8226a92a 100644 --- a/app/services/guest_purchase_service.py +++ b/app/services/guest_purchase_service.py @@ -473,13 +473,14 @@ async def send_guest_notification( # Check DB override first, then fall back to hardcoded template template = None try: - from app.cabinet.services.email_template_overrides import get_template_override + from app.cabinet.services.email_template_overrides import get_rendered_override - override = await get_template_override(notification_type.value, language) - if override: + rendered = await get_rendered_override(notification_type.value, language, context) + if rendered: + subject, body_html = rendered template = { - 'subject': override['subject'], - 'body_html': templates._get_base_template(override['body_html'], language), + 'subject': subject, + 'body_html': body_html, } except Exception as e: logger.debug('Failed to check template override', e=e) @@ -516,11 +517,16 @@ async def send_guest_notification( if purchase.cabinet_password and not purchase.is_gift: cred_template = None try: - cred_override = await get_template_override(NotificationType.GUEST_CABINET_CREDENTIALS.value, language) - if cred_override: + from app.cabinet.services.email_template_overrides import get_rendered_override + + cred_rendered = await get_rendered_override( + NotificationType.GUEST_CABINET_CREDENTIALS.value, language, context + ) + if cred_rendered: + cred_subject, cred_body = cred_rendered cred_template = { - 'subject': cred_override['subject'], - 'body_html': templates._get_base_template(cred_override['body_html'], language), + 'subject': cred_subject, + 'body_html': cred_body, } except Exception: pass