[IMP] im_livechat : uses anonymous name only if visitor is anonymous
Before, if the visitor was logged in, anonymous name = user.name. But if we use anonymous name field even if visitor is not anonymous, we cannot know, in stat e.g., if the session was really made with an anonymous visitor or not as the field is always filled in. Now, if the visitor is not anonymous, we use directly the user.name but we do not fill in the anonymous name. So that if anonymous name is null, we know afterwards that the session was made we a real anonymous visitor. Since the anonymous name is empty if visitor is logged in, we cannot use anonymous_name anymore to get the title of the session window. Task ID : 1895998 Closes PR #28283
This commit is contained in:
@@ -69,13 +69,15 @@ class LivechatController(http.Controller):
|
||||
|
||||
@http.route('/im_livechat/get_session', type="json", auth='public')
|
||||
def get_session(self, channel_id, anonymous_name, **kwargs):
|
||||
# if geoip, add the country name to the anonymous name
|
||||
if request.session.geoip:
|
||||
anonymous_name = anonymous_name + " ("+request.session.geoip.get('country_name', "")+")"
|
||||
user_id = None
|
||||
# if the user is identifiy (eg: portal user on the frontend), don't use the anonymous name. The user will be added to session.
|
||||
if request.session.uid:
|
||||
anonymous_name = request.env.user.name
|
||||
return request.env["im_livechat.channel"].with_context(lang=False).get_mail_channel(channel_id, anonymous_name)
|
||||
user_id = request.env.user.id
|
||||
# if geoip, add the country name to the anonymous name
|
||||
elif request.session.geoip:
|
||||
anonymous_name = anonymous_name + " ("+request.session.geoip.get('country_name', "")+")"
|
||||
return request.env["im_livechat.channel"].with_context(lang=False).get_mail_channel(channel_id, anonymous_name, user_id)
|
||||
|
||||
|
||||
@http.route('/im_livechat/feedback', type='json', auth='public')
|
||||
def feedback(self, uuid, rate, reason=None, **kwargs):
|
||||
|
||||
@@ -132,22 +132,23 @@ class ImLivechatChannel(models.Model):
|
||||
return self.sudo().user_ids.filtered(lambda user: user.im_status == 'online')
|
||||
|
||||
@api.model
|
||||
def get_mail_channel(self, livechat_channel_id, anonymous_name):
|
||||
def get_mail_channel(self, livechat_channel_id, anonymous_name, user_id=None):
|
||||
""" Return a mail.channel given a livechat channel. It creates one with a connected operator, or return false otherwise
|
||||
:param livechat_channel_id : the identifier if the im_livechat.channel
|
||||
:param anonymous_name : the name of the anonymous person of the channel
|
||||
:param user_id : the id of the logged in visitor, if any
|
||||
:type livechat_channel_id : int
|
||||
:type anonymous_name : str
|
||||
:return : channel header
|
||||
:rtype : dict
|
||||
"""
|
||||
# get the avalable user of the channel
|
||||
users = self.sudo().browse(livechat_channel_id).get_available_users()
|
||||
if len(users) == 0:
|
||||
operators = self.sudo().browse(livechat_channel_id).get_available_users()
|
||||
if len(operators) == 0:
|
||||
return False
|
||||
# choose the res.users operator and get its partner id
|
||||
user = random.choice(users)
|
||||
operator_partner_id = user.partner_id.id
|
||||
operator = random.choice(operators)
|
||||
operator_partner_id = random.choice(operators).partner_id.id
|
||||
# partner to add to the mail.channel
|
||||
channel_partner_to_add = [(4, operator_partner_id)]
|
||||
if self.env.user and self.env.user.active: # valid session user (not public)
|
||||
@@ -156,9 +157,9 @@ class ImLivechatChannel(models.Model):
|
||||
mail_channel = self.env["mail.channel"].with_context(mail_create_nosubscribe=False).sudo().create({
|
||||
'channel_partner_ids': channel_partner_to_add,
|
||||
'livechat_channel_id': livechat_channel_id,
|
||||
'anonymous_name': anonymous_name,
|
||||
'anonymous_name': False if user_id else anonymous_name,
|
||||
'channel_type': 'livechat',
|
||||
'name': ', '.join([anonymous_name, user.name]),
|
||||
'name': ', '.join([self.env['res.users'].browse(user_id).name if user_id else anonymous_name, operator.name]),
|
||||
'public': 'private',
|
||||
'email_send': False,
|
||||
})
|
||||
|
||||
@@ -68,11 +68,10 @@ class MailChannel(models.Model):
|
||||
channel_info['operator_pid'] = partner_name
|
||||
channel_infos_dict = dict((c['id'], c) for c in channel_infos)
|
||||
for channel in self:
|
||||
# add the anonymous name
|
||||
if channel.anonymous_name:
|
||||
channel_infos_dict[channel.id]['anonymous_name'] = channel.anonymous_name
|
||||
# add the last message date
|
||||
if channel.channel_type == 'livechat':
|
||||
# add the anonymous or partner name
|
||||
channel_infos_dict[channel.id]['correspondent_name'] = channel._channel_get_livechat_partner_name()
|
||||
last_msg = self.env['mail.message'].search([("channel_ids", "in", [channel.id])], limit=1)
|
||||
if last_msg:
|
||||
channel_infos_dict[channel.id]['last_message_date'] = last_msg.date
|
||||
@@ -85,6 +84,15 @@ class MailChannel(models.Model):
|
||||
values['channel_livechat'] = self.search([('channel_type', '=', 'livechat'), ('id', 'in', pinned_channels.ids)]).channel_info()
|
||||
return values
|
||||
|
||||
def _channel_get_livechat_partner_name(self):
|
||||
if self.livechat_operator_id in self.channel_partner_ids:
|
||||
partners = self.channel_partner_ids - self.livechat_operator_id
|
||||
if partners:
|
||||
return ', '.join(partners.mapped('name'))
|
||||
if self.anonymous_name:
|
||||
return self.anonymous_name
|
||||
return _("Visitor")
|
||||
|
||||
@api.model
|
||||
def remove_empty_livechat_sessions(self):
|
||||
hours = 1 # never remove empty session created within the last hour
|
||||
|
||||
@@ -17,13 +17,10 @@ var Livechat = TwoUserChannel.extend({
|
||||
* @override
|
||||
* @param {Object} params
|
||||
* @param {Object} params.data
|
||||
* @param {string} params.data.anonymous_name name of the website user
|
||||
*/
|
||||
init: function (params) {
|
||||
this._super.apply(this, arguments);
|
||||
|
||||
this._name = params.data.anonymous_name;
|
||||
|
||||
this._name = params.data.correspondent_name;
|
||||
this._WEBSITE_USER_NAME = this._name;
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user