[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:
@@ -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]
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user