[FIX] Can't translate menus

context was not passed while setting request.website
forced to refactor a bit in order to make true model methods but stopped
because it will be duplicated work when migrating to the new api

bzr revid: fme@openerp.com-20131107151400-9dmtgz7xs34qmbmq
This commit is contained in:
Fabien Meghazi 2013-11-07 16:14:00 +01:00
parent 28b932a40d
commit 01a28b6e03
4 changed files with 39 additions and 51 deletions

View File

@ -37,7 +37,7 @@ logger = logging.getLogger(__name__)
def auth_method_public(): def auth_method_public():
registry = openerp.modules.registry.RegistryManager.get(request.db) registry = openerp.modules.registry.RegistryManager.get(request.db)
if not request.session.uid: if not request.session.uid:
request.uid = registry['website'].get_public_user().id request.uid = registry['website'].get_public_user(request.cr, openerp.SUPERUSER_ID, request.context).id
else: else:
request.uid = request.session.uid request.uid = request.session.uid
http.auth_methods['public'] = auth_method_public http.auth_methods['public'] = auth_method_public

View File

@ -35,24 +35,19 @@ def route(routes, *route_args, **route_kwargs):
request.route_lang = kwargs.get('lang_code', None) request.route_lang = kwargs.get('lang_code', None)
if not hasattr(request, 'website'): if not hasattr(request, 'website'):
request.multilang = f.multilang request.multilang = f.multilang
request.website = request.registry['website'].get_current() # TODO: Select website, currently hard coded
request.website = request.registry['website'].browse(
request.cr, request.uid, 1, context=request.context)
if request.route_lang: if request.route_lang:
lang_ok = [lg.code for lg in request.website.language_ids if lg.code == request.route_lang] lang_ok = [lg.code for lg in request.website.language_ids if lg.code == request.route_lang]
if not lang_ok: if not lang_ok:
return request.not_found() return request.not_found()
request.website.preprocess_request(*args, **kwargs) request.website.preprocess_request(request)
return f(*args, **kwargs) return f(*args, **kwargs)
return wrap return wrap
return decorator return decorator
def auth_method_public():
registry = openerp.modules.registry.RegistryManager.get(request.db)
if not request.session.uid:
request.uid = registry['website'].get_public_user().id
else:
request.uid = request.session.uid
http.auth_methods['public'] = auth_method_public
def url_for(path_or_uri, lang=None, keep_query=None): def url_for(path_or_uri, lang=None, keep_query=None):
location = path_or_uri.strip() location = path_or_uri.strip()
url = urlparse.urlparse(location) url = urlparse.urlparse(location)
@ -109,32 +104,28 @@ class website(osv.osv):
public_user = None public_user = None
def get_public_user(self): def get_public_user(self, cr, uid, context=None):
if not self.public_user: if not self.public_user:
ref = request.registry['ir.model.data'].get_object_reference(request.cr, openerp.SUPERUSER_ID, 'website', 'public_user') uid = openerp.SUPERUSER_ID
self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1]) ref = self.pool['ir.model.data'].get_object_reference(cr, uid, 'website', 'public_user')
self.public_user = self.pool[ref[0]].browse(cr, uid, ref[1])
return self.public_user return self.public_user
def get_lang(self): def preprocess_request(self, cr, uid, ids, request, context=None):
website = request.registry['website'].get_current()
if hasattr(request, 'route_lang'):
lang = request.route_lang
else:
lang = request.params.get('lang', None) or request.httprequest.cookies.get('lang', None)
if lang not in [lg.code for lg in website.language_ids]:
lang = website.default_lang_id.code
return lang
def preprocess_request(self, cr, uid, ids, *args, **kwargs):
def redirect(url): def redirect(url):
return werkzeug.utils.redirect(url_for(url)) return werkzeug.utils.redirect(url_for(url))
request.redirect = redirect request.redirect = redirect
is_public_user = request.uid == self.get_public_user().id is_public_user = request.uid == self.get_public_user(cr, uid, context).id
lang = self.get_lang()
# Select current language
if hasattr(request, 'route_lang'):
lang = request.route_lang
else:
lang = request.params.get('lang', None) or request.httprequest.cookies.get('lang', None)
if lang not in [lg.code for lg in request.website.language_ids]:
lang = request.website.default_lang_id.code
is_master_lang = lang == request.website.default_lang_id.code is_master_lang = lang == request.website.default_lang_id.code
request.context.update({ request.context.update({
'lang': lang, 'lang': lang,
@ -147,16 +138,15 @@ class website(osv.osv):
'translatable': not is_public_user and not is_master_lang and request.multilang, 'translatable': not is_public_user and not is_master_lang and request.multilang,
}) })
def get_current(self): def render(self, cr, uid, ids, template, values=None, context=None):
# WIP, currently hard coded view = self.pool.get("ir.ui.view")
return self.browse(request.cr, request.uid, 1) IMD = self.pool.get("ir.model.data")
user = self.pool.get("res.users")
def render(self, cr, uid, ids, template, values=None): if not context:
view = request.registry.get("ir.ui.view") context = {}
IMD = request.registry.get("ir.model.data")
user = request.registry.get("res.users")
qweb_context = request.context.copy() qweb_context = context.copy()
if values: if values:
qweb_context.update(values) qweb_context.update(values)
@ -170,7 +160,6 @@ class website(osv.osv):
user_id=user.browse(cr, uid, uid), user_id=user.browse(cr, uid, uid),
) )
context = request.context.copy()
context.update( context.update(
inherit_branding=qweb_context.setdefault('editable', False), inherit_branding=qweb_context.setdefault('editable', False),
) )
@ -189,7 +178,7 @@ class website(osv.osv):
if 'main_object' not in qweb_context: if 'main_object' not in qweb_context:
try: try:
main_object = request.registry[view_ref[0]].browse(cr, uid, view_ref[1]) main_object = self.pool[view_ref[0]].browse(cr, uid, view_ref[1])
qweb_context['main_object'] = main_object qweb_context['main_object'] = main_object
except Exception: except Exception:
pass pass
@ -220,7 +209,7 @@ class website(osv.osv):
status=code, status=code,
content_type='text/html;charset=utf-8') content_type='text/html;charset=utf-8')
def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None): def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None, context=None):
# Compute Pager # Compute Pager
page_count = int(math.ceil(float(total) / step)) page_count = int(math.ceil(float(total) / step))
@ -291,15 +280,15 @@ class website(osv.osv):
if xids[view['id']] if xids[view['id']]
] ]
def kanban(self, cr, uid, ids, model, domain, column, template, step=None, scope=None, orderby=None): def kanban(self, cr, uid, ids, model, domain, column, template, step=None, scope=None, orderby=None, context=None):
step = step and int(step) or 10 step = step and int(step) or 10
scope = scope and int(scope) or 5 scope = scope and int(scope) or 5
orderby = orderby or "name" orderby = orderby or "name"
get_args = dict(request.httprequest.args or {}) get_args = dict(request.httprequest.args or {})
model_obj = request.registry[model] model_obj = self.pool[model]
relation = model_obj._columns.get(column)._obj relation = model_obj._columns.get(column)._obj
relation_obj = request.registry[relation] relation_obj = self.pool[relation]
get_args.setdefault('kanban', "") get_args.setdefault('kanban', "")
kanban = get_args.pop('kanban') kanban = get_args.pop('kanban')
@ -353,9 +342,9 @@ class website(osv.osv):
} }
return request.website.render("website.kanban_contain", values) return request.website.render("website.kanban_contain", values)
def kanban_col(self, cr, uid, ids, model, domain, page, template, step, orderby): def kanban_col(self, cr, uid, ids, model, domain, page, template, step, orderby, context=None):
html = "" html = ""
model_obj = request.registry[model] model_obj = self.pool[model]
domain = safe_eval(domain) domain = safe_eval(domain)
step = int(step) step = int(step)
offset = (int(page)-1) * step offset = (int(page)-1) * step

View File

@ -28,13 +28,13 @@ from openerp.osv import osv
class Website(osv.Model): class Website(osv.Model):
_inherit = "website" _inherit = "website"
def preprocess_request(self, cr, uid, ids, *args, **kwargs): def preprocess_request(self, cr, uid, ids, request, context=None):
project_obj = request.registry['project.project'] project_obj = request.registry['project.project']
project_ids = project_obj.search(cr, uid, [('privacy_visibility', "=", "public")], context=request.context) project_ids = project_obj.search(cr, uid, [('privacy_visibility', "=", "public")], context=request.context)
request.context['website_project_ids'] = project_obj.browse(cr, uid, project_ids, request.context) request.context['website_project_ids'] = project_obj.browse(cr, uid, project_ids, request.context)
return super(Website, self).preprocess_request(cr, uid, ids, *args, **kwargs) return super(Website, self).preprocess_request(cr, uid, ids, request, context)
class website_project(http.Controller): class website_project(http.Controller):

View File

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import random import random
import uuid import uuid
import urllib
import simplejson import simplejson
import werkzeug.exceptions import werkzeug.exceptions
@ -54,11 +53,11 @@ def get_current_order():
class Website(osv.osv): class Website(osv.osv):
_inherit = "website" _inherit = "website"
def preprocess_request(self, cr, uid, ids, *args, **kwargs): def preprocess_request(self, cr, uid, ids, request, context=None):
request.context.update({ request.context.update({
'website_sale_order': get_current_order(), 'website_sale_order': get_current_order(),
}) })
return super(Website, self).preprocess_request(cr, uid, ids, *args, **kwargs) return super(Website, self).preprocess_request(cr, uid, ids, request, context=None)
class Ecommerce(http.Controller): class Ecommerce(http.Controller):