[IMP] mail: group_id explicit in channel_create

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) <seb@odoo.com>
This commit is contained in:
Zelong Lin
2022-09-01 13:08:47 +02:00
parent addc7bafc4
commit 14316ddd74
10 changed files with 28 additions and 22 deletions
+3 -4
View File
@@ -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 = _('<div class="o_mail_notification">created <a href="#" class="o_channel_redirect" data-oe-id="%s">#%s</a></div>', 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]
+1
View File
@@ -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),
+1
View File
@@ -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();
@@ -416,6 +416,7 @@ registerModel({
isCausal: true,
readonly: true,
}),
internalUserGroupId: attr(),
isCurrentUserGuest: attr({
compute: '_computeIsCurrentUserGuest',
}),
@@ -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
+2 -2
View File
@@ -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)
+3 -3
View File
@@ -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'
+1 -1
View File
@@ -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()
@@ -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
+1 -1
View File
@@ -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',