mirror of https://github.com/acanas/swad-core.git
Version 18.64.7
This commit is contained in:
parent
a6e78a8a14
commit
dc24789ff8
|
@ -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.
|
||||||
|
|
|
@ -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," (%u %s/%u %s/%u %s)",
|
fprintf (Gbl.F.Out," (%u %s/%u %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," (%u %s/%u %s/%u %s)",
|
fprintf (Gbl.F.Out," (%u %s/%u %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>");
|
||||||
|
|
||||||
|
|
|
@ -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 *****/
|
||||||
|
|
57
swad_text.c
57
swad_text.c
|
@ -25385,27 +25385,6 @@ const char *Txt_Non_blank_BR_questions =
|
||||||
"Questões<br />respondidas";
|
"Questõ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-é";
|
|
||||||
#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
|
||||||
"ét.";
|
"é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 =
|
||||||
|
|
44
swad_user.c
44
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,
|
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",
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue