Skip to content
Snippets Groups Projects
controller.py 6.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • import ckan.lib.base as base
    from ckan.controllers.home import HomeController
    
    from ckan.controllers.user import UserController
    
    anonymous's avatar
    anonymous committed
    from ckan.controllers.api import ApiController
    from ckan.controllers.feed import FeedController
    
    anonymous's avatar
    anonymous committed
    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
    
    anonymous's avatar
    anonymous committed
    import logging
    import matomo 
    import ckan.logic as logic
    
    from ckan.common import c, request, config
    
    
    abort = base.abort
    
    anonymous's avatar
    anonymous committed
    log = logging.getLogger(__name__)
    
    
    class OdshRouteController(HomeController):
        def info_page(self):
    
    anonymous's avatar
    anonymous committed
            h.redirect_to('http://www.schleswig-holstein.de/odpinfo')
    
    anonymous's avatar
    anonymous committed
        def start(self):
    
    anonymous's avatar
    anonymous committed
            h.redirect_to('http://www.schleswig-holstein.de/odpstart')
    
    anonymous's avatar
    anonymous committed
        def not_found(self):
            abort(404)
    
    
    class OdshUserController(UserController):
        def me(self, locale=None):
            if not c.user:
                h.redirect_to(locale=locale, controller='user', action='login',
                              id=None)
            user_ref = c.userobj.get_reference_preferred_for_uri()
            h.redirect_to(locale=locale, controller='package', action='search')
    
        def dashboard(self, id=None, offset=0):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).dashboard(id,offset)
    
    
        def dashboard_datasets(self):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).dashboard_datasets(id)
    
        def read(self, id=None):
            return super(OdshUserController,self).read(id)
    
        def follow(self, id):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).follow(id)
    
        def unfollow(self, id):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).unfollow(id)
    
        def activity(self, id, offset=0):
            if not authz.is_sysadmin(c.user):
                abort(404)
    
    anonymous's avatar
    anonymous committed
            return super(OdshUserController,self).activity(id, offset)
    
    class OdshPackageController(PackageController):
    
    anonymous's avatar
    anonymous committed
        pass
    
    class MamotoApiController(ApiController):
    
        def _post_matomo(self, user, request_obj_type, request_function, request_id):
        # if config.get('googleanalytics.id'):
            data_dict = {
                "siteid": 1,
                "rec": 1,
                # "tid": config.get('googleanalytics.id'),
                # "cid": hashlib.md5(user).hexdigest(),
                # # customer id should be obfuscated
                # "t": "event",
                # "dh": c.environ['HTTP_HOST'],
                # "dp": c.environ['PATH_INFO'],
                # "dr": c.environ.get('HTTP_REFERER', ''),
                # "ec": "CKAN API Request",
                # "ea": request_obj_type+request_function,
                # "el": request_id,
            }
            # plugin.GoogleAnalyticsPlugin.analytics_queue.put(data_dict)
    
        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']
                    # self._post_matomo(c.user, logic_function, '', id)
                    userid=hashlib.md5(user).hexdigest()
                    matomo.create_matomo_request(userid)
            except Exception, e:
                log.debug(e)
                pass
            
    
            return ApiController.action(self, logic_function, ver)
    
    
        # def list(self, ver=None, register=None, subregister=None, id=None):
    
        # def show(self, ver=None, register=None, subregister=None,
                #  id=None, id2=None):
            # self._post_analytics(c.user,
            #                      register +
            #                      ("_"+str(subregister) if subregister else ""),
            #                      "show",
            #                      id)
            # return ApiController.show(self, ver, register, subregister, id, id2)
    
        # def create(self, ver=None, register=None, subregister=None,
        #            id=None, id2=None):
    
    
        # def update(self, ver=None, register=None, subregister=None,
        #            id=None, id2=None):
    
        # def delete(self, ver=None, register=None, subregister=None,
        #            id=None, id2=None):
    
        # def search(self, ver=None, register=None):
    
    class MatomoFeedController(FeedController):
        def custom(self):
            matomo.create_matomo_request()
    
            return FeedController.custom(self)
    
    
    class OdshFeedController(FeedController):
        def custom(self):
            extra_fields=['ext_startdate', 'ext_enddate', 'ext_bbox', 'ext_prev_extent']
            q = request.params.get('q', u'')
            fq = ''
            search_params = {}
            extras = {}
            for (param, value) in request.params.items():
                if param not in ['q', 'page', 'sort'] + extra_fields \
                        and len(value) and not param.startswith('_'):
                    search_params[param] = value
                    fq += ' %s:"%s"' % (param, value)
                if param in extra_fields:
                    extras[param]=value
            search_params['extras']=extras
    
            page = h.get_page_number(request.params)
    
            limit = ITEMS_LIMIT
            data_dict = {
                'q': q,
                'fq': fq,
                'start': (page - 1) * limit,
                'rows': limit,
                'sort': request.params.get('sort', None),
                'extras': extras
            }
    
            item_count, results = _package_search(data_dict)
    
            navigation_urls = self._navigation_urls(request.params,
                                                    item_count=item_count,
                                                    limit=data_dict['rows'],
                                                    controller='feed',
                                                    action='custom')
    
            feed_url = self._feed_url(request.params,
                                      controller='feed',
                                      action='custom')
    
            atom_url = h._url_with_params('/feeds/custom.atom',
                                          search_params.items())
    
            alternate_url = self._alternate_url(request.params)
    
            site_title = config.get('ckan.site_title', 'CKAN')
    
            return self.output_feed(results,
                                    feed_title=u'%s - Custom query' % site_title,
                                    feed_description=u'Recently created or updated'
                                    ' datasets on %s. Custom query: \'%s\'' %
                                    (site_title, q),
                                    feed_link=alternate_url,
                                    feed_guid=_create_atom_id(atom_url),
                                    feed_url=feed_url,
                                    navigation_urls=navigation_urls)