Version 18.64.7

This commit is contained in:
Antonio Cañas Vargas 2019-03-05 18:12:35 +01:00
parent a6e78a8a14
commit dc24789ff8
6 changed files with 66 additions and 86 deletions

View File

@ -428,10 +428,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.64.6 (2019-03-05)"
#define Log_PLATFORM_VERSION "SWAD 18.64.7 (2019-03-05)"
#define CSS_FILE "swad18.64.css"
#define JS_FILE "swad18.64.js"
/*
Version 18.64.7: Mar 05, 2019 Changes in user's figures. (238506 lines)
Version 18.64.6: Mar 05, 2019 Added non-editing teachers in user's figures. (238525 lines)
Version 18.64.5: Mar 05, 2019 Changes writing floating point numbers.
For load speed issues, the number of publications by default in the timeline becomes 20 again.

View File

@ -353,7 +353,6 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_courses_ABBREVIATION;
extern const char *Txt_teachers_ABBREVIATION;
extern const char *Txt_non_editing_teachers_ABBREVIATION;
extern const char *Txt_students_ABBREVIATION;
extern const char *Txt_Files_uploaded;
extern const char *Txt_file;
@ -397,12 +396,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsTch,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsTch)
fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_TCH),
fprintf (Gbl.F.Out," (%u %s/%u %s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_NET),
Txt_non_editing_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_STD),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,
(1 << Rol_STD)),
Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>");
@ -416,12 +416,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsNET,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsNET)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_TCH),
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_NET),
Txt_non_editing_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_STD),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
(1 << Rol_STD)),
Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>");
@ -435,12 +436,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsStd,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsStd)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_TCH),
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_NET),
Txt_non_editing_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_STD),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,
(1 << Rol_STD)),
Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>");

View File

@ -993,7 +993,6 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
extern const char *Txt_course;
extern const char *Txt_courses;
extern const char *Txt_teachers_ABBREVIATION;
extern const char *Txt_non_editing_teachers_ABBREVIATION;
extern const char *Txt_students_ABBREVIATION;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1012,12 +1011,13 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
Txt_courses);
if (NumCrss)
{
fprintf (Gbl.F.Rep," (%u %s / %u %s / %u %s):",
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_TCH),
fprintf (Gbl.F.Rep," (%u %s / %u %s):",
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_NET),
Txt_non_editing_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_STD),
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,
(1 << Rol_STD)),
Txt_students_ABBREVIATION);
/***** Get courses of a user from database *****/

View File

@ -25385,27 +25385,6 @@ const char *Txt_Non_blank_BR_questions =
"Quest&otilde;es<br />respondidas";
#endif
const char *Txt_non_editing_teachers_ABBREVIATION = // Abbreviation of "non-editing teachers"
#if L==1 // ca
"prf.n.e.";
#elif L==2 // de
"n.b.Leh.";
#elif L==3 // en
"n-e.tch.";
#elif L==4 // es
"prf.n.e.";
#elif L==5 // fr
"ens.n-&eacute;";
#elif L==6 // gn
"prf.n.e."; // Okoteve traducción
#elif L==7 // it
"prf.n-e.";
#elif L==8 // pl
"nau.n.e.";
#elif L==9 // pt
"prf.n.e.";
#endif
const char *Txt_Not_applicable =
#if L==1 // ca
"No aplicable";
@ -41366,23 +41345,23 @@ const char *Txt_Student_comment =
const char *Txt_students_ABBREVIATION = // Abbreviation of "students"
#if L==1 // ca
"est.";
"estu.";
#elif L==2 // de
"Stu.";
"Stud.";
#elif L==3 // en
"stu.";
"stud.";
#elif L==4 // es
"est.";
"estu.";
#elif L==5 // fr
"&eacute;t.";
"&eacute;tu.";
#elif L==6 // gn
"Tem.";
"Temi.";
#elif L==7 // it
"stu.";
"stud.";
#elif L==8 // pl
"stu."; // Potrzebujesz tlumaczenie
"stud."; // Potrzebujesz tlumaczenie
#elif L==9 // pt
"est.";
"estu.";
#endif
const char *Txt_Student_record_card_in_this_course_has_been_updated =
@ -42622,23 +42601,23 @@ const char *Txt_Take_a_test =
const char *Txt_teachers_ABBREVIATION = // Abbreviation of "Teachers"
#if L==1 // ca
"prf.";
"prof.";
#elif L==2 // de
"Leh.";
"Lehr.";
#elif L==3 // en
"tch.";
"teac.";
#elif L==4 // es
"prf.";
"prof.";
#elif L==5 // fr
"ens.";
"ense.";
#elif L==6 // gn
"prf."; // Okoteve traducción
"prof."; // Okoteve traducción
#elif L==7 // it
"prf.";
"prof.";
#elif L==8 // pl
"nau.";
"nauc.";
#elif L==9 // pt
"prf.";
"prof.";
#endif
const char *Txt_Teachers_files_area =

View File

@ -1022,12 +1022,16 @@ unsigned Usr_GetNumCrssOfUsrWithARoleNotAccepted (long UsrCod,Rol_Role_t Role)
}
/*****************************************************************************/
/******* Get number of users with different role in courses of a user ********/
/****** Get number of users with some given roles in courses of a user *******/
/*****************************************************************************/
#define Usr_MAX_BYTES_ROLES_STR (Rol_NUM_ROLES * (10 + 1))
unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
Rol_Role_t OthersRole)
unsigned OthersRoles)
{
Rol_Role_t Role;
char UnsignedStr[10 + 1];
char OthersRolesStr[Usr_MAX_BYTES_ROLES_STR + 1];
char SubQueryRole[64];
unsigned NumUsrs;
// This query can be made in a unique, but slower, query
@ -1068,32 +1072,26 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
UsrCod,SubQueryRole);
/***** Get the number of students/teachers in a course from database ******/
switch (OthersRole)
{
case Rol_STD: // Student
sprintf (SubQueryRole," AND crs_usr.Role=%u",
(unsigned) Rol_STD);
break;
case Rol_NET: // Non-editing teacher
sprintf (SubQueryRole," AND crs_usr.Role=%u",
(unsigned) Rol_NET);
break;
case Rol_TCH: // or teacher
sprintf (SubQueryRole," AND crs_usr.Role=%u",
(unsigned) Rol_TCH);
break;
default:
SubQueryRole[0] = '\0';
Lay_ShowErrorAndExit ("Wrong role.");
break;
}
OthersRolesStr[0] = '\0';
for (Role = Rol_STD;
Role <= Rol_TCH;
Role++)
if ((OthersRoles & (1 << Role)))
{
sprintf (UnsignedStr,"%u",(unsigned) Role);
if (OthersRolesStr[0]) // Not empty
Str_Concat (OthersRolesStr,",",
Usr_MAX_BYTES_ROLES_STR);
Str_Concat (OthersRolesStr,UnsignedStr,
Usr_MAX_BYTES_ROLES_STR);
}
NumUsrs =
(unsigned) DB_QueryCOUNT ("can not get the number of users",
"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
" FROM crs_usr,usr_courses_tmp"
" WHERE crs_usr.CrsCod=usr_courses_tmp.CrsCod"
"%s",
SubQueryRole);
" AND crs_usr.Role IN (%s)",
OthersRolesStr);
/***** Remove temporary table *****/
DB_Query ("can not remove temporary tables",

View File

@ -259,7 +259,7 @@ unsigned Usr_GetNumCrssOfUsrWithARole (long UsrCod,Rol_Role_t Role);
unsigned Usr_GetNumCrssOfUsrWithARoleNotAccepted (long UsrCod,Rol_Role_t Role);
unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
Rol_Role_t OthersRole);
unsigned OthersRoles);
void Usr_FlushCacheUsrBelongsToCurrentCrs (void);
bool Usr_CheckIfUsrBelongsToCurrentCrs (const struct UsrData *UsrDat);