[1451] Track downloads on resource view page.
Don't display download count on that page for now.
This commit is contained in:
parent
e104e7eb9e
commit
8176247f10
|
@ -41,12 +41,16 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
stream = stream | Transformer('head').append(code)
|
stream = stream | Transformer('head').append(code)
|
||||||
resource_url = config.get('googleanalytics.resource_prefix',
|
resource_url = config.get('googleanalytics.resource_prefix',
|
||||||
DEFAULT_RESOURCE_URL_TAG)
|
DEFAULT_RESOURCE_URL_TAG)
|
||||||
show_downloads = asbool(config.get('googleanalytics.show_downloads',
|
|
||||||
True))
|
|
||||||
|
|
||||||
routes = request.environ.get('pylons.routes_dict')
|
routes = request.environ.get('pylons.routes_dict')
|
||||||
if (routes.get('controller') == 'package' and
|
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
|
# add download tracking link
|
||||||
def js_attr(name, event):
|
def js_attr(name, event):
|
||||||
|
@ -59,7 +63,7 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
# add some stats
|
# add some stats
|
||||||
def download_adder(stream):
|
def download_adder(stream):
|
||||||
download_html = '''<span class="downloads-count">
|
download_html = '''<span class="downloads-count">
|
||||||
(downloaded %s times)</span>'''
|
[downloaded %s times]</span>'''
|
||||||
count = None
|
count = None
|
||||||
for mark, (kind, data, pos) in stream:
|
for mark, (kind, data, pos) in stream:
|
||||||
if mark and kind == START:
|
if mark and kind == START:
|
||||||
|
@ -81,11 +85,11 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# perform the stream transform
|
# 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)
|
.attr('onclick', js_attr)
|
||||||
|
|
||||||
if show_downloads:
|
if show_downloads:
|
||||||
stream = stream | Transformer('//p[@class="resource-url"]//a')\
|
stream = stream | Transformer('//a[contains(@class, "resource-url-analytics")]')\
|
||||||
.apply(download_adder)
|
.apply(download_adder)
|
||||||
stream = stream | Transformer('//link[@rel="stylesheet"]')\
|
stream = stream | Transformer('//link[@rel="stylesheet"]')\
|
||||||
.append(HTML(download_style))
|
.append(HTML(download_style))
|
||||||
|
|
|
@ -84,8 +84,39 @@ class TestLoadCommand(TestCase):
|
||||||
command.TEST_HOST = MockClient('localhost', 6969)
|
command.TEST_HOST = MockClient('localhost', 6969)
|
||||||
command.CONFIG = self.config
|
command.CONFIG = self.config
|
||||||
command.run([])
|
command.run([])
|
||||||
response = self.app.get(url_for(controller='package',
|
response = self.app.get(url_for(
|
||||||
action='read',
|
controller='package', action='read', id='annakarenina'
|
||||||
id='annakarenina'))
|
))
|
||||||
assert "(downloaded 4 times)" in response.body
|
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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue