SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 0d849903 authored by George Katsikas's avatar George Katsikas :goat:
Browse files

add multi-bcc capability to email form

parent 5c5b9e6d
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,8 @@ __license__ = "AGPL v3"
from django import forms
from crispy_forms.helper import FormHelper
from django.core.validators import EmailValidator
from django.forms import CharField
class HTMXInlineCRUDModelForm(forms.ModelForm):
......@@ -16,3 +18,14 @@ class HTMXInlineCRUDModelForm(forms.ModelForm):
class ModelChoiceFieldwithid(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s (id = %i)" % (super().label_from_instance(obj), obj.id)
class MultiEmailValidator(EmailValidator):
def __call__(self, mail_str: str):
for email in mail_str.split(","):
super().__call__(email.strip())
# Should not be an Email field because browser validation is unwanted.
class MultiEmailField(CharField):
default_validators = [MultiEmailValidator()]
......@@ -4,6 +4,8 @@ __license__ = "AGPL v3"
from django import forms
from common.forms import MultiEmailField
from .core import MailEngine
from .exceptions import ConfigurationError
from .widgets import SummernoteEditor
......@@ -17,7 +19,7 @@ class EmailForm(forms.Form):
subject = forms.CharField(max_length=255, label="Subject*")
text = forms.CharField(widget=SummernoteEditor, label="Text*")
mail_field = forms.EmailField(label="Optional: bcc this email to", required=False)
mail_field = MultiEmailField(label="Optional: bcc this email to", required=False)
prefix = "mail_form"
extra_config = {}
......@@ -73,8 +75,8 @@ class EmailForm(forms.Form):
def save(self):
self.engine.render_template(self.cleaned_data["text"])
self.engine.mail_data["subject"] = self.cleaned_data["subject"]
if self.cleaned_data["mail_field"]:
self.engine.mail_data["bcc"].append(self.cleaned_data["mail_field"])
if bcc_mail_str := self.cleaned_data["mail_field"]:
self.engine.mail_data["bcc"] += [m.strip() for m in bcc_mail_str.split(",")]
self.engine.send_mail()
return self.engine.template_variables["object"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment