diff --git a/swad_changelog.h b/swad_changelog.h index 79204fa60..9d1045d05 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 21.52.2 (2021-11-06)" +#define Log_PLATFORM_VERSION "SWAD 21.52.3 (2021-11-06)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 21.52.3: Nov 06, 2021 Queries moved to module swad_user_database. (321894 lines) Version 21.52.2: Nov 06, 2021 Query refactoring related to SELECT DISTINCT and UNION. (321899 lines) Version 21.52.1: Nov 06, 2021 Fixed database query in departments. (321828 lines) Version 21.52: Nov 05, 2021 Changed SELECT COUNT to SELECT EXISTS in some queries. (321833 lines) diff --git a/swad_user.c b/swad_user.c index face65156..8011cd211 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3768,100 +3768,10 @@ static void Usr_GetAdmsLst (HieLvl_Level_t Scope) static void Usr_GetGstsLst (HieLvl_Level_t Scope) { - const char *QueryFields = - "UsrCod," - "EncryptedUsrCod," - "Password," - "Surname1," - "Surname2," - "FirstName," - "Sex," - "Photo," - "PhotoVisibility," - "CtyCod," - "InsCod"; - /* - row[ 0]: usr_data.UsrCod - row[ 1]: usr_data.EncryptedUsrCod - row[ 2]: usr_data.Password - row[ 3]: usr_data.Surname1 - row[ 4]: usr_data.Surname2 - row[ 5]: usr_data.FirstName - row[ 6]: usr_data.Sex - row[ 7]: usr_data.Photo - row[ 8]: usr_data.PhotoVisibility - row[ 9]: usr_data.CtyCod - row[10]: usr_data.InsCod - */ char *Query = NULL; /***** Build query *****/ - switch (Scope) - { - case HieLvl_SYS: - DB_BuildQuery (&Query, - "SELECT %s" - " FROM usr_data" - " WHERE UsrCod NOT IN" - " (SELECT UsrCod" - " FROM crs_users)" - " ORDER BY Surname1," - "Surname2," - "FirstName," - "UsrCod", - QueryFields); - break; - case HieLvl_CTY: - DB_BuildQuery (&Query, - "SELECT %s" - " FROM usr_data" - " WHERE (CtyCod=%ld" - " OR" - " InsCtyCod=%ld)" - " AND UsrCod NOT IN" - " (SELECT UsrCod" - " FROM crs_users)" - " ORDER BY Surname1," - "Surname2," - "FirstName," - "UsrCod", - QueryFields, - Gbl.Hierarchy.Cty.CtyCod, - Gbl.Hierarchy.Cty.CtyCod); - break; - case HieLvl_INS: - DB_BuildQuery (&Query, - "SELECT %s" - " FROM usr_data" - " WHERE InsCod=%ld" - " AND UsrCod NOT IN" - " (SELECT UsrCod" - " FROM crs_users)" - " ORDER BY Surname1," - "Surname2," - "FirstName," - "UsrCod", - QueryFields, - Gbl.Hierarchy.Ins.InsCod); - break; - case HieLvl_CTR: - DB_BuildQuery (&Query, - "SELECT %s" - " FROM usr_data" - " WHERE CtrCod=%ld" - " AND UsrCod NOT IN" - " (SELECT UsrCod" - " FROM crs_users)" - " ORDER BY Surname1," - "Surname2," - "FirstName," - "UsrCod", - QueryFields, - Gbl.Hierarchy.Ctr.CtrCod); - break; - default: // not aplicable - return; - } + Usr_DB_BuildQueryToGetGstsLst (Scope,&Query); /***** Get list of students from database *****/ Usr_GetListUsrsFromQuery (Query,Rol_GST,Scope); diff --git a/swad_user_database.c b/swad_user_database.c index 5d7f9c20c..7b13ff427 100644 --- a/swad_user_database.c +++ b/swad_user_database.c @@ -205,6 +205,92 @@ bool Usr_DB_FindStrInUsrsNames (const char *Str) Str); } +/*****************************************************************************/ +/************************ Get list with data of guests ***********************/ +/*****************************************************************************/ + +void Usr_DB_BuildQueryToGetGstsLst (HieLvl_Level_t Scope,char **Query) + { + static const char *QueryFields = + "UsrCod," // row[ 0] + "EncryptedUsrCod," // row[ 1] + "Password," // row[ 2] + "Surname1," // row[ 3] + "Surname2," // row[ 4] + "FirstName," // row[ 5] + "Sex," // row[ 6] + "Photo," // row[ 7] + "PhotoVisibility," // row[ 8] + "CtyCod," // row[ 9] + "InsCod"; // row[10] + static const char *OrderBySubQuery = + " ORDER BY Surname1," + "Surname2," + "FirstName," + "UsrCod"; + + /***** Build query *****/ + switch (Scope) + { + case HieLvl_SYS: + DB_BuildQuery (Query, + "SELECT %s" + " FROM usr_data" + " WHERE UsrCod NOT IN" + " (SELECT UsrCod" + " FROM crs_users)" + "%s", + QueryFields, + OrderBySubQuery); + return; + case HieLvl_CTY: + DB_BuildQuery (Query, + "SELECT %s" + " FROM usr_data" + " WHERE (CtyCod=%ld" + " OR" + " InsCtyCod=%ld)" + " AND UsrCod NOT IN" + " (SELECT UsrCod" + " FROM crs_users)" + "%s", + QueryFields, + Gbl.Hierarchy.Cty.CtyCod, + Gbl.Hierarchy.Cty.CtyCod, + OrderBySubQuery); + return; + case HieLvl_INS: + DB_BuildQuery (Query, + "SELECT %s" + " FROM usr_data" + " WHERE InsCod=%ld" + " AND UsrCod NOT IN" + " (SELECT UsrCod" + " FROM crs_users)" + "%s", + QueryFields, + Gbl.Hierarchy.Ins.InsCod, + OrderBySubQuery); + return; + case HieLvl_CTR: + DB_BuildQuery (Query, + "SELECT %s" + " FROM usr_data" + " WHERE CtrCod=%ld" + " AND UsrCod NOT IN" + " (SELECT UsrCod" + " FROM crs_users)" + "%s", + QueryFields, + Gbl.Hierarchy.Ctr.CtrCod, + OrderBySubQuery); + return; + default: // not aplicable + Err_WrongScopeExit (); + return; // Not reached + } + } + /*****************************************************************************/ /****** Build query to get the user's codes of all students of a degree ******/ /*****************************************************************************/ diff --git a/swad_user_database.h b/swad_user_database.h index 229f8cadc..dbada19ab 100644 --- a/swad_user_database.h +++ b/swad_user_database.h @@ -68,6 +68,7 @@ void Usr_DB_UpdateMyLastWhatToSearch (void); bool Usr_DB_ChkIfUsrCodExists (long UsrCod); long Usr_DB_GetUsrCodFromEncryptedUsrCod (const char EncryptedUsrCod[Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]); bool Usr_DB_FindStrInUsrsNames (const char *Str); +void Usr_DB_BuildQueryToGetGstsLst (HieLvl_Level_t Scope,char **Query); void Usr_DB_BuildQueryToGetUnorderedStdsCodesInDeg (long DegCod,char **Query); unsigned Usr_DB_GetNumUsrsWhoChoseAnOption (const char *SubQuery); unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess);