diff --git a/addons/http_routing/controllers/main.py b/addons/http_routing/controllers/main.py index 2a8a149b17d..dbc22d81f34 100644 --- a/addons/http_routing/controllers/main.py +++ b/addons/http_routing/controllers/main.py @@ -1,23 +1,17 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import odoo - from odoo import http from odoo.http import request -from odoo.osv import expression from odoo.addons.web.controllers.main import WebClient, Home + class Routing(Home): @http.route('/website/translations/', type='http', auth="public", website=True) def get_website_translations(self, unique, lang, mods=None): - Modules = request.env['ir.module.module'].sudo() IrHttp = request.env['ir.http'].sudo() - domain = IrHttp._get_translation_frontend_modules_domain() - modules = Modules.search( - expression.AND([domain, [('state', '=', 'installed')]]) - ).mapped('name') + modules = IrHttp.get_translation_frontend_modules() if mods: modules += mods return WebClient().translations(unique, mods=','.join(modules), lang=lang) diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 0e2ecc1e33f..8208cc5527d 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +import hashlib +import json import logging import os import re @@ -16,6 +18,7 @@ import odoo from odoo import api, models from odoo.addons.base.models.ir_http import RequestUID, ModelConverter from odoo.http import request +from odoo.osv import expression from odoo.tools import config, ustr, pycompat from ..geoipresolver import GeoIPResolver @@ -236,6 +239,32 @@ class IrHttp(models.AbstractModel): return request.env['res.lang'].search([('code', '=', lang_code)], limit=1) return request.env['res.lang'].search([], limit=1) + @api.model + def get_frontend_session_info(self): + session_info = super(IrHttp, self).get_frontend_session_info() + + IrHttpModel = request.env['ir.http'].sudo() + modules = IrHttpModel.get_translation_frontend_modules() + user_context = request.session.get_context() if request.session.uid else {} + lang = user_context.get('lang') + translations, _ = request.env['ir.translation'].get_translations_for_webclient(modules, lang) + + session_info.update({ + 'translationURL': '/website/translations/', + 'cache_hashes': { + 'translations': hashlib.sha1(json.dumps(translations, sort_keys=True).encode()).hexdigest(), + }, + }) + return session_info + + @api.model + def get_translation_frontend_modules(self): + Modules = request.env['ir.module.module'].sudo() + domain = self._get_translation_frontend_modules_domain() + return Modules.search( + expression.AND([domain, [('state', '=', 'installed')]]) + ).mapped('name') + @classmethod def _get_translation_frontend_modules_domain(cls): """ Return a domain to list the domain adding web-translations and diff --git a/addons/portal/models/ir_http.py b/addons/portal/models/ir_http.py index 1345d51a655..2c654c73986 100644 --- a/addons/portal/models/ir_http.py +++ b/addons/portal/models/ir_http.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import hashlib -import json -from odoo import api, fields, models +from odoo import models from odoo.osv import expression -from odoo.http import request class IrHttp(models.AbstractModel): @@ -15,27 +12,3 @@ class IrHttp(models.AbstractModel): def _get_translation_frontend_modules_domain(cls): domain = super(IrHttp, cls)._get_translation_frontend_modules_domain() return expression.OR([domain, [('name', '=', 'portal')]]) - - @api.model - def get_portal_session_info(self): - # see http_routing/main.py - Modules = request.env['ir.module.module'].sudo() - IrHttp = request.env['ir.http'].sudo() - domain = IrHttp._get_translation_frontend_modules_domain() - modules = Modules.search( - expression.AND([domain, [('state', '=', 'installed')]]) - ).mapped('name') - user_context = request.session.get_context() if request.session.uid else {} - lang = user_context.get('lang') - translations, _ = request.env['ir.translation'].get_translations_for_webclient(modules, lang) - return { - 'is_admin': self.env.user._is_admin(), - 'is_system': self.env.user._is_system(), - 'is_website_user': self.env.user._is_public(), - 'user_id': self.env.user.id, - 'is_frontend': True, - 'translationURL': '/website/translations', - 'cache_hashes': { - 'translations': hashlib.sha1(json.dumps(translations, sort_keys=True).encode()).hexdigest(), - }, - } diff --git a/addons/portal/views/portal_templates.xml b/addons/portal/views/portal_templates.xml index 8562d316272..2f1a4859888 100644 --- a/addons/portal/views/portal_templates.xml +++ b/addons/portal/views/portal_templates.xml @@ -1,67 +1,45 @@ -