diff --git a/addons/website/models/__init__.py b/addons/website/models/__init__.py index 4977118e925..5fcab989d6c 100644 --- a/addons/website/models/__init__.py +++ b/addons/website/models/__init__.py @@ -3,3 +3,4 @@ import ir_fields import view import website +import ir_qweb diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py new file mode 100644 index 00000000000..eeaee4a94e0 --- /dev/null +++ b/addons/website/models/ir_qweb.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +import itertools + +from openerp.osv import orm, fields + +class QWeb(orm.AbstractModel): + """ QWeb object for rendering stuff in the website context + + Website-context rendering needs to add some metadata to rendered fields, + as well as render a few fields differently. + + Also, add methods to convert values back to openerp models. + """ + _name = 'website.qweb' + _inherit = 'ir.qweb' + + def get_converter_for(self, field_type): + return self.pool.get( + 'website.qweb.field.' + field_type, + self.pool['website.qweb.field']) + +class Field(orm.AbstractModel): + _name = 'website.qweb.field' + _inherit = 'ir.qweb.field' + + def attributes(self, cr, uid, field_name, record, options, + source_element, g_att, t_att, qweb_context): + column = record._model._all_columns[field_name].column + return itertools.chain( + super(Field, self).attributes(cr, uid, field_name, record, options, + source_element, g_att, t_att, + qweb_context), + [('data-oe-translate', 1 if column.translate else 0)] + ) + +class Float(orm.AbstractModel): + _name = 'website.qweb.field.float' + _inherit = ['website.qweb.field', 'ir.qweb.field.float'] + +class Text(orm.AbstractModel): + _name = 'website.qweb.field.text' + _inherit = ['website.qweb.field', 'ir.qweb.field.text'] + +class Selection(orm.AbstractModel): + _name = 'website.qweb.field.selection' + _inherit = ['website.qweb.field', 'ir.qweb.field.selection'] + +class ManyToOne(orm.AbstractModel): + _name = 'website.qweb.field.many2one' + _inherit = ['website.qweb.field', 'ir.qweb.field.many2one'] + +class HTML(orm.AbstractModel): + _name = 'website.qweb.field.html' + _inherit = ['website.qweb.field', 'ir.qweb.field.html'] + +class Image(orm.AbstractModel): + _name = 'website.qweb.field.image' + _inherit = ['website.qweb.field', 'ir.qweb.field.image'] + +class Currency(orm.AbstractModel): + _name = 'website.qweb.field.currency' + _inherit = ['website.qweb.field', 'ir.qweb.field.currency'] diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 90957b584a4..c36ed829699 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -168,8 +168,9 @@ class website(osv.osv): return self.render(cr, uid, ids, 'website.404', qweb_context) try: - return view.render(cr, uid, "%s.%s" % (module, xmlid), - qweb_context, context=context) + return view.render( + cr, uid, "%s.%s" % (module, xmlid), qweb_context, + engine='website.qweb', context=context) except (AccessError, AccessDenied), err: logger.error(err) qweb_context['error'] = err[1] diff --git a/addons/website/security/ir.model.access.csv b/addons/website/security/ir.model.access.csv index d2c3d4ee534..e9679c50ba9 100644 --- a/addons/website/security/ir.model.access.csv +++ b/addons/website/security/ir.model.access.csv @@ -1,3 +1,14 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_website_public,website,website.model_website,base.group_public,1,0,0,0 -access_website,website,website.model_website,base.group_user,1,0,0,0 \ No newline at end of file +access_website,website,website.model_website,base.group_user,1,0,0,0 +access_website_converter_test,access_website_converter_test,model_website_converter_test,,1,1,1,1 +access_website_converter_test_sub,access_website_converter_test_sub,model_website_converter_test_sub,,1,1,1,1 +access_website_qweb,access_website_qweb,model_website_qweb,,0,0,0,0 +access_website_qweb_field,access_website_qweb_field,model_website_qweb_field,,0,0,0,0 +access_website_qweb_field_float,access_website_qweb_field_float,model_website_qweb_field_float,,0,0,0,0 +access_website_qweb_field_text,access_website_qweb_field_text,model_website_qweb_field_text,,0,0,0,0 +access_website_qweb_field_selection,access_website_qweb_field_selection,model_website_qweb_field_selection,,0,0,0,0 +access_website_qweb_field_many2one,access_website_qweb_field_many2one,model_website_qweb_field_many2one,,0,0,0,0 +access_website_qweb_field_html,access_website_qweb_field_html,model_website_qweb_field_html,,0,0,0,0 +access_website_qweb_field_image,access_website_qweb_field_image,model_website_qweb_field_image,,0,0,0,0 +access_website_qweb_field_currency,access_website_qweb_field_currency,model_website_qweb_field_currency,,0,0,0,0