From 475deb73a67a10bc89f4a5c10926eed397dfeeb6 Mon Sep 17 00:00:00 2001
From: chbaeh <chbaeh@gmail.com>
Date: Fri, 12 Apr 2019 12:46:16 +0200
Subject: [PATCH] add pagination and sort

---
 ckanext/odsh/controller.py | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/ckanext/odsh/controller.py b/ckanext/odsh/controller.py
index ac71ab90..74a639ec 100644
--- a/ckanext/odsh/controller.py
+++ b/ckanext/odsh/controller.py
@@ -13,7 +13,7 @@ import ckan.lib.helpers as h
 import ckan.authz as authz
 from ckan.common import c
 import logging
-import matomo 
+import matomo
 import ckan.logic as logic
 from ckan.common import c, request, config
 import hashlib
@@ -101,11 +101,37 @@ class OdshGroupController(OrganizationController):
         action = super(OdshGroupController, self)._action(name)
 
         def custom_org_list(context, data_dict):
-            query = data_dict['q']
-            result = action(context, data_dict)
+            sort_desc = data_dict['sort'] == u'name desc'
+            d = data_dict.copy()
+            if 'offset' in d:
+                del d['offset']
+                del d['limit']
+            # print(data_dict)
+            if d["type"] is not 'organization':
+                return action(context, d)
+            all = d['all_fields']
+            query = d['q']
+            result = action(context, d)
+            seen = set([(r['id'] if all else r) for r in result])
             for q in query.split(' '):
-                data_dict['q'] = q
-                result += action(context, data_dict)
+                d['q'] = q
+                ret = action(context, d)
+                for r in ret:
+                    id = r['id'] if all else r
+                    if id not in seen:
+                        result.append(r)
+                        seen.add(id)
+
+            if all:
+                result = sorted(
+                    result, key=lambda k: k['name'], reverse=sort_desc)
+            else:
+                result = sorted(result, reverse=sort_desc)
+            
+            if 'offset' in data_dict:
+                off = data_dict['offset']
+                limit = data_dict['limit']
+                return result[off:off+limit]
             return result 
 
         if name is 'group_list':
@@ -113,6 +139,7 @@ class OdshGroupController(OrganizationController):
         else:
             return super(OdshGroupController, self)._action(name)
 
+
 class OdshApiController(ApiController):
     def action(self, logic_function, ver=None):
         try:
-- 
GitLab