summaryrefslogtreecommitdiff
path: root/odoo/addons/base/models
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-28 17:44:46 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-28 17:44:46 +0100
commitefe7ca16b77edce73bf538ccb70678a52afdfd1d (patch)
treead5af92d3bb397fd58fd861e6ce8e3abd2902ec6 /odoo/addons/base/models
parentb09f624f20781d65baf2060df40383898e6f86e5 (diff)
parentbb6f6c57f97b091f3f68161039de980eb9ce739d (diff)
[MERGE] forward port branch 11.0 up to bb6f6c57f97
Diffstat (limited to 'odoo/addons/base/models')
-rw-r--r--odoo/addons/base/models/ir_translation.py49
-rw-r--r--odoo/addons/base/models/res_users.py2
2 files changed, 30 insertions, 21 deletions
diff --git a/odoo/addons/base/models/ir_translation.py b/odoo/addons/base/models/ir_translation.py
index 4ec7c98cf3a..e3865a476ff 100644
--- a/odoo/addons/base/models/ir_translation.py
+++ b/odoo/addons/base/models/ir_translation.py
@@ -438,15 +438,15 @@ class IrTranslation(models.Model):
if not callable(field.translate):
return
- trans = self.env['ir.translation']
- outdated = trans
- discarded = trans
+ Translation = self.env['ir.translation']
+ outdated = Translation
+ discarded = Translation
for record in records:
# get field value and terms to translate
value = record[field.name]
terms = set(field.get_trans_terms(value))
- record_trans = trans.search([
+ translations = Translation.search([
('type', '=', 'model'),
('name', '=', "%s,%s" % (field.model_name, field.name)),
('res_id', '=', record.id),
@@ -454,25 +454,32 @@ class IrTranslation(models.Model):
if not terms:
# discard all translations for that field
- discarded += record_trans
+ discarded += translations
continue
- # remap existing translations on terms when possible
- trans_src = record_trans.mapped('src')
- for trans in record_trans:
- if trans.src == trans.value:
- discarded += trans
- elif trans.src not in terms:
- matches = get_close_matches(trans.src, terms, 1, 0.9)
- if matches:
- if matches[0] in trans_src:
- # there is already a translation for this term; discard this one
- discarded += trans
- else:
- trans.write({'src': matches[0], 'state': trans.state})
- trans_src.append(matches[0]) # avoid reuse of term
- else:
- outdated += trans
+ # remap existing translations on terms when possible; each term
+ # should be translated at most once per language
+ done = set() # {(src, lang), ...}
+ translations_to_match = []
+
+ for translation in translations:
+ if translation.src == translation.value:
+ discarded += translation
+ elif translation.src in terms:
+ done.add((translation.src, translation.lang))
+ else:
+ translations_to_match.append(translation)
+
+ for translation in translations_to_match:
+ matches = get_close_matches(translation.src, terms, 1, 0.9)
+ src = matches[0] if matches else None
+ if not src:
+ outdated += translation
+ elif (src, translation.lang) in done:
+ discarded += translation
+ else:
+ translation.write({'src': src, 'state': translation.state})
+ done.add((src, translation.lang))
# process outdated and discarded translations
outdated.write({'state': 'to_translate'})
diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py
index b3268f359f9..84d740ded24 100644
--- a/odoo/addons/base/models/res_users.py
+++ b/odoo/addons/base/models/res_users.py
@@ -448,6 +448,8 @@ class Users(models.Model):
@api.model
def check_credentials(self, password):
""" Override this method to plug additional authentication methods"""
+ if not password:
+ raise AccessDenied()
user = self.sudo().search([('id', '=', self._uid), ('password', '=', password)])
if not user:
raise AccessDenied()