Victor Tabuenca (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-saas_analytics into 
lp:openobject-addons.

Requested reviews:
  Antony Lesuisse (OpenERP) (al-openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-saas_analytics/+merge/133473
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-saas_analytics/+merge/133473
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-saas_analytics.
=== added directory 'web_analytics'
=== added file 'web_analytics/__init__.py'
=== added file 'web_analytics/__openerp__.py'
--- web_analytics/__openerp__.py	1970-01-01 00:00:00 +0000
+++ web_analytics/__openerp__.py	2012-11-08 12:56:25 +0000
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2010-2012 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
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+    'name': 'Google Analytics',
+    'version': '1.0',
+    'category': 'Tools',
+    'complexity': "easy",
+    'description': """
+Google Analytics.
+==============================
+
+Collects web application usage with Google Analytics.
+    """,
+    'author': 'OpenERP SA',
+    'website': 'http://openerp.com',
+    'depends': ['web', 'auth_signup'],
+    'data': [],
+    'installable': True,
+    'active': False,
+    'js': ['static/src/js/web_analytics.js'],
+}
+

=== added directory 'web_analytics/static'
=== added directory 'web_analytics/static/src'
=== added directory 'web_analytics/static/src/img'
=== added file 'web_analytics/static/src/img/icon.png'
Binary files web_analytics/static/src/img/icon.png	1970-01-01 00:00:00 +0000 and web_analytics/static/src/img/icon.png	2012-11-08 12:56:25 +0000 differ
=== added directory 'web_analytics/static/src/js'
=== added file 'web_analytics/static/src/js/web_analytics.js'
--- web_analytics/static/src/js/web_analytics.js	1970-01-01 00:00:00 +0000
+++ web_analytics/static/src/js/web_analytics.js	2012-11-08 12:56:25 +0000
@@ -0,0 +1,134 @@
+
+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
+     */
+
+    // Google Analytics Code snippet
+    (function() {
+        var ga   = document.createElement('script');
+        ga.type  = 'text/javascript';
+        ga.async = true
+        ga.src   = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0];
+        s.parentNode.insertBefore(ga,s);
+    })();
+
+    if (instance.webclient) {
+
+        // Set the account and domain to start tracking
+        _gaq.push(['_setAccount', 'UA-7333765-1']);    // [email protected] localhost
+        _gaq.push(['_setDomainName', 'none']);  // Change for the real domain
+
+        // Track user types
+        if (instance.session.uid !== 1) {
+            if ((/\.demo.openerp.com/).test(instance.session.server)) {
+                _gaq.push(['_setCustomVar', 1, 'User Type', 'Demo User', 1]);
+            } else {
+                _gaq.push(['_setCustomVar', 1, 'User Type', 'Normal User', 1]);
+            }
+        } else {
+            _gaq.push(['_setCustomVar', 1, 'User Type', 'Admin User', 1]);
+        }
+
+        // Track object usage 
+        _gaq.push(['_setCustomVar', 2, 'Object', 'no_model', 3]);
+        // Tack view usage
+        _gaq.push(['_setCustomVar', 3, 'View Type', 'default', 3]);
+
+        _gaq.push(['_trackPageview']);
+
+        var self = this;
+        instance.webclient.on('state_pushed', self, 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.parseUrl({'model': state.model, 'view_type': state.view_type});
+                _gaq.push(['_trackPageview', url]);
+            }
+        });
+    }
+
+    // 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.parseUrl({'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.parseUrl({'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) {
+            var url = instance.web_analytics.parseUrl({'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.parseUrl({'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 = instance.web.CrashManager.extend({
+        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.parseUrl(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);
+        },
+    });
+
+    instance.web_analytics.parseUrl = function(options) {
+        var url = '';
+        _.each(options, function(value, key) {
+            url += '/' + key + '=' + value;
+        });
+        return url;
+    };
+
+};
\ No newline at end of file

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to