[FIX] mail: followers alias check on models not inheriting from alias mixin

You could try to check followers on a model not inheriting from mail alias
mixin. In that case current code would check followers on a void mail
alias mixin record, meaning no followers found. Instead we now
differentiate the class method from the method checking record properties.
This commit is contained in:
Thibault Delavallée
2017-11-08 12:51:13 +01:00
parent d6a5c126e7
commit 20d8025036
3 changed files with 21 additions and 9 deletions
+3 -3
View File
@@ -13,8 +13,8 @@ class Alias(models.Model):
class MailAlias(models.AbstractModel):
_inherit = 'mail.alias.mixin'
def _alias_check_contact(self, message, message_dict, alias):
if alias.alias_contact == 'employees' and self.ids:
def _alias_check_contact_on_record(self, record, message, message_dict, alias):
if alias.alias_contact == 'employees' and record.ids:
email_from = tools.decode_message_header(message, 'From')
email_address = tools.email_split(email_from)[0]
employee = self.env['hr.employee'].search([('work_email', 'ilike', email_address)], limit=1)
@@ -26,4 +26,4 @@ class MailAlias(models.AbstractModel):
'error_template': self.env.ref('hr.mail_template_data_unknown_employee_email_address').body_html,
}
return True
return super(MailAlias, self)._alias_check_contact(message, message_dict, alias)
return super(MailAlias, self)._alias_check_contact_on_record(record, message, message_dict, alias)
+14 -3
View File
@@ -264,13 +264,24 @@ class AliasMixin(models.AbstractModel):
record._name, record.display_name, record.id)
def _alias_check_contact(self, message, message_dict, alias):
""" Main mixin method that inheriting models may inherit in order
to implement a specifc behavior. """
return self._alias_check_contact_on_record(self, message, message_dict, alias)
def _alias_check_contact_on_record(self, record, message, message_dict, alias):
""" Generic method that takes a record not necessarily inheriting from
mail.alias.mixin. """
author = self.env['res.partner'].browse(message_dict.get('author_id', False))
if alias.alias_contact == 'followers' and self.ids:
if not hasattr(self, "message_partner_ids") or not hasattr(self, "message_channel_ids"):
if alias.alias_contact == 'followers':
if not record.ids:
return {
'error_message': _('incorrectly configured alias (unknown reference record)'),
}
if not hasattr(record, "message_partner_ids") or not hasattr(record, "message_channel_ids"):
return {
'error_message': _('incorrectly configured alias'),
}
accepted_partner_ids = self.message_partner_ids | self.message_channel_ids.mapped('channel_partner_ids')
accepted_partner_ids = record.message_partner_ids | record.message_channel_ids.mapped('channel_partner_ids')
if not author or author not in accepted_partner_ids:
return {
'error_message': _('restricted to followers'),
+4 -3
View File
@@ -956,9 +956,10 @@ class MailThread(models.AbstractModel):
obj = self.env[alias.alias_parent_model_id.model].browse(alias.alias_parent_thread_id)
elif model:
obj = self.env[model]
if not hasattr(obj, '_alias_check_contact'):
obj = self.env['mail.alias.mixin']
check_result = obj._alias_check_contact(message, message_dict, alias)
if hasattr(obj, '_alias_check_contact'):
check_result = obj._alias_check_contact(message, message_dict, alias)
else:
check_result = self.env['mail.alias.mixin']._alias_check_contact_on_record(obj, message, message_dict, alias)
if check_result is not True:
self._routing_warn(_('alias %s: %s') % (alias.alias_name, check_result.get('error_message', _('unknown error'))), _('skipping'), message_id, route, False)
self._routing_create_bounce_email(email_from, check_result.get('error_template', _generic_bounce_body_html), message)