From b112d5d2f1e8a6b4d457b0693f213a2e35510cfb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 6 Feb 2014 15:39:19 +0100 Subject: [PATCH 1/2] [FIX] ir ui view should have rendering context on request.website_enabled bzr revid: fme@openerp.com-20140206143919-f6vz8rpx9mb4798g --- addons/website/models/ir_ui_view.py | 47 +++++++++++++++++++++++++++++ addons/website/models/website.py | 34 ++------------------- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 95e2179c9ec..c44d0f73967 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- import copy +import simplejson +import werkzeug from lxml import etree, html +from openerp.addons.website.models import website +from openerp.http import request from openerp.osv import osv, fields class view(osv.osv): @@ -117,6 +121,49 @@ class view(osv.osv): return arch + def render(self, cr, uid, id_or_xml_id, values=None, engine='ir.qweb', context=None): + if request.website_enabled: + engine='website.qweb' + + if isinstance(id_or_xml_id, list): + id_or_xml_id = id_or_xml_id[0] + if isinstance(id_or_xml_id, (int, long)): + id_or_xml_id = self.get_view_xmlid(cr, uid, id_or_xml_id) + + if not context: + context = {} + + qcontext = context.copy() + qcontext.update( + website=request.website, + url_for=website.url_for, + keep_query=website.keep_query, + slug=website.slug, + res_company=request.website.company_id, + user_id=self.pool.get("res.users").browse(cr, uid, uid), + editable=False, + + # TODO: move this in server's ir.ui.view + request=request, + json=simplejson, + quote_plus=werkzeug.url_quote_plus, + ) + + # add some values + if values: + qcontext.update(values) + + # in edit mode ir.ui.view will tag nodes + context['inherit_branding'] = qcontext['editable'] + + view_obj = request.website.get_template(id_or_xml_id) + if 'main_object' not in qcontext: + qcontext['main_object'] = view_obj + + values = qcontext + + return super(view, self).render(cr, uid, id_or_xml_id, values=values, engine=engine, context=context) + def save(self, cr, uid, res_id, value, xpath=None, context=None): """ Update a view section. The view section may embed fields to write diff --git a/addons/website/models/website.py b/addons/website/models/website.py index a3d7e154678..96605000bba 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -221,7 +221,6 @@ class website(osv.osv): request.redirect = lambda url: werkzeug.utils.redirect(url_for(url)) request.context.update( - is_master_lang=is_master_lang, editable=is_website_publisher, translatable=not is_master_lang, ) @@ -234,37 +233,8 @@ class website(osv.osv): return self.pool["ir.ui.view"].browse(cr, uid, view_id, context=context) def _render(self, cr, uid, ids, template, values=None, context=None): - user = self.pool.get("res.users") - if not context: - context = {} - - # Take a context - qweb_values = context.copy() - # add some values - if values: - qweb_values.update(values) - # fill some defaults - qweb_values.update( - request=request, - json=simplejson, - website=request.website, - url_for=url_for, - keep_query=keep_query, - slug=slug, - res_company=request.website.company_id, - user_id=user.browse(cr, uid, uid), - quote_plus=werkzeug.url_quote_plus, - ) - qweb_values.setdefault('editable', False) - - # in edit mode ir.ui.view will tag nodes - context['inherit_branding'] = qweb_values['editable'] - - view = self.get_template(cr, uid, ids, template) - - if 'main_object' not in qweb_values: - qweb_values['main_object'] = view - return view.render(qweb_values, engine='website.qweb', context=context) + # TODO: remove this. (just kept for backward api compatibility for saas-3) + return self.pool['ir.ui.view'].render(cr, uid, template, values=values, context=context) def render(self, cr, uid, ids, template, values=None, status_code=None, context=None): def callback(template, values, context): From 2d4fb9769601a32db2ab13f448c8da6bcd86eca4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 6 Feb 2014 17:13:16 +0100 Subject: [PATCH 2/2] [IMP] Move some qweb rendering context vars from website#ir.qweb to server#ir.ui.view bzr revid: fme@openerp.com-20140206161316-jw7luqon476widcm --- addons/website/models/ir_ui_view.py | 6 ------ addons/website/models/website.py | 13 ------------- 2 files changed, 19 deletions(-) diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index c44d0f73967..b999ddfae8b 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -137,16 +137,10 @@ class view(osv.osv): qcontext.update( website=request.website, url_for=website.url_for, - keep_query=website.keep_query, slug=website.slug, res_company=request.website.company_id, user_id=self.pool.get("res.users").browse(cr, uid, uid), editable=False, - - # TODO: move this in server's ir.ui.view - request=request, - json=simplejson, - quote_plus=werkzeug.url_quote_plus, ) # add some values diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 96605000bba..ec194686464 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import fnmatch import inspect import itertools import logging @@ -7,7 +6,6 @@ import math import re import urlparse -import simplejson import werkzeug import werkzeug.exceptions import werkzeug.wrappers @@ -24,17 +22,6 @@ from openerp.addons.web.http import request, LazyResponse logger = logging.getLogger(__name__) -def keep_query(*args, **kw): - if not args and not kw: - args = ('*',) - params = kw.copy() - query_params = frozenset(werkzeug.url_decode(request.httprequest.query_string).keys()) - for keep_param in args: - for param in fnmatch.filter(query_params, keep_param): - if param not in params and param in request.params: - params[param] = request.params[param] - return werkzeug.urls.url_encode(params) - def url_for(path_or_uri, lang=None): if isinstance(path_or_uri, unicode): path_or_uri = path_or_uri.encode('utf-8')