[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:
@@ -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)
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user