diff options
Diffstat (limited to 'addons/mail/models/mail_message.py')
| -rw-r--r-- | addons/mail/models/mail_message.py | 14 |
1 files changed, 11 insertions, 3 deletions
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 |
