summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2016-08-24 16:02:27 +0200
committerThibault Delavallée <tde@openerp.com>2016-09-01 13:27:20 +0200
commitcfc91c06d60ac20cc8435d03ef76466aec30c142 (patch)
tree753968d9678695cada762782c69504230b4f79fb
parent4f9105a4ef40bccd3b27a6a10cc612636a6499f7 (diff)
[IMP] mail: avoid adding alias-partner as followers
Having followers having an email address being an alias is rarely a good idea.
-rw-r--r--addons/mail/models/mail_thread.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index 0cbf06cb152..cd1b7be7aa7 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1558,7 +1558,7 @@ class MailThread(models.AbstractModel):
return result
@api.multi
- def _find_partner_from_emails(self, emails, res_model=None, res_id=None, check_followers=True, force_create=False):
+ def _find_partner_from_emails(self, emails, res_model=None, res_id=None, check_followers=True, force_create=False, exclude_aliases=True):
""" Utility method to find partners from email addresses. The rules are :
1 - check in document (model | self, id) followers
2 - try to find a matching partner that is also an user
@@ -1570,6 +1570,9 @@ class MailThread(models.AbstractModel):
is used.
:param boolean check_followers: check in document followers
:param boolean force_create: create a new partner if not found
+ :param boolean exclude_aliases: do not try to find a partner that could match an alias. Normally aliases
+ should not be used as partner emails but it could be the case due to some
+ strange manipulation
"""
if res_model is None:
res_model = self._name
@@ -1591,12 +1594,14 @@ class MailThread(models.AbstractModel):
if not email_address:
partner_ids.append(partner_id)
continue
+ if exclude_aliases and self.env['mail.alias'].search([('alias_name', 'ilike', email_address)], limit=1):
+ partner_ids.append(partner_id)
+ continue
+
email_address = email_address[0]
# first try: check in document's followers
- for follower in followers:
- if follower.email == email_address:
- partner_id = follower.id
- break
+ partner_id = next((partner.id for partner in followers if partner.email == email_address), False)
+
# second try: check in partners that are also users
# Escape special SQL characters in email_address to avoid invalid matches
email_address = (email_address.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_'))
@@ -1607,8 +1612,7 @@ class MailThread(models.AbstractModel):
if not partners:
# if no match with addr-spec, attempt substring match within name-addr pair
partners = Users.search([('email', 'ilike', email_brackets)], limit=1).mapped('partner_id')
- if partners:
- partner_id = partners[0].id
+ partner_id = partners.id
# third try: check in partners
if not partner_id:
# exact, case-insensitive match
@@ -1616,8 +1620,7 @@ class MailThread(models.AbstractModel):
if not partners:
# if no match with addr-spec, attempt substring match within name-addr pair
partners = Partner.search([('email', 'ilike', email_brackets)], limit=1)
- if partners:
- partner_id = partners[0].id
+ partner_id = partners.id
if not partner_id and force_create:
partner_id = self.env['res.partner'].name_create(contact)[0]
partner_ids.append(partner_id)