summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/im_livechat/controllers/main.py7
-rw-r--r--addons/im_livechat/models/im_livechat_channel.py40
-rw-r--r--addons/im_livechat/views/im_livechat_channel_templates.xml4
-rw-r--r--addons/website_livechat/models/website.py12
-rw-r--r--addons/website_livechat/views/website_livechat.xml2
5 files changed, 35 insertions, 30 deletions
diff --git a/addons/im_livechat/controllers/main.py b/addons/im_livechat/controllers/main.py
index b3783d2f59d..d87cf2329cb 100644
--- a/addons/im_livechat/controllers/main.py
+++ b/addons/im_livechat/controllers/main.py
@@ -49,13 +49,12 @@ class LivechatController(http.Controller):
def loader(self, channel_id, **kwargs):
username = kwargs.get("username", _("Visitor"))
channel = request.env['im_livechat.channel'].sudo().browse(channel_id)
- info = request.env['im_livechat.channel'].get_livechat_info(channel.id, username=username)
+ info = channel.get_livechat_info(username=username)
return request.render('im_livechat.loader', {'info': info, 'web_session_required': True}, headers=[('Content-Type', 'application/javascript')])
@http.route('/im_livechat/init', type='json', auth="public", cors="*")
def livechat_init(self, channel_id):
- LivechatChannel = request.env['im_livechat.channel']
- available = len(LivechatChannel.browse(channel_id).get_available_users())
+ available = len(request.env['im_livechat.channel'].sudo().browse(channel_id)._get_available_users())
rule = {}
if available:
# find the country from the request
@@ -95,7 +94,7 @@ class LivechatController(http.Controller):
country = request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1) if country_code else None
if country:
anonymous_name, country_id = _("%s (%s)") % (anonymous_name, country.name), country.id
- return request.env["im_livechat.channel"].with_context(lang=False).get_mail_channel(channel_id, anonymous_name, user_id, country_id)
+ return request.env["im_livechat.channel"].with_context(lang=False).sudo().browse(channel_id)._get_mail_channel(anonymous_name, user_id, country_id)
@http.route('/im_livechat/feedback', type='json', auth='public', cors="*")
def feedback(self, uuid, rate, reason=None, **kwargs):
diff --git a/addons/im_livechat/models/im_livechat_channel.py b/addons/im_livechat/models/im_livechat_channel.py
index df57a6c770e..acba917036c 100644
--- a/addons/im_livechat/models/im_livechat_channel.py
+++ b/addons/im_livechat/models/im_livechat_channel.py
@@ -124,27 +124,26 @@ class ImLivechatChannel(models.Model):
# Channel Methods
# --------------------------
@api.multi
- def get_available_users(self):
+ def _get_available_users(self):
""" get available user of a given channel
:retuns : return the res.users having their im_status online
"""
self.ensure_one()
- return self.sudo().user_ids.filtered(lambda user: user.im_status == 'online')
+ return self.user_ids.filtered(lambda user: user.im_status == 'online')
- @api.model
- def get_mail_channel(self, livechat_channel_id, anonymous_name, user_id=None, country_id=None):
+ @api.multi
+ def _get_mail_channel(self, anonymous_name, user_id=None, country_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
:param country_code : the country of the anonymous person of the channel
- :type livechat_channel_id : int
:type anonymous_name : str
:return : channel header
:rtype : dict
"""
+ self.ensure_one()
# get the avalable user of the channel
- operators = self.sudo().browse(livechat_channel_id).get_available_users()
+ operators = self._get_available_users()
if len(operators) == 0:
return False
# choose the res.users operator and get its partner id
@@ -158,7 +157,7 @@ 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_operator_id': operator_partner_id,
- 'livechat_channel_id': livechat_channel_id,
+ 'livechat_channel_id': self.id,
'anonymous_name': False if user_id else anonymous_name,
'country_id': country_id,
'channel_type': 'livechat',
@@ -169,24 +168,25 @@ class ImLivechatChannel(models.Model):
mail_channel._broadcast([operator_partner_id])
return mail_channel.sudo().channel_info()[0]
- @api.model
- def get_channel_infos(self, channel_id):
- channel = self.browse(channel_id)
+ def _get_channel_infos(self):
+ self.ensure_one()
+
return {
- 'button_text': channel.button_text,
- 'input_placeholder': channel.input_placeholder,
- 'default_message': channel.default_message,
- "channel_name": channel.name,
- "channel_id": channel.id,
+ 'button_text': self.button_text,
+ 'input_placeholder': self.input_placeholder,
+ 'default_message': self.default_message,
+ "channel_name": self.name,
+ "channel_id": self.id,
}
- @api.model
- def get_livechat_info(self, channel_id, username='Visitor'):
+ def get_livechat_info(self, username='Visitor'):
+ self.ensure_one()
+
info = {}
- info['available'] = len(self.browse(channel_id).get_available_users()) > 0
+ info['available'] = len(self._get_available_users()) > 0
info['server_url'] = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if info['available']:
- info['options'] = self.sudo().get_channel_infos(channel_id)
+ info['options'] = self._get_channel_infos()
info['options']["default_username"] = username
return info
diff --git a/addons/im_livechat/views/im_livechat_channel_templates.xml b/addons/im_livechat/views/im_livechat_channel_templates.xml
index 6cc5f093969..0d3a7e0c8da 100644
--- a/addons/im_livechat/views/im_livechat_channel_templates.xml
+++ b/addons/im_livechat/views/im_livechat_channel_templates.xml
@@ -187,10 +187,6 @@
<!-- the js code to initialize the LiveSupport object -->
<template id="loader" name="Livechat : Javascript appending the livechat button">
<t t-translation="off">
-
- <t t-if="not info">
- <t t-set="info" t-value="request.env['im_livechat.channel'].get_livechat_info(channel)"/>
- </t>
document.addEventListener("DOMContentLoaded", function(event) {
<t t-if="web_session_required">
odoo.define('web.session', function (require) {
diff --git a/addons/website_livechat/models/website.py b/addons/website_livechat/models/website.py
index e207482416a..c52dc9a09f0 100644
--- a/addons/website_livechat/models/website.py
+++ b/addons/website_livechat/models/website.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
+from odoo import api, fields, models
class Website(models.Model):
@@ -9,3 +9,13 @@ class Website(models.Model):
_inherit = "website"
channel_id = fields.Many2one('im_livechat.channel', string='Website Live Chat Channel')
+
+ @api.multi
+ def get_livechat_channel_info(self):
+ """ Get the livechat info dict (button text, channel name, ...) for the livechat channel of
+ the current website.
+ """
+ self.ensure_one()
+ if self.channel_id:
+ return self.channel_id.sudo().get_livechat_info()
+ return {}
diff --git a/addons/website_livechat/views/website_livechat.xml b/addons/website_livechat/views/website_livechat.xml
index e5f429fc806..82580fc6549 100644
--- a/addons/website_livechat/views/website_livechat.xml
+++ b/addons/website_livechat/views/website_livechat.xml
@@ -49,7 +49,7 @@
<t t-if="website and website.channel_id">
<script>
<t t-call="im_livechat.loader">
- <t t-set="channel" t-value="website.channel_id.id"/>
+ <t t-set="info" t-value="website.get_livechat_channel_info()"/>
</t>
</script>
</t>