diff --git a/ckanext/googleanalytics/plugin.py b/ckanext/googleanalytics/plugin.py index 708d58c..8454d16 100644 --- a/ckanext/googleanalytics/plugin.py +++ b/ckanext/googleanalytics/plugin.py @@ -41,12 +41,16 @@ class GoogleAnalyticsPlugin(SingletonPlugin): stream = stream | Transformer('head').append(code) resource_url = config.get('googleanalytics.resource_prefix', DEFAULT_RESOURCE_URL_TAG) - show_downloads = asbool(config.get('googleanalytics.show_downloads', - True)) routes = request.environ.get('pylons.routes_dict') if (routes.get('controller') == 'package' and - routes.get('action') == 'read'): + routes.get('action') in ['read', 'resource_read']): + + log.info("Tracking of resource downloads") + show_downloads = ( + asbool(config.get('googleanalytics.show_downloads', True)) and + routes.get('action') == 'read' + ) # add download tracking link def js_attr(name, event): @@ -59,7 +63,7 @@ class GoogleAnalyticsPlugin(SingletonPlugin): # add some stats def download_adder(stream): download_html = ''' - (downloaded %s times)''' + [downloaded %s times]''' count = None for mark, (kind, data, pos) in stream: if mark and kind == START: @@ -81,11 +85,11 @@ class GoogleAnalyticsPlugin(SingletonPlugin): ''' # perform the stream transform - stream = stream | Transformer('//p[@class="resource-url"]//a')\ + stream = stream | Transformer('//a[contains(@class, "resource-url-analytics")]')\ .attr('onclick', js_attr) if show_downloads: - stream = stream | Transformer('//p[@class="resource-url"]//a')\ + stream = stream | Transformer('//a[contains(@class, "resource-url-analytics")]')\ .apply(download_adder) stream = stream | Transformer('//link[@rel="stylesheet"]')\ .append(HTML(download_style)) diff --git a/tests/test_general.py b/tests/test_general.py index 3095150..bd94a92 100644 --- a/tests/test_general.py +++ b/tests/test_general.py @@ -84,8 +84,39 @@ class TestLoadCommand(TestCase): command.TEST_HOST = MockClient('localhost', 6969) command.CONFIG = self.config command.run([]) - response = self.app.get(url_for(controller='package', - action='read', - id='annakarenina')) - assert "(downloaded 4 times)" in response.body + response = self.app.get(url_for( + controller='package', action='read', id='annakarenina' + )) + assert "[downloaded 4 times]" in response.body + + def test_js_inserted_dataset_view(self): + command = LoadAnalytics("loadanalytics") + command.TEST_HOST = MockClient('localhost', 6969) + command.CONFIG = self.config + command.run([]) + response = self.app.get(url_for( + controller='package', action='read', id='annakarenina' + )) + assert 'onclick="javascript: _gaq.push(' in response.body + + def test_js_inserted_resource_view(self): + from nose import SkipTest + raise SkipTest("Test won't work until CKAN 1.5.2") + + from ckan.logic.action import get + from ckan import model + context = {'model': model, 'ignore_auth': True} + data = {'id': 'annakarenina'} + pkg = get.package_show(context, data) + resource_id = pkg['resources'][0]['id'] + + command = LoadAnalytics("loadanalytics") + command.TEST_HOST = MockClient('localhost', 6969) + command.CONFIG = self.config + command.run([]) + response = self.app.get(url_for( + controller='package', action='resource_read', id='annakarenina', + resource_id=resource_id + )) + assert 'onclick="javascript: _gaq.push(' in response.body