From bebbee5abdaed17895b1cbfeb7309f13fa485e77 Mon Sep 17 00:00:00 2001 From: yuri Date: Thu, 10 May 2018 12:36:07 +0300 Subject: [PATCH] email: replyTo link --- application/Espo/Repositories/Email.php | 23 ++++++++++- .../Espo/Resources/i18n/en_US/Email.json | 6 ++- .../Resources/metadata/entityDefs/Email.json | 17 ++++++++ application/Espo/Services/Email.php | 8 +++- client/src/email-helper.js | 39 +++++++++++-------- 5 files changed, 74 insertions(+), 19 deletions(-) diff --git a/application/Espo/Repositories/Email.php b/application/Espo/Repositories/Email.php index a8f1ab0f7e..5409c550be 100644 --- a/application/Espo/Repositories/Email.php +++ b/application/Espo/Repositories/Email.php @@ -121,7 +121,20 @@ class Email extends \Espo\Core\ORM\Repositories\RDB } } - public function loadNameHash(Entity $entity, array $fieldList = ['from', 'to', 'cc', 'bcc']) + public function loadReplyToField(Entity $entity) + { + $entity->loadLinkMultipleField('replyToEmailAddresses'); + $names = $entity->get('replyToEmailAddressesNames'); + if (!empty($names)) { + $arr = array(); + foreach ($names as $id => $address) { + $arr[] = $address; + } + $entity->set('replyTo', implode(';', $arr)); + } + } + + public function loadNameHash(Entity $entity, array $fieldList = ['from', 'to', 'cc', 'bcc', 'replyTo']) { $addressList = array(); if (in_array('from', $fieldList) && $entity->get('from')) { @@ -153,6 +166,14 @@ class Email extends \Espo\Core\ORM\Repositories\RDB } } } + if (in_array('replyTo', $fieldList)) { + $arr = explode(';', $entity->get('replyTo')); + foreach ($arr as $address) { + if (!in_array($address, $addressList)) { + $addressList[] = $address; + } + } + } $nameHash = (object) []; $typeHash = (object) []; diff --git a/application/Espo/Resources/i18n/en_US/Email.json b/application/Espo/Resources/i18n/en_US/Email.json index 27d74da782..e9da7009c6 100644 --- a/application/Espo/Resources/i18n/en_US/Email.json +++ b/application/Espo/Resources/i18n/en_US/Email.json @@ -38,7 +38,10 @@ "hasAttachment": "Has Attachment", "assignedUsers": "Assigned Users", "sentBy": "Sent By", + "toEmailAddresses": "To EmailAddresses", "ccEmailAddresses": "CC Email Addresses", + "bccEmailAddresses": "BCC EmailAddresses", + "replyToEmailAddresses": "Reply-To EmailAddresses", "messageId": "Message Id", "messageIdInternal": "Message Id (Internal)", "folderId": "Folder Id", @@ -58,7 +61,8 @@ "fromEmailAddress": "From Email Address", "toEmailAddresses": "To EmailAddresses", "ccEmailAddresses": "CC EmailAddresses", - "bccEmailAddresses": "BCC EmailAddresses" + "bccEmailAddresses": "BCC EmailAddresses", + "replyToEmailAddresses": "Reply-To EmailAddresses" }, "options": { "status": { diff --git a/application/Espo/Resources/metadata/entityDefs/Email.json b/application/Espo/Resources/metadata/entityDefs/Email.json index 4a0fdb14c6..2d8b8107a1 100644 --- a/application/Espo/Resources/metadata/entityDefs/Email.json +++ b/application/Espo/Resources/metadata/entityDefs/Email.json @@ -154,6 +154,9 @@ "ccEmailAddresses": { "type": "linkMultiple" }, + "replyToEmailAddresses": { + "type": "linkMultiple" + }, "bodyPlain": { "type": "text", "seeMoreDisabled": true, @@ -401,6 +404,20 @@ } } }, + "replyToEmailAddresses": { + "type": "hasMany", + "entity": "EmailAddress", + "relationName": "emailEmailAddress", + "conditions": { + "addressType": "rto" + }, + "additionalColumns": { + "addressType": { + "type": "varchar", + "len": "4" + } + } + }, "inboundEmails": { "type": "hasMany", "entity": "InboundEmail", diff --git a/application/Espo/Services/Email.php b/application/Espo/Services/Email.php index 2fab648380..c161fb1615 100644 --- a/application/Espo/Services/Email.php +++ b/application/Espo/Services/Email.php @@ -299,6 +299,11 @@ class Email extends Record $this->getEntityManager()->getRepository('Email')->loadBccField($entity); } + public function loadReplyToField(Entity $entity) + { + $this->getEntityManager()->getRepository('Email')->loadReplyToField($entity); + } + public function getEntity($id = null) { $entity = $this->getRepository()->get($id); @@ -327,6 +332,7 @@ class Email extends Record $this->loadToField($entity); $this->loadCcField($entity); $this->loadBccField($entity); + $this->loadReplyToField($entity); $this->loadNameHash($entity); @@ -638,7 +644,7 @@ class Email extends Record } } - public function loadNameHash(Entity $entity, array $fieldList = ['from', 'to', 'cc', 'bcc']) + public function loadNameHash(Entity $entity, array $fieldList = ['from', 'to', 'cc', 'bcc', 'replyTo']) { $this->getEntityManager()->getRepository('Email')->loadNameHash($entity, $fieldList); } diff --git a/client/src/email-helper.js b/client/src/email-helper.js index a07410a9ae..97dbe242a2 100644 --- a/client/src/email-helper.js +++ b/client/src/email-helper.js @@ -67,25 +67,32 @@ Espo.define('email-helper', [], function () { var isReplyOnSent = false; - if (model.get('replyToString')) { - var str = model.get('replyToString'); + var replyToAddressString = model.get('replyTo') || null; - var a = []; - str.split(';').forEach(function (item) { - var part = item.trim(); - var address = this.parseAddressFromStringAddress(item); + if (replyToAddressString) { + var replyToAddressList = replyToAddressString.split(';'); + to = replyToAddressList.join(';'); + } else { + if (model.get('replyToString')) { + var str = model.get('replyToString'); - if (address) { - a.push(address); - var name = this.parseNameFromStringAddress(part); - if (name && name !== address) { - nameHash[address] = name; + var a = []; + str.split(';').forEach(function (item) { + var part = item.trim(); + var address = this.parseAddressFromStringAddress(item); + + if (address) { + a.push(address); + var name = this.parseNameFromStringAddress(part); + if (name && name !== address) { + nameHash[address] = name; + } } - - } - }, this); - to = a.join('; '); + }, this); + to = a.join(';'); + } } + if (!to || !~to.indexOf('@')) { if (model.get('from')) { if (model.get('from') != this.getUser().get('emailAddress')) { @@ -219,7 +226,7 @@ Espo.define('email-helper', [], function () { partList.push(line); }, this); - line += partList.join('; '); + line += partList.join(';'); list.push(line); }