Take advantage of new maps query
This commit is contained in:
@@ -354,67 +354,18 @@ int modbGroupDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, struct group_t *group)
|
||||||
int with_deleted)
|
|
||||||
{
|
{
|
||||||
char *u_table, *ug_table;
|
char *table;
|
||||||
size_t u_len, ug_len;
|
size_t table_len;
|
||||||
|
int64_t res;
|
||||||
|
|
||||||
char *qry;
|
modbTableName(&table, &table_len, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE));
|
||||||
size_t qry_len;
|
res = getIdMaps(sconn, table, table_len, "group_id", "user_id",
|
||||||
uint64_t qry_ret;
|
group->id, &group->n_members, &group->member_ids);
|
||||||
|
modbFreeTableName(&table);
|
||||||
|
|
||||||
str_builder *sb;
|
return res <= 0 ? (int)res : 1;
|
||||||
where_builder *wb;
|
|
||||||
|
|
||||||
column_data **col_data;
|
|
||||||
size_t n_cols;
|
|
||||||
|
|
||||||
|
|
||||||
if ((sb = strbld_create()) == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
modbTableName(&u_table, &u_len, modb, USERS_TABLE, STR_LEN(USERS_TABLE));
|
|
||||||
modbTableName(&ug_table, &ug_len, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE));
|
|
||||||
|
|
||||||
strbld_str(sb, "SELECT ", 0);
|
|
||||||
escapeColumnName_sb(sb, 0, 0, "user_id", 0);
|
|
||||||
strbld_str(sb, " FROM ", 0);
|
|
||||||
escapeTableName_sb(sb, ug_table, ug_len);
|
|
||||||
joinStr_sb(sb, " LEFT", 5, 1, u_table, u_len, "id", 2, ug_table, ug_len, "user_id", 8);
|
|
||||||
wb = where(0, "group_id", EQ, TYPE_ID, 1, group->id);
|
|
||||||
if (!with_deleted) {
|
|
||||||
wb = whereAnd(wb, where(u_table, "deleted", IS_NULL, TYPE_RAW, 0));
|
|
||||||
}
|
|
||||||
compileWhereBuilder_sb(sb, wb, 1);
|
|
||||||
|
|
||||||
modbFreeTableName(&u_table);
|
|
||||||
modbFreeTableName(&ug_table);
|
|
||||||
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qry_ret = tableQuery(sconn, qry, qry_len, 0, &col_data, &n_cols);
|
|
||||||
free(qry);
|
|
||||||
|
|
||||||
// Query failed
|
|
||||||
if (qry_ret == (uint64_t)-1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero row result
|
|
||||||
if (qry_ret == 0) {
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
group->member_ids = (*col_data)->data.ptr_uint32;
|
|
||||||
group->n_members = (*col_data)->n_values;
|
|
||||||
(*col_data)->data.ptr_uint32 = 0;
|
|
||||||
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
||||||
int with_deleted)
|
int with_deleted)
|
||||||
@@ -422,21 +373,34 @@ int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, struct group_t *grou
|
|||||||
int ret;
|
int ret;
|
||||||
size_t idx;
|
size_t idx;
|
||||||
|
|
||||||
ret = modbFetchGroupUserIds(sconn, modb, group, with_deleted);
|
ret = modbFetchGroupUserIds(sconn, modb, group);
|
||||||
if (ret != 1) {
|
if (ret != 1) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
group->members = allocUsers(group->n_members);
|
group->members = allocUsers(group->n_members);
|
||||||
if (group->members == 0) {
|
if (group->members == 0) {
|
||||||
ret = -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (idx = 0; idx < group->n_members; idx++) {
|
for (idx = 0; idx < group->n_members; idx++) {
|
||||||
if (modbUserById(sconn, modb, *(group->member_ids + idx), 0, (group->members + idx)) != 1) {
|
if (modbUserById(
|
||||||
|
sconn, modb, *(group->member_ids + idx), 0, (group->members + idx)
|
||||||
|
) != 1) {
|
||||||
freeUsers(&group->members, group->n_members);
|
freeUsers(&group->members, group->n_members);
|
||||||
group->members = 0;
|
return -1;
|
||||||
ret = -1;
|
}
|
||||||
|
if (!with_deleted && (*(group->members + idx))->deleted_on != 0) {
|
||||||
|
freeUser((group->members + idx));
|
||||||
|
group->n_members--;
|
||||||
|
if (group->n_members == 0) {
|
||||||
|
free(group->members);
|
||||||
|
free(group->member_ids);
|
||||||
|
group->member_ids = 0;
|
||||||
|
} else {
|
||||||
|
memmove(group->member_ids + idx, group->member_ids + idx + 1, group->n_members - idx);
|
||||||
|
}
|
||||||
|
idx--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,8 +43,7 @@ int64_t modbGroupUpdate(stored_conn *sconn, modb_ref *modb, unsigned int id,
|
|||||||
int modbGroupDelete(stored_conn *sconn, modb_ref *modb, unsigned int id);
|
int modbGroupDelete(stored_conn *sconn, modb_ref *modb, unsigned int id);
|
||||||
int modbGroupDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id);
|
int modbGroupDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id);
|
||||||
|
|
||||||
int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, struct group_t *group);
|
||||||
int with_deleted);
|
|
||||||
int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, struct group_t *group,
|
||||||
int with_deleted);
|
int with_deleted);
|
||||||
|
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ int modbMetadataListByGroupId(stored_conn *sconn, modb_ref *modb, unsigned int g
|
|||||||
where_builder *wb = 0;
|
where_builder *wb = 0;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (modbFetchGroupMetadataIds(sconn, modb, group_id, with_deleted, &ids, &n_ids) < 0) {
|
if (modbFetchGroupMetadataIds(sconn, modb, group_id, &ids, &n_ids) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (ids == 0) {
|
if (ids == 0) {
|
||||||
@@ -277,10 +277,11 @@ int modbMetadataListByGroupId(stored_conn *sconn, modb_ref *modb, unsigned int g
|
|||||||
for (idx = 0; idx < n_ids; idx++) {
|
for (idx = 0; idx < n_ids; idx++) {
|
||||||
setWhereValue(wb, TYPE_ID, 1, *(ids + idx));
|
setWhereValue(wb, TYPE_ID, 1, *(ids + idx));
|
||||||
}
|
}
|
||||||
res = doMetadataListQuery(sconn, modb, wb, metadata_list, n_metadatas);
|
if (!with_deleted) {
|
||||||
if (wb != 0) {
|
wb = whereAnd(wb, where(0, "deleted", IS_NULL, TYPE_RAW, 0));
|
||||||
freeWhereBuilder(&wb);
|
|
||||||
}
|
}
|
||||||
|
res = doMetadataListQuery(sconn, modb, wb, metadata_list, n_metadatas);
|
||||||
|
freeWhereBuilder(&wb);
|
||||||
|
|
||||||
free(ids);
|
free(ids);
|
||||||
return res;
|
return res;
|
||||||
@@ -526,64 +527,18 @@ int64_t modbFetchMetadataExtended(stored_conn *sconn, modb_ref *modb, struct met
|
|||||||
|
|
||||||
// MODB Metadata -> Groups
|
// MODB Metadata -> Groups
|
||||||
int modbFetchMetadataGroupIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchMetadataGroupIds(stored_conn *sconn, modb_ref *modb,
|
||||||
struct metadata_t *metadata, int with_deleted)
|
struct metadata_t *metadata)
|
||||||
{
|
{
|
||||||
char *g_table, *mg_table;
|
char *table;
|
||||||
size_t g_len, mg_len;
|
size_t table_len;
|
||||||
char *qry;
|
int64_t res;
|
||||||
size_t qry_len;
|
|
||||||
uint64_t qry_ret;
|
|
||||||
|
|
||||||
str_builder *sb;
|
modbTableName(&table, &table_len, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE));
|
||||||
where_builder *wb;
|
res = getIdMaps(sconn, table, table_len, "mdo_id", "group_id",
|
||||||
|
metadata->id, &metadata->n_groups, &metadata->group_ids);
|
||||||
|
modbFreeTableName(&table);
|
||||||
|
|
||||||
column_data **col_data;
|
return res <= 0 ? (int)res : 1;
|
||||||
size_t n_cols;
|
|
||||||
|
|
||||||
if ((sb = strbld_create()) == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
modbTableName(&g_table, &g_len, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE));
|
|
||||||
modbTableName(&mg_table, &mg_len, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE));
|
|
||||||
|
|
||||||
strbld_str(sb, "SELECT ", 0);
|
|
||||||
escapeColumnName_sb(sb, 0, 0, "group_id", 0);
|
|
||||||
strbld_str(sb, " FROM ", 0);
|
|
||||||
escapeTableName_sb(sb, mg_table, mg_len);
|
|
||||||
joinStr_sb(sb, " LEFT", 5, 1, g_table, g_len, "id", 2, mg_table, mg_len, "group_id", 8);
|
|
||||||
wb = where(0, "mdo_id", EQ, TYPE_ID, 1, metadata->id);
|
|
||||||
if (!with_deleted) {
|
|
||||||
wb = whereAnd(wb, where(g_table, "deleted", IS_NULL, TYPE_RAW, 0));
|
|
||||||
}
|
|
||||||
compileWhereBuilder_sb(sb, wb, 1);
|
|
||||||
|
|
||||||
modbFreeTableName(&g_table);
|
|
||||||
modbFreeTableName(&mg_table);
|
|
||||||
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qry_ret = tableQuery(sconn, qry, qry_len, 0, &col_data, &n_cols);
|
|
||||||
free(qry);
|
|
||||||
|
|
||||||
// Query failed
|
|
||||||
if (qry_ret == (uint64_t)-1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero row result
|
|
||||||
if (qry_ret == 0) {
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
metadata->group_ids = (*col_data)->data.ptr_uint32;
|
|
||||||
metadata->n_groups = (*col_data)->n_values;
|
|
||||||
(*col_data)->data.ptr_uint32 = 0;
|
|
||||||
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_t *metadata,
|
int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_t *metadata,
|
||||||
int with_deleted)
|
int with_deleted)
|
||||||
@@ -591,7 +546,7 @@ int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_
|
|||||||
int ret;
|
int ret;
|
||||||
size_t idx;
|
size_t idx;
|
||||||
|
|
||||||
ret = modbFetchMetadataGroupIds(sconn, modb, metadata, with_deleted);
|
ret = modbFetchMetadataGroupIds(sconn, modb, metadata);
|
||||||
if (ret != 1) {
|
if (ret != 1) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -608,6 +563,18 @@ int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_
|
|||||||
freeGroups(&metadata->groups, metadata->n_groups);
|
freeGroups(&metadata->groups, metadata->n_groups);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (!with_deleted && (*(metadata->groups + idx))->deleted_on != 0) {
|
||||||
|
freeGroup((metadata->groups + idx));
|
||||||
|
metadata->n_groups--;
|
||||||
|
if (metadata->n_groups == 0) {
|
||||||
|
free(metadata->groups);
|
||||||
|
free(metadata->group_ids);
|
||||||
|
metadata->group_ids = 0;
|
||||||
|
} else {
|
||||||
|
memmove(metadata->group_ids + idx, metadata->group_ids + idx + 1, metadata->n_groups - idx);
|
||||||
|
}
|
||||||
|
idx--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -691,63 +658,15 @@ int modbUnlink_Metadata_Group(stored_conn *sconn, modb_ref *modb,
|
|||||||
|
|
||||||
// MODB Group -> Metadatas
|
// MODB Group -> Metadatas
|
||||||
int modbFetchGroupMetadataIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchGroupMetadataIds(stored_conn *sconn, modb_ref *modb,
|
||||||
unsigned int group_id, int with_deleted,
|
unsigned int group_id, unsigned int **metadata_ids, size_t *n_ids)
|
||||||
unsigned int **metadata_ids, size_t *n_ids)
|
|
||||||
{
|
{
|
||||||
char *mg_table, *m_table;
|
char *table;
|
||||||
size_t mg_len, m_len;
|
size_t table_len;
|
||||||
char *qry;
|
int64_t res;
|
||||||
size_t qry_len;
|
|
||||||
uint64_t qry_ret;
|
|
||||||
|
|
||||||
str_builder *sb;
|
modbTableName(&table, &table_len, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE));
|
||||||
where_builder *wb;
|
res = getIdMaps(sconn, table, table_len, "group_id", "mdo_id", group_id, n_ids, metadata_ids);
|
||||||
|
modbFreeTableName(&table);
|
||||||
|
|
||||||
column_data **col_data;
|
return res <= 0 ? (int)res : 1;
|
||||||
size_t n_cols;
|
|
||||||
|
|
||||||
if ((sb = strbld_create()) == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
modbTableName(&m_table, &m_len, modb, METADATA_TABLE, STR_LEN(METADATA_TABLE));
|
|
||||||
modbTableName(&mg_table, &mg_len, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE));
|
|
||||||
|
|
||||||
strbld_str(sb, "SELECT ", 7);
|
|
||||||
escapeColumnName_sb(sb, mg_table, mg_len, "mdo_id", 6);
|
|
||||||
strbld_str(sb, " FROM ", 6);
|
|
||||||
escapeTableName_sb(sb, mg_table, mg_len);
|
|
||||||
joinStr_sb(sb, " LEFT", 5, 1, m_table, m_len, "mdo_id", 6, mg_table, mg_len, "mdo_id", 6);
|
|
||||||
wb = where(0, "group_id", EQ, TYPE_ID, 1, group_id);
|
|
||||||
if (!with_deleted) {
|
|
||||||
wb = whereAnd(wb, where(m_table, "deleted", IS_NULL, TYPE_RAW, 0));
|
|
||||||
}
|
|
||||||
compileWhereBuilder_sb(sb, wb, 1);
|
|
||||||
|
|
||||||
modbFreeTableName(&mg_table);
|
|
||||||
modbFreeTableName(&m_table);
|
|
||||||
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qry_ret = tableQuery(sconn, qry, qry_len, 0, &col_data, &n_cols);
|
|
||||||
free(qry);
|
|
||||||
|
|
||||||
// Query failed
|
|
||||||
if (qry_ret == (uint64_t)-1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero row result
|
|
||||||
if (qry_ret == 0) {
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
*metadata_ids = (*col_data)->data.ptr_uint32;
|
|
||||||
*n_ids = (*col_data)->n_values;
|
|
||||||
(*col_data)->data.ptr_uint32 = 0;
|
|
||||||
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ int64_t modbFetchMetadataExtended(stored_conn *sconn, modb_ref *modb, struct met
|
|||||||
|
|
||||||
// MODB Metadata -> Groups
|
// MODB Metadata -> Groups
|
||||||
int modbFetchMetadataGroupIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchMetadataGroupIds(stored_conn *sconn, modb_ref *modb,
|
||||||
struct metadata_t *metadata, int with_deleted);
|
struct metadata_t *metadata);
|
||||||
int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_t *metadata,
|
int modbFetchMetadataGroups(stored_conn *sconn, modb_ref *modb, struct metadata_t *metadata,
|
||||||
int with_deleted);
|
int with_deleted);
|
||||||
|
|
||||||
@@ -97,7 +97,6 @@ int modbUnlink_Metadata_Group(stored_conn *sconn, modb_ref *modb,
|
|||||||
|
|
||||||
// MODB Group -> Metadatas
|
// MODB Group -> Metadatas
|
||||||
int modbFetchGroupMetadataIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchGroupMetadataIds(stored_conn *sconn, modb_ref *modb,
|
||||||
unsigned int group_id, int with_deleted,
|
unsigned int group_id, unsigned int **metadata_ids, size_t *n_ids);
|
||||||
unsigned int **metadata_ids, size_t *n_ids);
|
|
||||||
|
|
||||||
#endif // H__MODB_METADATA__
|
#endif // H__MODB_METADATA__
|
||||||
|
|||||||
@@ -396,72 +396,25 @@ int modbUserDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb, struct user_t *user)
|
||||||
struct user_t *user, int with_deleted)
|
|
||||||
{
|
{
|
||||||
char *g_table, *ug_table;
|
char *table;
|
||||||
size_t g_len, ug_len;
|
size_t table_len;
|
||||||
char *qry;
|
int64_t res;
|
||||||
size_t qry_len;
|
|
||||||
uint64_t qry_ret;
|
|
||||||
|
|
||||||
str_builder *sb;
|
modbTableName(&table, &table_len, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE));
|
||||||
where_builder *wb;
|
res = getIdMaps(sconn, table, table_len, "user_id", "group_id",
|
||||||
|
user->id, &user->n_groups, &user->group_ids);
|
||||||
|
modbFreeTableName(&table);
|
||||||
|
|
||||||
column_data **col_data;
|
return res <= 0 ? (int)res : 1;
|
||||||
size_t n_cols;
|
|
||||||
|
|
||||||
if ((sb = strbld_create()) == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
modbTableName(&g_table, &g_len, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE));
|
|
||||||
modbTableName(&ug_table, &ug_len, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE));
|
|
||||||
|
|
||||||
strbld_str(sb, "SELECT ", 0);
|
|
||||||
escapeColumnName_sb(sb, 0, 0, "group_id", 0);
|
|
||||||
strbld_str(sb, " FROM ", 0);
|
|
||||||
escapeTableName_sb(sb, ug_table, ug_len);
|
|
||||||
joinStr_sb(sb, " LEFT", 5, 1, g_table, g_len, "id", 2, ug_table, ug_len, "group_id", 8);
|
|
||||||
wb = where(0, "user_id", EQ, TYPE_ID, 1, user->id);
|
|
||||||
if (!with_deleted) {
|
|
||||||
wb = whereAnd(wb, where(g_table, "deleted", IS_NULL, TYPE_RAW, 0));
|
|
||||||
}
|
|
||||||
compileWhereBuilder_sb(sb, wb, 1);
|
|
||||||
|
|
||||||
modbFreeTableName(&g_table);
|
|
||||||
modbFreeTableName(&ug_table);
|
|
||||||
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qry_ret = tableQuery(sconn, qry, qry_len, 0, &col_data, &n_cols);
|
|
||||||
free(qry);
|
|
||||||
|
|
||||||
// Query failed
|
|
||||||
if (qry_ret == (uint64_t)-1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero row result
|
|
||||||
if (qry_ret == 0) {
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
user->group_ids = (*col_data)->data.ptr_uint32;
|
|
||||||
user->n_groups = (*col_data)->n_values;
|
|
||||||
(*col_data)->data.ptr_uint32 = 0;
|
|
||||||
|
|
||||||
freeColumns(col_data, n_cols);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, struct user_t *user, int with_deleted)
|
int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, struct user_t *user, int with_deleted)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
size_t idx;
|
size_t idx;
|
||||||
|
|
||||||
ret = modbFetchUserGroupIds(sconn, modb, user, with_deleted);
|
ret = modbFetchUserGroupIds(sconn, modb, user);
|
||||||
if (ret != 1) {
|
if (ret != 1) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -472,10 +425,24 @@ int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, struct user_t *user,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (idx = 0; idx < user->n_groups; idx++) {
|
for (idx = 0; idx < user->n_groups; idx++) {
|
||||||
if (modbGroupById(sconn, modb, *(user->group_ids + idx), 0, (user->groups + idx)) != 1) {
|
if (modbGroupById(
|
||||||
|
sconn, modb, *(user->group_ids + idx), 0, (user->groups + idx)
|
||||||
|
) != 1) {
|
||||||
freeGroups(&user->groups, user->n_groups);
|
freeGroups(&user->groups, user->n_groups);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (!with_deleted && (*(user->groups + idx))->deleted_on != 0) {
|
||||||
|
freeGroup((user->groups + idx));
|
||||||
|
user->n_groups--;
|
||||||
|
if (user->n_groups == 0) {
|
||||||
|
free(user->groups);
|
||||||
|
free(user->group_ids);
|
||||||
|
user->group_ids = 0;
|
||||||
|
} else {
|
||||||
|
memmove(user->group_ids + idx, user->group_ids + idx + 1, user->n_groups - idx);
|
||||||
|
}
|
||||||
|
idx--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ int modbUserDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id);
|
|||||||
|
|
||||||
|
|
||||||
// MODB Users -> Groups
|
// MODB Users -> Groups
|
||||||
int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb,
|
int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb, struct user_t *user);
|
||||||
struct user_t *user, int with_deleted);
|
|
||||||
int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, struct user_t *user, int with_deleted);
|
int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, struct user_t *user, int with_deleted);
|
||||||
|
|
||||||
int modbSyncUserGroups(stored_conn *sconn, modb_ref *modb,
|
int modbSyncUserGroups(stored_conn *sconn, modb_ref *modb,
|
||||||
|
|||||||
Reference in New Issue
Block a user