1
0
mirror of https://github.com/haiwen/ccnet-server.git synced 2025-05-12 00:54:20 +00:00

Merge pull request from haiwen/get_groups_members

Add rpc get_groups_members().
This commit is contained in:
Jiaqiang Xu 2018-07-19 17:59:01 +08:00 committed by GitHub
commit 57253be4c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 89 additions and 0 deletions

View File

@ -300,6 +300,10 @@ ccnet_start_rpc(CcnetSession *session)
ccnet_rpc_get_descendants_groups,
"get_descendants_groups",
searpc_signature_objlist__int());
searpc_server_register_function ("ccnet-threaded-rpcserver",
ccnet_rpc_get_groups_members,
"get_groups_members",
searpc_signature_objlist__string());
searpc_server_register_function ("ccnet-threaded-rpcserver",
ccnet_rpc_create_org,
@ -1674,4 +1678,16 @@ ccnet_rpc_get_primary_id (const char *email, GError **error)
return ccnet_user_manager_get_primary_id (user_mgr, email);
}
GList *
ccnet_rpc_get_groups_members (const char *group_ids, GError **error)
{
if (!group_ids || g_strcmp0(group_ids, "") == 0) {
g_set_error (error, CCNET_DOMAIN, CCNET_ERR_INTERNAL, "Bad arguments");
return NULL;
}
CcnetGroupManager *group_mgr = ((CcnetServerSession *)session)->group_mgr;
return ccnet_group_manager_get_groups_members (group_mgr, group_ids, error);
}
#endif /* CCNET_SERVER */

View File

@ -347,4 +347,7 @@ ccnet_rpc_login_relay (const char *relay_id, const char *email,
int
ccnet_rpc_logout_relay (const char *relay_id, GError **error);
GList *
ccnet_rpc_get_groups_members (const char *group_ids, GError **error);
#endif /* RPC_SERVICE_H */

View File

@ -13,6 +13,8 @@
#include <glib.h>
#include <glib/gstdio.h>
#include <jansson.h>
#include "ccnet-session-base.h"
#include "processor.h"

View File

@ -1312,3 +1312,64 @@ ccnet_group_manager_search_groups (CcnetGroupManager *mgr,
return g_list_reverse (ret);
}
static gboolean
get_groups_members_cb (CcnetDBRow *row, void *data)
{
GList **users = data;
const char *user = ccnet_db_row_get_column_text (row, 0);
char *user_l = g_ascii_strdown (user, -1);
CcnetGroupUser *group_user = g_object_new (CCNET_TYPE_GROUP_USER,
"user_name", user_l,
NULL);
g_free (user_l);
*users = g_list_append(*users, group_user);
return TRUE;
}
/* group_ids is json format: "[id1, id2, id3, ...]" */
GList *
ccnet_group_manager_get_groups_members (CcnetGroupManager *mgr, const char *group_ids,
GError **error)
{
CcnetDB *db = mgr->priv->db;
GList *ret = NULL;
GString *sql = g_string_new ("");
int i, group_id;
json_t *j_array = NULL, *j_obj;
json_error_t j_error;
g_string_printf (sql, "SELECT DISTINCT user_name FROM GroupUser WHERE group_id IN (");
j_array = json_loadb (group_ids, strlen(group_ids), 0, &j_error);
if (!j_array) {
g_set_error (error, CCNET_DOMAIN, 0, "Bad args.");
g_string_free (sql, TRUE);
return NULL;
}
size_t id_num = json_array_size (j_array);
for (i = 0; i < id_num; i++) {
j_obj = json_array_get (j_array, i);
group_id = json_integer_value (j_obj);
if (group_id <= 0) {
g_set_error (error, CCNET_DOMAIN, 0, "Bad args.");
g_string_free (sql, TRUE);
json_decref (j_array);
return NULL;
}
g_string_append_printf (sql, "%d", group_id);
if (i + 1 < id_num)
g_string_append_printf (sql, ",");
}
g_string_append_printf (sql, ")");
json_decref (j_array);
if (ccnet_db_statement_foreach_row (db, sql->str, get_groups_members_cb, &ret, 0) < 0)
ccnet_warning("Failed to get groups members for group [%s].\n", group_ids);
g_string_free (sql, TRUE);
return ret;
}

View File

@ -138,5 +138,8 @@ ccnet_group_manager_get_descendants_groups (CcnetGroupManager *mgr, int group_id
GList *
ccnet_group_manager_get_ancestor_groups (CcnetGroupManager *mgr, int group_id);
GList *
ccnet_group_manager_get_groups_members (CcnetGroupManager *mgr, const char *group_ids,
GError **error);
#endif /* GROUP_MGR_H */

View File

@ -446,3 +446,7 @@ class CcnetThreadedRpcClient(RpcClientBase):
@searpc_func("string", ["string"])
def get_primary_id(self, email):
pass
@searpc_func("objlist", ["string"])
def get_groups_members(self, group_ids):
pass