[IMP] Refactoring web_analytics, step 2
bzr revid: vta@openerp.com-20130103091821-mo57o9oybzpyrzqm
This commit is contained in:
parent
1774e390ec
commit
a1d18ccb7a
|
@ -3,12 +3,13 @@ var _gaq = _gaq || []; // asynchronous stack used by google analytics
|
|||
|
||||
openerp.web_analytics = function(instance) {
|
||||
|
||||
/** The Google Analytics Module inserts the Google Analytics JS Snippet
|
||||
* at the top of the page, and sends to google an url each time the
|
||||
* openerp url is changed.
|
||||
* The pushes of the urls is made by triggering the 'state_pushed' event in the
|
||||
* web_client.do_push_state() method which is responsible of changing the openerp current url
|
||||
*/
|
||||
/*
|
||||
* The Google Analytics Module inserts the Google Analytics JS Snippet
|
||||
* at the top of the page, and sends to google an url each time the
|
||||
* openerp url is changed.
|
||||
* The pushes of the urls is made by triggering the 'state_pushed' event in the
|
||||
* web_client.do_push_state() method which is responsible of changing the openerp current url
|
||||
*/
|
||||
|
||||
// Google Analytics Code snippet
|
||||
(function() {
|
||||
|
@ -21,142 +22,150 @@ openerp.web_analytics = function(instance) {
|
|||
})();
|
||||
|
||||
instance.web_analytics.Tracker = instance.web.Class.extend({
|
||||
/*
|
||||
* This method initializes the tracker
|
||||
*/
|
||||
init: function() {
|
||||
// initialize tracker
|
||||
_gaq.push(['_setAccount', 'UA-35793871-1']);
|
||||
// _gaq.push(['_setAccount', 'UA-7333765-1']);
|
||||
//_gaq.push(['_setAccount', 'UA-36797757-1']); // Debug code
|
||||
_gaq.push(['_setDomainName', 'none']); // Change for the real domain
|
||||
this.initialize_custom();
|
||||
instance.client.on('state_pushed', this, on_state_pushed);
|
||||
instance.client.on('state_pushed', this, this.on_state_pushed);
|
||||
this.include_tracker();
|
||||
},
|
||||
initialize_custom: function() {},
|
||||
on_state_pushed: function() {},
|
||||
include_tracker: function() {},
|
||||
/*
|
||||
* This method contains the initialization of all user-related custom variables
|
||||
* stored in GA. Also other modules can override it to add new custom variables
|
||||
*/
|
||||
initialize_custom: function() {
|
||||
// Track User Access Level, Custom Variable 4 in GA with visitor level scope
|
||||
// Values: 'Admin User', 'Normal User', 'Portal User', 'Anonymous User'
|
||||
if (instance.session.uid === 1) {
|
||||
_gaq.push(['_setCustomVar', 4, 'User Type', 'Admin User', 1]);
|
||||
// Make the difference between portal users and anonymous users
|
||||
} else if (instance.session.username.indexOf('@') !== -1) {
|
||||
if (instance.session.username.indexOf('anonymous') === -1) {
|
||||
_gaq.push(['_setCustomVar', 4, 'User Type', 'Portal User', 1]);
|
||||
} else {
|
||||
_gaq.push(['_setCustomVar', 4, 'User Type', 'Anonymous User', 1]);
|
||||
}
|
||||
} else if (instance.session.username.indexOf('anonymous') !== -1) {
|
||||
_gaq.push(['_setCustomVar', 4, 'User Type', 'Anonymous User', 1]);
|
||||
} else {
|
||||
_gaq.push(['_setCustomVar', 4, 'User Type', 'Normal User', 1]);
|
||||
}
|
||||
},
|
||||
/*
|
||||
* This method contains the initialization of the object and view type
|
||||
* custom variables stored in GA. Setting here the CV will work if web_analytics
|
||||
* module is auto-install, because the first view of a fresh DB is the modules
|
||||
* kanban view (also in trial), otherwise the responsibility of the first
|
||||
* initialization relies on instance.web.ActionManager#ir_actions_client
|
||||
* method
|
||||
*/
|
||||
on_state_pushed: function(state) {
|
||||
// Track only pages corresponding to a 'normal' view of OpenERP, views
|
||||
// related to client actions are tracked by the action manager
|
||||
if (state.model && state.view_type) {
|
||||
// Track object usage
|
||||
_gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]);
|
||||
// Tack view usage
|
||||
_gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]);
|
||||
// Track the page
|
||||
var url = instance.web_analytics.generateUrl({'model': state.model, 'view_type': state.view_type});
|
||||
_gaq.push(['_trackPageview', url]);
|
||||
}
|
||||
},
|
||||
/*
|
||||
* This method includes the tracker into view and managers. It can be overriden
|
||||
* by other modules in order to extend tracking functionalities
|
||||
*/
|
||||
include_tracker: function() {
|
||||
// Track the events related with the creation and the modification of records,
|
||||
// the view type is always form
|
||||
instance.web.FormView = instance.web.FormView.extend({
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super.apply(this, arguments);
|
||||
var self = this;
|
||||
this.on('record_created', self, function(r) {
|
||||
var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'});
|
||||
_gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]);
|
||||
});
|
||||
this.on('record_saved', self, function(r) {
|
||||
var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'});
|
||||
_gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Track client actions, also if not in a fresh DB it initializes the
|
||||
// CV related to objects and view types
|
||||
instance.web.ActionManager.include({
|
||||
ir_actions_client: function (action, options) {
|
||||
if (action.res_model) {
|
||||
_gaq.push(['_setCustomVar', 2, 'Object', action.res_model, 3]);
|
||||
} else {
|
||||
_gaq.push(['_setCustomVar', 2, 'Object', action.type, 3]);
|
||||
}
|
||||
_gaq.push(['_setCustomVar', 2, 'View Type', action.name, 3]);
|
||||
var url = instance.web_analytics.generateUrl({'action': action.tag});
|
||||
_gaq.push(['_trackPageview', url]);
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
// Track button events
|
||||
instance.web.View.include({
|
||||
do_execute_action: function(action_data, dataset, record_id, on_closed) {
|
||||
console.log(action_data);
|
||||
var category = this.model || dataset.model || '';
|
||||
var action;
|
||||
if (action_data.name && _.isNaN(action_data.name-0)) {
|
||||
action = action_data.name;
|
||||
} else {
|
||||
action = action_data.string || action_data.special || '';
|
||||
}
|
||||
var label = instance.web_analytics.generateUrl({'model': category, 'view_type': this.view_type});
|
||||
_gaq.push(['_trackEvent', category, action, label]);
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
// Track error events
|
||||
instance.web.CrashManager.include({
|
||||
show_error: function(error) {
|
||||
var hash = window.location.hash;
|
||||
var params = $.deparam(hash.substr(hash.indexOf('#')+1));
|
||||
var options = {};
|
||||
if (params.model && params.view_type) {
|
||||
options = {'model': params.model, 'view_type': params.view_type};
|
||||
} else {
|
||||
options = {'action': params.action};
|
||||
}
|
||||
var label = instance.web_analytics.generateUrl(options);
|
||||
if (error.code) {
|
||||
_gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]);
|
||||
} else {
|
||||
_gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]);
|
||||
}
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
var init_tracker = function() {
|
||||
// initialize tracker
|
||||
_gaq.push(['_setAccount', 'UA-35793871-1']);
|
||||
// _gaq.push(['_setAccount', 'UA-7333765-1']);
|
||||
//_gaq.push(['_setAccount', 'UA-36797757-1']); // Debug code
|
||||
_gaq.push(['_setDomainName', 'none']); // Change for the real domain
|
||||
|
||||
// Track user types
|
||||
if (instance.session.uid === 1) {
|
||||
_gaq.push(['_setCustomVar', 1, 'User Type', 'Admin User', 1]);
|
||||
} else {
|
||||
_gaq.push(['_setCustomVar', 1, 'User Type', 'Normal User', 1]);
|
||||
}
|
||||
};
|
||||
|
||||
var on_state_pushed = function(state) {
|
||||
// Track only pages corresponding to a 'normal' view of OpenERP, views
|
||||
// related to client actions are tracked by the action manager
|
||||
if (state.model && state.view_type) {
|
||||
// Track object usage
|
||||
_gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]);
|
||||
// Tack view usage
|
||||
_gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]);
|
||||
// Track the page
|
||||
var url = instance.web_analytics.generateUrl({'model': state.model, 'view_type': state.view_type});
|
||||
_gaq.push(['_trackPageview', url]);
|
||||
}
|
||||
};
|
||||
|
||||
var include_tracker = function() {
|
||||
// include the tracker into views and managers
|
||||
|
||||
// Track the events related with the creation and the modification of records
|
||||
instance.web.FormView = instance.web.FormView.extend({
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super.apply(this, arguments);
|
||||
var self = this;
|
||||
this.on('record_created', self, function(r) {
|
||||
var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'});
|
||||
_gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]);
|
||||
});
|
||||
this.on('record_saved', self, function(r) {
|
||||
var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'});
|
||||
_gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Track client actions
|
||||
instance.web.ActionManager.include({
|
||||
ir_actions_client: function (action, options) {
|
||||
console.log(action);
|
||||
console.log(options);
|
||||
var url = instance.web_analytics.generateUrl({'action': action.tag});
|
||||
_gaq.push(['_trackPageview', url]);
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
// Track button events
|
||||
instance.web.View.include({
|
||||
do_execute_action: function(action_data, dataset, record_id, on_closed) {
|
||||
console.log(action_data);
|
||||
var category = this.model || dataset.model || '';
|
||||
var action;
|
||||
if (action_data.name && _.isNaN(action_data.name-0)) {
|
||||
action = action_data.name;
|
||||
} else {
|
||||
action = action_data.string || action_data.special || '';
|
||||
}
|
||||
var label = instance.web_analytics.generateUrl({'model': category, 'view_type': this.view_type});
|
||||
_gaq.push(['_trackEvent', category, action, label]);
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
// Track error events
|
||||
instance.web.CrashManager.include({
|
||||
show_error: function(error) {
|
||||
var hash = window.location.hash;
|
||||
var params = $.deparam(hash.substr(hash.indexOf('#')+1));
|
||||
var options = {};
|
||||
if (params.model && params.view_type) {
|
||||
options = {'model': params.model, 'view_type': params.view_type};
|
||||
} else {
|
||||
options = {'action': params.action};
|
||||
}
|
||||
var label = instance.web_analytics.generateUrl(options);
|
||||
if (error.code) {
|
||||
_gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]);
|
||||
} else {
|
||||
_gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]);
|
||||
}
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Set correctly the tracker in the current instance
|
||||
if (instance.client instanceof instance.web.WebClient) { // not for embedded clients
|
||||
init_tracker();
|
||||
|
||||
// Set the account and domain to start tracking
|
||||
instance.client.on('state_pushed', this, on_state_pushed);
|
||||
|
||||
include_tracker();
|
||||
instance.webclient.tracker = new instance.web_analytics.Tracker();
|
||||
} else if (!instance.client) {
|
||||
// client does not already exists, we are in monodb mode
|
||||
|
||||
instance.web.WebClient.include({
|
||||
init: function() {
|
||||
init_tracker();
|
||||
return this._super.apply(this, arguments);
|
||||
var d = this._super.apply(this, arguments);
|
||||
this.tracker = new instance.web_analytics.Tracker();
|
||||
return d;
|
||||
},
|
||||
start: function() {
|
||||
var self = this;
|
||||
return this._super.apply(this, arguments).done(function() {
|
||||
self.on('state_pushed', self, on_state_pushed);
|
||||
include_tracker();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue