From 75255dcf83c73f044948e78e7c245e2baa72b894 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Sat, 15 Nov 2025 22:34:13 +0530 Subject: [PATCH 1/5] Speaker acceptance email confirmation link returning 500 error --- app/eventyay/cfp/views/user.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/eventyay/cfp/views/user.py b/app/eventyay/cfp/views/user.py index 2cb9a25d5d..67a0ffc443 100644 --- a/app/eventyay/cfp/views/user.py +++ b/app/eventyay/cfp/views/user.py @@ -219,6 +219,9 @@ def get_object(self): def dispatch(self, request, *args, **kwargs): if request.user.is_anonymous: return get_login_redirect(request) + self.request = request + self.args = args + self.kwargs = kwargs if not request.user.has_perm('base.is_speaker_submission', self.submission): self.template_name = 'cfp/event/user_submission_confirm_error.html' return super().dispatch(request, *args, **kwargs) From 53443bdd1c69fd58d692225257e1936c10d4b42c Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Sat, 15 Nov 2025 23:59:29 +0530 Subject: [PATCH 2/5] refactoring as said by copilot to use cleaner dispatch pattern for permission check --- app/eventyay/cfp/views/user.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/eventyay/cfp/views/user.py b/app/eventyay/cfp/views/user.py index 67a0ffc443..f043aa75dd 100644 --- a/app/eventyay/cfp/views/user.py +++ b/app/eventyay/cfp/views/user.py @@ -219,12 +219,11 @@ def get_object(self): def dispatch(self, request, *args, **kwargs): if request.user.is_anonymous: return get_login_redirect(request) - self.request = request - self.args = args - self.kwargs = kwargs + # Call super().dispatch() first to properly initialize request attributes + response = super().dispatch(request, *args, **kwargs) if not request.user.has_perm('base.is_speaker_submission', self.submission): self.template_name = 'cfp/event/user_submission_confirm_error.html' - return super().dispatch(request, *args, **kwargs) + return response @cached_property def speaker_profile(self): From bf481dc4d7365fb73c81a1f35fd44c1e7c9eeea2 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Sun, 16 Nov 2025 00:11:03 +0530 Subject: [PATCH 3/5] Revert to manual initialization - correct fix --- app/eventyay/cfp/views/user.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/eventyay/cfp/views/user.py b/app/eventyay/cfp/views/user.py index f043aa75dd..2126f7064b 100644 --- a/app/eventyay/cfp/views/user.py +++ b/app/eventyay/cfp/views/user.py @@ -219,11 +219,16 @@ def get_object(self): def dispatch(self, request, *args, **kwargs): if request.user.is_anonymous: return get_login_redirect(request) - # Call super().dispatch() first to properly initialize request attributes - response = super().dispatch(request, *args, **kwargs) + + # Initialize request attributes before accessing self.submission + # to avoid AttributeError when submission property tries to access self.request/self.kwargs + self.request = request + self.args = args + self.kwargs = kwargs + if not request.user.has_perm('base.is_speaker_submission', self.submission): self.template_name = 'cfp/event/user_submission_confirm_error.html' - return response + return super().dispatch(request, *args, **kwargs) @cached_property def speaker_profile(self): From 19a0cbe84108c7be1d65f629a87969db8d9c9dd0 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Thu, 27 Nov 2025 19:56:47 +0530 Subject: [PATCH 4/5] Fix issue #1276: Remove indentation from URLs in email templates - Removed leading spaces from {confirmation_link} in ACCEPT_TEXT template - Removed leading spaces from {orga_url} in NEW_SUBMISSION_TEXT template - Removed leading spaces from {orga_url} in UPDATE_TEXT template Email clients (Gmail, Outlook, etc.) don't auto-link URLs with leading whitespace, treating them as preformatted text instead. This caused confirmation links in acceptance emails to appear as plain text instead of clickable links. --- app/eventyay/mail/default_templates.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/app/eventyay/mail/default_templates.py b/app/eventyay/mail/default_templates.py index 03083d8f9f..d7d166e354 100644 --- a/app/eventyay/mail/default_templates.py +++ b/app/eventyay/mail/default_templates.py @@ -22,10 +22,10 @@ _( """Hi! -We are happy to tell you that we accept your proposal “{submission_title}” +We are happy to tell you that we accept your proposal "{submission_title}" to {event_name}. Please click this link to confirm your attendance: - {confirmation_link} +{confirmation_link} We look forward to seeing you at {event_name} - Please contact us if you have any questions! We will reach out again before the conference to tell you details @@ -89,10 +89,27 @@ """Hi, you have received a new proposal for your event {event_name}: -“{submission_title}” by {speakers}. +"{submission_title}" by {speakers}. You can see details at - {orga_url} +{orga_url} + +All the best, +your {event_name} CfP system. +""" + ) +) +UPDATE_SUBJECT = LazyI18nString.from_gettext( + _("[{event_name}] A talk has been modified: {submission_title}") +) +UPDATE_TEXT = LazyI18nString.from_gettext( + _( + """Hi, + +the proposal "{submission_title}" for your event {event_name} has been modified. +You can see details at + +{orga_url} All the best, your {event_name} CfP system. From 073f1404aa4e4aa3a6b40191e04f550d5c5bc4e6 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 1 Dec 2025 12:55:37 +0530 Subject: [PATCH 5/5] Remove redundant self.request/args/kwargs assignment in SubmissionConfirmView --- app/eventyay/cfp/views/user.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/eventyay/cfp/views/user.py b/app/eventyay/cfp/views/user.py index 2126f7064b..d53498102c 100644 --- a/app/eventyay/cfp/views/user.py +++ b/app/eventyay/cfp/views/user.py @@ -220,12 +220,6 @@ def dispatch(self, request, *args, **kwargs): if request.user.is_anonymous: return get_login_redirect(request) - # Initialize request attributes before accessing self.submission - # to avoid AttributeError when submission property tries to access self.request/self.kwargs - self.request = request - self.args = args - self.kwargs = kwargs - if not request.user.has_perm('base.is_speaker_submission', self.submission): self.template_name = 'cfp/event/user_submission_confirm_error.html' return super().dispatch(request, *args, **kwargs)