From a8e5f0c724c074ec8c29100e1f726957f794fb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 27 Jun 2016 19:37:45 +0200 Subject: [PATCH] Version 15.233.2 --- swad_changelog.h | 3 +- swad_user.c | 135 +++++++++++++++-------------------------------- 2 files changed, 46 insertions(+), 92 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index bead21feb..d35045586 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -130,13 +130,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.233.1 (2016-06-27)" +#define Log_PLATFORM_VERSION "SWAD 15.233.2 (2016-06-27)" #define CSS_FILE "swad15.229.css" #define JS_FILE "swad15.226.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.233.2: Jun 27, 2015 Code refactoring in search of users. (203072 lines) Version 15.233.1: Jun 27, 2015 New restrictions in length of search string. (203117 lines) Version 15.233: Jun 27, 2015 Simplified search for users with a role. Now all users can be found. (203103 lines) Version 15.232.1: Jun 27, 2015 Fixed bug in search of any user (acceptation of enrollment was wrong). (203702 lines) diff --git a/swad_user.c b/swad_user.c index d7df818f8..3404b36b7 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3805,12 +3805,17 @@ void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope) static void Usr_SearchListUsrs (Rol_Role_t Role) { char Query[4*1024]; + const char *OrderQuery = "candidate_users.UsrCod=usr_data.UsrCod" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod"; /***** Build query *****/ // if Gbl.Scope.Current is course ==> 3 columns are retrieved: UsrCod, Sex, Accepted // else ==> 2 columns are retrieved: UsrCod, Sex - // Search is faster (aproximately x2) using temporary tables - + // Search is faster (aproximately x2) using a temporary table to store users found in the whole platform switch (Role) { case Rol_UNKNOWN: // Here Rol_UNKNOWN means any rol (role does not matter) @@ -3820,12 +3825,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) /* Search users from the whole platform */ sprintf (Query,"SELECT DISTINCT candidate_users.UsrCod,usr_data.Sex" " FROM candidate_users,usr_data" - " WHERE candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod"); + " WHERE %s", + OrderQuery); break; case Sco_SCOPE_CTY: /* Search users in courses from the current country */ @@ -3837,13 +3838,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod=institutions.InsCod" " AND institutions.CtyCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - Gbl.CurrentCty.Cty.CtyCod); + " AND %s", + Gbl.CurrentCty.Cty.CtyCod, + OrderQuery); break; case Sco_SCOPE_INS: /* Search users in courses from the current institution */ @@ -3854,13 +3851,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND courses.DegCod=degrees.DegCod" " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - Gbl.CurrentIns.Ins.InsCod); + " AND %s", + Gbl.CurrentIns.Ins.InsCod, + OrderQuery); break; case Sco_SCOPE_CTR: /* Search users in courses from the current centre */ @@ -3870,13 +3863,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod=degrees.DegCod" " AND degrees.CtrCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - Gbl.CurrentCtr.Ctr.CtrCod); + " AND %s", + Gbl.CurrentCtr.Ctr.CtrCod, + OrderQuery); break; case Sco_SCOPE_DEG: /* Search users in courses from the current degree */ @@ -3885,13 +3874,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - Gbl.CurrentDeg.Deg.DegCod); + " AND %s", + Gbl.CurrentDeg.Deg.DegCod, + OrderQuery); break; case Sco_SCOPE_CRS: /* Search users in courses from the current course */ @@ -3899,13 +3884,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " FROM candidate_users,crs_usr,usr_data" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.CrsCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - Gbl.CurrentCrs.Crs.CrsCod); + " AND %s", + Gbl.CurrentCrs.Crs.CrsCod, + OrderQuery); break; default: Lay_ShowErrorAndExit ("Wrong scope."); @@ -3917,12 +3898,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) sprintf (Query,"SELECT candidate_users.UsrCod,usr_data.Sex" " FROM candidate_users,usr_data" " WHERE candidate_users.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod"); + " AND %s", + OrderQuery); break; case Rol_STUDENT: case Rol_TEACHER: @@ -3939,13 +3916,9 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " FROM candidate_users,crs_usr,usr_data" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", - (unsigned) Role); + " AND %s", + (unsigned) Role, + OrderQuery); break; case Sco_SCOPE_CTY: /* Search users in courses from the current country */ @@ -3958,14 +3931,10 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod=institutions.InsCod" " AND institutions.CtyCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", + " AND %s", (unsigned) Role, - Gbl.CurrentCty.Cty.CtyCod); + Gbl.CurrentCty.Cty.CtyCod, + OrderQuery); break; case Sco_SCOPE_INS: /* Search users in courses from the current institution */ @@ -3977,14 +3946,10 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND courses.DegCod=degrees.DegCod" " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", + " AND %s", (unsigned) Role, - Gbl.CurrentIns.Ins.InsCod); + Gbl.CurrentIns.Ins.InsCod, + OrderQuery); break; case Sco_SCOPE_CTR: /* Search users in courses from the current centre */ @@ -3995,14 +3960,10 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod=degrees.DegCod" " AND degrees.CtrCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", + " AND %s", (unsigned) Role, - Gbl.CurrentCtr.Ctr.CtrCod); + Gbl.CurrentCtr.Ctr.CtrCod, + OrderQuery); break; case Sco_SCOPE_DEG: /* Search users in courses from the current degree */ @@ -4012,14 +3973,10 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", + " AND %s", (unsigned) Role, - Gbl.CurrentDeg.Deg.DegCod); + Gbl.CurrentDeg.Deg.DegCod, + OrderQuery); break; case Sco_SCOPE_CRS: /* Search users in courses from the current course */ @@ -4028,14 +3985,10 @@ static void Usr_SearchListUsrs (Rol_Role_t Role) " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod='%ld'" - " AND candidate_users.UsrCod=usr_data.UsrCod" - " ORDER BY " - "usr_data.Surname1," - "usr_data.Surname2," - "usr_data.FirstName," - "usr_data.UsrCod", + " AND %s", (unsigned) Role, - Gbl.CurrentCrs.Crs.CrsCod); + Gbl.CurrentCrs.Crs.CrsCod, + OrderQuery); break; default: Lay_ShowErrorAndExit ("Wrong scope.");