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 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 CSS_FILE "swad18.64.css"
#define JS_FILE "swad18.64.js" #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.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. 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. 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_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_courses_ABBREVIATION; extern const char *Txt_courses_ABBREVIATION;
extern const char *Txt_teachers_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_students_ABBREVIATION;
extern const char *Txt_Files_uploaded; extern const char *Txt_Files_uploaded;
extern const char *Txt_file; extern const char *Txt_file;
@ -397,12 +396,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsTch, NumCrssUsrIsTch,
Txt_courses_ABBREVIATION); Txt_courses_ABBREVIATION);
if (NumCrssUsrIsTch) if (NumCrssUsrIsTch)
fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)", fprintf (Gbl.F.Out," (%u %s/%u %s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_TCH), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_NET), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,
Txt_non_editing_teachers_ABBREVIATION, (1 << Rol_STD)),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,Rol_STD),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>"); fprintf (Gbl.F.Out,"</li>");
@ -416,12 +416,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsNET, NumCrssUsrIsNET,
Txt_courses_ABBREVIATION); Txt_courses_ABBREVIATION);
if (NumCrssUsrIsNET) if (NumCrssUsrIsNET)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s/%u&nbsp;%s)", fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_TCH), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_NET), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
Txt_non_editing_teachers_ABBREVIATION, (1 << Rol_STD)),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_STD),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>"); fprintf (Gbl.F.Out,"</li>");
@ -435,12 +436,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
NumCrssUsrIsStd, NumCrssUsrIsStd,
Txt_courses_ABBREVIATION); Txt_courses_ABBREVIATION);
if (NumCrssUsrIsStd) if (NumCrssUsrIsStd)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s/%u&nbsp;%s)", fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_TCH), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_NET), Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,
Txt_non_editing_teachers_ABBREVIATION, (1 << Rol_STD)),
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_STD),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"</li>"); 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_course;
extern const char *Txt_courses; extern const char *Txt_courses;
extern const char *Txt_teachers_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_students_ABBREVIATION;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
@ -1012,12 +1011,13 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
Txt_courses); Txt_courses);
if (NumCrss) if (NumCrss)
{ {
fprintf (Gbl.F.Rep," (%u %s / %u %s / %u %s):", fprintf (Gbl.F.Rep," (%u %s / %u %s):",
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_TCH), Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,
(1 << Rol_NET) |
(1 << Rol_TCH)),
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_NET), Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,
Txt_non_editing_teachers_ABBREVIATION, (1 << Rol_STD)),
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,Rol_STD),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
/***** Get courses of a user from database *****/ /***** 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"; "Quest&otilde;es<br />respondidas";
#endif #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 = const char *Txt_Not_applicable =
#if L==1 // ca #if L==1 // ca
"No aplicable"; "No aplicable";
@ -41366,23 +41345,23 @@ const char *Txt_Student_comment =
const char *Txt_students_ABBREVIATION = // Abbreviation of "students" const char *Txt_students_ABBREVIATION = // Abbreviation of "students"
#if L==1 // ca #if L==1 // ca
"est."; "estu.";
#elif L==2 // de #elif L==2 // de
"Stu."; "Stud.";
#elif L==3 // en #elif L==3 // en
"stu."; "stud.";
#elif L==4 // es #elif L==4 // es
"est."; "estu.";
#elif L==5 // fr #elif L==5 // fr
"&eacute;t."; "&eacute;tu.";
#elif L==6 // gn #elif L==6 // gn
"Tem."; "Temi.";
#elif L==7 // it #elif L==7 // it
"stu."; "stud.";
#elif L==8 // pl #elif L==8 // pl
"stu."; // Potrzebujesz tlumaczenie "stud."; // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"est."; "estu.";
#endif #endif
const char *Txt_Student_record_card_in_this_course_has_been_updated = 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" const char *Txt_teachers_ABBREVIATION = // Abbreviation of "Teachers"
#if L==1 // ca #if L==1 // ca
"prf."; "prof.";
#elif L==2 // de #elif L==2 // de
"Leh."; "Lehr.";
#elif L==3 // en #elif L==3 // en
"tch."; "teac.";
#elif L==4 // es #elif L==4 // es
"prf."; "prof.";
#elif L==5 // fr #elif L==5 // fr
"ens."; "ense.";
#elif L==6 // gn #elif L==6 // gn
"prf."; // Okoteve traducción "prof."; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"prf."; "prof.";
#elif L==8 // pl #elif L==8 // pl
"nau."; "nauc.";
#elif L==9 // pt #elif L==9 // pt
"prf."; "prof.";
#endif #endif
const char *Txt_Teachers_files_area = 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, 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]; char SubQueryRole[64];
unsigned NumUsrs; unsigned NumUsrs;
// This query can be made in a unique, but slower, query // 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); UsrCod,SubQueryRole);
/***** Get the number of students/teachers in a course from database ******/ /***** Get the number of students/teachers in a course from database ******/
switch (OthersRole) OthersRolesStr[0] = '\0';
{ for (Role = Rol_STD;
case Rol_STD: // Student Role <= Rol_TCH;
sprintf (SubQueryRole," AND crs_usr.Role=%u", Role++)
(unsigned) Rol_STD); if ((OthersRoles & (1 << Role)))
break; {
case Rol_NET: // Non-editing teacher sprintf (UnsignedStr,"%u",(unsigned) Role);
sprintf (SubQueryRole," AND crs_usr.Role=%u", if (OthersRolesStr[0]) // Not empty
(unsigned) Rol_NET); Str_Concat (OthersRolesStr,",",
break; Usr_MAX_BYTES_ROLES_STR);
case Rol_TCH: // or teacher Str_Concat (OthersRolesStr,UnsignedStr,
sprintf (SubQueryRole," AND crs_usr.Role=%u", Usr_MAX_BYTES_ROLES_STR);
(unsigned) Rol_TCH); }
break;
default:
SubQueryRole[0] = '\0';
Lay_ShowErrorAndExit ("Wrong role.");
break;
}
NumUsrs = NumUsrs =
(unsigned) DB_QueryCOUNT ("can not get the number of users", (unsigned) DB_QueryCOUNT ("can not get the number of users",
"SELECT COUNT(DISTINCT crs_usr.UsrCod)" "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" " WHERE crs_usr.CrsCod=usr_courses_tmp.CrsCod"
"%s", " AND crs_usr.Role IN (%s)",
SubQueryRole); OthersRolesStr);
/***** Remove temporary table *****/ /***** Remove temporary table *****/
DB_Query ("can not remove temporary tables", 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_GetNumCrssOfUsrWithARoleNotAccepted (long UsrCod,Rol_Role_t Role);
unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole, unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
Rol_Role_t OthersRole); unsigned OthersRoles);
void Usr_FlushCacheUsrBelongsToCurrentCrs (void); void Usr_FlushCacheUsrBelongsToCurrentCrs (void);
bool Usr_CheckIfUsrBelongsToCurrentCrs (const struct UsrData *UsrDat); bool Usr_CheckIfUsrBelongsToCurrentCrs (const struct UsrData *UsrDat);