From 029d1baf359eabb7ed531287f3cb2b3b8d586d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 17 Aug 2016 10:20:27 +0200 Subject: [PATCH] [REF] mail: remove required alias on users This commit remove required alias on res.users model. It also removes the inheritance of mail.alias.mixin. The field alias_id is kept and allow people to use aliases on users if they want. However there is no default void alias created for each user anymore. Default from of mail.message does not use user alias anymore. Indeed this creates issues with aliases not being correctly configured and can be confusing compared to private channels. Using user aliases is therefore now done manually instead of being a default behavior. --- addons/auth_signup/data/auth_signup_data.xml | 2 -- addons/crm/tests/common.py | 1 - addons/event/tests/common.py | 2 -- addons/hr_holidays/tests/common.py | 3 --- addons/mail/models/mail_message.py | 6 ++--- addons/mail/models/res_users.py | 25 ++++++-------------- addons/mail/tests/common.py | 3 --- addons/mail/tests/test_mail_features.py | 22 ++++------------- addons/mail/tests/test_mail_message.py | 10 ++++---- addons/mail/views/res_users_views.xml | 13 ++-------- addons/project/tests/test_access_rights.py | 1 - addons/project/tests/test_project_base.py | 2 -- addons/sale/tests/test_sale_common.py | 2 -- addons/survey/tests/test_survey.py | 6 ++--- addons/website_blog/tests/common.py | 3 --- addons/website_forum/tests/common.py | 3 --- 16 files changed, 23 insertions(+), 81 deletions(-) diff --git a/addons/auth_signup/data/auth_signup_data.xml b/addons/auth_signup/data/auth_signup_data.xml index c8ded45916e..4d16b5e4951 100644 --- a/addons/auth_signup/data/auth_signup_data.xml +++ b/addons/auth_signup/data/auth_signup_data.xml @@ -9,8 +9,6 @@ - - _usertemplate diff --git a/addons/crm/tests/common.py b/addons/crm/tests/common.py index 7a04e27ddb9..49b664e8b60 100644 --- a/addons/crm/tests/common.py +++ b/addons/crm/tests/common.py @@ -18,7 +18,6 @@ class TestCrm(TestMail): cls.user_salesman_all = Users.create({ 'name': 'Riton La Chignole', 'login': 'riton', - 'alias_name': 'riton', 'email': 'riton.salesman_all@example.com', 'groups_id': [(6, 0, [user_group_employee.id, user_group_salesman_all.id])] }) diff --git a/addons/event/tests/common.py b/addons/event/tests/common.py index 6e2f0406357..dbd142a08be 100644 --- a/addons/event/tests/common.py +++ b/addons/event/tests/common.py @@ -27,7 +27,6 @@ class TestEventCommon(common.TransactionCase): self.user_eventuser = self.Users.with_context({'no_reset_password': True}).create({ 'name': 'Armande EventUser', 'login': 'Armande', - 'alias_name': 'armande', 'email': 'armande.eventuser@example.com', 'tz': 'Europe/Brussels', 'groups_id': [(6, 0, [self.group_employee_id, self.group_event_user_id])] @@ -35,7 +34,6 @@ class TestEventCommon(common.TransactionCase): self.user_eventmanager = self.Users.with_context({'no_reset_password': True}).create({ 'name': 'Bastien EventManager', 'login': 'bastien', - 'alias_name': 'bastien', 'email': 'bastien.eventmanager@example.com', 'tz': 'Europe/Brussels', 'groups_id': [(6, 0, [ diff --git a/addons/hr_holidays/tests/common.py b/addons/hr_holidays/tests/common.py index 2d9f518b340..8134675266a 100644 --- a/addons/hr_holidays/tests/common.py +++ b/addons/hr_holidays/tests/common.py @@ -18,21 +18,18 @@ class TestHrHolidaysBase(common.TransactionCase): self.user_hruser_id = Users.create({ 'name': 'Armande HrUser', 'login': 'Armande', - 'alias_name': 'armande', 'email': 'armande.hruser@example.com', 'groups_id': [(6, 0, [group_employee_id, self.ref('base.group_hr_user')])] }).id self.user_hrmanager_id = Users.create({ 'name': 'Bastien HrManager', 'login': 'bastien', - 'alias_name': 'bastien', 'email': 'bastien.hrmanager@example.com', 'groups_id': [(6, 0, [group_employee_id, self.ref('base.group_hr_manager')])] }).id self.user_employee_id = Users.create({ 'name': 'David Employee', 'login': 'david', - 'alias_name': 'david', 'email': 'david.employee@example.com', 'groups_id': [(6, 0, [group_employee_id])] }).id diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 0f8054d958a..a2f1c516560 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -26,11 +26,9 @@ class Message(models.Model): @api.model def _get_default_from(self): - if self.env.user.alias_name and self.env.user.alias_domain: - return formataddr((self.env.user.name, '%s@%s' % (self.env.user.alias_name, self.env.user.alias_domain))) - elif self.env.user.email: + if self.env.user.email: return formataddr((self.env.user.name, self.env.user.email)) - raise UserError(_("Unable to send email, please configure the sender's email address or alias.")) + raise UserError(_("Unable to send email, please configure the sender's email address.")) @api.model def _get_default_author(self): diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py index 9e4294df3cd..1f95c02f078 100644 --- a/addons/mail/models/res_users.py +++ b/addons/mail/models/res_users.py @@ -14,11 +14,15 @@ class Users(models.Model): group, and the user. This is done by overriding the write method. """ _name = 'res.users' - _inherit = ['mail.alias.mixin', 'res.users'] + _inherit = ['res.users'] - alias_id = fields.Many2one('mail.alias', 'Alias', ondelete="restrict", required=True, + alias_id = fields.Many2one('mail.alias', 'Alias', ondelete="set null", required=False, help="Email address internally associated with this user. Incoming "\ "emails will appear in the user's notifications.", copy=False, auto_join=True) + alias_contact = fields.Selection([ + ('everyone', 'Everyone'), + ('partners', 'Authenticated Partners'), + ('followers', 'Followers only')], string='Alias Contact Security', related='alias_id.alias_contact') def __init__(self, pool, cr): """ Override of __init__ to add access rights on notification_email_send @@ -31,17 +35,9 @@ class Users(models.Model): type(self).SELF_WRITEABLE_FIELDS.extend(['notify_email']) # duplicate list to avoid modifying the original reference type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) - type(self).SELF_READABLE_FIELDS.extend(['notify_email', 'alias_domain', 'alias_name']) + type(self).SELF_READABLE_FIELDS.extend(['notify_email']) return init_res - def get_alias_model_name(self, vals): - return self._name - - def get_alias_values(self): - values = super(Users, self).get_alias_values() - values['alias_force_thread_id'] = self.id - return values - @api.model def create(self, values): if not values.get('login', False): @@ -65,13 +61,6 @@ class Users(models.Model): self.env['mail.channel'].search([('group_ids', 'in', user_group_ids)])._subscribe_users() return write_res - @api.multi - def copy_data(self, default=None): - data = super(Users, self).copy_data(default)[0] - if data and data.get('alias_name'): - data['alias_name'] = data['login'] - return [data] - def _create_welcome_message(self): self.ensure_one() if not self.has_group('base.group_user'): diff --git a/addons/mail/tests/common.py b/addons/mail/tests/common.py index f40a6d6a83e..cf87cd200ac 100644 --- a/addons/mail/tests/common.py +++ b/addons/mail/tests/common.py @@ -56,7 +56,6 @@ class TestMail(common.SavepointCase): cls.user_employee = Users.create({ 'name': 'Ernest Employee', 'login': 'ernest', - 'alias_name': 'ernest', 'email': 'e.e@example.com', 'signature': '--\nErnest', 'notify_email': 'always', @@ -64,7 +63,6 @@ class TestMail(common.SavepointCase): cls.user_public = Users.create({ 'name': 'Bert Tartignole', 'login': 'bert', - 'alias_name': 'bert', 'email': 'b.t@example.com', 'signature': 'SignBert', 'notify_email': 'always', @@ -72,7 +70,6 @@ class TestMail(common.SavepointCase): cls.user_portal = Users.create({ 'name': 'Chell Gladys', 'login': 'chell', - 'alias_name': 'chell', 'email': 'chell@gladys.portal', 'signature': 'SignChell', 'notify_email': 'always', diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py index 2a003a747ed..7dc8fb2f7f1 100644 --- a/addons/mail/tests/test_mail_features.py +++ b/addons/mail/tests/test_mail_features.py @@ -9,22 +9,8 @@ class TestMailFeatures(TestMail): # TDE TODO: tests on the redirection controller def test_alias_setup(self): - Users = self.env['res.users'].with_context({'no_reset_password': True}) - - user_valentin = Users.create({ - 'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', - 'login': 'valentin.cognito', 'alias_name': 'valentin.cognito'}) - self.assertEqual(user_valentin.alias_name, user_valentin.login, "Login should be used as alias") - - user_pagan = Users.create({ - 'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', - 'login': 'plmarchant@gmail.com', 'alias_name': 'plmarchant@gmail.com'}) - self.assertEqual(user_pagan.alias_name, 'plmarchant', "If login is an email, the alias should keep only the local part") - - user_barty = Users.create({ - 'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', - 'login': 'b4r+_#_R3wl$$', 'alias_name': 'b4r+_#_R3wl$$'}) - self.assertEqual(user_barty.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens') + alias = self.env['mail.alias'].with_context(alias_model_name='mail.channel').create({'alias_name': 'b4r+_#_R3wl$$'}) + self.assertEqual(alias.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens') @mute_logger('openerp.addons.mail.models.mail_mail') def test_needaction(self): @@ -138,8 +124,8 @@ class TestMessagePost(TestMail): # notification emails: followers + recipients - notify_email=none (partner_2) - author (user_employee) self.assertEqual(set(m['email_from'] for m in self._mails), - set(['%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, _domain)]), - 'message_post: notification email wrong email_from: should use alias of sender') + set(['%s <%s>' % (self.user_employee.name, self.user_employee.email)]), + 'message_post: notification email wrong email_from: should use sender email') self.assertEqual(set(m['email_to'][0] for m in self._mails), set(['%s <%s>' % (self.partner_1.name, self.partner_1.email), '%s <%s>' % (self.env.user.name, self.env.user.email)])) diff --git a/addons/mail/tests/test_mail_message.py b/addons/mail/tests/test_mail_message.py index 3df8b40a9b9..ab095f5f3ca 100644 --- a/addons/mail/tests/test_mail_message.py +++ b/addons/mail/tests/test_mail_message.py @@ -49,8 +49,8 @@ class TestMailMessage(TestMail): msg = self.env['mail.message'].sudo(self.user_employee).create({}) self.assertIn('-private', msg.message_id, 'mail_message: message_id for a void message should be a "private" one') - self.assertEqual(msg.reply_to, '%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, alias_domain)) - self.assertEqual(msg.email_from, '%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, alias_domain)) + self.assertEqual(msg.reply_to, '%s <%s>' % (self.user_employee.name, self.user_employee.email)) + self.assertEqual(msg.email_from, '%s <%s>' % (self.user_employee.name, self.user_employee.email)) def test_mail_message_values_alias_catchall(self): alias_domain = 'example.com' @@ -61,7 +61,7 @@ class TestMailMessage(TestMail): msg = self.env['mail.message'].sudo(self.user_employee).create({}) self.assertIn('-private', msg.message_id, 'mail_message: message_id for a void message should be a "private" one') self.assertEqual(msg.reply_to, '%s <%s@%s>' % (self.env.user.company_id.name, alias_catchall, alias_domain)) - self.assertEqual(msg.email_from, '%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, alias_domain)) + self.assertEqual(msg.email_from, '%s <%s>' % (self.user_employee.name, self.user_employee.email)) def test_mail_message_values_document_no_alias(self): self.env['ir.config_parameter'].search([('key', '=', 'mail.catchall.domain')]).unlink() @@ -85,7 +85,7 @@ class TestMailMessage(TestMail): }) self.assertIn('-openerp-%d-mail.channel' % self.group_pigs.id, msg.message_id, 'mail_message: message_id for a void message should be a "private" one') self.assertEqual(msg.reply_to, '%s %s <%s@%s>' % (self.env.user.company_id.name, self.group_pigs.name, self.group_pigs.alias_name, alias_domain)) - self.assertEqual(msg.email_from, '%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, alias_domain)) + self.assertEqual(msg.email_from, '%s <%s>' % (self.user_employee.name, self.user_employee.email)) def test_mail_message_values_document_alias_catchall(self): alias_domain = 'example.com' @@ -99,7 +99,7 @@ class TestMailMessage(TestMail): }) self.assertIn('-openerp-%d-mail.channel' % self.group_pigs.id, msg.message_id, 'mail_message: message_id for a void message should be a "private" one') self.assertEqual(msg.reply_to, '%s %s <%s@%s>' % (self.env.user.company_id.name, self.group_pigs.name, self.group_pigs.alias_name, alias_domain)) - self.assertEqual(msg.email_from, '%s <%s@%s>' % (self.user_employee.name, self.user_employee.alias_name, alias_domain)) + self.assertEqual(msg.email_from, '%s <%s>' % (self.user_employee.name, self.user_employee.email)) def test_mail_message_values_no_auto_thread(self): msg = self.env['mail.message'].sudo(self.user_employee).create({ diff --git a/addons/mail/views/res_users_views.xml b/addons/mail/views/res_users_views.xml index 7cd4b25689b..c8b18ba4f07 100644 --- a/addons/mail/views/res_users_views.xml +++ b/addons/mail/views/res_users_views.xml @@ -27,17 +27,8 @@ -