From dc24789ff8fad12fe848732e91c8b1ce90b0994d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 5 Mar 2019 18:12:35 +0100 Subject: [PATCH] Version 18.64.7 --- swad_changelog.h | 3 ++- swad_profile.c | 34 +++++++++++++++-------------- swad_report.c | 12 +++++----- swad_text.c | 57 +++++++++++++++--------------------------------- swad_user.c | 44 ++++++++++++++++++------------------- swad_user.h | 2 +- 6 files changed, 66 insertions(+), 86 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index b4975b38e..3d9ea6f54 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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. diff --git a/swad_profile.c b/swad_profile.c index 75912f313..3ac1432d7 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -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,""); @@ -416,12 +416,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) NumCrssUsrIsNET, Txt_courses_ABBREVIATION); if (NumCrssUsrIsNET) - fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)", - Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,Rol_TCH), + fprintf (Gbl.F.Out," (%u %s/%u %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,""); @@ -435,12 +436,13 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) NumCrssUsrIsStd, Txt_courses_ABBREVIATION); if (NumCrssUsrIsStd) - fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)", - Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,Rol_TCH), + fprintf (Gbl.F.Out," (%u %s/%u %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,""); diff --git a/swad_report.c b/swad_report.c index 2107b3ad4..deead9b9e 100644 --- a/swad_report.c +++ b/swad_report.c @@ -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 *****/ diff --git a/swad_text.c b/swad_text.c index 097bb152d..7d8b82f26 100644 --- a/swad_text.c +++ b/swad_text.c @@ -25385,27 +25385,6 @@ const char *Txt_Non_blank_BR_questions = "Questões
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-é"; -#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 - "ét."; + "é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 = diff --git a/swad_user.c b/swad_user.c index 0da4b67b9..683754ee9 100644 --- a/swad_user.c +++ b/swad_user.c @@ -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", diff --git a/swad_user.h b/swad_user.h index f260dafb5..e8ce0c271 100644 --- a/swad_user.h +++ b/swad_user.h @@ -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);