diff options
| -rw-r--r-- | addons/im_livechat/controllers/main.py | 7 | ||||
| -rw-r--r-- | addons/im_livechat/models/im_livechat_channel.py | 40 | ||||
| -rw-r--r-- | addons/im_livechat/views/im_livechat_channel_templates.xml | 4 | ||||
| -rw-r--r-- | addons/website_livechat/models/website.py | 12 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_livechat.xml | 2 |
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> |
