diff --git a/swad_changelog.h b/swad_changelog.h
index cbe4ca44..098699d4 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.66.3 (2019-03-06)"
+#define Log_PLATFORM_VERSION "SWAD 18.66.4 (2019-03-06)"
#define CSS_FILE "swad18.66.3.css"
#define JS_FILE "swad18.64.js"
/*
+ Version 18.66.4: Mar 06, 2019 Code refactoring in user's figures. (238678 lines)
Version 18.66.3: Mar 06, 2019 Changed order of figures in user's profile. (238674 lines)
Version 18.66.2: Mar 06, 2019 Fixed bug while sending a new password, reported by Rosa María Cantarero López. (238672 lines)
Version 18.66.1: Mar 06, 2019 Changed order of figures in user's profile. (238671 lines)
diff --git a/swad_profile.c b/swad_profile.c
index 27a3ce2e..a1a30912 100644
--- a/swad_profile.c
+++ b/swad_profile.c
@@ -74,6 +74,10 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
+static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures,
+ const struct UsrData *UsrDat);
+static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat,
+ Rol_Role_t Role);
static void Prf_PutLinkCalculateFigures (const char *EncryptedUsrCod);
static unsigned long Prf_GetRankingFigure (long UsrCod,const char *FieldName);
@@ -352,18 +356,10 @@ void Prf_ChangeProfileVisibility (void)
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_students_ABBREVIATION;
extern const char *Txt_Files_uploaded;
extern const char *Txt_file;
extern const char *Txt_files;
extern const char *Txt_public_FILES;
- extern const char *Txt_TIME_Since;
- extern const char *Txt_day;
- extern const char *Txt_days;
- extern const char *Txt_Today;
extern const char *Txt_Clicks;
extern const char *Txt_clicks;
extern const char *Txt_Timeline;
@@ -378,14 +374,12 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
extern const char *Txt_Messages;
extern const char *Txt_message;
extern const char *Txt_messages;
+ extern const char *Txt_day;
bool UsrIsBannedFromRanking;
struct UsrFigures UsrFigures;
- unsigned NumCrssUsrIsTch;
- unsigned NumCrssUsrIsNET;
- unsigned NumCrssUsrIsStd;
+ Rol_Role_t Role;
unsigned NumFiles;
unsigned NumPublicFiles;
- char IdFirstClickTime[Frm_MAX_BYTES_ID + 1];
/***** Get figures *****/
Prf_GetUsrFigures (UsrDat->UsrCod,&UsrFigures);
@@ -394,93 +388,14 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
fprintf (Gbl.F.Out,"
"
"
");
- /* Time since first click */
- fprintf (Gbl.F.Out,"- ",
- Txt_TIME_Since,
- Gbl.Prefs.URLIcons);
- if (UsrFigures.FirstClickTimeUTC)
- {
- /* Create unique id */
- Frm_SetUniqueId (IdFirstClickTime);
+ /***** Time since first click *****/
+ Prf_ShowTimeSinceFirstClick (&UsrFigures,UsrDat);
- fprintf (Gbl.F.Out,"",IdFirstClickTime);
- if (UsrFigures.NumDays > 0)
- fprintf (Gbl.F.Out," (%d %s)",
- UsrFigures.NumDays,
- (UsrFigures.NumDays == 1) ? Txt_day :
- Txt_days);
- fprintf (Gbl.F.Out,"",
- IdFirstClickTime,(long) UsrFigures.FirstClickTimeUTC,
- (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
- }
- else // First click time is unknown or user never logged
- /***** Button to fetch and store user's figures *****/
- Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod);
- fprintf (Gbl.F.Out,"
");
-
- /***** Number of courses in which the user is teacher *****/
- NumCrssUsrIsTch = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TCH);
- fprintf (Gbl.F.Out,"- "
- "%u %s",
- Txt_ROLES_SINGUL_Abc[Rol_TCH][UsrDat->Sex],
- Gbl.Prefs.URLIcons,
- NumCrssUsrIsTch,
- Txt_courses_ABBREVIATION);
- if (NumCrssUsrIsTch)
- 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,
- (1 << 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)",
- Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
- (1 << Rol_NET) |
- (1 << Rol_TCH)),
- Txt_teachers_ABBREVIATION,
- Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_NET,
- (1 << Rol_STD)),
- Txt_students_ABBREVIATION);
- fprintf (Gbl.F.Out,"
");
-
- /***** Number of courses in which the user is student *****/
- NumCrssUsrIsStd = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STD);
- fprintf (Gbl.F.Out,"- "
- "%u %s",
- Txt_ROLES_SINGUL_Abc[Rol_STD][UsrDat->Sex],
- Gbl.Prefs.URLIcons,
- NumCrssUsrIsStd,
- Txt_courses_ABBREVIATION);
- if (NumCrssUsrIsStd)
- 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,
- (1 << Rol_STD)),
- Txt_students_ABBREVIATION);
- fprintf (Gbl.F.Out,"
");
+ /***** Number of courses in which the user has a role *****/
+ for (Role = Rol_TCH;
+ Role >= Rol_STD;
+ Role--)
+ Prf_ShowNumCrssWithRole (UsrDat,Role);
/***** Number of files currently published *****/
if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod)))
@@ -652,6 +567,83 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
"
");
}
+/*****************************************************************************/
+/************** Show time since first click in user's profile ****************/
+/*****************************************************************************/
+
+static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures,
+ const struct UsrData *UsrDat)
+ {
+ extern const char *Txt_TIME_Since;
+ extern const char *Txt_day;
+ extern const char *Txt_days;
+ extern const char *Txt_Today;
+ char IdFirstClickTime[Frm_MAX_BYTES_ID + 1];
+
+ /* Time since first click */
+ fprintf (Gbl.F.Out,"",
+ Txt_TIME_Since,
+ Gbl.Prefs.URLIcons);
+ if (UsrFigures->FirstClickTimeUTC)
+ {
+ /* Create unique id */
+ Frm_SetUniqueId (IdFirstClickTime);
+
+ fprintf (Gbl.F.Out,"",IdFirstClickTime);
+ if (UsrFigures->NumDays > 0)
+ fprintf (Gbl.F.Out," (%d %s)",
+ UsrFigures->NumDays,
+ (UsrFigures->NumDays == 1) ? Txt_day :
+ Txt_days);
+ fprintf (Gbl.F.Out,"",
+ IdFirstClickTime,(long) UsrFigures->FirstClickTimeUTC,
+ (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ }
+ else // First click time is unknown or user never logged
+ /***** Button to fetch and store user's figures *****/
+ Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod);
+ fprintf (Gbl.F.Out,"");
+ }
+
+/*****************************************************************************/
+/************** Show time since first click in user's profile ****************/
+/*****************************************************************************/
+
+static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat,
+ Rol_Role_t Role)
+ {
+ extern const char *Rol_Icons[Rol_NUM_ROLES];
+ 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_students_ABBREVIATION;
+ unsigned NumCrss;
+
+ /***** Number of courses in which the user has a given role *****/
+ NumCrss = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Role);
+ fprintf (Gbl.F.Out,""
+ "%u %s",
+ Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex],
+ Gbl.Prefs.URLIcons,Rol_Icons[Role],
+ NumCrss,
+ Txt_courses_ABBREVIATION);
+ if (NumCrss)
+ fprintf (Gbl.F.Out," (%u %s/%u %s)",
+ Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Role,
+ (1 << Rol_NET) |
+ (1 << Rol_TCH)),
+ Txt_teachers_ABBREVIATION,
+ Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Role,
+ (1 << Rol_STD)),
+ Txt_students_ABBREVIATION);
+ fprintf (Gbl.F.Out,"");
+ }
+
/*****************************************************************************/
/******** Put contextual link with animated icon to update an action *********/
/*****************************************************************************/
diff --git a/swad_role.c b/swad_role.c
index 4bfd0843..4f5def80 100644
--- a/swad_role.c
+++ b/swad_role.c
@@ -36,6 +36,21 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
+#define Rol_NUM_ROLES 10
+const char *Rol_Icons[Rol_NUM_ROLES] =
+ {
+ "user.svg", // Rol_UNK
+ "user.svg", // Rol_GST
+ "user.svg", // Rol_USR
+ "user.svg", // Rol_STD
+ "user-tie.svg", // Rol_NET
+ "user-tie.svg", // Rol_TCH
+ "user-tie.svg", // Rol_DEG_ADM
+ "user-tie.svg", // Rol_CTR_ADM
+ "user-tie.svg", // Rol_INS_ADM
+ "user-tie.svg", // Rol_SYS_ADM
+ };
+
/*****************************************************************************/
/***************************** Private constants *****************************/
/*****************************************************************************/
diff --git a/swad_user.c b/swad_user.c
index 6d2bda69..91e55321 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -7470,11 +7470,12 @@ static void Usr_UpdateMyPrefAboutListWithPhotosPhotoInDB (void)
static void Usr_PutLinkToSeeAdmins (void)
{
+ extern const char *Rol_Icons[Rol_NUM_ROLES];
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
/***** Put form to list admins *****/
Lay_PutContextualLinkIconText (ActLstOth,NULL,NULL,
- "user-tie.svg",
+ Rol_Icons[Rol_DEG_ADM],
Txt_ROLES_PLURAL_Abc[Rol_DEG_ADM][Usr_SEX_UNKNOWN]);
}