[IMP] base: apps integration
This commit is contained in:
parent
68134d38a3
commit
0b6078dfea
|
@ -41,6 +41,10 @@
|
|||
margin-right: 0px !important;
|
||||
}
|
||||
|
||||
.apps-client {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.oe_notification {
|
||||
z-index: 1600;
|
||||
}
|
||||
|
|
|
@ -161,6 +161,9 @@ $sheet-padding: 16px
|
|||
.oe_systray
|
||||
margin-right: 0px !important
|
||||
|
||||
.apps-client
|
||||
border: 0
|
||||
|
||||
// Notifications {{{
|
||||
.oe_notification
|
||||
z-index: 1600
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2013 OpenERP S.A. (<http://openerp.com>).
|
||||
# Copyright (C) 2004-2014 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
|
@ -664,7 +664,7 @@ class module(osv.osv):
|
|||
|
||||
apps_server = urlparse.urlparse(self.get_apps_server(cr, uid, context=context))
|
||||
|
||||
OPENERP = 'openerp'
|
||||
OPENERP = openerp.release.product_name.lower()
|
||||
tmp = tempfile.mkdtemp()
|
||||
_logger.debug('Install from url: %r', urls)
|
||||
try:
|
||||
|
|
|
@ -1,27 +1,18 @@
|
|||
openerp.base = function(instance) {
|
||||
|
||||
instance.base.apps_remote = null;
|
||||
instance.base.apps_client = null;
|
||||
|
||||
|
||||
var _t = instance.web._t;
|
||||
|
||||
instance.base.Apps = instance.web.Widget.extend({
|
||||
template: 'EmptyComponent',
|
||||
remote_action_id: 'loempia.action_embed',
|
||||
remote_action_tag: 'loempia.embed',
|
||||
failback_action_id: 'base.open_module_tree',
|
||||
|
||||
init: function(parent, action) {
|
||||
this._super(parent, action);
|
||||
var options = action.params || {};
|
||||
|
||||
if (options.apps_user) {
|
||||
sessionStorage.setItem('apps.login', options.apps_user);
|
||||
}
|
||||
if (options.apps_access_token) {
|
||||
sessionStorage.setItem('apps.access_token', options.apps_access_token);
|
||||
}
|
||||
|
||||
this.params = options; // NOTE read by embedded client action
|
||||
this.params = options; // NOTE forwarded to embedded client action
|
||||
},
|
||||
|
||||
get_client: function() {
|
||||
|
@ -33,28 +24,7 @@ openerp.base = function(instance) {
|
|||
d.reject(client);
|
||||
};
|
||||
i.onload = function() {
|
||||
client.session.session_bind(client.origin).then(function() {
|
||||
// check if client can authenticate
|
||||
client.authenticate().then(
|
||||
function() { /* done */
|
||||
d.resolve(client);
|
||||
}, function() { /* fail */
|
||||
if (client.login === 'anonymous') {
|
||||
d.reject(client);
|
||||
} else {
|
||||
sessionStorage.removeItem('apps.login');
|
||||
sessionStorage.removeItem('apps.access_token');
|
||||
client.bind_credentials(client.dbname, 'anonymous', 'anonymous');
|
||||
client.authenticate().then(
|
||||
function() { /* done */
|
||||
d.resolve(client);
|
||||
}, function() { /* fail */
|
||||
d.reject(client);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
d.resolve(client);
|
||||
};
|
||||
var ts = new Date().getTime();
|
||||
i.src = _.str.sprintf('%s/web/static/src/img/sep-a.gif?%s', client.origin, ts);
|
||||
|
@ -71,12 +41,10 @@ openerp.base = function(instance) {
|
|||
if (dbname[0] === '/') {
|
||||
dbname = dbname.substr(1);
|
||||
}
|
||||
var login = (sessionStorage ? sessionStorage.getItem('apps.login') : null) || 'anonymous';
|
||||
var passwd = (sessionStorage ? sessionStorage.getItem('apps.access_token') : null) || 'anonymous';
|
||||
if (_.isNull(instance.base.apps_remote)) {
|
||||
instance.base.apps_remote = new openerp.init();
|
||||
}
|
||||
var client = new instance.base.apps_remote.web.EmbeddedClient(null, host, dbname, login, passwd);
|
||||
var client = {
|
||||
origin: host,
|
||||
dbname: dbname
|
||||
};
|
||||
instance.base.apps_client = client;
|
||||
return check_client_available(client);
|
||||
});
|
||||
|
@ -84,35 +52,141 @@ openerp.base = function(instance) {
|
|||
},
|
||||
|
||||
destroy: function() {
|
||||
if (instance.base.apps_client) {
|
||||
instance.base.apps_client.destroy();
|
||||
$(window).off("message.apps");
|
||||
if (this.$ifr) {
|
||||
this.$ifr.remove();
|
||||
this.$ifr = null;
|
||||
}
|
||||
return this._super();
|
||||
},
|
||||
|
||||
_on_message: function($e) {
|
||||
var self = this, client = this.client, e = $e.originalEvent;
|
||||
|
||||
if (e.origin !== client.origin) {
|
||||
return;
|
||||
}
|
||||
|
||||
var dispatcher = {
|
||||
'event': function(m) { self.trigger('message:' + m.event, m); },
|
||||
'action': function(m) {
|
||||
self.do_action(m.action).then(function(r) {
|
||||
var w = self.$ifr[0].contentWindow;
|
||||
w.postMessage({id: m.id, result: r}, client.origin);
|
||||
});
|
||||
},
|
||||
'rpc': function(m) {
|
||||
self.session.rpc.apply(self.session, m.args).then(function(r) {
|
||||
var w = self.$ifr[0].contentWindow;
|
||||
w.postMessage({id: m.id, result: r}, client.origin);
|
||||
});
|
||||
},
|
||||
'Model': function(m) {
|
||||
var M = new instance.web.Model(m.model);
|
||||
M[m.method].apply(M, m.args).then(function(r) {
|
||||
var w = self.$ifr[0].contentWindow;
|
||||
w.postMessage({id: m.id, result: r}, client.origin);
|
||||
});
|
||||
},
|
||||
};
|
||||
// console.log(e.data);
|
||||
if (!_.isObject(e.data)) { return; }
|
||||
if (dispatcher[e.data.type]) {
|
||||
dispatcher[e.data.type](e.data);
|
||||
}
|
||||
},
|
||||
|
||||
start: function() {
|
||||
var self = this;
|
||||
// desactivated for now because apps does not work anyway due to changes in the framework
|
||||
/*return self.get_client().
|
||||
return self.get_client().
|
||||
done(function(client) {
|
||||
client.replace(self.$el).
|
||||
done(function() {
|
||||
client.$el.removeClass('openerp');
|
||||
client.do_action(self.remote_action_id, {hide_breadcrumb: true});
|
||||
self.client = client;
|
||||
|
||||
var qs = (instance.session.debug ? 'debug&' : '') + 'db=' + client.dbname;
|
||||
var u = client.origin + '/apps/embed/client?' + qs;
|
||||
var css = {width: '100%', height: '400px'};
|
||||
self.$ifr = $('<iframe>').attr('src', u);
|
||||
|
||||
$(window).on("message.apps", self.proxy('_on_message'));
|
||||
|
||||
self.on('message:ready', self, function(m) {
|
||||
var w = this.$ifr[0].contentWindow;
|
||||
var act = {
|
||||
type: 'ir.actions.client',
|
||||
tag: this.remote_action_tag,
|
||||
params: _.extend({}, this.params, {
|
||||
db: this.session.db,
|
||||
origin: this.session.origin,
|
||||
})
|
||||
};
|
||||
w.postMessage({type:'action', action: act}, client.origin);
|
||||
});
|
||||
|
||||
self.on('message:set_height', self, function(m) {
|
||||
this.$ifr.height(m.height);
|
||||
});
|
||||
|
||||
self.on('message:update_count', self, function(m) {
|
||||
var count = m.count
|
||||
var get_upd_menu_id = function() {
|
||||
if (_.isUndefined(self._upd_menu_id)) {
|
||||
var IMD = new instance.web.Model('ir.model.data');
|
||||
return IMD.call('get_object_reference', ['base', 'menu_module_updates']).then(function(r) {
|
||||
var mid = r[1];
|
||||
if(r[0] !== 'ir.ui.menu') {
|
||||
// invalid reference, return null
|
||||
mid = null;
|
||||
}
|
||||
self._upd_menu_id = mid;
|
||||
return mid;
|
||||
});
|
||||
} else {
|
||||
return $.Deferred().resolve(self._upd_menu_id).promise();
|
||||
}
|
||||
};
|
||||
|
||||
$.when(get_upd_menu_id()).done(function(menu_id) {
|
||||
if (_.isNull(menu_id)) {
|
||||
return;
|
||||
}
|
||||
var $menu = instance.webclient.menu.$secondary_menus.find(_.str.sprintf('a[data-menu=%s]', menu_id));
|
||||
if ($menu.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (_.isUndefined(count)) {
|
||||
count = 0;
|
||||
}
|
||||
var needupdate = $menu.find('#menu_counter');
|
||||
if (needupdate && needupdate.length !== 0) {
|
||||
if (count > 0) {
|
||||
needupdate.text(count);
|
||||
} else {
|
||||
needupdate.remove();
|
||||
}
|
||||
} else if (count > 0) {
|
||||
$menu.append(instance.web.qweb.render("Menu.needaction_counter", {widget: {needaction_counter: count}}));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
self.on('message:blockUI', self, function() { instance.web.blockUI(); });
|
||||
self.on('message:unblockUI', self, function() { instance.web.unblockUI(); });
|
||||
self.on('message:warn', self, function(m) {instance.webclient.do_warn(m.title, m.message, m.sticky); });
|
||||
|
||||
self.$ifr.appendTo(self.$el).css(css).addClass('apps-client');
|
||||
}).
|
||||
fail(function(client) {*/
|
||||
fail(function(client) {
|
||||
self.do_warn(_t('Odoo Apps will be available soon'), _t('Showing locally available modules'), true);
|
||||
self.rpc('/web/action/load', {action_id: self.failback_action_id}).done(function(action) {
|
||||
self.do_action(action);
|
||||
instance.webclient.menu.open_action(action.id);
|
||||
});
|
||||
//});
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
instance.base.AppsUpdates = instance.base.Apps.extend({
|
||||
remote_action_id: 'loempia.action_embed_updates'
|
||||
remote_action_tag: 'loempia.embed.updates',
|
||||
});
|
||||
|
||||
instance.web.client_actions.add("apps", "instance.base.Apps");
|
||||
|
|
Loading…
Reference in New Issue