From 81d9ecfa12ae8a292aae692ff9f6328f7746447e Mon Sep 17 00:00:00 2001 From: ly1217 Date: Wed, 8 May 2019 19:28:29 -0700 Subject: [PATCH] Add list all departments api. --- net/common/rpc-service.c | 16 ++++++++++++++++ net/common/rpc-service.h | 3 +++ net/server/group-mgr.c | 35 +++++++++++++++++++++++++++++++++++ net/server/group-mgr.h | 4 ++++ python/ccnet/rpc.py | 4 ++++ 5 files changed, 62 insertions(+) diff --git a/net/common/rpc-service.c b/net/common/rpc-service.c index abedbbd..9df8515 100644 --- a/net/common/rpc-service.c +++ b/net/common/rpc-service.c @@ -252,6 +252,10 @@ ccnet_start_rpc(CcnetSession *session) ccnet_rpc_get_groups, "get_groups", searpc_signature_objlist__string_int()); + searpc_server_register_function ("ccnet-threaded-rpcserver", + ccnet_rpc_list_all_departments, + "list_all_departments", + searpc_signature_objlist__void()); searpc_server_register_function ("ccnet-threaded-rpcserver", ccnet_rpc_get_all_groups, "get_all_groups", @@ -1200,6 +1204,18 @@ ccnet_rpc_get_groups (const char *username, int return_ancestors, GError **error return ret; } +GList * +ccnet_rpc_list_all_departments (GError **error) +{ + CcnetGroupManager *group_mgr = + ((CcnetServerSession *)session)->group_mgr; + GList *ret = NULL; + + ret = ccnet_group_manager_list_all_departments (group_mgr, error); + + return ret; +} + GList * ccnet_rpc_get_all_groups (int start, int limit, const char *source, GError **error) diff --git a/net/common/rpc-service.h b/net/common/rpc-service.h index 9f38f7f..632bad7 100644 --- a/net/common/rpc-service.h +++ b/net/common/rpc-service.h @@ -215,6 +215,9 @@ ccnet_rpc_quit_group (int group_id, const char *user_name, GError **error); GList * ccnet_rpc_get_groups (const char *username, int return_ancestors, GError **error); +GList * +ccnet_rpc_list_all_departments (GError **error); + GList * ccnet_rpc_get_all_groups (int start, int limit, const char *source, GError **error); diff --git a/net/server/group-mgr.c b/net/server/group-mgr.c index e08588a..2a561e7 100644 --- a/net/server/group-mgr.c +++ b/net/server/group-mgr.c @@ -1187,6 +1187,41 @@ ccnet_group_manager_get_top_groups (CcnetGroupManager *mgr, return g_list_reverse (ret); } +GList* +ccnet_group_manager_list_all_departments (CcnetGroupManager *mgr, + GError **error) +{ + CcnetDB *db = mgr->priv->db; + GList *ret = NULL; + GString *sql = g_string_new (""); + const char *table_name = mgr->priv->table_name; + int rc; + int db_type = ccnet_db_type(db); + + if (db_type == CCNET_DB_TYPE_PGSQL) { + g_string_printf (sql, "SELECT group_id, group_name, " + "creator_name, timestamp, type, " + "parent_group_id FROM \"%s\" " + "WHERE parent_group_id = -1 OR parent_group_id > 0 " + "ORDER BY group_id", table_name); + rc = ccnet_db_statement_foreach_row (db, sql->str, + get_all_ccnetgroups_cb, &ret, 0); + } else { + g_string_printf (sql, "SELECT `group_id`, `group_name`, " + "`creator_name`, `timestamp`, `type`, `parent_group_id` FROM `%s` " + "WHERE parent_group_id = -1 OR parent_group_id > 0 " + "ORDER BY group_id", table_name); + rc = ccnet_db_statement_foreach_row (db, sql->str, + get_all_ccnetgroups_cb, &ret, 0); + } + g_string_free (sql, TRUE); + + if (rc < 0) + return NULL; + + return g_list_reverse (ret); +} + GList* ccnet_group_manager_get_all_groups (CcnetGroupManager *mgr, int start, int limit, GError **error) diff --git a/net/server/group-mgr.h b/net/server/group-mgr.h index 64e2078..c98a92e 100644 --- a/net/server/group-mgr.h +++ b/net/server/group-mgr.h @@ -110,6 +110,10 @@ ccnet_group_manager_is_group_user (CcnetGroupManager *mgr, const char *user, gboolean in_structure); +GList* +ccnet_group_manager_list_all_departments (CcnetGroupManager *mgr, + GError **error); + GList* ccnet_group_manager_get_all_groups (CcnetGroupManager *mgr, int start, int limit, GError **error); diff --git a/python/ccnet/rpc.py b/python/ccnet/rpc.py index 2b4b837..6e4513e 100644 --- a/python/ccnet/rpc.py +++ b/python/ccnet/rpc.py @@ -299,6 +299,10 @@ class CcnetThreadedRpcClient(RpcClientBase): def get_groups(self, user_name, return_ancestors): pass + @searpc_func("objlist", []) + def list_all_departments(self): + pass + @searpc_func("objlist", ["int", "int", "string"]) def get_all_groups(self, start, limit, source): pass