Version 15.229

This commit is contained in:
Antonio Cañas Vargas 2016-06-23 19:02:57 +02:00
parent c5f0a6fcac
commit 5e4e2db59a
5 changed files with 504 additions and 2762 deletions

File diff suppressed because it is too large Load Diff

View File

@ -129,17 +129,18 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.228.2 (2016-06-23)" #define Log_PLATFORM_VERSION "SWAD 15.229 (2016-06-23)"
#define CSS_FILE "swad15.226.css" #define CSS_FILE "swad15.229.css"
#define JS_FILE "swad15.226.js" #define JS_FILE "swad15.226.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.228.2 Jun 23, 2015 Code refactoring in lists of users. (202791 lines) Version 15.229: Jun 23, 2015 Search of students available for all users. (203194 lines)
Version 15.228.1 Jun 23, 2015 Code refactoring in lists of users. (202794 lines) Version 15.228.2: Jun 23, 2015 Code refactoring in lists of users. (202791 lines)
Version 15.228 Jun 23, 2015 Code refactoring in lists of users. (202814 lines) Version 15.228.1: Jun 23, 2015 Code refactoring in lists of users. (202794 lines)
Version 15.227.1 Jun 23, 2015 Code refactoring in getting/searching users. (202854 lines) Version 15.228: Jun 23, 2015 Code refactoring in lists of users. (202814 lines)
Version 15.227.1: Jun 23, 2015 Code refactoring in getting/searching users. (202854 lines)
Version 15.227: Jun 21, 2015 Query optimization in search of users. (202820 lines) Version 15.227: Jun 21, 2015 Query optimization in search of users. (202820 lines)
Version 15.226.7: Jun 19, 2015 One new social network. (202969 lines) Version 15.226.7: Jun 19, 2015 One new social network. (202969 lines)
1 change necessary in database: 1 change necessary in database:

View File

@ -296,8 +296,8 @@ static bool Sch_CheckIfIHavePermissionToSearch (Sch_WhatToSearch_t WhatToSearch)
0x1FF, // Sch_SEARCH_DEGREES 0x1FF, // Sch_SEARCH_DEGREES
0x1FF, // Sch_SEARCH_COURSES 0x1FF, // Sch_SEARCH_COURSES
0x1FF, // Sch_SEARCH_TEACHERS 0x1FF, // Sch_SEARCH_TEACHERS
0x100, // Sch_SEARCH_STUDENTS Only for superusers 0x1FF, // Sch_SEARCH_STUDENTS
0x100, // Sch_SEARCH_GUESTS Only for superusers 0x1FF, // Sch_SEARCH_GUESTS
0x1FF, // Sch_SEARCH_OPEN_DOCUMENTS 0x1FF, // Sch_SEARCH_OPEN_DOCUMENTS
0x1FE, // Sch_SEARCH_DOCUM_IN_MY_COURSES Only if I am logged 0x1FE, // Sch_SEARCH_DOCUM_IN_MY_COURSES Only if I am logged
0x1FE, // Sch_SEARCH_MY_DOCUMENTS Only if I am logged 0x1FE, // Sch_SEARCH_MY_DOCUMENTS Only if I am logged
@ -742,7 +742,7 @@ static unsigned Sch_SearchUsrsInDB (Rol_Role_t Role)
/***** Check user's permission *****/ /***** Check user's permission *****/
if (Sch_CheckIfIHavePermissionToSearch ( Role == Rol_TEACHER ? Sch_SEARCH_TEACHERS : if (Sch_CheckIfIHavePermissionToSearch ( Role == Rol_TEACHER ? Sch_SEARCH_TEACHERS :
(Role == Rol_STUDENT ? Sch_SEARCH_STUDENTS : (Role == Rol_STUDENT ? Sch_SEARCH_STUDENTS :
Sch_SEARCH_GUESTS))) Sch_SEARCH_GUESTS)))
/***** Split user string into words *****/ /***** Split user string into words *****/
if (Sch_BuildSearchQuery (SearchQuery, if (Sch_BuildSearchQuery (SearchQuery,
"CONCAT_WS(' ',usr_data.FirstName,usr_data.Surname1,usr_data.Surname2)", "CONCAT_WS(' ',usr_data.FirstName,usr_data.Surname1,usr_data.Surname2)",
@ -1149,7 +1149,7 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
/*****************************************************************************/ /*****************************************************************************/
/****** Build a search query by splitting a string to search into words ******/ /****** Build a search query by splitting a string to search into words ******/
/*****************************************************************************/ /*****************************************************************************/
// Returns true if a valid search query is biult // Returns true if a valid search query is built
// Returns false when no valid search query // Returns false when no valid search query
static bool Sch_BuildSearchQuery (char *SearchQuery,const char *FieldName, static bool Sch_BuildSearchQuery (char *SearchQuery,const char *FieldName,

View File

@ -142,6 +142,7 @@ static void Usr_WriteUsrData (const char *BgColor,
bool NonBreak,bool Accepted); bool NonBreak,bool Accepted);
static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,bool Search,const char *UsrQuery,char *Query); static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,bool Search,const char *UsrQuery,char *Query);
static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery);
static void Usr_GetAdmsLst (Sco_Scope_t Scope); static void Usr_GetAdmsLst (Sco_Scope_t Scope);
static void Usr_GetGstsLst (Sco_Scope_t Scope); static void Usr_GetGstsLst (Sco_Scope_t Scope);
static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scope_t Scope); static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scope_t Scope);
@ -3797,13 +3798,13 @@ void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope)
Usr_GetListUsrsFromQuery (Query,Role,Scope); Usr_GetListUsrsFromQuery (Query,Role,Scope);
} }
/*****************************************************************************/ /*****************************************************************************/
/********* Search list of users with a given role in current scope ***********/ /********* Search list of users with a given role in current scope ***********/
/*****************************************************************************/ /*****************************************************************************/
void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery)
{ {
extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY];
char Query[16*1024]; char Query[16*1024];
/***** Build query *****/ /***** Build query *****/
@ -3830,105 +3831,508 @@ void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery)
case Sco_SCOPE_SYS: case Sco_SCOPE_SYS:
/* Search users in courses from the whole platform */ /* Search users in courses from the whole platform */
// 2 columns are retrieved: UsrCod, Sex // 2 columns are retrieved: UsrCod, Sex
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " switch (Gbl.Usrs.Me.LoggedRole)
"(SELECT DISTINCT candidate_users.UsrCod" {
" FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" case Rol_SYS_ADM:
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
" AND crs_usr.Role='%u') AS list_usrs,usr_data" "(SELECT DISTINCT candidate_users.UsrCod"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr"
" ORDER BY " " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"usr_data.Surname1," " AND crs_usr.Role='%u') AS list_usrs,usr_data"
"usr_data.Surname2," " WHERE list_usrs.UsrCod=usr_data.UsrCod "
"usr_data.FirstName," " ORDER BY "
"usr_data.UsrCod", "usr_data.Surname1,"
UsrQuery, "usr_data.Surname2,"
(unsigned) Role); "usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role);
break;
default:
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
"("
// Users whose privacy is
// Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"crs_usr,"
"usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility IN ('%s','%s')"
" UNION "
// Users who share any course with me
// and whose privacy is Pri_VISIBILITY_COURSE
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,"
"crs_usr,"
"usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs.CrsCod"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" UNION "
// Users who share any course with me with another role
// and whose privacy is Pri_VISIBILITY_USER
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,"
"crs_usr,"
"usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs_role.CrsCod"
" AND crs_usr.Role<>my_crs_role.Role"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
") "
"AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
" ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_USER ]);
break;
}
break; break;
case Sco_SCOPE_CTY: case Sco_SCOPE_CTY:
/* Search users in courses from the current country */ /* Search users in courses from the current country */
// 2 columns are retrieved: UsrCod, Sex // 2 columns are retrieved: UsrCod, Sex
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " switch (Gbl.Usrs.Me.LoggedRole)
"(SELECT DISTINCT candidate_users.UsrCod" {
" FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres,institutions" case Rol_SYS_ADM:
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
" AND crs_usr.Role='%u'" "(SELECT DISTINCT candidate_users.UsrCod"
" AND crs_usr.CrsCod=courses.CrsCod" " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres,institutions"
" AND courses.DegCod=degrees.DegCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND degrees.CtrCod=centres.CtrCod" " AND crs_usr.Role='%u'"
" AND centres.InsCod=institutions.InsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND institutions.CtyCod='%ld') AS list_usrs,usr_data" " AND courses.DegCod=degrees.DegCod"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " AND degrees.CtrCod=centres.CtrCod"
" ORDER BY " " AND centres.InsCod=institutions.InsCod"
"usr_data.Surname1," " AND institutions.CtyCod='%ld') AS list_usrs,usr_data"
"usr_data.Surname2," " WHERE list_usrs.UsrCod=usr_data.UsrCod "
"usr_data.FirstName," " ORDER BY "
"usr_data.UsrCod", "usr_data.Surname1,"
UsrQuery, "usr_data.Surname2,"
(unsigned) Role, "usr_data.FirstName,"
Gbl.CurrentCty.Cty.CtyCod); "usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Gbl.CurrentCty.Cty.CtyCod);
break;
default:
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
"("
// Users whose privacy is
// Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres,institutions"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility IN ('%s','%s')"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
" UNION "
// Users who share any course with me
// and whose privacy is Pri_VISIBILITY_COURSE
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres,institutions"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs.CrsCod"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
" UNION "
// Users who share any course with me with another role
// and whose privacy is Pri_VISIBILITY_USER
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres,institutions"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs_role.CrsCod"
" AND crs_usr.Role<>my_crs_role.Role"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
") "
"AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
" ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
Gbl.CurrentCty.Cty.CtyCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
Gbl.CurrentCty.Cty.CtyCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
Gbl.CurrentCty.Cty.CtyCod);
break;
}
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
/* Search users in courses from the current institution */ /* Search users in courses from the current institution */
// 2 columns are retrieved: UsrCod, Sex // 2 columns are retrieved: UsrCod, Sex
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " switch (Gbl.Usrs.Me.LoggedRole)
"(SELECT DISTINCT candidate_users.UsrCod" {
" FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres" case Rol_INS_ADM:
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" case Rol_SYS_ADM:
" AND crs_usr.Role='%u'" sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
" AND crs_usr.CrsCod=courses.CrsCod" "(SELECT DISTINCT candidate_users.UsrCod"
" AND courses.DegCod=degrees.DegCod" " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres"
" AND degrees.CtrCod=centres.CtrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND centres.InsCod='%ld') AS list_usrs,usr_data" " AND crs_usr.Role='%u'"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " AND crs_usr.CrsCod=courses.CrsCod"
" ORDER BY " " AND courses.DegCod=degrees.DegCod"
"usr_data.Surname1," " AND degrees.CtrCod=centres.CtrCod"
"usr_data.Surname2," " AND centres.InsCod='%ld') AS list_usrs,usr_data"
"usr_data.FirstName," " WHERE list_usrs.UsrCod=usr_data.UsrCod "
"usr_data.UsrCod", " ORDER BY "
UsrQuery, "usr_data.Surname1,"
(unsigned) Role, "usr_data.Surname2,"
Gbl.CurrentIns.Ins.InsCod); "usr_data.FirstName,"
break; "usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Gbl.CurrentIns.Ins.InsCod);
break;
default:
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
"("
// Users whose privacy is
// Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility IN ('%s','%s')"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld'"
" UNION "
// Users who share any course with me
// and whose privacy is Pri_VISIBILITY_COURSE
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs.CrsCod"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld'"
" UNION "
// Users who share any course with me with another role
// and whose privacy is Pri_VISIBILITY_USER
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,"
"crs_usr,"
"usr_data,"
"courses,degrees,centres"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs_role.CrsCod"
" AND crs_usr.Role<>my_crs_role.Role"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld'"
") "
"AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
" ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
Gbl.CurrentIns.Ins.InsCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
Gbl.CurrentIns.Ins.InsCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
Gbl.CurrentIns.Ins.InsCod);
break;
}
break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
/* Search users in courses from the current centre */ /* Search users in courses from the current centre */
// 2 columns are retrieved: UsrCod, Sex // 2 columns are retrieved: UsrCod, Sex
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " switch (Gbl.Usrs.Me.LoggedRole)
"(SELECT DISTINCT candidate_users.UsrCod" {
" FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees" case Rol_CTR_ADM:
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" case Rol_INS_ADM:
" AND crs_usr.Role='%u'" case Rol_SYS_ADM:
" AND crs_usr.CrsCod=courses.CrsCod" sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
" AND courses.DegCod=degrees.DegCod" "(SELECT DISTINCT candidate_users.UsrCod"
" AND degrees.CtrCod='%ld') AS list_usrs,usr_data" " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" ORDER BY " " AND crs_usr.Role='%u'"
"usr_data.Surname1," " AND crs_usr.CrsCod=courses.CrsCod"
"usr_data.Surname2," " AND courses.DegCod=degrees.DegCod"
"usr_data.FirstName," " AND degrees.CtrCod='%ld') AS list_usrs,usr_data"
"usr_data.UsrCod", " WHERE list_usrs.UsrCod=usr_data.UsrCod "
UsrQuery, " ORDER BY "
(unsigned) Role, "usr_data.Surname1,"
Gbl.CurrentCtr.Ctr.CtrCod); "usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Gbl.CurrentCtr.Ctr.CtrCod);
break;
default:
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
"("
// Users whose privacy is
// Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"crs_usr,"
"usr_data,"
"courses,degrees"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility IN ('%s','%s')"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod='%ld'"
" UNION "
// Users who share any course with me
// and whose privacy is Pri_VISIBILITY_COURSE
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,"
"crs_usr,"
"usr_data,"
"courses,degrees"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs.CrsCod"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod='%ld'"
" UNION "
// Users who share any course with me with another role
// and whose privacy is Pri_VISIBILITY_USER
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,"
"crs_usr,"
"usr_data,"
"courses,degrees"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs_role.CrsCod"
" AND crs_usr.Role<>my_crs_role.Role"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod='%ld'"
") "
"AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
" ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
Gbl.CurrentCtr.Ctr.CtrCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
Gbl.CurrentCtr.Ctr.CtrCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
Gbl.CurrentCtr.Ctr.CtrCod);
break;
}
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
/* Search users in courses from the current degree */ /* Search users in courses from the current degree */
// 2 columns are retrieved: UsrCod, Sex // 2 columns are retrieved: UsrCod, Sex
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " switch (Gbl.Usrs.Me.LoggedRole)
"(SELECT DISTINCT candidate_users.UsrCod" {
" FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses" case Rol_DEG_ADM:
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" case Rol_CTR_ADM:
" AND crs_usr.Role='%u'" case Rol_INS_ADM:
" AND crs_usr.CrsCod=courses.CrsCod" case Rol_SYS_ADM:
" AND courses.DegCod='%ld') AS list_usrs,usr_data" sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
" WHERE list_usrs.UsrCod=usr_data.UsrCod " "(SELECT DISTINCT candidate_users.UsrCod"
" ORDER BY " " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses"
"usr_data.Surname1," " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"usr_data.Surname2," " AND crs_usr.Role='%u'"
"usr_data.FirstName," " AND crs_usr.CrsCod=courses.CrsCod"
"usr_data.UsrCod", " AND courses.DegCod='%ld') "
UsrQuery, "AS list_usrs,usr_data"
(unsigned) Role, " WHERE list_usrs.UsrCod=usr_data.UsrCod "
Gbl.CurrentDeg.Deg.DegCod); " ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Gbl.CurrentDeg.Deg.DegCod);
break;
default:
sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM "
"("
// Users whose privacy is
// Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"crs_usr,"
"usr_data,"
"courses"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility IN ('%s','%s')"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod='%ld'"
" UNION "
// Users who share any course with me
// and whose privacy is Pri_VISIBILITY_COURSE
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,"
"crs_usr,"
"usr_data,"
"courses"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs.CrsCod"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod='%ld'"
" UNION "
// Users who share any course with me with another role
// and whose privacy is Pri_VISIBILITY_USER
"SELECT DISTINCT crs_usr.UsrCod FROM "
"(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,"
"crs_usr,"
"usr_data,"
"courses"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role='%u'"
" AND crs_usr.CrsCod=my_crs_role.CrsCod"
" AND crs_usr.Role<>my_crs_role.Role"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.ProfileVisibility='%s'"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod='%ld'"
") "
"AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
" ORDER BY "
"usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
UsrQuery,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
Gbl.CurrentDeg.Deg.DegCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
Gbl.CurrentDeg.Deg.DegCod,
UsrQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Role,
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
Gbl.CurrentDeg.Deg.DegCod);
break;
}
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
/* Search users in courses from the current course */ /* Search users in courses from the current course */
@ -3939,10 +4343,10 @@ void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery)
Lay_ShowErrorAndExit ("Wrong scope."); Lay_ShowErrorAndExit ("Wrong scope.");
break; break;
} }
/*
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SYS_ADM) // if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SYS_ADM)
Lay_ShowAlert (Lay_INFO,Query); Lay_ShowAlert (Lay_INFO,Query);
*/
/***** Get list of users from database given a query *****/ /***** Get list of users from database given a query *****/
Usr_GetListUsrsFromQuery (Query,Role,Gbl.Scope.Current); Usr_GetListUsrsFromQuery (Query,Role,Gbl.Scope.Current);
} }

View File

@ -304,7 +304,6 @@ unsigned Usr_GetNumUsrsWhoClaimToBelongToCtr (long CtrCod);
unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod); unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod);
void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope); void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope);
void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery);
void Usr_GetUnorderedStdsCodesInDeg (long DegCod); void Usr_GetUnorderedStdsCodesInDeg (long DegCod);
void Usr_FreeUsrsList (Rol_Role_t Role); void Usr_FreeUsrsList (Rol_Role_t Role);