diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 64ff764146d..97befdf3df5 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -550,6 +550,16 @@ class IrModelFields(models.Model): " name, partner_id.name") store = fields.Boolean(string='Stored', default=True, help="Whether the value is stored in the database.") currency_field = fields.Char(string="Currency field", help="Name of the Many2one field holding the res.currency") + # HTML sanitization reflection, useless for other kinds of fields + sanitize = fields.Boolean(string='Sanitize HTML', default=True) + sanitize_overridable = fields.Boolean(string='Sanitize HTML overridable', default=False) + sanitize_tags = fields.Boolean(string='Sanitize HTML Tags', default=True) + sanitize_attributes = fields.Boolean(string='Sanitize HTML Attributes', default=True) + sanitize_style = fields.Boolean(string='Sanitize HTML Style', default=False) + sanitize_form = fields.Boolean(string='Sanitize HTML Form', default=True) + strip_style = fields.Boolean(string='Strip Style Attribute', default=False) + strip_classes = fields.Boolean(string='Strip Class Attribute', default=False) + @api.depends('relation', 'relation_field') def _compute_relation_field_id(self): @@ -1091,6 +1101,15 @@ class IrModelFields(models.Model): 'column1': field.column1 if field.type == 'many2many' else None, 'column2': field.column2 if field.type == 'many2many' else None, 'currency_field': field.currency_field if field.type == 'monetary' else None, + # html sanitization attributes (useless for other fields) + 'sanitize': field.sanitize if field.type == 'html' else None, + 'sanitize_overridable': field.sanitize_overridable if field.type == 'html' else None, + 'sanitize_tags': field.sanitize_tags if field.type == 'html' else None, + 'sanitize_attributes': field.sanitize_attributes if field.type == 'html' else None, + 'sanitize_style': field.sanitize_style if field.type == 'html' else None, + 'sanitize_form': field.sanitize_form if field.type == 'html' else None, + 'strip_style': field.strip_style if field.type == 'html' else None, + 'strip_classes': field.strip_classes if field.type == 'html' else None, } def _reflect_fields(self, model_names): @@ -1192,6 +1211,15 @@ class IrModelFields(models.Model): attrs['translate'] = bool(field_data['translate']) if field_data['ttype'] == 'char': attrs['size'] = field_data['size'] or None + elif field_data['ttype'] == 'html': + attrs['sanitize'] = field_data['sanitize'] + attrs['sanitize_overridable'] = field_data['sanitize_overridable'] + attrs['sanitize_tags'] = field_data['sanitize_tags'] + attrs['sanitize_attributes'] = field_data['sanitize_attributes'] + attrs['sanitize_style'] = field_data['sanitize_style'] + attrs['sanitize_form'] = field_data['sanitize_form'] + attrs['strip_style'] = field_data['strip_style'] + attrs['strip_classes'] = field_data['strip_classes'] elif field_data['ttype'] in ('selection', 'reference'): attrs['selection'] = self.env['ir.model.fields.selection']._get_selection_data(field_data['id']) if field_data['ttype'] == 'selection': diff --git a/odoo/addons/base/views/ir_model_views.xml b/odoo/addons/base/views/ir_model_views.xml index c4d084b17a2..2304e19e045 100644 --- a/odoo/addons/base/views/ir_model_views.xml +++ b/odoo/addons/base/views/ir_model_views.xml @@ -309,6 +309,36 @@ required="ttype == 'monetary'"/> + + + + + + + + + + + + + +