Version 16.220.12

This commit is contained in:
Antonio Cañas Vargas 2017-05-22 20:37:46 +02:00
parent a49cf929dc
commit 5d92078a14
11 changed files with 203 additions and 65 deletions

View File

@ -233,13 +233,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.220.11 (2017-05-22)" #define Log_PLATFORM_VERSION "SWAD 16.220.12 (2017-05-22)"
#define CSS_FILE "swad16.209.3.css" #define CSS_FILE "swad16.209.3.css"
#define JS_FILE "swad16.206.3.js" #define JS_FILE "swad16.206.3.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 16.220.12:May 22, 2017 Changes related with new role. Not finished. (220155 lines)
Version 16.220.11:May 22, 2017 Changes related with new role. Not finished. (220019 lines) Version 16.220.11:May 22, 2017 Changes related with new role. Not finished. (220019 lines)
Version 16.220.10:May 22, 2017 Changes related with new role. Not finished. (219775 lines) Version 16.220.10:May 22, 2017 Changes related with new role. Not finished. (219775 lines)
Version 16.220.9: May 22, 2017 Changes related with new role. Not finished. (219720 lines) Version 16.220.9: May 22, 2017 Changes related with new role. Not finished. (219720 lines)

View File

@ -927,7 +927,7 @@ static void Rep_GetMaxHitsPerYear (struct Rep_Report *Report)
" GROUP BY Year" " GROUP BY Year"
// ---------------------------------------------------------- // ----------------------------------------------------------
" UNION " " UNION "
// Clicks as student or teacher in courses ------------------ // Clicks as student, non-editing teacher or teacher in courses
"SELECT " "SELECT "
"CrsCod," "CrsCod,"
"YEAR(CONVERT_TZ(ClickTime,@@session.time_zone,'UTC')) AS Year," "YEAR(CONVERT_TZ(ClickTime,@@session.time_zone,'UTC')) AS Year,"
@ -1171,8 +1171,11 @@ static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
/***** Write number of teachers / students in course *****/ /***** Write number of teachers / students in course *****/
if (WriteNumUsrs) if (WriteNumUsrs)
fprintf (Gbl.F.Rep," (%u %s / %u %s)", fprintf (Gbl.F.Rep," (%u %s / %u %s)",
Usr_GetNumUsrsInCrs (Rol_TCH,Crs.CrsCod),Txt_teachers_ABBREVIATION, Usr_GetNumUsrsInCrs (Rol_NET,Crs.CrsCod) +
Usr_GetNumUsrsInCrs (Rol_STD,Crs.CrsCod),Txt_students_ABBREVIATION); Usr_GetNumUsrsInCrs (Rol_TCH,Crs.CrsCod),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrs (Rol_STD,Crs.CrsCod),
Txt_students_ABBREVIATION);
} }
else else
fprintf (Gbl.F.Rep,"(%s)",Txt_unknown_removed_course); fprintf (Gbl.F.Rep,"(%s)",Txt_unknown_removed_course);

View File

@ -86,7 +86,11 @@ Rol_Role_t Rol_GetMaxRoleInCrss (unsigned Roles)
if (Roles & (1 << Rol_TCH)) if (Roles & (1 << Rol_TCH))
return Rol_TCH; return Rol_TCH;
/* Not a teacher. Check then if user is a student in any course */ /* Not a teacher. Check then if user is a non-editing teacher in any course */
if (Roles & (1 << Rol_NET))
return Rol_NET;
/* Not a non-editing teacher or a teacher. Check then if user is a student in any course */
if (Roles & (1 << Rol_STD)) if (Roles & (1 << Rol_STD))
return Rol_STD; return Rol_STD;

View File

@ -36,7 +36,7 @@
Don't change these numbers! Don't change these numbers!
They are used for users' permissions and for user's types in database They are used for users' permissions and for user's types in database
Only Rol_STD and Rol_TCH are allowed Only Rol_STD, Rol_NET and Rol_TCH are allowed
as user permanent roles in courses, as user permanent roles in courses,
but a user may be logged temporarily as other roles but a user may be logged temporarily as other roles
*/ */

View File

@ -274,6 +274,7 @@ void Sco_SetScopesForListingStudents (void)
switch (Gbl.Usrs.Me.LoggedRole) switch (Gbl.Usrs.Me.LoggedRole)
{ {
case Rol_STD: case Rol_STD:
case Rol_NET:
case Rol_TCH: case Rol_TCH:
Gbl.Scope.Allowed = 1 << Sco_SCOPE_CRS; Gbl.Scope.Allowed = 1 << Sco_SCOPE_CRS;
break; break;

View File

@ -595,7 +595,7 @@ static void Sch_SearchInDB (void)
NumResults += Sch_SearchCentresInDB (RangeQuery); NumResults += Sch_SearchCentresInDB (RangeQuery);
NumResults += Sch_SearchDegreesInDB (RangeQuery); NumResults += Sch_SearchDegreesInDB (RangeQuery);
NumResults += Sch_SearchCoursesInDB (RangeQuery); NumResults += Sch_SearchCoursesInDB (RangeQuery);
NumResults += Sch_SearchUsrsInDB (Rol_TCH); NumResults += Sch_SearchUsrsInDB (Rol_TCH); // Non-editing teachers and teachers
NumResults += Sch_SearchUsrsInDB (Rol_STD); NumResults += Sch_SearchUsrsInDB (Rol_STD);
NumResults += Sch_SearchUsrsInDB (Rol_GST); NumResults += Sch_SearchUsrsInDB (Rol_GST);
NumResults += Sch_SearchOpenDocumentsInDB (RangeQuery); NumResults += Sch_SearchOpenDocumentsInDB (RangeQuery);
@ -621,7 +621,7 @@ static void Sch_SearchInDB (void)
NumResults = Sch_SearchUsrsInDB (Rol_UNK); // Here Rol_UNK means any user NumResults = Sch_SearchUsrsInDB (Rol_UNK); // Here Rol_UNK means any user
break; break;
case Sch_SEARCH_TEACHERS: case Sch_SEARCH_TEACHERS:
NumResults = Sch_SearchUsrsInDB (Rol_TCH); NumResults = Sch_SearchUsrsInDB (Rol_TCH); // Non-editing teachers and teachers
break; break;
case Sch_SEARCH_STUDENTS: case Sch_SEARCH_STUDENTS:
NumResults = Sch_SearchUsrsInDB (Rol_STD); NumResults = Sch_SearchUsrsInDB (Rol_STD);

View File

@ -133,10 +133,8 @@ static void Sta_WriteSelectorAction (void);
static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse); static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse);
static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql_res); static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql_res);
static void Sta_WriteLogComments (long LogCod); static void Sta_WriteLogComments (long LogCod);
static void Sta_ShowNumHitsPerUsr (unsigned long NumRows, static void Sta_ShowNumHitsPerUsr (unsigned long NumRows,MYSQL_RES *mysql_res);
MYSQL_RES *mysql_res); static void Sta_ShowNumHitsPerDays (unsigned long NumRows,MYSQL_RES *mysql_res);
static void Sta_ShowNumHitsPerDays (unsigned long NumRows,
MYSQL_RES *mysql_res);
static void Sta_ShowDistrAccessesPerDaysAndHour (unsigned long NumRows,MYSQL_RES *mysql_res); static void Sta_ShowDistrAccessesPerDaysAndHour (unsigned long NumRows,MYSQL_RES *mysql_res);
static Sta_ColorType_t Sta_GetStatColorType (void); static Sta_ColorType_t Sta_GetStatColorType (void);
static void Sta_DrawBarColors (Sta_ColorType_t ColorType,float HitsMax); static void Sta_DrawBarColors (Sta_ColorType_t ColorType,float HitsMax);
@ -463,10 +461,12 @@ void Sta_AskShowCrsHits (void)
Grp_GetParCodsSeveralGrpsToShowUsrs (); Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order the lists of users of this course *****/ /***** Get and order the lists of users of this course *****/
Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS); Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs + Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs; Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;
/***** Start frame *****/ /***** Start frame *****/
sprintf (Gbl.Title,Txt_Statistics_of_visits_to_the_course_X, sprintf (Gbl.Title,Txt_Statistics_of_visits_to_the_course_X,
@ -503,6 +503,7 @@ void Sta_AskShowCrsHits (void)
The_ClassForm[Gbl.Prefs.Theme],Txt_Users, The_ClassForm[Gbl.Prefs.Theme],Txt_Users,
The_ClassForm[Gbl.Prefs.Theme]); The_ClassForm[Gbl.Prefs.Theme]);
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH);
Usr_ListUsersToSelect (Rol_NET);
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD);
fprintf (Gbl.F.Out,"</table>" fprintf (Gbl.F.Out,"</table>"
"</td>" "</td>"
@ -608,6 +609,7 @@ void Sta_AskShowCrsHits (void)
/***** Free memory used by the lists *****/ /***** Free memory used by the lists *****/
Usr_FreeUsrsList (Rol_TCH); Usr_FreeUsrsList (Rol_TCH);
Usr_FreeUsrsList (Rol_NET);
Usr_FreeUsrsList (Rol_STD); Usr_FreeUsrsList (Rol_STD);
/***** Free memory for list of selected groups *****/ /***** Free memory for list of selected groups *****/
@ -1248,6 +1250,10 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
sprintf (StrRole," AND %s.Role=%u", sprintf (StrRole," AND %s.Role=%u",
LogTable,(unsigned) Rol_TCH); LogTable,(unsigned) Rol_TCH);
break; break;
case Sta_NON_EDITING_TEACHERS:
sprintf (StrRole," AND %s.Role=%u",
LogTable,(unsigned) Rol_NET);
break;
case Sta_STUDENTS: case Sta_STUDENTS:
sprintf (StrRole," AND %s.Role=%u", sprintf (StrRole," AND %s.Role=%u",
LogTable,(unsigned) Rol_STD); LogTable,(unsigned) Rol_STD);
@ -1833,8 +1839,7 @@ static void Sta_WriteLogComments (long LogCod)
/********* Show a listing of with the number of clicks of each user **********/ /********* Show a listing of with the number of clicks of each user **********/
/*****************************************************************************/ /*****************************************************************************/
static void Sta_ShowNumHitsPerUsr (unsigned long NumRows, static void Sta_ShowNumHitsPerUsr (unsigned long NumRows,MYSQL_RES *mysql_res)
MYSQL_RES *mysql_res)
{ {
extern const char *Txt_No_INDEX; extern const char *Txt_No_INDEX;
extern const char *Txt_Photo; extern const char *Txt_Photo;
@ -1949,8 +1954,8 @@ static void Sta_ShowNumHitsPerUsr (unsigned long NumRows,
" style=\"width:%upx; height:18px;\" />" " style=\"width:%upx; height:18px;\" />"
"&nbsp;", "&nbsp;",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
UsrDat.RoleInCurrentCrsDB == Rol_STD ? 'c' : UsrDat.RoleInCurrentCrsDB == Rol_STD ? 'c' : // Student
'v', 'v', // Non-editing teacher or teacher
BarWidth); BarWidth);
Str_WriteFloatNum (Gbl.F.Out,Hits.Num); Str_WriteFloatNum (Gbl.F.Out,Hits.Num);
fprintf (Gbl.F.Out,"&nbsp;</td>" fprintf (Gbl.F.Out,"&nbsp;</td>"
@ -1965,8 +1970,7 @@ static void Sta_ShowNumHitsPerUsr (unsigned long NumRows,
/********** Show a listing of with the number of clicks in each date *********/ /********** Show a listing of with the number of clicks in each date *********/
/*****************************************************************************/ /*****************************************************************************/
static void Sta_ShowNumHitsPerDays (unsigned long NumRows, static void Sta_ShowNumHitsPerDays (unsigned long NumRows,MYSQL_RES *mysql_res)
MYSQL_RES *mysql_res)
{ {
extern const char *Txt_Date; extern const char *Txt_Date;
extern const char *Txt_Day; extern const char *Txt_Day;
@ -4070,8 +4074,9 @@ static void Sta_GetAndShowUsersStats (void)
Txt_Average_number_of_courses_to_which_a_user_belongs, Txt_Average_number_of_courses_to_which_a_user_belongs,
Txt_Average_number_of_users_belonging_to_a_course); Txt_Average_number_of_users_belonging_to_a_course);
Usr_GetAndShowNumUsrsInPlatform (Rol_STD); // Students Usr_GetAndShowNumUsrsInPlatform (Rol_STD); // Students
Usr_GetAndShowNumUsrsInPlatform (Rol_NET); // Non-editing teachers
Usr_GetAndShowNumUsrsInPlatform (Rol_TCH); // Teachers Usr_GetAndShowNumUsrsInPlatform (Rol_TCH); // Teachers
Usr_GetAndShowNumUsrsInPlatform (Rol_UNK); // Students and teachers Usr_GetAndShowNumUsrsInPlatform (Rol_UNK); // Students, non-editing teachers and teachers
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<th colspan=\"4\" style=\"height:10px;\">" "<th colspan=\"4\" style=\"height:10px;\">"
"</tr>"); "</tr>");
@ -4186,6 +4191,7 @@ static void Sta_WriteHeadDegsCrssInSWAD (void)
extern const char *Txt_With_degrees; extern const char *Txt_With_degrees;
extern const char *Txt_With_courses; extern const char *Txt_With_courses;
extern const char *Txt_With_teachers; extern const char *Txt_With_teachers;
extern const char *Txt_With_non_editing_teachers;
extern const char *Txt_With_students; extern const char *Txt_With_students;
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
@ -4211,6 +4217,9 @@ static void Sta_WriteHeadDegsCrssInSWAD (void)
"<th class=\"RIGHT_MIDDLE\">" "<th class=\"RIGHT_MIDDLE\">"
"%s" "%s"
"</th>" "</th>"
"<th class=\"RIGHT_MIDDLE\">"
"%s"
"</th>"
"</tr>", "</tr>",
Txt_Total, Txt_Total,
Txt_With_institutions, Txt_With_institutions,
@ -4218,6 +4227,7 @@ static void Sta_WriteHeadDegsCrssInSWAD (void)
Txt_With_degrees, Txt_With_degrees,
Txt_With_courses, Txt_With_courses,
Txt_With_teachers, Txt_With_teachers,
Txt_With_non_editing_teachers,
Txt_With_students); Txt_With_students);
} }
@ -4235,6 +4245,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
unsigned NumCtysWithDegs = 0; unsigned NumCtysWithDegs = 0;
unsigned NumCtysWithCrss = 0; unsigned NumCtysWithCrss = 0;
unsigned NumCtysWithTchs = 0; unsigned NumCtysWithTchs = 0;
unsigned NumCtysWithNETs = 0;
unsigned NumCtysWithStds = 0; unsigned NumCtysWithStds = 0;
/***** Get number of countries *****/ /***** Get number of countries *****/
@ -4247,6 +4258,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithDegs = Cty_GetNumCtysWithDegs (""); NumCtysWithDegs = Cty_GetNumCtysWithDegs ("");
NumCtysWithCrss = Cty_GetNumCtysWithCrss (""); NumCtysWithCrss = Cty_GetNumCtysWithCrss ("");
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,""); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,"");
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,"");
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,""); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,"");
SubQuery[0] = '\0'; SubQuery[0] = '\0';
break; break;
@ -4259,6 +4271,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery); NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery);
NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery); NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery);
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery);
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,SubQuery);
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
@ -4270,6 +4283,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery); NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery);
NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery); NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery);
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery);
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,SubQuery);
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4281,6 +4295,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery); NumCtysWithDegs = Cty_GetNumCtysWithDegs (SubQuery);
NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery); NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery);
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery);
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,SubQuery);
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4292,6 +4307,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery); NumCtysWithCrss = Cty_GetNumCtysWithCrss (SubQuery);
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery);
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,SubQuery);
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
@ -4303,6 +4319,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ", sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery); NumCtysWithTchs = Cty_GetNumCtysWithUsrs (Rol_TCH,SubQuery);
NumCtysWithNETs = Cty_GetNumCtysWithUsrs (Rol_NET,SubQuery);
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery); NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break; break;
default: default:
@ -4339,6 +4356,9 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
"<td class=\"DAT RIGHT_MIDDLE\">" "<td class=\"DAT RIGHT_MIDDLE\">"
"%u" "%u"
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">"
"%u"
"</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Countries, Txt_Countries,
@ -4350,6 +4370,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithDegs, NumCtysWithDegs,
NumCtysWithCrss, NumCtysWithCrss,
NumCtysWithTchs, NumCtysWithTchs,
NumCtysWithNETs,
NumCtysWithStds); NumCtysWithStds);
} }
@ -4366,6 +4387,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
unsigned NumInssWithDegs = 0; unsigned NumInssWithDegs = 0;
unsigned NumInssWithCrss = 0; unsigned NumInssWithCrss = 0;
unsigned NumInssWithTchs = 0; unsigned NumInssWithTchs = 0;
unsigned NumInssWithNETs = 0;
unsigned NumInssWithStds = 0; unsigned NumInssWithStds = 0;
/***** Get number of institutions *****/ /***** Get number of institutions *****/
@ -4377,6 +4399,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithDegs = Ins_GetNumInssWithDegs (""); NumInssWithDegs = Ins_GetNumInssWithDegs ("");
NumInssWithCrss = Ins_GetNumInssWithCrss (""); NumInssWithCrss = Ins_GetNumInssWithCrss ("");
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,""); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,"");
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,"");
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,""); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,"");
SubQuery[0] = '\0'; SubQuery[0] = '\0';
break; break;
@ -4388,6 +4411,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery); NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery);
NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery); NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery);
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery);
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,SubQuery);
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
@ -4398,6 +4422,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery); NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery);
NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery); NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery);
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery);
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,SubQuery);
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4408,6 +4433,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery); NumInssWithDegs = Ins_GetNumInssWithDegs (SubQuery);
NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery); NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery);
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery);
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,SubQuery);
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4418,6 +4444,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery); NumInssWithCrss = Ins_GetNumInssWithCrss (SubQuery);
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery);
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,SubQuery);
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
@ -4428,6 +4455,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ", sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery); NumInssWithTchs = Ins_GetNumInssWithUsrs (Rol_TCH,SubQuery);
NumInssWithNETs = Ins_GetNumInssWithUsrs (Rol_NET,SubQuery);
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery); NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break; break;
default: default:
@ -4462,6 +4490,9 @@ static void Sta_GetAndShowNumInssInSWAD (void)
"<td class=\"DAT RIGHT_MIDDLE\">" "<td class=\"DAT RIGHT_MIDDLE\">"
"%u" "%u"
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">"
"%u"
"</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Institutions, Txt_Institutions,
@ -4472,6 +4503,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithDegs, NumInssWithDegs,
NumInssWithCrss, NumInssWithCrss,
NumInssWithTchs, NumInssWithTchs,
NumInssWithNETs,
NumInssWithStds); NumInssWithStds);
} }
@ -4487,6 +4519,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
unsigned NumCtrsWithDegs = 0; unsigned NumCtrsWithDegs = 0;
unsigned NumCtrsWithCrss = 0; unsigned NumCtrsWithCrss = 0;
unsigned NumCtrsWithTchs = 0; unsigned NumCtrsWithTchs = 0;
unsigned NumCtrsWithNETs = 0;
unsigned NumCtrsWithStds = 0; unsigned NumCtrsWithStds = 0;
/***** Get number of centres *****/ /***** Get number of centres *****/
@ -4497,6 +4530,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (""); NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs ("");
NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (""); NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss ("");
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,""); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,"");
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,"");
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,""); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,"");
SubQuery[0] = '\0'; SubQuery[0] = '\0';
break; break;
@ -4507,6 +4541,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery); NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery);
NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery); NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery);
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery);
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,SubQuery);
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
@ -4516,6 +4551,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery); NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery);
NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery); NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery);
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery);
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,SubQuery);
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4525,6 +4561,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery); NumCtrsWithDegs = Ctr_GetNumCtrsWithDegs (SubQuery);
NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery); NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery);
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery);
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,SubQuery);
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4534,6 +4571,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery); NumCtrsWithCrss = Ctr_GetNumCtrsWithCrss (SubQuery);
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery);
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,SubQuery);
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
@ -4543,6 +4581,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ", sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery); NumCtrsWithTchs = Ctr_GetNumCtrsWithUsrs (Rol_TCH,SubQuery);
NumCtrsWithNETs = Ctr_GetNumCtrsWithUsrs (Rol_NET,SubQuery);
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery); NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break; break;
default: default:
@ -4575,6 +4614,9 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
"<td class=\"DAT RIGHT_MIDDLE\">" "<td class=\"DAT RIGHT_MIDDLE\">"
"%u" "%u"
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">"
"%u"
"</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Centres, Txt_Centres,
@ -4584,6 +4626,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithDegs, NumCtrsWithDegs,
NumCtrsWithCrss, NumCtrsWithCrss,
NumCtrsWithTchs, NumCtrsWithTchs,
NumCtrsWithNETs,
NumCtrsWithStds); NumCtrsWithStds);
} }
@ -4598,6 +4641,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
unsigned NumDegsTotal = 0; unsigned NumDegsTotal = 0;
unsigned NumDegsWithCrss = 0; unsigned NumDegsWithCrss = 0;
unsigned NumDegsWithTchs = 0; unsigned NumDegsWithTchs = 0;
unsigned NumDegsWithNETs = 0;
unsigned NumDegsWithStds = 0; unsigned NumDegsWithStds = 0;
/***** Get number of degrees *****/ /***** Get number of degrees *****/
@ -4607,6 +4651,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
NumDegsTotal = Deg_GetNumDegsTotal (); NumDegsTotal = Deg_GetNumDegsTotal ();
NumDegsWithCrss = Deg_GetNumDegsWithCrss (""); NumDegsWithCrss = Deg_GetNumDegsWithCrss ("");
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,""); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,"");
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,"");
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,""); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,"");
SubQuery[0] = '\0'; SubQuery[0] = '\0';
break; break;
@ -4616,6 +4661,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
Gbl.CurrentCty.Cty.CtyCod); Gbl.CurrentCty.Cty.CtyCod);
NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery); NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery);
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery);
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,SubQuery);
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
@ -4624,6 +4670,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
Gbl.CurrentIns.Ins.InsCod); Gbl.CurrentIns.Ins.InsCod);
NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery); NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery);
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery);
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,SubQuery);
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4632,6 +4679,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
Gbl.CurrentCtr.Ctr.CtrCod); Gbl.CurrentCtr.Ctr.CtrCod);
NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery); NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery);
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery);
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,SubQuery);
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4640,6 +4688,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery); NumDegsWithCrss = Deg_GetNumDegsWithCrss (SubQuery);
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery);
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,SubQuery);
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
@ -4648,6 +4697,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ", sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery); NumDegsWithTchs = Deg_GetNumDegsWithUsrs (Rol_TCH,SubQuery);
NumDegsWithNETs = Deg_GetNumDegsWithUsrs (Rol_NET,SubQuery);
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery); NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break; break;
default: default:
@ -4678,6 +4728,9 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
"<td class=\"DAT RIGHT_MIDDLE\">" "<td class=\"DAT RIGHT_MIDDLE\">"
"%u" "%u"
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">"
"%u"
"</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Degrees, Txt_Degrees,
@ -4686,6 +4739,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
NumDegsTotal, NumDegsTotal,
NumDegsWithCrss, NumDegsWithCrss,
NumDegsWithTchs, NumDegsWithTchs,
NumDegsWithNETs,
NumDegsWithStds); NumDegsWithStds);
} }
@ -4699,6 +4753,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
char SubQuery[128]; char SubQuery[128];
unsigned NumCrssTotal = 0; unsigned NumCrssTotal = 0;
unsigned NumCrssWithTchs = 0; unsigned NumCrssWithTchs = 0;
unsigned NumCrssWithNETs = 0;
unsigned NumCrssWithStds = 0; unsigned NumCrssWithStds = 0;
/***** Get number of courses *****/ /***** Get number of courses *****/
@ -4707,6 +4762,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
case Sco_SCOPE_SYS: case Sco_SCOPE_SYS:
NumCrssTotal = Crs_GetNumCrssTotal (); NumCrssTotal = Crs_GetNumCrssTotal ();
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,""); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,"");
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,"");
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,""); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,"");
SubQuery[0] = '\0'; SubQuery[0] = '\0';
break; break;
@ -4715,6 +4771,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
sprintf (SubQuery,"institutions.CtyCod=%ld AND ", sprintf (SubQuery,"institutions.CtyCod=%ld AND ",
Gbl.CurrentCty.Cty.CtyCod); Gbl.CurrentCty.Cty.CtyCod);
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery);
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,SubQuery);
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
@ -4722,6 +4779,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
sprintf (SubQuery,"centres.InsCod=%ld AND ", sprintf (SubQuery,"centres.InsCod=%ld AND ",
Gbl.CurrentIns.Ins.InsCod); Gbl.CurrentIns.Ins.InsCod);
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery);
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,SubQuery);
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4729,6 +4787,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
sprintf (SubQuery,"degrees.CtrCod=%ld AND ", sprintf (SubQuery,"degrees.CtrCod=%ld AND ",
Gbl.CurrentCtr.Ctr.CtrCod); Gbl.CurrentCtr.Ctr.CtrCod);
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery);
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,SubQuery);
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4736,6 +4795,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
sprintf (SubQuery,"courses.DegCod=%ld AND ", sprintf (SubQuery,"courses.DegCod=%ld AND ",
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery);
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,SubQuery);
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
@ -4743,6 +4803,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ", sprintf (SubQuery,"crs_usr.CrsCod=%ld AND ",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery); NumCrssWithTchs = Crs_GetNumCrssWithUsrs (Rol_TCH,SubQuery);
NumCrssWithNETs = Crs_GetNumCrssWithUsrs (Rol_NET,SubQuery);
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery); NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break; break;
default: default:
@ -4771,6 +4832,9 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
"<td class=\"DAT RIGHT_MIDDLE\">" "<td class=\"DAT RIGHT_MIDDLE\">"
"%u" "%u"
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">"
"%u"
"</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Courses, Txt_Courses,
@ -4778,6 +4842,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
Txt_Courses, Txt_Courses,
NumCrssTotal, NumCrssTotal,
NumCrssWithTchs, NumCrssWithTchs,
NumCrssWithNETs,
NumCrssWithStds); NumCrssWithStds);
} }
@ -5271,7 +5336,7 @@ static unsigned Sta_GetTotalNumberOfUsersInPlatform (void)
/*****************************************************************************/ /*****************************************************************************/
/******************* Get total number of users in courses ********************/ /******************* Get total number of users in courses ********************/
/*****************************************************************************/ /*****************************************************************************/
// Here Rol_UNK means "students or teachers" // Here Rol_UNK means "students, non-editing teachers or teachers"
unsigned Sta_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,Rol_Role_t Role) unsigned Sta_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,Rol_Role_t Role)
{ {

View File

@ -33,20 +33,21 @@
/************************** Public types and constants ***********************/ /************************** Public types and constants ***********************/
/*****************************************************************************/ /*****************************************************************************/
#define Sta_NUM_ROLES_STAT 11 #define Sta_NUM_ROLES_STAT 12
typedef enum typedef enum
{ {
Sta_IDENTIFIED_USRS = 0, Sta_IDENTIFIED_USRS = 0,
Sta_ALL_USRS = 1, Sta_ALL_USRS = 1,
Sta_INS_ADMINS = 2, Sta_INS_ADMINS = 2,
Sta_CTR_ADMINS = 3, Sta_CTR_ADMINS = 3,
Sta_DEG_ADMINS = 4, Sta_DEG_ADMINS = 4,
Sta_TEACHERS = 5, Sta_TEACHERS = 5,
Sta_STUDENTS = 6, Sta_NON_EDITING_TEACHERS = 6,
Sta_VISITORS = 7, Sta_STUDENTS = 7,
Sta_GUESTS = 8, Sta_VISITORS = 8,
Sta_UNKNOWN_USRS = 9, Sta_GUESTS = 9,
Sta_ME = 10, Sta_UNKNOWN_USRS = 10,
Sta_ME = 11,
} Sta_Role_t; } Sta_Role_t;
#define Sta_ROLE_DEFAULT Sta_IDENTIFIED_USRS #define Sta_ROLE_DEFAULT Sta_IDENTIFIED_USRS

View File

@ -32007,6 +32007,26 @@ const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] =
"nauczycieli" "nauczycieli"
#elif L==9 #elif L==9
"professores" "professores"
#endif
, // Sta_NON_EDITING_TEACHERS
#if L==1
"professors no editors"
#elif L==2
"nicht bearbeiteter Lehrkraft"
#elif L==3
"non-editing teachers"
#elif L==4
"profesores no editores"
#elif L==5
"enseignants non-&eacute;diteurs"
#elif L==6
"mbo'eh&aacute;ra no editores" // Okoteve traducción
#elif L==7
"professori non-editing"
#elif L==8
"nauczyciele nie edytuj&aogon;cy"
#elif L==9
"professores n&atilde;o editores"
#endif #endif
, // Sta_STUDENTS , // Sta_STUDENTS
#if L==1 #if L==1
@ -51423,6 +51443,27 @@ const char *Txt_with_new_posts =
"com novas posts"; "com novas posts";
#endif #endif
const char *Txt_With_non_editing_teachers =
#if L==1
"Amb professors no editors";
#elif L==2
"Mit nicht bearbeiteter Lehrkr&auml;ften";
#elif L==3
"With non-editing teachers";
#elif L==4
"Con profesores no editores";
#elif L==5
"Avec enseignants non-&eacute;diteurs";
#elif L==6
"Con profesores no editores"; // Okoteve traducción
#elif L==7
"Con professori non-editing";
#elif L==8
"Z nauczycielami nie edytuj&aogon;cy";
#elif L==9
"Com professores n&atilde;o editores";
#endif
const char *Txt_With_students = const char *Txt_With_students =
#if L==1 #if L==1
"Amb estudiants"; "Amb estudiants";

View File

@ -961,12 +961,12 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
switch (UsrRole) switch (UsrRole)
{ {
case Rol_STD: // Student case Rol_STD: // Student
sprintf (SubQueryRole,"Role=%u", sprintf (SubQueryRole," AND Role=%u",
(unsigned) Rol_STD); (unsigned) Rol_STD);
break; break;
case Rol_NET: // Non-editing teacher case Rol_NET: // Non-editing teacher
case Rol_TCH: // or teacher case Rol_TCH: // or teacher
sprintf (SubQueryRole,"(Role=%u OR Role=%u)", sprintf (SubQueryRole," AND (Role=%u OR Role=%u)",
(unsigned) Rol_NET,(unsigned) Rol_TCH); (unsigned) Rol_NET,(unsigned) Rol_TCH);
break; break;
default: default:
@ -978,7 +978,8 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
" (CrsCod INT NOT NULL,UNIQUE INDEX (CrsCod))" " (CrsCod INT NOT NULL,UNIQUE INDEX (CrsCod))"
" ENGINE=MEMORY" " ENGINE=MEMORY"
" SELECT CrsCod FROM crs_usr" " SELECT CrsCod FROM crs_usr"
" WHERE UsrCod=%ld AND %s", " WHERE UsrCod=%ld"
"%s",
UsrCod,SubQueryRole); UsrCod,SubQueryRole);
if (mysql_query (&Gbl.mysql,Query)) if (mysql_query (&Gbl.mysql,Query))
DB_ExitOnMySQLError ("can not create temporary table"); DB_ExitOnMySQLError ("can not create temporary table");
@ -987,12 +988,12 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
switch (OthersRole) switch (OthersRole)
{ {
case Rol_STD: // Student case Rol_STD: // Student
sprintf (SubQueryRole,"crs_usr.Role=%u", sprintf (SubQueryRole," AND crs_usr.Role=%u",
(unsigned) Rol_STD); (unsigned) Rol_STD);
break; break;
case Rol_NET: // Non-editing teacher case Rol_NET: // Non-editing teacher
case Rol_TCH: // or teacher case Rol_TCH: // or teacher
sprintf (SubQueryRole,"(crs_usr.Role=%u OR crs_usr.Role=%u)", sprintf (SubQueryRole," AND (crs_usr.Role=%u OR crs_usr.Role=%u)",
(unsigned) Rol_NET,(unsigned) Rol_TCH); (unsigned) Rol_NET,(unsigned) Rol_TCH);
break; break;
default: default:
@ -1002,7 +1003,8 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
} }
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM crs_usr,usr_courses_tmp" " FROM crs_usr,usr_courses_tmp"
" WHERE crs_usr.CrsCod=usr_courses_tmp.CrsCod AND %s", " WHERE crs_usr.CrsCod=usr_courses_tmp.CrsCod"
"%s",
SubQueryRole); SubQueryRole);
NumUsrs = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users"); NumUsrs = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users");
@ -4300,6 +4302,7 @@ void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope)
void Usr_SearchListUsrs (Rol_Role_t Role) void Usr_SearchListUsrs (Rol_Role_t Role)
{ {
char SubQueryRole[64];
char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1]; char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1];
const char *QueryFields = const char *QueryFields =
"DISTINCT usr_data.UsrCod," "DISTINCT usr_data.UsrCod,"
@ -4430,13 +4433,29 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
QueryFields, QueryFields,
OrderQuery); OrderQuery);
break; break;
case Rol_STD: case Rol_STD: // Student
case Rol_TCH: case Rol_NET: // Non-editing teacher
case Rol_TCH: // Teacher
/* /*
To achieve maximum speed, it's important to do the things in this order: To achieve maximum speed, it's important to do the things in this order:
1) Search for user's name (UsrQuery) getting candidate users 1) Search for user's name (UsrQuery) getting candidate users
2) Filter the candidate users according to scope 2) Filter the candidate users according to scope
*/ */
switch (Role)
{
case Rol_STD: // Student
sprintf (SubQueryRole," AND crs_usr.Role=%u",
(unsigned) Rol_STD);
break;
case Rol_NET: // Non-editing teacher
case Rol_TCH: // or teacher
sprintf (SubQueryRole," AND (crs_usr.Role=%u OR crs_usr.Role=%u)",
(unsigned) Rol_NET,(unsigned) Rol_TCH);
break;
default:
SubQueryRole[0] = '\0';
break;
}
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Sco_SCOPE_SYS: case Sco_SCOPE_SYS:
@ -4444,10 +4463,10 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s" sprintf (Query,"SELECT %s"
" FROM candidate_users,crs_usr,usr_data" " FROM candidate_users,crs_usr,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
OrderQuery); OrderQuery);
break; break;
case Sco_SCOPE_CTY: case Sco_SCOPE_CTY:
@ -4455,7 +4474,7 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s" sprintf (Query,"SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,institutions,usr_data" " FROM candidate_users,crs_usr,courses,degrees,centres,institutions,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod" " AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod" " AND degrees.CtrCod=centres.CtrCod"
@ -4463,7 +4482,7 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND institutions.CtyCod=%ld" " AND institutions.CtyCod=%ld"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
Gbl.CurrentCty.Cty.CtyCod, Gbl.CurrentCty.Cty.CtyCod,
OrderQuery); OrderQuery);
break; break;
@ -4472,14 +4491,14 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s" sprintf (Query,"SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,usr_data" " FROM candidate_users,crs_usr,courses,degrees,centres,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod" " AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod" " AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=%ld" " AND centres.InsCod=%ld"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentIns.Ins.InsCod,
OrderQuery); OrderQuery);
break; break;
@ -4488,13 +4507,13 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s" sprintf (Query,"SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,usr_data" " FROM candidate_users,crs_usr,courses,degrees,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod" " AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=%ld" " AND degrees.CtrCod=%ld"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
Gbl.CurrentCtr.Ctr.CtrCod, Gbl.CurrentCtr.Ctr.CtrCod,
OrderQuery); OrderQuery);
break; break;
@ -4503,12 +4522,12 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s" sprintf (Query,"SELECT %s"
" FROM candidate_users,crs_usr,courses,usr_data" " FROM candidate_users,crs_usr,courses,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=%ld" " AND courses.DegCod=%ld"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
Gbl.CurrentDeg.Deg.DegCod, Gbl.CurrentDeg.Deg.DegCod,
OrderQuery); OrderQuery);
break; break;
@ -4517,11 +4536,11 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
sprintf (Query,"SELECT %s,crs_usr.Role,crs_usr.Accepted" sprintf (Query,"SELECT %s,crs_usr.Role,crs_usr.Accepted"
" FROM candidate_users,crs_usr,usr_data" " FROM candidate_users,crs_usr,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod" " WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" "%s"
" AND crs_usr.CrsCod=%ld" " AND crs_usr.CrsCod=%ld"
" AND %s", " AND %s",
QueryFields, QueryFields,
(unsigned) Role, SubQueryRole,
Gbl.CurrentCrs.Crs.CrsCod, Gbl.CurrentCrs.Crs.CrsCod,
OrderQuery); OrderQuery);
break; break;
@ -6570,7 +6589,8 @@ void Usr_ListAllDataTchs (void)
/*****************************************************************************/ /*****************************************************************************/
// Returns number of users found // Returns number of users found
unsigned Usr_ListUsrsFound (Rol_Role_t Role,const char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY]) unsigned Usr_ListUsrsFound (Rol_Role_t Role,
const char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY])
{ {
extern const char *Txt_user[Usr_NUM_SEXS]; extern const char *Txt_user[Usr_NUM_SEXS];
extern const char *Txt_users[Usr_NUM_SEXS]; extern const char *Txt_users[Usr_NUM_SEXS];
@ -6598,10 +6618,11 @@ unsigned Usr_ListUsrsFound (Rol_Role_t Role,const char SearchQuery[Sch_MAX_BYTES
/* Number of users found */ /* Number of users found */
Sex = Usr_GetSexOfUsrsLst (Role); Sex = Usr_GetSexOfUsrsLst (Role);
sprintf (Gbl.Title,"%u %s", sprintf (Gbl.Title,"%u %s",
NumUsrs,(Role == Rol_UNK) ? ((NumUsrs == 1) ? Txt_user[Sex] : NumUsrs,
Txt_users[Sex]) : (Role == Rol_UNK) ? ((NumUsrs == 1) ? Txt_user[Sex] :
((NumUsrs == 1) ? Txt_ROLES_SINGUL_abc[Role][Sex] : Txt_users[Sex]) :
Txt_ROLES_PLURAL_abc[Role][Sex])); ((NumUsrs == 1) ? Txt_ROLES_SINGUL_abc[Role][Sex] :
Txt_ROLES_PLURAL_abc[Role][Sex]));
Lay_StartRoundFrameTable (NULL,Gbl.Title,NULL,NULL,2); Lay_StartRoundFrameTable (NULL,Gbl.Title,NULL,NULL,2);
/***** Heading row with column names *****/ /***** Heading row with column names *****/
@ -8168,7 +8189,7 @@ void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role)
float NumCrssPerUsr; float NumCrssPerUsr;
float NumUsrsPerCrs; float NumUsrsPerCrs;
char *Class = (Role == Rol_UNK) ? "DAT_N_LINE_TOP RIGHT_BOTTOM" : char *Class = (Role == Rol_UNK) ? "DAT_N_LINE_TOP RIGHT_BOTTOM" :
"DAT RIGHT_BOTTOM"; "DAT RIGHT_BOTTOM";
/***** Get the number of users belonging to any course *****/ /***** Get the number of users belonging to any course *****/
if (Role == Rol_GST) // Users not beloging to any course if (Role == Rol_GST) // Users not beloging to any course
@ -8178,11 +8199,11 @@ void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role)
/***** Get average number of courses per user *****/ /***** Get average number of courses per user *****/
NumCrssPerUsr = (Role == Rol_GST) ? 0 : NumCrssPerUsr = (Role == Rol_GST) ? 0 :
Usr_GetNumCrssPerUsr (Role); Usr_GetNumCrssPerUsr (Role);
/***** Query the number of users per course *****/ /***** Query the number of users per course *****/
NumUsrsPerCrs = (Role == Rol_GST) ? 0 : NumUsrsPerCrs = (Role == Rol_GST) ? 0 :
Usr_GetNumUsrsPerCrs (Role); Usr_GetNumUsrsPerCrs (Role);
/***** Write the total number of users *****/ /***** Write the total number of users *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
@ -8200,7 +8221,7 @@ void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role)
"</td>" "</td>"
"</tr>", "</tr>",
Class,(Role == Rol_UNK) ? Txt_Total : Class,(Role == Rol_UNK) ? Txt_Total :
Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN], Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN],
Class,NumUsrs, Class,NumUsrs,
Class,NumCrssPerUsr, Class,NumCrssPerUsr,
Class,NumUsrsPerCrs); Class,NumUsrsPerCrs);

View File

@ -372,7 +372,8 @@ void Usr_ListAllDataGsts (void);
void Usr_ListAllDataStds (void); void Usr_ListAllDataStds (void);
void Usr_ListUsrsForSelection (Rol_Role_t Role); void Usr_ListUsrsForSelection (Rol_Role_t Role);
void Usr_ListAllDataTchs (void); void Usr_ListAllDataTchs (void);
unsigned Usr_ListUsrsFound (Rol_Role_t Role,const char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY]); unsigned Usr_ListUsrsFound (Rol_Role_t Role,
const char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY]);
void Usr_ListDataAdms (void); void Usr_ListDataAdms (void);
void Usr_PutParamsPrefsAboutUsrList (void); void Usr_PutParamsPrefsAboutUsrList (void);