GList* ccnet_user_manager_get_emailusers (CcnetUserManager *manager, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; char sql[256]; #ifdef HAVE_LDAP /* Assuming admin user is in LDAP database too. * is_staff is not set here. */ if (manager->use_ldap) return ldap_list_users (manager, "*"); #endif if (start == -1 && limit == -1) snprintf (sql, 256, "SELECT * FROM EmailUser"); else snprintf (sql, 256, "SELECT * FROM EmailUser LIMIT %d, %d", start, limit); if (ccnet_db_foreach_selected_row (db, sql, get_emailusers_cb, &ret) < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
CcnetEmailUser* ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email) { CcnetDB *db = manager->priv->db; char *sql; CcnetEmailUser *emailuser = NULL; char *email_down; sql = "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email=?"; if (ccnet_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, 1, "string", email) > 0) { char *role = ccnet_user_manager_get_role_emailuser (manager, email); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } return emailuser; } email_down = g_ascii_strdown (email, strlen(email)); if (ccnet_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, 1, "string", email_down) > 0) { char *role = ccnet_user_manager_get_role_emailuser(manager, email_down); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } g_free (email_down); return emailuser; } g_free (email_down); #ifdef HAVE_LDAP if (manager->use_ldap) { GList *users, *ptr; users = ldap_list_users (manager, email, -1, -1); if (!users) return NULL; emailuser = users->data; /* Free all except the first user. */ for (ptr = users->next; ptr; ptr = ptr->next) g_object_unref (ptr->data); g_list_free (users); char *role = ccnet_user_manager_get_role_emailuser(manager, email); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } return emailuser; } #endif return NULL; }
GList* ccnet_user_manager_search_emailusers (CcnetUserManager *manager, const char *email_patt, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) { char *ldap_patt = db_pattern_to_ldap_pattern (email_patt); ret = ldap_list_users (manager, ldap_patt, -1, -1); g_free (ldap_patt); } #endif int rc; if (start == -1 && limit == -1) rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "WHERE t1.Email LIKE ? " "ORDER BY t1.id", get_emailusers_cb, &ret, 1, "string", email_patt); else rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "WHERE t1.Email LIKE ? " "ORDER BY t1.id LIMIT ? OFFSET ?", get_emailusers_cb, &ret, 3, "string", email_patt, "int", limit, "int", start); if (rc < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
GList* ccnet_user_manager_get_emailusers (CcnetUserManager *manager, const char *source, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; #ifdef HAVE_LDAP if (manager->use_ldap && g_strcmp0 (source, "LDAP") == 0) { GList *users; users = ldap_list_users (manager, "*", start, limit); return g_list_reverse (users); } #endif if (g_strcmp0 (source, "DB") != 0) return NULL; int rc; if (start == -1 && limit == -1) rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email ", get_emailusers_cb, &ret, 0); else rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "ORDER BY t1.id LIMIT ? OFFSET ?", get_emailusers_cb, &ret, 2, "int", limit, "int", start); if (rc < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
CcnetEmailUser* ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email) { CcnetDB *db = manager->priv->db; char sql[512]; CcnetEmailUser *emailuser = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) { GList *users, *ptr; /* Lookup admin first. */ snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email='%s'", email); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) > 0) { if (ccnet_email_user_get_is_staff(emailuser)) return emailuser; g_object_unref (emailuser); } users = ldap_list_users (manager, email); if (!users) return NULL; emailuser = users->data; /* Free all except the first user. */ for (ptr = users->next; ptr; ptr = ptr->next) g_object_unref (ptr->data); g_list_free (users); return emailuser; } #endif snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email='%s'", email); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) < 0) return NULL; return emailuser; }