[1451] Track downloads on resource view page.

Don't display download count on that page for now.
This commit is contained in:
John Glover 2011-12-20 10:56:05 +00:00
parent e104e7eb9e
commit 8176247f10
2 changed files with 45 additions and 10 deletions

View File

@ -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 = '''<span class="downloads-count">
(downloaded %s times)</span>'''
[downloaded %s times]</span>'''
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))

View File

@ -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