From 14316ddd74f448f33f07251e7dc6bfed37eef96c Mon Sep 17 00:00:00 2001 From: Zelong Lin Date: Thu, 25 Aug 2022 09:06:28 +0000 Subject: [PATCH] [IMP] mail: group_id explicit in channel_create MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit follow up https://github.com/odoo/odoo/pull/94510/commits/64d01d43a0f69c29cb9ad900c7aaa6ae00d8b4e4 task-2893661 closes odoo/odoo#98875 Related: odoo/enterprise#30722 Signed-off-by: Sébastien Theys (seb) --- addons/mail/models/mail_channel.py | 7 +++--- addons/mail/models/res_users.py | 1 + addons/mail/static/src/models/discuss.js | 1 + addons/mail/static/src/models/messaging.js | 1 + .../src/models/messaging_initializer.js | 3 +++ addons/mail/static/src/models/thread.js | 4 ++-- addons/mail/tests/test_mail_channel.py | 6 ++--- addons/mail/tests/test_rtc.py | 2 +- .../tests/test_performance.py | 23 ++++++++++--------- addons/test_mail/tests/test_mail_message.py | 2 +- 10 files changed, 28 insertions(+), 22 deletions(-) diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 80f650d85bf..255c93bdeb2 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -1094,7 +1094,7 @@ class Channel(models.Model): self.add_members(self.env.user.partner_id.ids) @api.model - def channel_create(self, name, privacy='groups', group_id=None): + def channel_create(self, name, group_id, privacy='groups'): """ Create a channel and add the current partner, broadcast it (to make the user directly listen to it when polling) :param name : the name of the channel to create @@ -1103,15 +1103,14 @@ class Channel(models.Model): :return dict : channel header """ # create the channel - group = self.env['res.groups'].search([('id', '=', group_id)]) if group_id else None vals = { 'channel_type': 'channel', 'name': name, 'public': privacy, } - if group: - vals['group_public_id'] = group.id new_channel = self.create(vals) + group = self.env['res.groups'].search([('id', '=', group_id)]) if group_id else None + new_channel.group_public_id = group.id if group else None notification = _('
created #%s
', new_channel.id, new_channel.name) new_channel.message_post(body=notification, message_type="notification", subtype_xmlid="mail.mt_comment") channel_info = new_channel.channel_info()[0] diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py index 8e06bff13e4..d28aea81088 100644 --- a/addons/mail/models/res_users.py +++ b/addons/mail/models/res_users.py @@ -190,6 +190,7 @@ class Users(models.Model): 'current_partner': self.partner_id.mail_partner_format().get(self.partner_id), 'current_user_id': self.id, 'current_user_settings': self.env['res.users.settings']._find_or_create_for_user(self)._res_users_settings_format(), + 'internalUserGroupId': self.env.ref('base.group_user').id, 'menu_id': self.env['ir.model.data']._xmlid_to_res_id('mail.menu_root_discuss'), 'needaction_inbox_counter': self.partner_id._get_needaction_count(), 'partner_root': partner_root.sudo().mail_partner_format().get(partner_root), diff --git a/addons/mail/static/src/models/discuss.js b/addons/mail/static/src/models/discuss.js index e62f69b54a2..715eaa16215 100644 --- a/addons/mail/static/src/models/discuss.js +++ b/addons/mail/static/src/models/discuss.js @@ -41,6 +41,7 @@ registerModel({ if (ui.item.special) { const channel = await this.messaging.models['Thread'].performRpcCreateChannel({ name, + group_id: ui.item.special === 'private' ? false : this.messaging.internalUserGroupId, privacy: ui.item.special === 'private' ? 'private' : 'groups', }); channel.open(); diff --git a/addons/mail/static/src/models/messaging.js b/addons/mail/static/src/models/messaging.js index 2122ac7a157..51018a2f77c 100644 --- a/addons/mail/static/src/models/messaging.js +++ b/addons/mail/static/src/models/messaging.js @@ -416,6 +416,7 @@ registerModel({ isCausal: true, readonly: true, }), + internalUserGroupId: attr(), isCurrentUserGuest: attr({ compute: '_computeIsCurrentUserGuest', }), diff --git a/addons/mail/static/src/models/messaging_initializer.js b/addons/mail/static/src/models/messaging_initializer.js index 79a5c8c46b1..cf455a05e32 100644 --- a/addons/mail/static/src/models/messaging_initializer.js +++ b/addons/mail/static/src/models/messaging_initializer.js @@ -60,6 +60,7 @@ registerModel({ currentGuest, current_user_id, current_user_settings, + internalUserGroupId, menu_id, needaction_inbox_counter = 0, partner_root, @@ -102,6 +103,8 @@ registerModel({ discuss.update({ menu_id }); // company related data this.messaging.update({ companyName }); + + this.messaging.update({ internalUserGroupId }); }, /** * @private diff --git a/addons/mail/static/src/models/thread.js b/addons/mail/static/src/models/thread.js index 45b4d2b7505..2734e94327a 100644 --- a/addons/mail/static/src/models/thread.js +++ b/addons/mail/static/src/models/thread.js @@ -351,11 +351,11 @@ registerModel({ * @param {string} [param0.privacy] * @returns {Thread} the created channel */ - async performRpcCreateChannel({ name, privacy }) { + async performRpcCreateChannel({ name, group_id, privacy }) { const data = await this.messaging.rpc({ model: 'mail.channel', method: 'channel_create', - args: [name, privacy], + args: [name, group_id, privacy], }); return this.messaging.models['Thread'].insert( this.messaging.models['Thread'].convertData(data) diff --git a/addons/mail/tests/test_mail_channel.py b/addons/mail/tests/test_mail_channel.py index e8304341d43..df7dc21782a 100644 --- a/addons/mail/tests/test_mail_channel.py +++ b/addons/mail/tests/test_mail_channel.py @@ -30,7 +30,7 @@ class TestChannelAccessRights(MailCommon): # Channel for certain group cls.group_restricted_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Channel for Groups', privacy='groups', group_id=cls.env.ref('base.group_user').id)['id']) # Public Channel - cls.public_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Public Channel', privacy='public')['id']) + cls.public_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Public Channel', privacy='public', group_id=None)['id']) # Group cls.private_group = cls.env['mail.channel'].browse(cls.env['mail.channel'].create_group(partners_to=cls.user_employee.partner_id.ids, name="Group")['id']) # Chat @@ -473,7 +473,7 @@ class TestChannelInternals(MailCommon): def test_channel_private_unfollow(self): """ Test that a partner can leave (unfollow) a channel/group/chat. """ group_restricted_channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Channel for Groups', privacy='groups', group_id=self.env.ref('base.group_user').id)['id']) - public_channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Channel for Everyone', privacy='public')['id']) + public_channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Channel for Everyone', privacy='public', group_id=None)['id']) private_group = self.env['mail.channel'].browse(self.env['mail.channel'].create_group(partners_to=self.user_employee.partner_id.ids, name="Group")['id']) chat_user_current = self.env['mail.channel'].browse(self.env['mail.channel'].channel_get(self.env.user.partner_id.ids)['id']) @@ -530,7 +530,7 @@ class TestChannelInternals(MailCommon): self.assertEqual(messages_1, messages_2) def test_channel_should_generate_correct_default_avatar(self): - test_channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Channel')['id']) + test_channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Channel', group_id=self.env.ref('base.group_user').id)['id']) test_channel.uuid = 'channel-uuid' private_group = self.env['mail.channel'].browse(self.env['mail.channel'].create_group(partners_to=self.user_employee.partner_id.ids)['id']) private_group.uuid = 'group-uuid' diff --git a/addons/mail/tests/test_rtc.py b/addons/mail/tests/test_rtc.py index 0898ddd6cd0..6635d35144e 100644 --- a/addons/mail/tests/test_rtc.py +++ b/addons/mail/tests/test_rtc.py @@ -17,7 +17,7 @@ class TestChannelInternals(MailCommon): @mute_logger('odoo.models.unlink') def test_01_join_call(self): """Join call should remove existing sessions, remove invitation, create a new session, and return data.""" - channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Test Channel')['id']) + channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='Test Channel', group_id=self.env.ref('base.group_user').id)['id']) channel_member = channel.sudo().channel_member_ids.filtered(lambda channel_member: channel_member.partner_id == self.user_employee.partner_id) channel_member._rtc_join_call() self.env['bus.bus'].sudo().search([]).unlink() diff --git a/addons/test_discuss_full/tests/test_performance.py b/addons/test_discuss_full/tests/test_performance.py index ef629446e2c..056ca4fbead 100644 --- a/addons/test_discuss_full/tests/test_performance.py +++ b/addons/test_discuss_full/tests/test_performance.py @@ -63,19 +63,19 @@ class TestDiscussFullPerformance(TransactionCase): self.env['mail.channel'].sudo().search([('id', '!=', self.channel_general.id)]).unlink() self.user_root = self.env.ref('base.user_root') # create public channels - self.channel_channel_public_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='public 1', privacy='public')['id']) + self.channel_channel_public_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='public 1', privacy='public', group_id=None)['id']) self.channel_channel_public_1.add_members((self.users[0] + self.users[2] + self.users[3] + self.users[4] + self.users[8]).partner_id.ids) - self.channel_channel_public_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='public 2', privacy='public')['id']) + self.channel_channel_public_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='public 2', privacy='public', group_id=None)['id']) self.channel_channel_public_2.add_members((self.users[0] + self.users[2] + self.users[4] + self.users[7] + self.users[9]).partner_id.ids) # create groups channels - self.channel_channel_group_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='group 1', privacy='groups')['id']) + self.channel_channel_group_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='group 1', privacy='groups', group_id=self.env.ref('base.group_user').id)['id']) self.channel_channel_group_1.add_members((self.users[0] + self.users[2] + self.users[3] + self.users[6] + self.users[12]).partner_id.ids) - self.channel_channel_group_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='group 2', privacy='groups')['id']) + self.channel_channel_group_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='group 2', privacy='groups', group_id=self.env.ref('base.group_user').id)['id']) self.channel_channel_group_2.add_members((self.users[0] + self.users[2] + self.users[6] + self.users[7] + self.users[13]).partner_id.ids) # create private channels - self.channel_channel_private_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='private 1', privacy='private')['id']) + self.channel_channel_private_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='private 1', privacy='private', group_id=None)['id']) self.channel_channel_private_1.add_members((self.users[0] + self.users[2] + self.users[3] + self.users[5] + self.users[10]).partner_id.ids) - self.channel_channel_private_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='private 2', privacy='private')['id']) + self.channel_channel_private_2 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='private 2', privacy='private', group_id=None)['id']) self.channel_channel_private_2.add_members((self.users[0] + self.users[2] + self.users[5] + self.users[7] + self.users[11]).partner_id.ids) # create chats self.channel_chat_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_get((self.users[0] + self.users[14]).partner_id.ids)['id']) @@ -145,7 +145,7 @@ class TestDiscussFullPerformance(TransactionCase): 'uuid': self.channel_general.uuid, }, { - 'authorizedGroupFullName': self.group_user.full_name, + 'authorizedGroupFullName': False, 'channel': { 'avatarCacheKey': self.channel_channel_public_1._get_avatar_cache_key(), 'channel_type': 'channel', @@ -173,7 +173,7 @@ class TestDiscussFullPerformance(TransactionCase): 'uuid': self.channel_channel_public_1.uuid, }, { - 'authorizedGroupFullName': self.group_user.full_name, + 'authorizedGroupFullName': False, 'channel': { 'avatarCacheKey': self.channel_channel_public_2._get_avatar_cache_key(), 'channel_type': 'channel', @@ -257,7 +257,7 @@ class TestDiscussFullPerformance(TransactionCase): 'uuid': self.channel_channel_group_2.uuid, }, { - 'authorizedGroupFullName': self.group_user.full_name, + 'authorizedGroupFullName': False, 'channel': { 'avatarCacheKey': self.channel_channel_private_1._get_avatar_cache_key(), 'channel_type': 'channel', @@ -285,7 +285,7 @@ class TestDiscussFullPerformance(TransactionCase): 'uuid': self.channel_channel_private_1.uuid, }, { - 'authorizedGroupFullName': self.group_user.full_name, + 'authorizedGroupFullName': False, 'channel': { 'avatarCacheKey': self.channel_channel_private_2._get_avatar_cache_key(), 'channel_type': 'channel', @@ -795,6 +795,7 @@ class TestDiscussFullPerformance(TransactionCase): 'substitution': 'Thanks for your feedback. Good bye!', }, ], + 'internalUserGroupId': self.env.ref('base.group_user').id, 'menu_id': self.env['ir.model.data']._xmlid_to_res_id('mail.menu_root_discuss'), 'partner_root': { 'active': False, @@ -841,4 +842,4 @@ class TestDiscussFullPerformance(TransactionCase): Returns the expected query count. The point of having a separate getter is to allow it to be overriden. """ - return 85 + return 86 diff --git a/addons/test_mail/tests/test_mail_message.py b/addons/test_mail/tests/test_mail_message.py index 5de0cdc9de7..23c96abd74d 100644 --- a/addons/test_mail/tests/test_mail_message.py +++ b/addons/test_mail/tests/test_mail_message.py @@ -332,7 +332,7 @@ class TestMessageAccess(TestMailCommon): cls.user_portal = mail_new_test_user(cls.env, login='chell', groups='base.group_portal', name='Chell Gladys') cls.group_restricted_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Channel for Groups', privacy='groups', group_id=cls.env.ref('base.group_user').id)['id']) - cls.public_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Public Channel', privacy='public')['id']) + cls.public_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Public Channel', privacy='public', group_id=None)['id']) cls.private_group = cls.env['mail.channel'].browse(cls.env['mail.channel'].create_group(partners_to=cls.user_employee_1.partner_id.ids, name="Group")['id']) cls.message = cls.env['mail.message'].create({ 'body': 'My Body',