From 7aa9f2395529e0f91aff6923da577b4087309d63 Mon Sep 17 00:00:00 2001 From: qsm-odoo Date: Tue, 19 Jul 2016 16:37:35 +0200 Subject: [PATCH] [FIX] *: use html_translate for non-sanitized html fields Commit c21568e14f2dd9a9b859ac495a649828355bc75f deactivated the sanitization of frontend html fields so that their modification through the editor worked again. However, this broke the possibility to display their traduction and to modify them. The problem is that the translate option of html fields should not equal "True" but instead be the html_translate function defined in openerp.tool.translate. The translate=True option is automatically change in html_translate though but there is a condition: the field should be sanitized, which is why this broke since the sanitization is disabled. This commit sets the translate option of non-sanitized html fields to html_translate. Maybe we should investigate for this to be automatic for non-sanitized html fields as well. Thanks to @rco-odoo. --- addons/event/models/event.py | 3 ++- addons/website_event_track/models/event.py | 4 ++-- addons/website_hr_recruitment/models/hr_job.py | 4 ++-- addons/website_livechat/models/im_livechat.py | 3 ++- addons/website_quote/models/order.py | 16 ++++++++-------- addons/website_slides/models/slides.py | 5 +++-- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/addons/event/models/event.py b/addons/event/models/event.py index 494349979b1..447edb098a8 100644 --- a/addons/event/models/event.py +++ b/addons/event/models/event.py @@ -4,6 +4,7 @@ import pytz from openerp import _, api, fields, models from openerp.exceptions import AccessError, UserError +from openerp.tools.translate import html_translate class event_type(models.Model): """ Event Type """ @@ -171,7 +172,7 @@ class event_event(models.Model): readonly=False, states={'done': [('readonly', True)]}) country_id = fields.Many2one('res.country', 'Country', related='address_id.country_id', store=True) description = fields.Html( - string='Description', oldname='note', translate=True, sanitize=False, + string='Description', oldname='note', translate=html_translate, sanitize=False, readonly=False, states={'done': [('readonly', True)]}) # badge fields badge_front = fields.Html(string='Badge Front') diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index af5e5723c00..5ba6a3c66c4 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api -from openerp.tools.translate import _ +from openerp.tools.translate import _, html_translate from openerp.addons.website.models.website import slug @@ -44,7 +44,7 @@ class event_track(models.Model): state = fields.Selection([ ('draft', 'Proposal'), ('confirmed', 'Confirmed'), ('announced', 'Announced'), ('published', 'Published'), ('refused', 'Refused'), ('cancel', 'Cancelled')], 'Status', default='draft', required=True, copy=False, track_visibility='onchange') - description = fields.Html('Track Description', translate=True, sanitize=False) + description = fields.Html('Track Description', translate=html_translate, sanitize=False) date = fields.Datetime('Track Date') duration = fields.Float('Duration', digits=(16, 2), default=1.5) location_id = fields.Many2one('event.track.location', 'Room') diff --git a/addons/website_hr_recruitment/models/hr_job.py b/addons/website_hr_recruitment/models/hr_job.py index b7776a72160..a8e6ee3265f 100644 --- a/addons/website_hr_recruitment/models/hr_job.py +++ b/addons/website_hr_recruitment/models/hr_job.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from openerp.osv import osv, fields - +from openerp.tools.translate import html_translate class hr_job(osv.osv): _name = 'hr.job' @@ -18,5 +18,5 @@ class hr_job(osv.osv): return super(hr_job, self).job_open(cr, uid, ids, context) _columns = { - 'website_description': fields.html('Website description', translate=True, sanitize=False), + 'website_description': fields.html('Website description', translate=html_translate, sanitize=False), } diff --git a/addons/website_livechat/models/im_livechat.py b/addons/website_livechat/models/im_livechat.py index dc63b3fcf2c..5cc7296e0a9 100644 --- a/addons/website_livechat/models/im_livechat.py +++ b/addons/website_livechat/models/im_livechat.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from openerp import api, models, fields from openerp.addons.website.models.website import slug +from openerp.tools.translate import html_translate class ImLivechatChannel(models.Model): @@ -16,4 +17,4 @@ class ImLivechatChannel(models.Model): res[channel.id] = "/livechat/channel/%s" % (slug(channel),) return res - website_description = fields.Html("Website description", default=False, help="Description of the channel displayed on the website page", sanitize=False) + website_description = fields.Html("Website description", default=False, help="Description of the channel displayed on the website page", sanitize=False, translate=html_translate) diff --git a/addons/website_quote/models/order.py b/addons/website_quote/models/order.py index 1fa6d82222f..fbd2932289e 100644 --- a/addons/website_quote/models/order.py +++ b/addons/website_quote/models/order.py @@ -10,7 +10,7 @@ import datetime import openerp.addons.decimal_precision as dp from openerp import SUPERUSER_ID from openerp.tools import DEFAULT_SERVER_DATE_FORMAT -from openerp.tools.translate import _ +from openerp.tools.translate import _, html_translate class sale_quote_template(osv.osv): @@ -18,7 +18,7 @@ class sale_quote_template(osv.osv): _description = "Sale Quotation Template" _columns = { 'name': fields.char('Quotation Template', required=True), - 'website_description': fields.html('Description', translate=True, sanitize=False), + 'website_description': fields.html('Description', translate=html_translate, sanitize=False), 'quote_line': fields.one2many('sale.quote.line', 'quote_id', 'Quotation Template Lines', copy=True), 'note': fields.text('Terms and conditions'), 'options': fields.one2many('sale.quote.option', 'template_id', 'Optional Products Lines', copy=True), @@ -108,7 +108,7 @@ class sale_order_line(osv.osv): _inherit = "sale.order.line" _description = "Sales Order Line" _columns = { - 'website_description': fields.html('Line Description', sanitize=False), + 'website_description': fields.html('Line Description', sanitize=False, translate=html_translate), 'option_line_id': fields.one2many('sale.order.option', 'line_id', 'Optional Products Lines'), } @@ -157,7 +157,7 @@ class sale_order(osv.osv): _columns = { 'access_token': fields.char('Security Token', required=True, copy=False), 'template_id': fields.many2one('sale.quote.template', 'Quotation Template', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}), - 'website_description': fields.html('Description', translate=True, sanitize=False), + 'website_description': fields.html('Description', translate=html_translate, sanitize=False), 'options' : fields.one2many('sale.order.option', 'order_id', 'Optional Products Lines', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, copy=True), 'amount_undiscounted': fields.function(_get_total, string='Amount Before Discount', type="float", digits=0), 'quote_viewed': fields.boolean('Quotation Viewed'), @@ -320,7 +320,7 @@ class sale_quote_option(osv.osv): 'template_id': fields.many2one('sale.quote.template', 'Quotation Template Reference', ondelete='cascade', select=True, required=True), 'name': fields.text('Description', required=True, translate=True), 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True), - 'website_description': fields.html('Option Description', translate=True, sanitize=False), + 'website_description': fields.html('Option Description', translate=html_translate, sanitize=False), 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')), 'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')), 'uom_id': fields.many2one('product.uom', 'Unit of Measure ', required=True), @@ -389,7 +389,7 @@ class sale_order_option(osv.osv): 'line_id': fields.many2one('sale.order.line', on_delete="set null"), 'name': fields.text('Description', required=True), 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)]), - 'website_description': fields.html('Line Description', sanitize=False), + 'website_description': fields.html('Line Description', sanitize=False, translate=html_translate), 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')), 'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')), 'uom_id': fields.many2one('product.uom', 'Unit of Measure ', required=True), @@ -455,6 +455,6 @@ class product_template(osv.Model): _inherit = "product.template" _columns = { - 'website_description': fields.html('Description for the website', sanitize=False), # hack, if website_sale is not installed - 'quote_description': fields.html('Description for the quote', sanitize=False), + 'website_description': fields.html('Description for the website', sanitize=False, translate=html_translate), # hack, if website_sale is not installed + 'quote_description': fields.html('Description for the quote', sanitize=False, translate=html_translate), } diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py index 836af630bdb..6ecc0540437 100644 --- a/addons/website_slides/models/slides.py +++ b/addons/website_slides/models/slides.py @@ -11,6 +11,7 @@ from urlparse import urlparse from openerp import api, fields, models, SUPERUSER_ID, _ from openerp.tools import image +from openerp.tools.translate import html_translate from openerp.exceptions import Warning from openerp.addons.website.models.website import slug @@ -30,7 +31,7 @@ class Channel(models.Model): } name = fields.Char('Name', translate=True, required=True) - description = fields.Html('Description', translate=True, sanitize=False) + description = fields.Html('Description', translate=html_translate, sanitize=False) sequence = fields.Integer(default=10, help='Display order') category_ids = fields.One2many('slide.category', 'channel_id', string="Categories") slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides") @@ -98,7 +99,7 @@ class Channel(models.Model): string='Channel Groups', help="Groups allowed to see presentations in this channel") access_error_msg = fields.Html( 'Error Message', help="Message to display when not accessible due to access rights", - default="

This channel is private and its content is restricted to some users.

", translate=True, sanitize=False) + default="

This channel is private and its content is restricted to some users.

", translate=html_translate, sanitize=False) upload_group_ids = fields.Many2many( 'res.groups', 'rel_upload_groups', 'channel_id', 'group_id', string='Upload Groups', help="Groups allowed to upload presentations in this channel. If void, every user can upload.")