diff --git a/swad_action.c b/swad_action.c
index 2be9426d2..0cf3b1e01 100644
--- a/swad_action.c
+++ b/swad_action.c
@@ -1636,9 +1636,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRemSocComGbl */{1508,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_RemoveSocialComUsr ,NULL},
/* ActSeeOthPubPrf */{1402,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_GetUsrDatAndShowUserProfile,NULL},
-
/* ActCalFig */{1405,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_CalculateFigures ,NULL},
-// /* ActCalNumMsgSnt */{1407,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_CalculateFigures ,NULL},
/* ActFolUsr */{1410,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Fol_FollowUsr1 ,Fol_FollowUsr2 ,NULL},
/* ActUnfUsr */{1411,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Fol_UnfollowUsr1 ,Fol_UnfollowUsr2 ,NULL},
diff --git a/swad_changelog.h b/swad_changelog.h
index ff8e0f682..b4975b38e 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.5 (2019-03-05)"
+#define Log_PLATFORM_VERSION "SWAD 18.64.6 (2019-03-05)"
#define CSS_FILE "swad18.64.css"
#define JS_FILE "swad18.64.js"
/*
+ 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.
The actions in buttons to calculate user's figures are merged in one. (238471 lines)
diff --git a/swad_profile.c b/swad_profile.c
index ce5e8d7fc..75912f313 100644
--- a/swad_profile.c
+++ b/swad_profile.c
@@ -353,6 +353,7 @@ 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;
@@ -375,8 +376,9 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
extern const char *Txt_messages;
bool UsrIsBannedFromRanking;
struct UsrFigures UsrFigures;
- unsigned NumCrssUsrIsTeacher;
- unsigned NumCrssUsrIsStudent;
+ unsigned NumCrssUsrIsTch;
+ unsigned NumCrssUsrIsNET;
+ unsigned NumCrssUsrIsStd;
unsigned NumFiles;
unsigned NumPublicFiles;
char IdFirstClickTime[Frm_MAX_BYTES_ID + 1];
@@ -386,35 +388,58 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
"
");
/***** Number of courses in which the user is teacher *****/
- NumCrssUsrIsTeacher = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TCH);
+ NumCrssUsrIsTch = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TCH);
fprintf (Gbl.F.Out,"- "
"%u %s",
Txt_ROLES_SINGUL_Abc[Rol_TCH][UsrDat->Sex],
Gbl.Prefs.URLIcons,
- NumCrssUsrIsTeacher,
+ NumCrssUsrIsTch,
Txt_courses_ABBREVIATION);
- if (NumCrssUsrIsTeacher)
- fprintf (Gbl.F.Out," (%u %s/%u %s)",
+ if (NumCrssUsrIsTch)
+ fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TCH,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),
Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"
");
+ /***** Number of courses in which the user is non-editing teacher *****/
+ NumCrssUsrIsNET = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_NET);
+ fprintf (Gbl.F.Out,"- "
+ "%u %s",
+ Txt_ROLES_SINGUL_Abc[Rol_NET][UsrDat->Sex],
+ Gbl.Prefs.URLIcons,
+ NumCrssUsrIsNET,
+ Txt_courses_ABBREVIATION);
+ if (NumCrssUsrIsNET)
+ fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)",
+ Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,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),
+ Txt_students_ABBREVIATION);
+ fprintf (Gbl.F.Out,"
");
+
/***** Number of courses in which the user is student *****/
- NumCrssUsrIsStudent = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STD);
+ NumCrssUsrIsStd = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STD);
fprintf (Gbl.F.Out,"- "
"%u %s",
Txt_ROLES_SINGUL_Abc[Rol_STD][UsrDat->Sex],
Gbl.Prefs.URLIcons,
- NumCrssUsrIsStudent,
+ NumCrssUsrIsStd,
Txt_courses_ABBREVIATION);
- if (NumCrssUsrIsStudent)
- fprintf (Gbl.F.Out," (%u %s/%u %s)",
+ if (NumCrssUsrIsStd)
+ fprintf (Gbl.F.Out," (%u %s/%u %s/%u %s)",
Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STD,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),
Txt_students_ABBREVIATION);
fprintf (Gbl.F.Out,"
");
@@ -445,7 +470,7 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
Gbl.Prefs.URLIcons);
if (UsrFigures.FirstClickTimeUTC)
{
- /* Create unique id for new comment */
+ /* Create unique id */
Frm_SetUniqueId (IdFirstClickTime);
fprintf (Gbl.F.Out,"",IdFirstClickTime);
diff --git a/swad_report.c b/swad_report.c
index 860fd69b7..2107b3ad4 100644
--- a/swad_report.c
+++ b/swad_report.c
@@ -993,6 +993,7 @@ 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;
@@ -1011,9 +1012,11 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
Txt_courses);
if (NumCrss)
{
- fprintf (Gbl.F.Rep," (%u %s / %u %s):",
+ fprintf (Gbl.F.Rep," (%u %s / %u %s / %u %s):",
Usr_GetNumUsrsInCrssOfAUsr (Gbl.Usrs.Me.UsrDat.UsrCod,Role,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),
Txt_students_ABBREVIATION);
diff --git a/swad_text.c b/swad_text.c
index 7d8b82f26..097bb152d 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -25385,6 +25385,27 @@ 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";
@@ -41345,23 +41366,23 @@ const char *Txt_Student_comment =
const char *Txt_students_ABBREVIATION = // Abbreviation of "students"
#if L==1 // ca
- "estu.";
+ "est.";
#elif L==2 // de
- "Stud.";
+ "Stu.";
#elif L==3 // en
- "stud.";
+ "stu.";
#elif L==4 // es
- "estu.";
+ "est.";
#elif L==5 // fr
- "étu.";
+ "ét.";
#elif L==6 // gn
- "Temi.";
+ "Tem.";
#elif L==7 // it
- "stud.";
+ "stu.";
#elif L==8 // pl
- "stud."; // Potrzebujesz tlumaczenie
+ "stu."; // Potrzebujesz tlumaczenie
#elif L==9 // pt
- "estu.";
+ "est.";
#endif
const char *Txt_Student_record_card_in_this_course_has_been_updated =
@@ -42601,23 +42622,23 @@ const char *Txt_Take_a_test =
const char *Txt_teachers_ABBREVIATION = // Abbreviation of "Teachers"
#if L==1 // ca
- "prof.";
+ "prf.";
#elif L==2 // de
- "Lehr.";
+ "Leh.";
#elif L==3 // en
- "teac.";
+ "tch.";
#elif L==4 // es
- "prof.";
+ "prf.";
#elif L==5 // fr
- "ense.";
+ "ens.";
#elif L==6 // gn
- "prof."; // Okoteve traducción
+ "prf."; // Okoteve traducción
#elif L==7 // it
- "prof.";
+ "prf.";
#elif L==8 // pl
- "nauc.";
+ "nau.";
#elif L==9 // pt
- "prof.";
+ "prf.";
#endif
const char *Txt_Teachers_files_area =
diff --git a/swad_user.c b/swad_user.c
index 96c8ce314..0da4b67b9 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -1037,7 +1037,8 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
DB_Query ("can not remove temporary tables",
"DROP TEMPORARY TABLE IF EXISTS usr_courses_tmp");
- /***** Create temporary table with all user's courses as student/teacher *****/
+ /***** Create temporary table with all user's courses
+ as student/non-editing teacher/teacher *****/
switch (UsrRole)
{
case Rol_STD: // Student
@@ -1045,9 +1046,12 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
(unsigned) Rol_STD);
break;
case Rol_NET: // Non-editing teacher
+ sprintf (SubQueryRole," AND Role=%u",
+ (unsigned) Rol_NET);
+ break;
case Rol_TCH: // or teacher
- sprintf (SubQueryRole," AND (Role=%u OR Role=%u)",
- (unsigned) Rol_NET,(unsigned) Rol_TCH);
+ sprintf (SubQueryRole," AND Role=%u",
+ (unsigned) Rol_TCH);
break;
default:
SubQueryRole[0] = '\0';
@@ -1071,9 +1075,12 @@ unsigned Usr_GetNumUsrsInCrssOfAUsr (long UsrCod,Rol_Role_t UsrRole,
(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 OR crs_usr.Role=%u)",
- (unsigned) Rol_NET,(unsigned) Rol_TCH);
+ sprintf (SubQueryRole," AND crs_usr.Role=%u",
+ (unsigned) Rol_TCH);
break;
default:
SubQueryRole[0] = '\0';