diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-01-19 17:15:56 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-01-19 17:15:56 +0100 |
| commit | 18e22be138f4d273ce8f63c0ff2c8a437cf6ce5d (patch) | |
| tree | 63bd658de7b6fa0e91d521ca19322dd68bdc1492 /addons/mail/mail_thread.py | |
| parent | f6e5bf847b1a7107c09b009a757823b0f9514fa4 (diff) | |
| parent | 0aab81cd3ac6881b2b64ccedb901b55badd421d4 (diff) | |
[MERGE] forward port of branch 8.0 up to 0aab81c
Diffstat (limited to 'addons/mail/mail_thread.py')
| -rw-r--r-- | addons/mail/mail_thread.py | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 254cd193285..4e3e77f1dd8 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -1443,18 +1443,34 @@ class mail_thread(osv.AbstractModel): if follower.email == email_address: partner_id = follower.id # 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('_', '\\_')) + email_brackets = "<%s>" % email_address if not partner_id: - ids = partner_obj.search(cr, SUPERUSER_ID, [ - ('email', 'ilike', email_address), - ('user_ids', '!=', False) - ], limit=1, context=context) + # exact, case-insensitive match + ids = partner_obj.search(cr, SUPERUSER_ID, + [('email', '=ilike', email_address), + ('user_ids', '!=', False)], + limit=1, context=context) + if not ids: + # if no match with addr-spec, attempt substring match within name-addr pair + ids = partner_obj.search(cr, SUPERUSER_ID, + [('email', 'ilike', email_brackets), + ('user_ids', '!=', False)], + limit=1, context=context) if ids: partner_id = ids[0] # third try: check in partners if not partner_id: - ids = partner_obj.search(cr, SUPERUSER_ID, [ - ('email', 'ilike', email_address) - ], limit=1, context=context) + # exact, case-insensitive match + ids = partner_obj.search(cr, SUPERUSER_ID, + [('email', '=ilike', email_address)], + limit=1, context=context) + if not ids: + # if no match with addr-spec, attempt substring match within name-addr pair + ids = partner_obj.search(cr, SUPERUSER_ID, + [('email', 'ilike', email_brackets)], + limit=1, context=context) if ids: partner_id = ids[0] partner_ids.append(partner_id) @@ -1474,13 +1490,15 @@ class mail_thread(osv.AbstractModel): partner_id = partner_ids[idx] partner_info = {'full_name': email_address, 'partner_id': partner_id} result.append(partner_info) - # link mail with this from mail to the new partner id if link_mail and partner_info['partner_id']: + # Escape special SQL characters in email_address to avoid invalid matches + email_address = (email_address.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_')) + email_brackets = "<%s>" % email_address message_ids = mail_message_obj.search(cr, SUPERUSER_ID, [ '|', - ('email_from', '=', email_address), - ('email_from', 'ilike', '<%s>' % email_address), + ('email_from', '=ilike', email_address), + ('email_from', 'ilike', email_brackets), ('author_id', '=', False) ], context=context) if message_ids: |
