[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)
|
||||
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))
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue