From 717e6ad280bbc09d987da10e0f4b410aaba4b9ee Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 27 Aug 2013 16:51:16 +0200 Subject: [PATCH] [ADD] lang_info in rendering context bzr revid: fme@openerp.com-20130827145116-jkgdvxmsrw7bpwe3 --- addons/website/website.py | 45 +++++++++++++++++++++++++++++++-- addons/website/website_data.xml | 30 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/addons/website/website.py b/addons/website/website.py index 48276bfa350..fad10bcd7e6 100644 --- a/addons/website/website.py +++ b/addons/website/website.py @@ -2,7 +2,7 @@ import simplejson import openerp -from openerp.osv import osv, orm +from openerp.osv import osv, fields from openerp.addons.web import http from openerp.addons.web.controllers import main from openerp.addons.web.http import request @@ -33,6 +33,8 @@ def urlplus(url, params): url += "%s=%s&" % (k, urllib.quote_plus(str(v))) return url +class WebsiteError(Exception): + pass class website(osv.osv): _name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco @@ -46,6 +48,35 @@ class website(osv.osv): self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1]) return self.public_user + def get_lang_info(self): + fields = ['id', 'name', 'code', 'website_default'] + lang_obj = request.registry['res.lang'] + languages = lang_obj.search_read( + request.cr, openerp.SUPERUSER_ID, [('website_activated', '=', True)], fields + ) + activated = [lg['code'] for lg in languages] + default = [lg['code'] for lg in languages if lg['website_default']] + default = default[0] if default else None + + # Try to get the language from cookie + lang = request.httprequest.cookies.get('lang', None) + if not lang or lang not in activated: + # Try to get the default language + if default: + lang = default + # Otherwise get the first activated language + elif activated: + lang = activated[0] + # Otherwise the language setup is broken + else: + raise WebsiteError("Could not aquire default language") + + return { + 'list': languages, + 'default': default, + 'selected': (lg for lg in languages if lg['code'] == lang).next(), + } + def get_rendering_context(self, additional_values=None): debug = 'debug' in request.params is_logged = True @@ -54,6 +85,7 @@ class website(osv.osv): except: # TODO fme: check correct exception is_logged = False is_public_user = request.uid == self.get_public_user().id + values = { 'debug': debug, 'is_public_user': is_public_user, @@ -67,7 +99,8 @@ class website(osv.osv): 'json': simplejson, 'snipped': { 'kanban': self.kanban - } + }, + 'lang_info': self.get_lang_info(), } if additional_values: values.update(additional_values) @@ -236,6 +269,14 @@ class website(osv.osv): html += self.render(template, self.get_rendering_context({'object_id': object_id})) return html +class res_lang(osv.osv): + _inherit = "res.lang" + + _columns = { + 'website_activated': fields.boolean('Active on website'), + 'website_default': fields.boolean('Website default language'), + } + class res_partner(osv.osv): _inherit = "res.partner" diff --git a/addons/website/website_data.xml b/addons/website/website_data.xml index deb8336839b..4b33a8dd52c 100644 --- a/addons/website/website_data.xml +++ b/addons/website/website_data.xml @@ -1,6 +1,36 @@ + + + res.lang.tree website + res.lang + + + + + + + + + + + res.lang.form website + res.lang + + + + + + + + + + + + True + True + public