diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 72fa455dbbf..2c0f1cbb493 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -38,25 +38,22 @@ class ModelConverter(ir.ir_http.ModelConverter): id, name = value return "%s-%d" % (slugify(name), id) - def generate(self, query=None): + def generate(self, cr, uid, query=None, context=None): return request.registry[self.model].name_search( - request.cr, request.uid, - name=query or '', - context=request.context) + cr, uid, name=query or '', context=context) class PageConverter(werkzeug.routing.PathConverter): """ Only point of this converter is to bundle pages enumeration logic Sads got: no way to get the view's human-readable name even if one exists """ - def generate(self, query=None): + def generate(self, cr, uid, query=None, context=None): View = request.registry['ir.ui.view'] views = View.search_read( - request.cr, request.uid, [['page', '=', True]], - fields=[], order='name', context=request.context) + cr, uid, [['page', '=', True]], + fields=[], order='name', context=context) xids = View.get_external_id( - request.cr, request.uid, [view['id'] for view in views], - context=request.context) + cr, uid, [view['id'] for view in views], context=context) for view in views: xid = xids[view['id']] diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 3bd49c32aed..f5a555060dc 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -386,6 +386,8 @@ class website(osv.osv): :rtype: list({name: str, url: str}) """ router = request.httprequest.app.get_db_router(request.db) + # Force enumeration to be performed as public user + uid = self.get_public_user(cr, uid, context=context).id for rule in router.iter_rules(): if not self.rule_is_enumerable(rule): continue @@ -396,10 +398,10 @@ class website(osv.osv): # allow single converter as decided by fp, checked by # rule_is_enumerable [(name, converter)] = converters.items() - # FIXME: perform generation as public user + converter_values = converter.generate( + request.cr, uid, query=query_string, context=context) generated = ({k: v} for k, v in itertools.izip( - itertools.repeat(name), - converter.generate(query=query_string))) + itertools.repeat(name), converter_values)) else: # force single iteration for literal urls generated = [{}]