[IMP] Move some qweb rendering context vars from website#ir.qweb to server#ir.ui...
authorFabien Meghazi <fme@openerp.com>
Thu, 6 Feb 2014 16:12:04 +0000 (17:12 +0100)
committerFabien Meghazi <fme@openerp.com>
Thu, 6 Feb 2014 16:12:04 +0000 (17:12 +0100)
bzr revid: fme@openerp.com-20140206161204-vp6kydvdxhg5qykx

openerp/addons/base/ir/ir_ui_view.py

index 011ba2d..ccbd563 100644 (file)
 ##############################################################################
 import collections
 import copy
+import fnmatch
 import logging
 from lxml import etree
 from operator import itemgetter
 import os
+import simplejson
+import werkzeug
 
 import HTMLParser
 
 import openerp
 from openerp import tools
+from openerp.http import request
 from openerp.osv import fields, osv, orm
 from openerp.tools import graph, SKIPPED_ELEMENT_TYPES
 from openerp.tools.safe_eval import safe_eval as eval
@@ -40,6 +44,17 @@ _logger = logging.getLogger(__name__)
 
 MOVABLE_BRANDING = ['data-oe-model', 'data-oe-id', 'data-oe-field', 'data-oe-xpath']
 
+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)
+
 class view_custom(osv.osv):
     _name = 'ir.ui.view.custom'
     _order = 'create_date desc'  # search(limit=1) should return the last customization
@@ -805,10 +820,20 @@ class view(osv.osv):
         if not context:
             context = {}
 
+        if values is None:
+            values = dict()
+        qcontext = dict(
+            keep_query=keep_query,
+            request=request,
+            json=simplejson,
+            quote_plus=werkzeug.url_quote_plus,
+        )
+        qcontext.update(values)
+
         def loader(name):
             return self.read_template(cr, uid, name, context=context)
 
-        return self.pool[engine].render(cr, uid, tname, values, loader=loader, context=context)
+        return self.pool[engine].render(cr, uid, tname, qcontext, loader=loader, context=context)
 
     #------------------------------------------------------
     # Misc