diff --git a/ckanext/odsh/controller.py b/ckanext/odsh/controller.py index faba663a7c0072645f481bd04c6a6a2192d6bb1f..119d758250fce6182f9991efe6a7280b3a3a0654 100644 --- a/ckanext/odsh/controller.py +++ b/ckanext/odsh/controller.py @@ -1,13 +1,21 @@ import ckan.lib.base as base from ckan.controllers.home import HomeController from ckan.controllers.user import UserController +from ckan.controllers.api import ApiController +from ckan.controllers.feed import FeedController from ckan.controllers.package import PackageController from ckan.controllers.feed import FeedController, ITEMS_LIMIT, _package_search, _create_atom_id import ckan.lib.helpers as h import ckan.authz as authz +from ckan.common import c +import logging +import matomo +import ckan.logic as logic from ckan.common import c, request, config +import hashlib abort = base.abort +log = logging.getLogger(__name__) class OdshRouteController(HomeController): def info_page(self): @@ -17,7 +25,6 @@ class OdshRouteController(HomeController): def not_found(self): abort(404) - class OdshUserController(UserController): def me(self, locale=None): if not c.user: @@ -57,8 +64,34 @@ class OdshUserController(UserController): class OdshPackageController(PackageController): pass +class MamotoApiController(ApiController): + def action(self, logic_function, ver=None): + try: + function = logic.get_action(logic_function) + side_effect_free = getattr(function, 'side_effect_free', False) + request_data = self._get_request_data( + try_url_params=side_effect_free) + if isinstance(request_data, dict): + id = request_data.get('id', '') + if 'q' in request_data: + id = request_data['q'] + if 'query' in request_data: + id = request_data['query'] + userid=None + if c.user: + userid=hashlib.md5(c.user).hexdigest()[:16] + matomo.create_matomo_request(userid) + else: + matomo.create_matomo_request() + + except Exception, e: + log.error(e) + + return ApiController.action(self, logic_function, ver) + class OdshFeedController(FeedController): def custom(self): + matomo.create_matomo_request() extra_fields=['ext_startdate', 'ext_enddate', 'ext_bbox', 'ext_prev_extent'] q = request.params.get('q', u'') fq = '' diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py index 6234d7eeb27383c6f03db5e834d6afe540e5fc90..fc8a830023bd4b132573e65b06f915e54713ab89 100644 --- a/ckanext/odsh/helpers.py +++ b/ckanext/odsh/helpers.py @@ -139,6 +139,11 @@ def odsh_upload_known_formats(): value = toolkit.aslist(value) return value +def odsh_tracking_id(): + return config.get('ckanext.odsh.matomo_id') + +def odsh_tracking_url(): + return config.get('ckanext.odsh.matomo_url') def odsh_encodeurl(url): return urllib.quote(url, safe='') diff --git a/ckanext/odsh/matomo.py b/ckanext/odsh/matomo.py new file mode 100644 index 0000000000000000000000000000000000000000..a3fd6fc1ae16564f5ad5eeed7de94e04f5d2c5a3 --- /dev/null +++ b/ckanext/odsh/matomo.py @@ -0,0 +1,24 @@ +from piwikapi.tracking import PiwikTracker +from piwikapi.tests.request import FakeRequest +from ckan.common import c, request +from pylons import config +import logging +from ckan.plugins.toolkit import enqueue_job + +def create_matomo_request(userId=None): + headers = { + 'HTTP_USER_AGENT': request.headers.get('User-Agent'), + 'REMOTE_ADDR': request.headers.get('Host'), + # 'HTTP_REFERER': 'http://referer.com/somewhere/', + 'HTTP_ACCEPT_LANGUAGE': request.headers.get('Accept-Language'), + 'SERVER_NAME': config.get('ckan.site_url'), + 'PATH_INFO': c.environ['PATH_INFO'], + # 'QUERY_STRING': 'something=bar', + 'HTTPS': False, + } + fakerequest = FakeRequest(headers) + piwiktracker =PiwikTracker(config.get('ckanext.odsh.matomo_id'), fakerequest) + piwiktracker.set_api_url(config.get('ckanext.odsh.matomo_url')) + if userId: + piwiktracker.set_visitor_id(userId) + enqueue_job(piwiktracker.do_track_page_view,[request.path_qs], queue='tracking') diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index 3e4efec3407a3966af4bf7666696c52b637ccf42..8214308f6ad3034736c807c029cf9b3574302118 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -112,7 +112,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm 'odsh_extract_error_new': odsh_helpers.odsh_extract_error_new, 'odsh_extract_value_from_extras': odsh_helpers.odsh_extract_value_from_extras, 'odsh_create_checksum': odsh_helpers.odsh_create_checksum, - 'presorted_license_options': odsh_helpers.presorted_license_options + 'presorted_license_options': odsh_helpers.presorted_license_options, + 'odsh_tracking_id': odsh_helpers.odsh_tracking_id, + 'odsh_tracking_url': odsh_helpers.odsh_tracking_url } def after_map(self, map): @@ -129,7 +131,7 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm # /api ver 3 or none with matomo GET_POST = dict(method=['GET', 'POST']) with SubMapper(map, controller='ckanext.odsh.controller:MamotoApiController', path_prefix='/api{ver:/3|}', ver='/3') as m: - m.connect('/action2/{logic_function}', action='action', conditions=GET_POST) + m.connect('/action/{logic_function}', action='action', conditions=GET_POST) with SubMapper(map, controller='ckanext.odsh.controller:OdshFeedController') as m: m.connect('/feeds/custom.atom', action='custom') diff --git a/ckanext/odsh/templates/base.html b/ckanext/odsh/templates/base.html index e7d5bc3853bb5def3f75d03b32aa276bf14a6de2..5962c139dbd823b28c0289e0794ea1e724b245c9 100644 --- a/ckanext/odsh/templates/base.html +++ b/ckanext/odsh/templates/base.html @@ -10,8 +10,8 @@ {% block head_extras %} {{ super() }} -{% set matomo_url = 'https://phpefi.schleswig-holstein.de/gsb_analytics/'%} -{% set matomo_id = 3%} +{% set matomo_url = h.odsh_tracking_url()%} +{% set matomo_id = h.odsh_tracking_id()%} <!-- Matomo --> <script type="text/javascript"> var _paq = _paq || []; @@ -19,11 +19,10 @@ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { - var u="{{matomo_url}}"; - _paq.push(['setTrackerUrl', u+'piwik.php']); + _paq.push(['setTrackerUrl', '{{matomo_url}}']); _paq.push(['setSiteId', '{{matomo_id}}']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='{{matomo_url|replace('piwik.php','piwik.js')}}'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> diff --git a/ckanext/odsh/templates/page.html b/ckanext/odsh/templates/page.html index 05e49c0821beea5d43648e25e274ceea68a6f8ad..525e8240c1ac1e427c88b2755a4fba2f736a10ce 100644 --- a/ckanext/odsh/templates/page.html +++ b/ckanext/odsh/templates/page.html @@ -3,9 +3,9 @@ {%- block content %} {% block maintag %}<div role="main">{% endblock %} -{% set matomo_url = 'https://phpefi.schleswig-holstein.de/gsb_analytics/'%} -{% set matomo_id = 3%} -<noscript><p><img src="{{matomo_url}}/piwik.php?idsite={{matomo_id}}&rec=1" style="border:0;" alt="" /></p></noscript> +{% set matomo_url = h.odsh_tracking_url()%} +{% set matomo_id = h.odsh_tracking_id()%} +<noscript><p><img src="{{matomo_url}}?idsite={{matomo_id}}&rec=1" style="border:0;" alt="" /></p></noscript> <div id="content" class="container"> <div id="testsystem"> <p>TESTSYSTEM</p>