diff --git a/openerp/addons/base/res/wizard/change_password_wizard.py b/openerp/addons/base/res/wizard/change_password_wizard.py index 4d1bfe67fce..5812460f8da 100644 --- a/openerp/addons/base/res/wizard/change_password_wizard.py +++ b/openerp/addons/base/res/wizard/change_password_wizard.py @@ -54,6 +54,8 @@ class change_password_wizard(osv.TransientModel): for user in wizard.user_ids: user_ids.append(user.id) self.pool.get('change.password.user').change_password_button(cr, uid, user_ids, context=context) + # don't keep temporary password copies in the database longer than necessary + self.pool.get('change.password.user').unlink(cr, uid, user_ids) return { 'type': 'ir.actions.act_window_close', } diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index dcd5b22917b..b8c4cad158d 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -5038,24 +5038,22 @@ class BaseModel(object): blacklist_given_fields(self) - fields_to_read = [f for f in self.check_field_access_rights(cr, uid, 'read', None) - if f not in blacklist] - data = self.read(cr, uid, [id], fields_to_read, context=context) + + fields_to_copy = dict((f,fi) for f, fi in self._all_columns.iteritems() + if f not in default + if f not in blacklist + if not isinstance(fi.column, fields.function)) + + data = self.read(cr, uid, [id], fields_to_copy.keys(), context=context) if data: data = data[0] else: - raise IndexError(_("Record #%d of %s not found, cannot copy!") % (id, self._name)) + raise IndexError( _("Record #%d of %s not found, cannot copy!") %( id, self._name)) res = dict(default) - for f, colinfo in self._all_columns.items(): + for f, colinfo in fields_to_copy.iteritems(): field = colinfo.column - if f in default: - pass - elif f in blacklist: - pass - elif isinstance(field, fields.function): - pass - elif field._type == 'many2one': + if field._type == 'many2one': res[f] = data[f] and data[f][0] elif field._type == 'one2many': other = self.pool[field._obj] diff --git a/openerp/tools/mail.py b/openerp/tools/mail.py index 673d1beb0ac..f189f776c30 100644 --- a/openerp/tools/mail.py +++ b/openerp/tools/mail.py @@ -100,6 +100,15 @@ def html_sanitize(src, silent=True): raise logger.warning('unknown error obtained when sanitizing %r', src, exc_info=True) cleaned = '

Unknown error when sanitizing

' + + # MAKO compatibility: $, { and } inside quotes are escaped, preventing correct mako execution + cleaned = cleaned.replace('%24', '$') + cleaned = cleaned.replace('%7B', '{') + cleaned = cleaned.replace('%7D', '}') + cleaned = cleaned.replace('%20', ' ') + cleaned = cleaned.replace('%5B', '[') + cleaned = cleaned.replace('%5D', ']') + return cleaned