diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-11-28 17:44:46 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-11-28 17:44:46 +0100 |
| commit | efe7ca16b77edce73bf538ccb70678a52afdfd1d (patch) | |
| tree | ad5af92d3bb397fd58fd861e6ce8e3abd2902ec6 /addons/mail/models | |
| parent | b09f624f20781d65baf2060df40383898e6f86e5 (diff) | |
| parent | bb6f6c57f97b091f3f68161039de980eb9ce739d (diff) | |
[MERGE] forward port branch 11.0 up to bb6f6c57f97
Diffstat (limited to 'addons/mail/models')
| -rw-r--r-- | addons/mail/models/mail_mail.py | 13 | ||||
| -rw-r--r-- | addons/mail/models/mail_message.py | 14 | ||||
| -rw-r--r-- | addons/mail/models/mail_thread.py | 2 | ||||
| -rw-r--r-- | addons/mail/models/res_partner.py | 2 |
4 files changed, 26 insertions, 5 deletions
diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py index 4671c71b1ba..1d53888c9f3 100644 --- a/addons/mail/models/mail_mail.py +++ b/addons/mail/models/mail_mail.py @@ -61,7 +61,18 @@ class MailMail(models.Model): # notification field: if not set, set if mail comes from an existing mail.message if 'notification' not in values and values.get('mail_message_id'): values['notification'] = True - return super(MailMail, self).create(values) + new_mail = super(MailMail, self).create(values) + if values.get('attachment_ids'): + new_mail.attachment_ids.check(mode='read') + return new_mail + + @api.multi + def write(self, vals): + res = super(MailMail, self).write(vals) + if vals.get('attachment_ids'): + for mail in self: + mail.attachment_ids.check(mode='read') + return res @api.multi def unlink(self): diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index e71c4522d80..97a2b729d83 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -12,7 +12,7 @@ from odoo.exceptions import UserError, AccessError from odoo.osv import expression _logger = logging.getLogger(__name__) -_image_dataurl = re.compile(r'(data:image/[a-z]+?);base64,([a-z0-9+/\n]{3,}=*)\n*([\'"])', re.I) +_image_dataurl = re.compile(r'(data:image/[a-z]+?);base64,([a-z0-9+/\n]{3,}=*)\n*([\'"])(?: data-filename="([^"]*)")?', re.I) class Message(models.Model): @@ -764,12 +764,13 @@ class Message(models.Model): def base64_to_boundary(match): key = match.group(2) if not data_to_url.get(key): - name = 'image%s' % len(data_to_url) + name = match.group(4) if match.group(4) else 'image%s' % len(data_to_url) attachment = Attachments.create({ 'name': name, 'datas': match.group(2), 'datas_fname': name, - 'res_model': 'mail.message', + 'res_model': values.get('model'), + 'res_id': values.get('res_id'), }) attachment.generate_access_token() values['attachment_ids'].append((4, attachment.id)) @@ -780,6 +781,10 @@ class Message(models.Model): # delegate creation of tracking after the create as sudo to avoid access rights issues tracking_values_cmd = values.pop('tracking_value_ids', False) message = super(Message, self).create(values) + + if values.get('attachment_ids'): + message.attachment_ids.check(mode='read') + if tracking_values_cmd: message.sudo().write({'tracking_value_ids': tracking_values_cmd}) @@ -800,6 +805,9 @@ class Message(models.Model): if 'model' in vals or 'res_id' in vals: self._invalidate_documents() res = super(Message, self).write(vals) + if vals.get('attachment_ids'): + for mail in self: + mail.attachment_ids.check(mode='read') if 'notification_ids' in vals or 'model' in vals or 'res_id' in vals: self._invalidate_documents() return res diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index f21de36c28f..25ba71e0e75 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -191,6 +191,8 @@ class MailThread(models.AbstractModel): @api.multi def _get_message_needaction(self): res = dict((res_id, 0) for res_id in self.ids) + if not res: + return # search for unread messages, directly in SQL to improve performances self._cr.execute(""" SELECT msg.res_id FROM mail_message msg diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py index ecf21840aff..ded7f8b7d43 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -78,7 +78,7 @@ class Partner(models.Model): company = user.company_id if record and hasattr(record, 'company_id'): - company = record.company_id + company = record.company_id.sudo() return { 'message': message, |
