From 933e47293cac2a49cf75f25d2fe03edbd8a5a7b3 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Fri, 23 Feb 2018 09:09:26 +0100
Subject: [PATCH] Accept multiple bcc_to entries in mails construct

---
 mails/mixins.py                               | 38 +++++++++++++------
 .../registration_invitation.json              |  2 +-
 .../registration_invitation_reminder.json     |  2 +-
 .../submissions_referee_invite.json           |  2 +-
 4 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/mails/mixins.py b/mails/mixins.py
index c85a53568..e34dd9712 100644
--- a/mails/mixins.py
+++ b/mails/mixins.py
@@ -137,27 +137,41 @@ class MailUtilsMixin:
 
         self.subject = self.mail_data['subject']
 
-    def validate_bcc_list(self):
-        # Get recipients list. Try to send through BCC to prevent privacy issues!
-        self.bcc_list = []
-        if self.mail_data.get('bcc_to', False) and self.object:
-            if re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to')):
-                self.bcc_list = [self.mail_data.get('bcc_to')]
+    def _validate_single_entry(self, entry):
+        """
+        entry -- raw email string or path or properties leading to email mail field
+
+        Returns a list of email addresses found.
+        """
+        if entry and self.object:
+            if re.match("[^@]+@[^@]+\.[^@]+", entry):
+                # Email string
+                return [entry]
             else:
                 bcc_to = self.object
-                for attr in self.mail_data.get('bcc_to').split('.'):
+                for attr in entry.split('.'):
                     try:
                         bcc_to = getattr(bcc_to, attr)
                     except AttributeError:
                         # Invalid property, don't use bcc
-                        return
+                        return []
 
                 if not isinstance(bcc_to, list):
-                    self.bcc_list = [bcc_to]
+                    return [bcc_to]
                 else:
-                    self.bcc_list = bcc_to
-        elif re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to', '')):
-            self.bcc_list = [self.mail_data.get('bcc_to')]
+                    return bcc_to
+        elif re.match("[^@]+@[^@]+\.[^@]+", entry):
+            return [entry]
+
+    def validate_bcc_list(self):
+        """
+        bcc_to in the .json file may contain multiple raw email addreses or property paths to
+        an email field. The different entries need to be comma separated.
+        """
+        # Get recipients list. Try to send through BCC to prevent privacy issues!
+        self.bcc_list = []
+        for bcc_entry in self.mail_data.get('bcc_to', '').split(','):
+            self.bcc_list += self._validate_single_entry(bcc_entry)
 
     def validate_recipients(self):
         # Check the send list
diff --git a/mails/templates/mail_templates/registration_invitation.json b/mails/templates/mail_templates/registration_invitation.json
index 35371fb03..4c7426326 100644
--- a/mails/templates/mail_templates/registration_invitation.json
+++ b/mails/templates/mail_templates/registration_invitation.json
@@ -1,7 +1,7 @@
 {
     "subject": "SciPost: invitation",
     "to_address": "email",
-    "bcc_to": "invited_by.email",
+    "bcc_to": "invited_by.email,admin@scipost.org",
     "from_address_name": "SciPost Registration",
     "from_address": "registration@scipost.org",
     "context_object": "invitation"
diff --git a/mails/templates/mail_templates/registration_invitation_reminder.json b/mails/templates/mail_templates/registration_invitation_reminder.json
index 1ab25d8c8..6ed2b96fe 100644
--- a/mails/templates/mail_templates/registration_invitation_reminder.json
+++ b/mails/templates/mail_templates/registration_invitation_reminder.json
@@ -1,7 +1,7 @@
 {
     "subject": "RE: SciPost: invitation",
     "to_address": "email",
-    "bcc_to": "invited_by.email",
+    "bcc_to": "invited_by.email,admin@scipost.org",
     "from_address_name": "SciPost Registration",
     "from_address": "registration@scipost.org",
     "context_object": "invitation"
diff --git a/mails/templates/mail_templates/submissions_referee_invite.json b/mails/templates/mail_templates/submissions_referee_invite.json
index a5d6803a4..c1495012e 100644
--- a/mails/templates/mail_templates/submissions_referee_invite.json
+++ b/mails/templates/mail_templates/submissions_referee_invite.json
@@ -1,7 +1,7 @@
 {
     "subject": "SciPost: refereeing request",
     "to_address": "referee.user.email",
-    "bcc_to": "submission.editor_in_charge.user.email",
+    "bcc_to": "submission.editor_in_charge.user.email,admin@scipost.org",
     "from_address_name": "SciPost Refereeing",
     "from_address": "refereeing@scipost.org",
     "context_object": "invitation"
-- 
GitLab