summaryrefslogtreecommitdiff
path: root/addons/website_mail/models/mail_message.py
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2019-10-14 11:05:55 +0000
committerThibault Delavallée <tde@odoo.com>2019-12-02 15:18:44 +0000
commit5649fc88e8f3022f4143400a124f2e3c1e5c0df8 (patch)
treecb172be462e568baca8235f7af13855733cfaf8b /addons/website_mail/models/mail_message.py
parent46b9a97b56d74503d6e86b16466982c750a66422 (diff)
[REF] {website_}mail: move and replace published field of mail.message to is_internal
PURPOSE Clean posting process and improve mail.message definition and comprehension. SPECIFICATIONS Website mail defines a website_published field allowing to publish / unpublish comments on the frontend of some modules. This field has several drawbacks : * it is used only for front-end people (portal, public) and has no real effect in chatter / classic discussions; * it is used only in some advanced front-end module and is not available in portal by default; * its naming is not really correct as it is not linked to fields coming from the website_published mixin and its behavior is not really the same; * its use is a bit duplicated with internal flag coming from subtype allowing to hide messages related to an internal subtype; * there are overrides of standard mail.message methods just to handle this flag; In this commit we change that field by an is_internal flag directly on mail.message model itself. It tells if share people (customers, share users) are allowed to read the message. This field can be given through posting API or set manually using widgets. It is also used in access rights custom methods and managed like the internal flag of subtypes. Mailgateway was already using an internal flag for internal note replies. It is renamed to is_internal and propagated as it is now a standard field. It also eases code understanding. Portal is updated to allow managing the flag directly. It means customer portal now natively allows to moderate customer comments without any need of website modules. Rating is updated accordingly. An is_internal field is added, replacing the related on website published. LINKS Task ID 2071556 PR #38692
Diffstat (limited to 'addons/website_mail/models/mail_message.py')
-rw-r--r--addons/website_mail/models/mail_message.py58
1 files changed, 0 insertions, 58 deletions
diff --git a/addons/website_mail/models/mail_message.py b/addons/website_mail/models/mail_message.py
deleted file mode 100644
index 2de32b9f4f0..00000000000
--- a/addons/website_mail/models/mail_message.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, fields, models, _
-from odoo.osv import expression
-from odoo.exceptions import AccessError
-
-
-class MailMessage(models.Model):
- _inherit = 'mail.message'
-
- @api.model
- def default_get(self, fields_list):
- defaults = super(MailMessage, self).default_get(fields_list)
-
- # Note: explicitly implemented in default_get() instead of field default,
- # to avoid setting to True for all existing messages during upgrades.
- # TODO: this default should probably be dynamic according to the model
- # on which the messages are attached, thus moved to create().
- if 'website_published' in fields_list:
- defaults.setdefault('website_published', True)
-
- return defaults
-
- website_published = fields.Boolean(string='Published', help="Visible on the website as a comment", copy=False)
-
- @api.model
- def _non_employee_message_domain(self):
- domain = super(MailMessage, self)._non_employee_message_domain()
- return expression.AND([domain, [('website_published', '=', True)]])
-
- @api.model
- def _search(self, args, offset=0, limit=None, order=None, count=False, access_rights_uid=None):
- """ Override that adds specific access rights of mail.message, to restrict
- messages to published messages for public users. """
- if self.user_has_groups('base.group_public'):
- args = expression.AND([[('website_published', '=', True)], list(args)])
-
- return super(MailMessage, self)._search(args, offset=offset, limit=limit, order=order,
- count=count, access_rights_uid=access_rights_uid)
-
- def check_access_rule(self, operation):
- """ Add Access rules of mail.message for non-employee user:
- - read:
- - raise if the type is comment and subtype NULL (internal note)
- """
- if self.user_has_groups('base.group_public'):
- self.env.cr.execute('SELECT id FROM "%s" WHERE website_published IS FALSE AND id = ANY (%%s)' % (self._table), (self.ids,))
- if self.env.cr.fetchall():
- raise AccessError(
- _('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: %s, Operation: %s)') % (self._description, operation)
- + ' - ({} {}, {} {})'.format(_('Records:'), self.ids[:6], _('User:'), self._uid)
- )
- return super(MailMessage, self).check_access_rule(operation=operation)
-
- def _portal_message_format(self, fields_list):
- fields_list += ['website_published']
- return super(MailMessage, self)._portal_message_format(fields_list)