34 lines
1.4 KiB
Python
34 lines
1.4 KiB
Python
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import models
|
||
|
|
||
|
|
||
|
class MailMessage(models.Model):
|
||
|
_inherit = "mail.message"
|
||
|
|
||
|
def _validate_access_for_current_persona(self, operation):
|
||
|
if not self:
|
||
|
return False
|
||
|
self.ensure_one()
|
||
|
if self.env.user._is_public():
|
||
|
guest = self.env["mail.guest"]._get_guest_from_context()
|
||
|
# sudo: mail.guest - current guest can read channels they are member of
|
||
|
return guest and self.model == "discuss.channel" and self.res_id in guest.sudo().channel_ids.ids
|
||
|
return super()._validate_access_for_current_persona(operation)
|
||
|
|
||
|
def _message_format_extras(self, format_reply):
|
||
|
self.ensure_one()
|
||
|
vals = super()._message_format_extras(format_reply)
|
||
|
if format_reply and self.model == "discuss.channel" and self.parent_id:
|
||
|
vals["parentMessage"] = self.parent_id.message_format(format_reply=False)[0]
|
||
|
return vals
|
||
|
|
||
|
def _bus_notification_target(self):
|
||
|
self.ensure_one()
|
||
|
if self.model == "discuss.channel" and self.res_id:
|
||
|
return self.env["discuss.channel"].browse(self.res_id)
|
||
|
guest = self.env["mail.guest"]._get_guest_from_context()
|
||
|
if self.env.user._is_public() and guest:
|
||
|
return guest
|
||
|
return super()._bus_notification_target()
|