summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2015-02-24 14:47:19 +0100
committerOlivier Dony <odo@openerp.com>2015-02-24 14:47:19 +0100
commit95a2f8b121d9d814f9d90b63d3ce06e455f770cc (patch)
tree43599d19c5ab45df93a3d9c5d24b062a8378946b
parentdb4355d3816db8b545991723613ae66f1c61d128 (diff)
parentcbb51610ee1506e67f5aaab703130ff8a2d824b6 (diff)
[MERGE] Forward-port latest bugfixes from 8.0 up to cbb51610ee1506e67f5aaab703130ff8a2d824b6
-rw-r--r--addons/website/controllers/main.py44
-rw-r--r--addons/website/models/ir_ui_view.py48
-rw-r--r--openerp/addons/base/ir/ir_translation.py8
-rw-r--r--openerp/addons/base/ir/ir_ui_view.py21
-rw-r--r--openerp/addons/base/static/src/css/modules.css1
-rw-r--r--openerp/modules/loading.py2
6 files changed, 77 insertions, 47 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index 3e2bcbeb8dc..401dd4c50df 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -221,49 +221,15 @@ class Website(openerp.addons.web.controllers.main.Home):
``full=True`` returns inherit view's informations of the template ``key``.
``bundles=True`` returns also the asset bundles
"""
- imd = request.registry['ir.model.data']
- view_model, view_theme_id = imd.get_object_reference(
- request.cr, request.uid, 'website', 'theme')
-
- user = request.registry['res.users']\
- .browse(request.cr, request.uid, request.uid, request.context)
- user_groups = set(user.groups_id)
- views = request.registry["ir.ui.view"]\
- ._views_get(request.cr, request.uid, key, bundles=bundles, context=dict(request.context or {}, active_test=False))
- done = set()
- result = []
- for v in views:
- if not user_groups.issuperset(v.groups_id):
- continue
- if full or (v.customize_show and v.inherit_id.id != view_theme_id):
- if v.inherit_id not in done:
- result.append({
- 'name': v.inherit_id.name,
- 'id': v.id,
- 'key': v.key,
- 'inherit_id': v.inherit_id.id,
- 'header': True,
- 'active': False
- })
- done.add(v.inherit_id)
- result.append({
- 'name': v.name,
- 'id': v.id,
- 'key': v.key,
- 'inherit_id': v.inherit_id.id,
- 'header': False,
- 'active': v.active,
- })
- return result
+ return request.registry["ir.ui.view"].customize_template_get(
+ request.cr, request.uid, key, full=full, bundles=bundles,
+ context=request.context)
@http.route('/website/get_view_translations', type='json', auth='public', website=True)
def get_view_translations(self, xml_id, lang=None):
lang = lang or request.context.get('lang')
- views = self.customize_template_get(xml_id, full=True)
- views_ids = [view.get('id') for view in views if view.get('active')]
- domain = [('type', '=', 'view'), ('res_id', 'in', views_ids), ('lang', '=', lang)]
- irt = request.registry.get('ir.translation')
- return irt.search_read(request.cr, request.uid, domain, ['id', 'res_id', 'value','state','gengo_translation'], context=request.context)
+ return request.registry["ir.ui.view"].get_view_translations(
+ request.cr, request.uid, xml_id, lang=lang, context=request.context)
@http.route('/website/set_translations', type='json', auth='public', website=True)
def set_translations(self, data, lang):
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py
index 1735b1ff425..f5c5001dd77 100644
--- a/addons/website/models/ir_ui_view.py
+++ b/addons/website/models/ir_ui_view.py
@@ -253,3 +253,51 @@ class view(osv.osv):
view = self.browse(cr, SUPERUSER_ID, res_id, context=context)
if view.model_data_id:
view.model_data_id.write({'noupdate': True})
+
+ def customize_template_get(self, cr, uid, key, full=False, bundles=False):
+ """ Get inherit view's informations of the template ``key``. By default, only
+ returns ``customize_show`` templates (which can be active or not), if
+ ``full=True`` returns inherit view's informations of the template ``key``.
+ ``bundles=True`` returns also the asset bundles
+ """
+ imd = request.registry['ir.model.data']
+ view_model, view_theme_id = imd.get_object_reference(
+ cr, uid, 'website', 'theme')
+ user = request.registry['res.users'].browse(cr, uid, request.context)
+ user_groups = set(user.groups_id)
+ views = self._views_get(
+ cr, uid, key, bundles=bundles,
+ context=dict(request.context or {}, active_test=False))
+ done = set()
+ result = []
+ for v in views:
+ if not user_groups.issuperset(v.groups_id):
+ continue
+ if full or (v.customize_show and v.inherit_id.id != view_theme_id):
+ if v.inherit_id not in done:
+ result.append({
+ 'name': v.inherit_id.name,
+ 'id': v.id,
+ 'key': v.key,
+ 'inherit_id': v.inherit_id.id,
+ 'header': True,
+ 'active': False
+ })
+ done.add(v.inherit_id)
+ result.append({
+ 'name': v.name,
+ 'id': v.id,
+ 'key': v.key,
+ 'inherit_id': v.inherit_id.id,
+ 'header': False,
+ 'active': v.active,
+ })
+ return result
+
+ def get_view_translations(self, cr, uid, xml_id, lang, field=['id', 'res_id', 'value', 'state', 'gengo_translation'], context=None):
+ views = self.customize_template_get(cr, uid, xml_id, full=True, context=context)
+ views_ids = [view.get('id') for view in views if view.get('active')]
+ domain = [('type', '=', 'view'), ('res_id', 'in', views_ids), ('lang', '=', lang)]
+ irt = request.registry.get('ir.translation')
+ return irt.search_read(cr, uid, domain, field, context=context)
+
diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py
index 4eea6f07592..b5418d8e11e 100644
--- a/openerp/addons/base/ir/ir_translation.py
+++ b/openerp/addons/base/ir/ir_translation.py
@@ -314,7 +314,11 @@ class ir_translation(osv.osv):
source = tools.ustr(source)
params = (lang or '', types, source, source)
if res_id:
- query += " AND res_id=%s"
+ if isinstance(res_id, (int, long)):
+ res_id = (res_id,)
+ else:
+ res_id = tuple(res_id)
+ query += " AND res_id in %s"
params += (res_id,)
if name:
query += " AND name=%s"
@@ -341,7 +345,7 @@ class ir_translation(osv.osv):
:param types: single string defining type of term to translate (see ``type`` field on ir.translation), or sequence of allowed types (strings)
:param lang: language code of the desired translation
:param source: optional source term to translate (should be unicode)
- :param res_id: optional resource id to translate (if used, ``source`` should be set)
+ :param res_id: optional resource id or a list of ids to translate (if used, ``source`` should be set)
:rtype: unicode
:return: the request translation, or an empty unicode string if no translation was
found and `source` was not passed
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index e377228d2a1..a194bccbdf0 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -1022,10 +1022,9 @@ class view(osv.osv):
for attr in node.attrib
)
- def translate_qweb(self, cr, uid, id_, arch, lang, context=None):
+ def _translate_qweb(self, cr, uid, arch, translate_func, context=None):
# TODO: this should be moved in a place before inheritance is applied
# but process() is only called on fields_view_get()
- Translations = self.pool['ir.translation']
h = HTMLParser.HTMLParser()
def get_trans(text):
if not text or not text.strip():
@@ -1033,7 +1032,7 @@ class view(osv.osv):
text = h.unescape(text.strip())
if len(text) < 2 or (text.startswith('<!') and text.endswith('>')):
return None
- return Translations._get_source(cr, uid, 'website', 'view', lang, text, id_)
+ return translate_func(text)
if type(arch) not in SKIPPED_ELEMENT_TYPES and arch.tag not in SKIPPED_ELEMENTS:
text = get_trans(arch.text)
@@ -1048,7 +1047,21 @@ class view(osv.osv):
if attr:
arch.set(attr_name, attr)
for node in arch.iterchildren("*"):
- self.translate_qweb(cr, uid, id_, node, lang, context)
+ self._translate_qweb(cr, uid, node, translate_func, context)
+
+ def translate_qweb(self, cr, uid, id_, arch, lang, context=None):
+ view_ids = []
+ view = self.browse(cr, uid, id_, context=context)
+ if view:
+ view_ids.append(view.id)
+ if view.mode == 'primary' and view.inherit_id.mode == 'primary':
+ # template is `cloned` from parent view
+ view_ids.append(view.inherit_id.id)
+ Translations = self.pool['ir.translation']
+ def translate_func(term):
+ trans = Translations._get_source(cr, uid, 'website', 'view', lang, term, view_ids)
+ return trans
+ self._translate_qweb(cr, uid, arch, translate_func, context=context)
return arch
@openerp.tools.ormcache()
diff --git a/openerp/addons/base/static/src/css/modules.css b/openerp/addons/base/static/src/css/modules.css
index ec98eacfcc7..9d31e8cf7b1 100644
--- a/openerp/addons/base/static/src/css/modules.css
+++ b/openerp/addons/base/static/src/css/modules.css
@@ -8,7 +8,6 @@
.oe_module_icon {
width: 80px;
height: 80px;
- padding: 0 4px;
}
.oe_module_desc {
diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py
index 29a7e3e68e6..15948b2dec5 100644
--- a/openerp/modules/loading.py
+++ b/openerp/modules/loading.py
@@ -360,7 +360,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
cr.execute("""select model,name from ir_model where id NOT IN (select distinct model_id from ir_model_access)""")
for (model, name) in cr.fetchall():
if model in registry and not registry[model].is_transient() and not isinstance(registry[model], openerp.osv.orm.AbstractModel):
- _logger.warning('The model %s has no access rules, consider adding one. E.g. access_%s,access_%s,model_%s,,1,1,1,1',
+ _logger.warning('The model %s has no access rules, consider adding one. E.g. access_%s,access_%s,model_%s,,1,0,0,0',
model, model.replace('.', '_'), model.replace('.', '_'), model.replace('.', '_'))
# Temporary warning while we remove access rights on osv_memory objects, as they have