diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-11-28 17:44:46 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-11-28 17:44:46 +0100 |
| commit | efe7ca16b77edce73bf538ccb70678a52afdfd1d (patch) | |
| tree | ad5af92d3bb397fd58fd861e6ce8e3abd2902ec6 /odoo/addons/base/models | |
| parent | b09f624f20781d65baf2060df40383898e6f86e5 (diff) | |
| parent | bb6f6c57f97b091f3f68161039de980eb9ce739d (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.py | 49 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_users.py | 2 |
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() |
