Version 16.225

This commit is contained in:
Antonio Cañas Vargas 2017-05-25 19:57:34 +02:00
parent 5543e7285f
commit 9260858353
15 changed files with 414 additions and 286 deletions

View File

@ -1922,7 +1922,7 @@ static void Att_ListAttStudents (struct AttendanceEvent *Att)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order list of students in this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
/***** Start frame *****/
Lay_StartRoundFrame (NULL,Txt_Attendance,NULL,Hlp_USERS_Attendance);
@ -2303,7 +2303,7 @@ void Att_RegisterStudentsInAttEvent (void)
/***** 1. Get list of students in the groups selected: Gbl.Usrs.LstUsrs[Rol_STD] *****/
/* Get list of students in the groups selected */
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs) // If there are students in the groups selected...
{
@ -2657,7 +2657,7 @@ void Usr_ReqListStdsAttendanceCrs (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order lists of users from current course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
/***** Start frame *****/
Lay_StartRoundFrame (NULL,Txt_ROLES_PLURAL_Abc[Rol_STD][Usr_SEX_UNKNOWN],

View File

@ -231,17 +231,20 @@
// TODO: Statistics of hits in course accessible by non-editing teachers.
// TODO: Include non-editing teachers in Usr_ListAllDataTchs () and Usr_SeeTchClassPhotoPrn ()
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.224.2 (2017-05-25)"
#define Log_PLATFORM_VERSION "SWAD 16.225 (2017-05-25)"
#define CSS_FILE "swad16.222.css"
#define JS_FILE "swad16.206.3.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 16.225: May 25, 2017 Changes and bug fixing related with new role. (220580 lines)
Version 16.224.2: May 25, 2017 Button to show big list of users/courses integrated in alert. (220465 lines)
Version 16.224.1: May 25, 2017 User lists are shown when changing type of listing. (220463 lines)
Version 16.224: May 25, 2017 Code refactoring related to sections. (220459 lines)

View File

@ -179,8 +179,10 @@ void Dpt_SeeDepts (void)
"</td>"
"</tr>",
Txt_Department_unspecified,
Sta_GetTotalNumberOfUsersInCourses (Sco_SCOPE_INS,
Rol_TCH) - NumTchsInsWithDpt);
Usr_GetTotalNumberOfUsersInCourses (Sco_SCOPE_INS,
1 << Rol_NET |
1 << Rol_TCH) -
NumTchsInsWithDpt);
/***** End table *****/
Lay_EndRoundFrameTable ();
@ -279,17 +281,17 @@ void Dpt_GetListDepartments (long InsCod)
" WHERE departments.InsCod=%ld"
" AND departments.DptCod=usr_data.DptCod"
" AND usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
" AND crs_usr.Role IN (%u,%u)"
" GROUP BY departments.DptCod)"
" UNION "
"(SELECT DptCod,InsCod,ShortName,FullName,WWW,0 AS NumTchs"
" FROM departments"
" WHERE InsCod=%ld AND DptCod NOT IN"
" (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr"
" WHERE crs_usr.Role=%u AND crs_usr.UsrCod=usr_data.UsrCod))"
" WHERE crs_usr.Role IN (%u,%u) AND crs_usr.UsrCod=usr_data.UsrCod))"
" ORDER BY %s",
InsCod,(unsigned) Rol_TCH,
InsCod,(unsigned) Rol_TCH,
InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH,
InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH,
OrderBySubQuery);
else // All the departments
sprintf (Query,"(SELECT departments.DptCod,departments.InsCod,"
@ -298,17 +300,17 @@ void Dpt_GetListDepartments (long InsCod)
" FROM departments,usr_data,crs_usr"
" WHERE departments.DptCod=usr_data.DptCod"
" AND usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
" AND crs_usr.Role IN (%u,%u)"
" GROUP BY departments.DptCod)"
" UNION "
"(SELECT DptCod,InsCod,ShortName,FullName,WWW,0 AS NumTchs"
" FROM departments"
" WHERE DptCod NOT IN"
" (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr"
" WHERE crs_usr.Role=%u AND crs_usr.UsrCod=usr_data.UsrCod))"
" WHERE crs_usr.Role IN (%u,%u) AND crs_usr.UsrCod=usr_data.UsrCod))"
" ORDER BY %s",
(unsigned) Rol_TCH,
(unsigned) Rol_TCH,
(unsigned) Rol_NET,(unsigned) Rol_TCH,
(unsigned) Rol_NET,(unsigned) Rol_TCH,
OrderBySubQuery);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get departments");
@ -351,7 +353,7 @@ void Dpt_GetListDepartments (long InsCod)
Str_Copy (Dpt->WWW,row[4],
Cns_MAX_BYTES_WWW);
/* Get number of teachers in this department (row[5]) */
/* Get number of non-editing teachers and teachers in this department (row[5]) */
if (sscanf (row[5],"%u",&Dpt->NumTchs) != 1)
Dpt->NumTchs = 0;
}

View File

@ -40,7 +40,7 @@ struct Department
char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1];
char FullName[Hie_MAX_BYTES_FULL_NAME + 1];
char WWW[Cns_MAX_BYTES_WWW + 1];
unsigned NumTchs;
unsigned NumTchs; // Non-editing teachers and teachers
};
#define Dpt_NUM_ORDERS 2

View File

@ -1488,7 +1488,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role)
if (WhatToDo.RemoveUsrs)
{
/***** Get list of users in current course *****/
Usr_GetListUsrs (Role,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Role);
if (Gbl.Usrs.LstUsrs[Role].NumUsrs)
{
@ -1899,7 +1899,7 @@ unsigned Enr_RemAllStdsInCrs (struct Course *Crs)
/***** Get list of students in current course *****/
Gbl.Usrs.ClassPhoto.AllGroups = true; // Get all the students of the current course
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
NumStdsInCrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs;
/***** Remove all the students *****/

View File

@ -3108,9 +3108,9 @@ void Brw_AskEditWorksCrs (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order lists of users from this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_NET);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_TCH);
NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;

View File

@ -879,7 +879,7 @@ void Mai_ListEmails (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order list of students in this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
/***** Start of the frame used to list the emails *****/
Lay_StartRoundFrame (NULL,

View File

@ -214,9 +214,9 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order lists of users from this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_NET);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_TCH);
NumUsrsInCrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs + // Students
Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs + // Non-editing teachers
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs; // Teachers

View File

@ -446,11 +446,15 @@ void Net_ShowWebAndSocialNetworksStats (void)
unsigned NumRow;
Net_WebsAndSocialNetworks_t Web;
char NetName[Net_MAX_BYTES_NETWORK_NAME + 1];
unsigned NumUsrsTotalInPlatform;
unsigned NumUsrsTotal;
unsigned NumUsrs;
/***** Get total number of users in platform *****/
NumUsrsTotalInPlatform = Sta_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,Rol_UNK);
/***** Get total number of users in current scope *****/
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
/***** Get number of users with a web / social network *****/
switch (Gbl.Scope.Current)
@ -588,10 +592,8 @@ void Net_ShowWebAndSocialNetworksStats (void)
Net_WebsAndSocialNetworksTitle[Web],
Net_WebsAndSocialNetworksTitle[Web],
NumUsrs,
NumUsrsTotalInPlatform ? 100.0 *
(float) NumUsrs /
(float) NumUsrsTotalInPlatform :
0.0);
NumUsrsTotal ? 100.0 * (float) NumUsrs / (float) NumUsrsTotal :
0.0);
}
}

View File

@ -202,9 +202,10 @@ static unsigned Sta_GetInsAndStat (struct Instit *Ins,MYSQL_RES *mysql_res);
static void Sta_GetAndShowDegreeTypesStats (void);
static unsigned Sta_GetTotalNumberOfUsersInPlatform (void);
static void Sta_GetAndShowUsersStats (void);
static void Sta_GetAndShowNumUsrsInCrss (Rol_Role_t Role);
static void Sta_GetAndShowNumUsrsNotBelongingToAnyCrs (void);
static void Sta_GetAndShowUsersRanking (void);
static void Sta_GetAndShowFileBrowsersStats (void);
@ -464,9 +465,9 @@ void Sta_AskShowCrsHits (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order the lists of users of this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_NET);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_TCH);
NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;
@ -4082,18 +4083,99 @@ static void Sta_GetAndShowUsersStats (void)
Txt_No_of_users,
Txt_Average_number_of_courses_to_which_a_user_belongs,
Txt_Average_number_of_users_belonging_to_a_course);
Usr_GetAndShowNumUsrsInPlatform (Rol_STD); // Students
Usr_GetAndShowNumUsrsInPlatform (Rol_NET); // Non-editing teachers
Usr_GetAndShowNumUsrsInPlatform (Rol_TCH); // Teachers
Usr_GetAndShowNumUsrsInPlatform (Rol_UNK); // Students, non-editing teachers and teachers
Sta_GetAndShowNumUsrsInCrss (Rol_STD); // Students
Sta_GetAndShowNumUsrsInCrss (Rol_NET); // Non-editing teachers
Sta_GetAndShowNumUsrsInCrss (Rol_TCH); // Teachers
Sta_GetAndShowNumUsrsInCrss (Rol_UNK); // Any user in courses
fprintf (Gbl.F.Out,"<tr>"
"<th colspan=\"4\" style=\"height:10px;\">"
"</tr>");
Usr_GetAndShowNumUsrsInPlatform (Rol_GST); // Users not beloging to any course
Sta_GetAndShowNumUsrsNotBelongingToAnyCrs (); // Users not beloging to any course
Lay_EndRoundFrameTable ();
}
/*****************************************************************************/
/**************** Get and show number of users in courses ********************/
/*****************************************************************************/
// Rol_UNK means any role in courses
static void Sta_GetAndShowNumUsrsInCrss (Rol_Role_t Role)
{
extern const char *Txt_Total;
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
unsigned NumUsrs;
float NumCrssPerUsr;
float NumUsrsPerCrs;
char *Class = (Role == Rol_UNK) ? "DAT_N_LINE_TOP RIGHT_BOTTOM" :
"DAT RIGHT_BOTTOM";
unsigned Roles = (Role == Rol_UNK) ? ((1 << Rol_STD) |
(1 << Rol_NET) |
(1 << Rol_TCH)) :
(1 << Role);
/***** Get the number of users belonging to any course *****/
NumUsrs = Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
Roles);
/***** Get average number of courses per user *****/
NumCrssPerUsr = Usr_GetNumCrssPerUsr (Role);
/***** Query the number of users per course *****/
NumUsrsPerCrs = Usr_GetNumUsrsPerCrs (Role);
/***** Write the total number of users *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s\">"
"%s"
"</td>"
"<td class=\"%s\">"
"%u"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"</tr>",
Class,(Role == Rol_UNK) ? Txt_Total :
Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN],
Class,NumUsrs,
Class,NumCrssPerUsr,
Class,NumUsrsPerCrs);
}
/*****************************************************************************/
/**************** Get and show number of users in courses ********************/
/*****************************************************************************/
static void Sta_GetAndShowNumUsrsNotBelongingToAnyCrs (void)
{
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
char *Class = "DAT RIGHT_BOTTOM";
/***** Write the total number of users not belonging to any course *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s\">"
"%s"
"</td>"
"<td class=\"%s\">"
"%u"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"</tr>",
Class,Txt_ROLES_PLURAL_Abc[Rol_GST][Usr_SEX_UNKNOWN],
Class,Usr_GetNumUsrsNotBelongingToAnyCrs (),
Class,0.0,
Class,0.0);
}
/*****************************************************************************/
/****************************** Show users' ranking **************************/
/*****************************************************************************/
@ -5329,130 +5411,6 @@ static void Sta_GetAndShowDegreeTypesStats (void)
DT_SeeDegreeTypesInStaTab ();
}
/*****************************************************************************/
/****************** Get total number of users in platform ********************/
/*****************************************************************************/
static unsigned Sta_GetTotalNumberOfUsersInPlatform (void)
{
char Query[128];
/***** Get number of users from database *****/
sprintf (Query,"SELECT COUNT(UsrCod) FROM usr_data");
return (unsigned) DB_QueryCOUNT (Query,"can not get number of users");
}
/*****************************************************************************/
/******************* Get total number of users in courses ********************/
/*****************************************************************************/
// Here Rol_UNK means "students, non-editing teachers or teachers"
unsigned Sta_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,Rol_Role_t Role)
{
char Query[512];
/***** Get number of users from database *****/
switch (Scope)
{
case Sco_SCOPE_SYS:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)"
" FROM crs_usr");
else
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)"
" FROM crs_usr WHERE Role=%u",
(unsigned) Role);
break;
case Sco_SCOPE_CTY:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentCty.Cty.CtyCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role);
break;
case Sco_SCOPE_INS:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentIns.Ins.InsCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
Gbl.CurrentIns.Ins.InsCod,(unsigned) Role);
break;
case Sco_SCOPE_CTR:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role);
break;
case Sco_SCOPE_DEG:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role);
break;
case Sco_SCOPE_CRS:
if (Role == Rol_UNK) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld"
" AND crs_usr.Role=%u",
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
break;
}
return (unsigned) DB_QueryCOUNT (Query,"can not get number of users");
}
/*****************************************************************************/
/********************* Show stats about exploration trees ********************/
/*****************************************************************************/
@ -7015,8 +6973,11 @@ static void Sta_GetAndShowSocialActivityStats (void)
Txt_No_of_posts_BR_per_user);
/***** Get total number of users *****/
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Sta_GetTotalNumberOfUsersInPlatform () :
Sta_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,Rol_UNK);
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
/***** Get total number of following/followers from database *****/
for (NoteType = (Soc_NoteType_t) 0;
@ -7292,8 +7253,11 @@ static void Sta_GetAndShowFollowStats (void)
Txt_PERCENT_of_users);
/***** Get total number of users *****/
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Sta_GetTotalNumberOfUsersInPlatform () :
Sta_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,Rol_UNK);
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
/***** Get total number of following/followers from database *****/
for (Fol = 0;
@ -7915,8 +7879,11 @@ static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
Txt_Number_of_BR_emails);
/***** Get total number of users *****/
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Sta_GetTotalNumberOfUsersInPlatform () :
Sta_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,Rol_UNK);
NumUsrsTotal = (Gbl.Scope.Current == Sco_SCOPE_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
/***** Get total number of users who want to be
notified by email on some event, from database *****/

View File

@ -180,8 +180,6 @@ void Sta_PutIconToShowFigure (void);
void Sta_PutHiddenParamFigures (void);
void Sta_ShowFigures (void);
unsigned Sta_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,Rol_Role_t Role);
void Sta_WriteParamsDatesSeeAccesses (void);
void Sta_ComputeTimeToGeneratePage (void);

View File

@ -6968,9 +6968,9 @@ void Tst_SelUsrsToSeeUsrsTestResults (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order lists of users from this course *****/
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_STD);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_NET);
Usr_GetListUsrs (Sco_SCOPE_CRS,Rol_TCH);
NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;

View File

@ -208,10 +208,6 @@ static void Usr_ShowTchsAllDataParams (void);
static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
Rol_Role_t Role,bool PutCheckBoxToSelectUsr);
static unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void);
static float Usr_GetNumCrssPerUsr (Rol_Role_t Role);
static float Usr_GetNumUsrsPerCrs (Rol_Role_t Role);
/*****************************************************************************/
/**** Show alert about number of clicks remaining before sending my photo ****/
/*****************************************************************************/
@ -3906,8 +3902,10 @@ unsigned Usr_GetNumTchsCurrentInsInDepartment (long DptCod)
sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
" FROM usr_data,crs_usr"
" WHERE usr_data.InsCod=%ld AND usr_data.DptCod=%ld"
" AND usr_data.UsrCod=crs_usr.UsrCod AND crs_usr.Role=%u",
Gbl.CurrentIns.Ins.InsCod,DptCod,(unsigned) Rol_TCH);
" AND usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role IN (%u,%u)",
Gbl.CurrentIns.Ins.InsCod,DptCod,
(unsigned) Rol_NET,(unsigned) Rol_TCH);
return (unsigned) DB_QueryCOUNT (Query,"can not get the number of teachers in a department");
}
@ -4158,7 +4156,7 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
// - Rol_NET Non-editing teacher
// - Rol_TCH Teacher
void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope)
void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
{
char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1]; // Big query when the course has lot of groups
const char *QueryFields =
@ -5163,7 +5161,7 @@ static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,const char
sprintf (Gbl.Alert.Txt,Txt_The_list_of_X_users_is_too_large_to_be_displayed,
NumUsrs);
Ale_ShowAlertAndButton (Ale_WARNING,Gbl.Alert.Txt,
Gbl.Action.Act,NULL,OnSubmit,
Gbl.Action.Act,Usr_USER_LIST_SECTION_ID,OnSubmit,
Usr_PutParamsConfirmIWantToSeeBigList,
Lay_CONFIRM_BUTTON,Txt_Show_anyway);
}
@ -6322,7 +6320,7 @@ void Usr_ListAllDataStds (void)
}
/****** Get list of students in current course ******/
Usr_GetListUsrs (Rol_STD,Gbl.Scope.Current);
Usr_GetListUsrs (Gbl.Scope.Current,Rol_STD);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
@ -6556,7 +6554,7 @@ void Usr_ListAllDataTchs (void)
Sco_GetScope ("ScopeUsr");
/***** Get list of teachers *****/
Usr_GetListUsrs (Rol_TCH,Gbl.Scope.Current);
Usr_GetListUsrs (Gbl.Scope.Current,Rol_TCH);
if (Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs)
{
@ -7270,30 +7268,29 @@ void Usr_SeeGuests (void)
Usr_PutIconsListGsts,Hlp_USERS_Guests);
/***** Form to select scope *****/
switch (Gbl.Usrs.Me.LoggedRole)
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
{
case Rol_SYS_ADM:
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
Act_FormStart (ActLstGst);
Usr_PutParamsPrefsAboutUsrList ();
fprintf (Gbl.F.Out,"<label class=\"%s\">%s:&nbsp;",
The_ClassForm[Gbl.Prefs.Theme],Txt_Scope);
Sco_PutSelectorScope ("ScopeUsr",true);
fprintf (Gbl.F.Out,"</label>");
Act_FormEnd ();
fprintf (Gbl.F.Out,"</div>");
break;
default:
break;
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
Act_FormStart (ActLstGst);
Usr_PutParamsPrefsAboutUsrList ();
fprintf (Gbl.F.Out,"<label class=\"%s\">%s:&nbsp;",
The_ClassForm[Gbl.Prefs.Theme],Txt_Scope);
Sco_PutSelectorScope ("ScopeUsr",true);
fprintf (Gbl.F.Out,"</label>");
Act_FormEnd ();
fprintf (Gbl.F.Out,"</div>");
}
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstGst);
@ -7344,9 +7341,12 @@ void Usr_SeeGuests (void)
/* End form */
Act_FormEnd ();
}
else
Usr_ShowWarningNoUsersFound (Rol_GST);
}
else
Usr_ShowWarningNoUsersFound (Rol_GST);
/***** End section with user list *****/
Lay_EndSection ();
/***** End frame *****/
Lay_EndRoundFrame ();
@ -7411,7 +7411,7 @@ void Usr_SeeStudents (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get list of students *****/
Usr_GetListUsrs (Rol_STD,Gbl.Scope.Current);
Usr_GetListUsrs (Gbl.Scope.Current,Rol_STD);
/***** Start frame *****/
Lay_StartRoundFrame (NULL,Txt_ROLES_PLURAL_Abc[Rol_STD][Usr_SEX_UNKNOWN],
@ -7445,13 +7445,13 @@ void Usr_SeeStudents (void)
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL))
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstStd);
@ -7515,14 +7515,14 @@ void Usr_SeeStudents (void)
Act_FormEnd ();
}
}
else
{
/***** Show warning indicating no students found *****/
Usr_ShowWarningNoUsersFound (Rol_STD);
}
else
{
/***** Show warning indicating no students found *****/
Usr_ShowWarningNoUsersFound (Rol_STD);
/***** Button to enrol students *****/
Enr_PutButtonToEnrolStudents ();
}
/***** Button to enrol students *****/
Enr_PutButtonToEnrolStudents ();
}
/***** End section with user list *****/
@ -7585,10 +7585,11 @@ void Usr_SeeTeachers (void)
ICanViewRecords = (Gbl.Scope.Current == Sco_SCOPE_CRS);
/***** Get lists of teachers *****/
Usr_GetListUsrs (Rol_NET,Gbl.Scope.Current); // Non-editing teachers
Usr_GetListUsrs (Rol_TCH,Gbl.Scope.Current); // Teachers
NumUsrs = Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;
Usr_GetListUsrs (Gbl.Scope.Current,Rol_NET); // Non-editing teachers
Usr_GetListUsrs (Gbl.Scope.Current,Rol_TCH); // Teachers
NumUsrs = Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,
1 << Rol_NET |
1 << Rol_TCH);
/***** Start frame *****/
Lay_StartRoundFrame (NULL,Txt_ROLES_PLURAL_Abc[Rol_TCH][Usr_SEX_UNKNOWN],
@ -7605,10 +7606,13 @@ void Usr_SeeTeachers (void)
Act_FormEnd ();
fprintf (Gbl.F.Out,"</div>");
if (Usr_GetIfShowBigList (NumUsrs,NULL))
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (NumUsrs)
{
if (NumUsrs)
{
if (Usr_GetIfShowBigList (NumUsrs,NULL))
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstTch);
@ -7679,15 +7683,18 @@ void Usr_SeeTeachers (void)
Act_FormEnd ();
}
}
else
{
/***** Show warning indicating no teachers found *****/
Usr_ShowWarningNoUsersFound (Rol_TCH);
/***** Button to enrol a teacher *****/
Enr_PutButtonToEnrolOneTeacher ();
}
}
else
{
/***** Show warning indicating no teachers found *****/
Usr_ShowWarningNoUsersFound (Rol_TCH);
/***** Button to enrol a teacher *****/
Enr_PutButtonToEnrolOneTeacher ();
}
/***** End section with user list *****/
Lay_EndSection ();
/***** End frame *****/
Lay_EndRoundFrame ();
@ -7941,7 +7948,7 @@ void Usr_SeeStdClassPhotoPrn (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get list of students *****/
Usr_GetListUsrs (Rol_STD,Gbl.Scope.Current);
Usr_GetListUsrs (Gbl.Scope.Current,Rol_STD);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
@ -7994,7 +8001,7 @@ void Usr_SeeTchClassPhotoPrn (void)
Sco_GetScope ("ScopeUsr");
/***** Get list of teachers *****/
Usr_GetListUsrs (Rol_TCH,Gbl.Scope.Current);
Usr_GetListUsrs (Gbl.Scope.Current,Rol_TCH);
if (Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs)
{
@ -8222,61 +8229,206 @@ void Usr_ShowWarningNoUsersFound (Rol_Role_t Role)
}
/*****************************************************************************/
/************************ See stats about the platform ***********************/
/****************** Get total number of users in platform ********************/
/*****************************************************************************/
// Here Rol_UNK means "all users"
void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role)
unsigned Usr_GetTotalNumberOfUsersInPlatform (void)
{
extern const char *Txt_Total;
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
unsigned NumUsrs;
float NumCrssPerUsr;
float NumUsrsPerCrs;
char *Class = (Role == Rol_UNK) ? "DAT_N_LINE_TOP RIGHT_BOTTOM" :
"DAT RIGHT_BOTTOM";
char Query[128];
/***** Get the number of users belonging to any course *****/
if (Role == Rol_GST) // Users not beloging to any course
NumUsrs = Usr_GetNumUsrsNotBelongingToAnyCrs ();
else
NumUsrs = Sta_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current,Role);
/***** Get number of users from database *****/
sprintf (Query,"SELECT COUNT(UsrCod) FROM usr_data");
return (unsigned) DB_QueryCOUNT (Query,"can not get number of users");
}
/***** Get average number of courses per user *****/
NumCrssPerUsr = (Role == Rol_GST) ? 0 :
Usr_GetNumCrssPerUsr (Role);
/*****************************************************************************/
/******* Get total number of users of one or several roles in courses ********/
/*****************************************************************************/
/***** Query the number of users per course *****/
NumUsrsPerCrs = (Role == Rol_GST) ? 0 :
Usr_GetNumUsrsPerCrs (Role);
#define Usr_MAX_BYTES_SUBQUERY_ROLES (Rol_NUM_ROLES*(10+1)-1)
/***** Write the total number of users *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s\">"
"%s"
"</td>"
"<td class=\"%s\">"
"%u"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"<td class=\"%s\">"
"%.2f"
"</td>"
"</tr>",
Class,(Role == Rol_UNK) ? Txt_Total :
Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN],
Class,NumUsrs,
Class,NumCrssPerUsr,
Class,NumUsrsPerCrs);
unsigned Usr_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,unsigned Roles)
{
char UnsignedStr[10 + 1];
char SubQueryRoles[Usr_MAX_BYTES_SUBQUERY_ROLES + 1];
char Query[512 + Usr_MAX_BYTES_SUBQUERY_ROLES + 1];
bool AnyUserInCourses;
Rol_Role_t Role;
Rol_Role_t FirstRoleRequested;
bool MoreThanOneRole;
bool FirstRole;
/***** Reset roles that can not belong to courses.
Only
- students,
- non-editing teachers,
- teachers
can belong to a course *****/
Roles &= ((1 << Rol_STD) |
(1 << Rol_NET) |
(1 << Rol_TCH));
/***** Check if no roles requested *****/
if (Roles == 0)
return 0;
/***** Check if any user in courses is requested *****/
AnyUserInCourses = (Roles == ((1 << Rol_STD) |
(1 << Rol_NET) |
(1 << Rol_TCH)));
/***** Get first role requested *****/
FirstRoleRequested = Rol_UNK;
for (Role = Rol_STD;
Role <= Rol_TCH;
Role++)
if (Roles & (1 << Role))
{
FirstRoleRequested = Role;
break;
}
/***** Check if more than one role is requested *****/
MoreThanOneRole = false;
if (FirstRoleRequested != Rol_UNK)
for (Role = FirstRoleRequested + 1;
Role <= Rol_TCH;
Role++)
if (Roles & (1 << Role))
{
MoreThanOneRole = true;
break;
}
/***** Build subquery for roles *****/
if (MoreThanOneRole)
{
Str_Copy (SubQueryRoles," IN (",Usr_MAX_BYTES_SUBQUERY_ROLES);
for (Role = Rol_STD, FirstRole = true;
Role <= Rol_TCH;
Role++)
if (Roles & (1 << Role))
{
sprintf (UnsignedStr,"%u",(unsigned) Role);
if (!FirstRole) // Not the first role
{
Str_Concat (SubQueryRoles,",",Usr_MAX_BYTES_SUBQUERY_ROLES);
FirstRole = false;
}
Str_Concat (SubQueryRoles,UnsignedStr,Usr_MAX_BYTES_SUBQUERY_ROLES);
}
Str_Concat (SubQueryRoles,")",Usr_MAX_BYTES_SUBQUERY_ROLES);
}
else // Only one role
sprintf (SubQueryRoles,"=%u",FirstRoleRequested);
/***** Get number of users from database *****/
switch (Scope)
{
case Sco_SCOPE_SYS:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)"
" FROM crs_usr");
else
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)"
" FROM crs_usr WHERE Role%s",
SubQueryRoles);
break;
case Sco_SCOPE_CTY:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentCty.Cty.CtyCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role%s",
Gbl.CurrentCty.Cty.CtyCod,SubQueryRoles);
break;
case Sco_SCOPE_INS:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentIns.Ins.InsCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role%s",
Gbl.CurrentIns.Ins.InsCod,SubQueryRoles);
break;
case Sco_SCOPE_CTR:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role%s",
Gbl.CurrentCtr.Ctr.CtrCod,SubQueryRoles);
break;
case Sco_SCOPE_DEG:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role%s",
Gbl.CurrentDeg.Deg.DegCod,SubQueryRoles);
break;
case Sco_SCOPE_CRS:
if (AnyUserInCourses) // Any user
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
else
sprintf (Query,"SELECT COUNT(DISTINCT UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld"
" AND Role%s",
Gbl.CurrentCrs.Crs.CrsCod,SubQueryRoles);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
break;
}
return (unsigned) DB_QueryCOUNT (Query,"can not get number of users");
}
/*****************************************************************************/
/******** Get total number of users who do not belong to any course **********/
/*****************************************************************************/
static unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void)
unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void)
{
char Query[256];
@ -8290,7 +8442,7 @@ static unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void)
/************ Get average number of courses with users of a role *************/
/*****************************************************************************/
static float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
{
char Query[1024];
MYSQL_RES *mysql_res;
@ -8427,7 +8579,7 @@ static float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
/************ Get average number of courses with users of a type *************/
/*****************************************************************************/
static float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
{
char Query[1024];
MYSQL_RES *mysql_res;

View File

@ -336,7 +336,7 @@ unsigned Usr_GetNumUsrsWhoClaimToBelongToIns (long InsCod);
unsigned Usr_GetNumUsrsWhoClaimToBelongToCtr (long CtrCod);
unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod);
void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope);
void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role);
void Usr_SearchListUsrs (Rol_Role_t Role);
void Usr_CreateTmpTableAndSearchCandidateUsrs (const char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]);
@ -395,7 +395,11 @@ bool Usr_ChkIfUsrCodExists (long UsrCod);
void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);
void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role);
unsigned Usr_GetTotalNumberOfUsersInPlatform (void);
unsigned Usr_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,unsigned Roles);
unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void);
float Usr_GetNumCrssPerUsr (Rol_Role_t Role);
float Usr_GetNumUsrsPerCrs (Rol_Role_t Role);
bool Usr_CheckIfUsrBanned (long UsrCod);
void Usr_RemoveUsrFromUsrBanned (long UsrCod);

View File

@ -1440,7 +1440,7 @@ int swad__getUsers (struct soap *soap,
Grp_GetListGrpTypesInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
/***** Get list of users *****/
Usr_GetListUsrs (Role,Sco_SCOPE_CRS);
Usr_GetListUsrs (Sco_SCOPE_CRS,Role);
Svc_CopyListUsers (Role,getUsersOut);
Usr_FreeUsrsList (Role);