summaryrefslogtreecommitdiff
path: root/addons/mail/models
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-28 17:44:46 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-28 17:44:46 +0100
commitefe7ca16b77edce73bf538ccb70678a52afdfd1d (patch)
treead5af92d3bb397fd58fd861e6ce8e3abd2902ec6 /addons/mail/models
parentb09f624f20781d65baf2060df40383898e6f86e5 (diff)
parentbb6f6c57f97b091f3f68161039de980eb9ce739d (diff)
[MERGE] forward port branch 11.0 up to bb6f6c57f97
Diffstat (limited to 'addons/mail/models')
-rw-r--r--addons/mail/models/mail_mail.py13
-rw-r--r--addons/mail/models/mail_message.py14
-rw-r--r--addons/mail/models/mail_thread.py2
-rw-r--r--addons/mail/models/res_partner.py2
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,