diff options
Diffstat (limited to 'addons/mail')
| -rw-r--r-- | addons/mail/mail_alias.py | 20 | ||||
| -rw-r--r-- | addons/mail/mail_thread.py | 9 |
2 files changed, 20 insertions, 9 deletions
diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 1eacb902e0f..d8a79dd98e0 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -154,6 +154,12 @@ class mail_alias(osv.Model): sequence = (sequence + 1) if sequence else 2 return new_name + def _clean_and_make_unique(self, cr, uid, name, context=None): + # when an alias name appears to already be an email, we keep the local part only + name = remove_accents(name).lower().split('@')[0] + name = re.sub(r'[^\w+.]+', '-', name) + return self._find_unique(cr, uid, name, context=context) + def migrate_to_alias(self, cr, child_model_name, child_table_name, child_model_auto_init_fct, alias_model_name, alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, alias_generate_name=False, context=None): @@ -199,7 +205,7 @@ class mail_alias(osv.Model): alias_vals['alias_parent_thread_id'] = obj_data['id'] alias_create_ctx = dict(context, alias_model_name=alias_model_name, alias_parent_model_name=child_model_name) alias_id = mail_alias.create(cr, SUPERUSER_ID, alias_vals, context=alias_create_ctx) - child_class_model.write(cr, SUPERUSER_ID, obj_data['id'], {'alias_id': alias_id}) + child_class_model.write(cr, SUPERUSER_ID, obj_data['id'], {'alias_id': alias_id}, context={'mail_notrack': True}) _logger.info('Mail alias created for %s %s (id %s)', child_model_name, obj_data[alias_key], obj_data['id']) # Finally attempt to reinstate the missing constraint @@ -227,11 +233,7 @@ class mail_alias(osv.Model): model_name = context.get('alias_model_name') parent_model_name = context.get('alias_parent_model_name') if vals.get('alias_name'): - # when an alias name appears to already be an email, we keep the local part only - alias_name = remove_accents(vals['alias_name']).lower().split('@')[0] - alias_name = re.sub(r'[^\w+.]+', '-', alias_name) - alias_name = self._find_unique(cr, uid, alias_name, context=context) - vals['alias_name'] = alias_name + vals['alias_name'] = self._clean_and_make_unique(cr, uid, vals.get('alias_name'), context=context) if model_name: model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', model_name)], context=context)[0] vals['alias_model_id'] = model_id @@ -240,6 +242,12 @@ class mail_alias(osv.Model): vals['alias_parent_model_id'] = model_id return super(mail_alias, self).create(cr, uid, vals, context=context) + def write(self, cr, uid, ids, vals, context=None): + """"give uniqe alias name if given alias name is allready assigned""" + if vals.get('alias_name'): + vals['alias_name'] = self._clean_and_make_unique(cr, uid, vals.get('alias_name'), context=context) + return super(mail_alias, self).write(cr, uid, ids, vals, context=context) + def open_document(self, cr, uid, ids, context=None): alias = self.browse(cr, uid, ids, context=context)[0] if not alias.alias_model_id or not alias.alias_force_thread_id: diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index ee4dcac5414..9a8adee31c3 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -113,9 +113,9 @@ class mail_thread(osv.AbstractModel): object_id.alias_id.alias_model_id.model == self._name and \ object_id.alias_id.alias_force_thread_id == 0: alias = object_id.alias_id - elif catchall_domain and model: # no specific res_id given -> generic help message, take an example alias (i.e. alias of some section_id) + if not alias and catchall_domain and model: # no res_id or res_id not linked to an alias -> generic help message, take a generic alias of the model alias_obj = self.pool.get('mail.alias') - alias_ids = alias_obj.search(cr, uid, [("alias_parent_model_id.model", "=", model), ("alias_name", "!=", False), ('alias_force_thread_id', '=', False)], context=context, order='id ASC') + alias_ids = alias_obj.search(cr, uid, [("alias_parent_model_id.model", "=", model), ("alias_name", "!=", False), ('alias_force_thread_id', '=', False), ('alias_parent_thread_id', '=', False)], context=context, order='id ASC') if alias_ids and len(alias_ids) == 1: alias = alias_obj.browse(cr, uid, alias_ids[0], context=context) @@ -384,7 +384,10 @@ class mail_thread(osv.AbstractModel): track_ctx = dict(context) if 'lang' not in track_ctx: track_ctx['lang'] = self.pool.get('res.users').browse(cr, uid, uid, context=context).lang - tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=track_ctx) + if not context.get('mail_notrack'): + tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=track_ctx) + else: + tracked_fields = [] if tracked_fields: records = self.browse(cr, uid, ids, context=track_ctx) initial_values = dict((this.id, dict((key, getattr(this, key)) for key in tracked_fields.keys())) for this in records) |
