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 *****************************/
/*****************************************************************************/
#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 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.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.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)

View File

@ -927,7 +927,7 @@ static void Rep_GetMaxHitsPerYear (struct Rep_Report *Report)
" GROUP BY Year"
// ----------------------------------------------------------
" UNION "
// Clicks as student or teacher in courses ------------------
// Clicks as student, non-editing teacher or teacher in courses
"SELECT "
"CrsCod,"
"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 *****/
if (WriteNumUsrs)
fprintf (Gbl.F.Rep," (%u %s / %u %s)",
Usr_GetNumUsrsInCrs (Rol_TCH,Crs.CrsCod),Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrs (Rol_STD,Crs.CrsCod),Txt_students_ABBREVIATION);
Usr_GetNumUsrsInCrs (Rol_NET,Crs.CrsCod) +
Usr_GetNumUsrsInCrs (Rol_TCH,Crs.CrsCod),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrs (Rol_STD,Crs.CrsCod),
Txt_students_ABBREVIATION);
}
else
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))
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))
return Rol_STD;

View File

@ -36,7 +36,7 @@
Don't change these numbers!
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,
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)
{
case Rol_STD:
case Rol_NET:
case Rol_TCH:
Gbl.Scope.Allowed = 1 << Sco_SCOPE_CRS;
break;

View File

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

View File

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

View File

@ -32007,6 +32007,26 @@ const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] =
"nauczycieli"
#elif L==9
"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
, // Sta_STUDENTS
#if L==1
@ -51423,6 +51443,27 @@ const char *Txt_with_new_posts =
"com novas posts";
#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 =
#if L==1
"Amb estudiants";

View File

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

View File

@ -372,7 +372,8 @@ void Usr_ListAllDataGsts (void);
void Usr_ListAllDataStds (void);
void Usr_ListUsrsForSelection (Rol_Role_t Role);
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_PutParamsPrefsAboutUsrList (void);