diff --git a/addons/website/website.py b/addons/website/website.py index 3b97edc9751..dbae9561f96 100644 --- a/addons/website/website.py +++ b/addons/website/website.py @@ -15,14 +15,23 @@ from openerp.exceptions import AccessError, AccessDenied import logging logger = logging.getLogger(__name__) -def route(*route_args, **route_kwargs): +def route(routes, *route_args, **route_kwargs): def decorator(f): - @http.route(*route_args, **route_kwargs) + new_routes = routes if isinstance(routes, list) else [routes] + if route_kwargs.get('multilang', False): + route_kwargs.pop('multilang') + for r in list(new_routes): + new_routes.append('/' + r) + @http.route(new_routes, *route_args, **route_kwargs) @functools.wraps(f, assigned=functools.WRAPPER_ASSIGNMENTS + ('func_name',)) def wrap(*args, **kwargs): - request.route_lang = None # WIP: decorator will support lang argument + request.route_lang = kwargs.get('lang_code', None) if not hasattr(request, 'website'): request.website = request.registry['website'].get_current() + if request.route_lang: + lang_ok = [lg.code for lg in request.website.language_ids if lg.code == request.route_lang] + if not lang_ok: + return request.not_found() request.website.preprocess_request(*args, **kwargs) return f(*args, **kwargs) return wrap @@ -78,11 +87,15 @@ class website(osv.osv): def preprocess_request(self, cr, uid, ids, *args, **kwargs): is_public_user = request.uid == self.get_public_user().id + lang = self.get_lang() + is_master_lang = lang == request.website.default_lang_id.code request.context.update({ + 'lang': lang, 'is_public_user': is_public_user, - 'editable': not is_public_user, # TODO: check perms + 'is_master_lang': is_master_lang, + 'editable': not is_public_user, + 'translatable': not is_public_user and not is_master_lang, }) - request.context['lang'] = self.get_lang() def get_current(self): # WIP, currently hard coded @@ -106,9 +119,10 @@ class website(osv.osv): }) qweb_context.update(values) - context = { + context = request.context.copy() + context.update({ 'inherit_branding': qweb_context.get('editable', False), - } + }) # check if xmlid of the template exists try: