From 4b8b2e8dfe3147beb5ab7c333269c2874eda5267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Maes?= <jem@openerp.com> Date: Fri, 26 Sep 2014 11:43:12 +0200 Subject: [PATCH] [ADD] im_odoo_support : add the module for the live odoo support from all instances. This sets the bus and im_chat module auto installable. --- addons/im_odoo_support/__init__.py | 0 addons/im_odoo_support/__openerp__.py | 27 ++++ .../static/img/odoo_o_small.png | Bin 0 -> 4433 bytes .../static/src/js/im_odoo_support.js | 134 ++++++++++++++++++ .../static/src/xml/im_odoo_support.xml | 11 ++ .../im_odoo_support/views/im_odoo_support.xml | 20 +++ 6 files changed, 192 insertions(+) create mode 100644 addons/im_odoo_support/__init__.py create mode 100644 addons/im_odoo_support/__openerp__.py create mode 100644 addons/im_odoo_support/static/img/odoo_o_small.png create mode 100644 addons/im_odoo_support/static/src/js/im_odoo_support.js create mode 100644 addons/im_odoo_support/static/src/xml/im_odoo_support.xml create mode 100644 addons/im_odoo_support/views/im_odoo_support.xml diff --git a/addons/im_odoo_support/__init__.py b/addons/im_odoo_support/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/addons/im_odoo_support/__openerp__.py b/addons/im_odoo_support/__openerp__.py new file mode 100644 index 000000000000..2e90ddc7d875 --- /dev/null +++ b/addons/im_odoo_support/__openerp__.py @@ -0,0 +1,27 @@ +{ + 'name' : 'Odoo Live Support', + 'author': 'OpenERP SA', + 'version': '1.0', + 'summary': 'Chat with the Odoo collaborators', + 'category': 'Tools', + 'complexity': 'medium', + 'website': 'https://www.odoo.com/', + 'description': + """ +Odoo Live Support +================= + +Ask your functionnal question directly to the Odoo Operators with the livechat support. + + """, + 'data': [ + "views/im_odoo_support.xml" + ], + 'depends' : ["web", "im_chat"], + 'qweb': [ + 'static/src/xml/im_odoo_support.xml' + ], + 'installable': True, + 'auto_install': True, + 'application': True, +} diff --git a/addons/im_odoo_support/static/img/odoo_o_small.png b/addons/im_odoo_support/static/img/odoo_o_small.png new file mode 100644 index 0000000000000000000000000000000000000000..6973242afa6d1cee00304f33e97ffd082c79883a GIT binary patch literal 4433 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 XqvGokm%!`@00000NkvXXu0mjf!j`s7 literal 0 HcmV?d00001 diff --git a/addons/im_odoo_support/static/src/js/im_odoo_support.js b/addons/im_odoo_support/static/src/js/im_odoo_support.js new file mode 100644 index 000000000000..1a6cf4b51e8d --- /dev/null +++ b/addons/im_odoo_support/static/src/js/im_odoo_support.js @@ -0,0 +1,134 @@ +(function(){ + + "use strict"; + + var _t = openerp._t; + openerp.im_odoo_support = {}; + var COOKIE_NAME = 'livechat_conversation'; + var SERVICE_URL = 'https://services.odoo.com/'; + + openerp.im_odoo_support.OdooSupport = openerp.Widget.extend({ + init: function(login, uuid, params, options){ + var self = this; + this._super(); + this.login = login; + this.uuid = uuid; + + this.options = _.extend(options || {}, {'defaultUsername' : login}); + this.params = _.extend(params || {}, {'database_uuid' : uuid}); + + this.assets_loaded = false; + this.session = false; + // bind event + $(window).on("odoo_support_ready_to_bind", this, _.bind(this.bind_actions, this)); + }, + bind_actions: function(event, button){ + if(button === 'usermenu'){ + openerp.client.$('.oe_user_menu_placeholder .odoo_support_contact').on('click', this, _.bind(this.click_action, this)); + // check auto start if cookie + var session = openerp.get_cookie(COOKIE_NAME); + if(session){ + this.start_support(); + } + } + if(button === 'im_contact'){ + if(openerp.im_chat && openerp.im_chat.single){ + openerp.im_chat.single.$('.odoo_support_contact').on('click',this, _.bind(this.click_action, this)); + } + } + }, + click_action: function(){ + var session = openerp.get_cookie(COOKIE_NAME); + if(!session){ + this.start_support(); + } + }, + start_support: function(){ + var self = this; + if(!this.assets_loaded){ + this.load_assets().then(function(){ + try{ + odoo_support.im_livechat.support = new odoo_support.im_livechat.LiveSupport(self.options, self.params); + // bind event change status + odoo_support.im_livechat.support.on('im_odoo_support_status', this, function(is_online){ + if(openerp.im_chat && openerp.im_chat.single){ + openerp.im_chat.single.support_user.$(".oe_im_user_online").toggle(is_online); + } + }); + }catch(e){ + self.error_on_start(e); + } + }).fail(function(e){ + self.error_on_start(e); + }); + }else{ + odoo_support.im_livechat.support.start(); + } + }, + error_on_start: function(e){ + self.assets_loaded = false; + openerp.client.do_warn(_t("Error"), _t("The connection with the Odoo Support Server failed. Please retry in a few minutes, or send an email to support@odoo.com .")); + }, + load_assets: function(){ + var self = this; + var add_asset = function(file_url, type) { + var def = $.Deferred(); + if(type === 'js'){ + $.getScript( file_url, function( data, textStatus, jqxhr ) { + def.resolve(); + }).fail(function(){ + def.reject(); + }); + return def; + }else{ + $('<link rel="stylesheet" href="' + file_url + '"></link>').appendTo($("head")).ready(function() { + def.resolve(); + }); + return def; + } + }; + var defs = []; + defs.push(add_asset(SERVICE_URL+"odoo-livechat/assets/js", 'js')); + defs.push(add_asset(SERVICE_URL+"odoo-livechat/assets/css", 'css')); + return $.when.apply($, defs).then(function(res){ + self.assets_loaded = true; + return res; + }, function(){ + self.error_on_start(); + }); + }, + }); + + // display support contact button (in chat user list, if installed) and in dropdown user menu. + if(openerp.im_chat){ + openerp.im_chat.InstantMessaging.include({ + start: function(){ + this._super.apply(this, arguments); + var user = { + "id" : -1, + "name": _t('Odoo Support'), + "im_status": 'online', + "image_url": "/im_odoo_support/static/img/odoo_o_small.png" + }; + var widget = new openerp.im_chat.UserWidget(self, user); + widget.prependTo(self.$(".oe_im_users")); + widget.$el.addClass('odoo_support_contact'); + this.support_user = widget; + + $(window).trigger('odoo_support_ready_to_bind','im_contact'); + }, + search_users_status: function(e){ + var self = this; + this._super.apply(this, arguments).then(function(res){ + if(self.$('.oe_im_searchbox').val().length === 0 || _t("Odoo Support").toLowerCase().indexOf(self.$('.oe_im_searchbox').val().toLowerCase()) != -1){ + self.support_user.$el.show(); + }else{ + self.support_user.$el.hide(); + } + return res; + }); + } + }); + } + +})(); diff --git a/addons/im_odoo_support/static/src/xml/im_odoo_support.xml b/addons/im_odoo_support/static/src/xml/im_odoo_support.xml new file mode 100644 index 000000000000..f7154797c37b --- /dev/null +++ b/addons/im_odoo_support/static/src/xml/im_odoo_support.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<templates xml:space="preserve"> + <t t-extend="UserMenu"> + <t t-jquery=".dropdown-menu li:eq(3)" t-operation="after"> + <li class="odoo_support_contact"> + <a data-menu="odoo_support" href="#">Odoo Support</a> + </li> + </t> + </t> +</templates> diff --git a/addons/im_odoo_support/views/im_odoo_support.xml b/addons/im_odoo_support/views/im_odoo_support.xml new file mode 100644 index 000000000000..e8e5ecf77f46 --- /dev/null +++ b/addons/im_odoo_support/views/im_odoo_support.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <template id="assets_backend" name="im_odoo_support assets" inherit_id="web.assets_backend"> + <xpath expr="." position="inside"> + <script type="text/javascript" src="/im_odoo_support/static/src/js/im_odoo_support.js"></script> + <script type="text/javascript"> + (function() { + openerp.im_odoo_support.support = new openerp.im_odoo_support.OdooSupport( + "<t t-esc="request.session.login"/>", + "<t t-esc="request.registry['ir.config_parameter'].get_param(request.cr, request.uid, 'database.uuid')"/>" + ); + })(); + </script> + </xpath> + </template> + + </data> +</openerp> -- GitLab