Version18.66.4

This commit is contained in:
Antonio Cañas Vargas 2019-03-06 22:07:24 +01:00
parent 57a7ebe54b
commit 0316fd2f57
4 changed files with 109 additions and 100 deletions

View File

@ -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)

View File

@ -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,"<div class=\"PRF_FIG_LEFT_CONTAINER\">"
"<ul class=\"PRF_FIG_UL DAT_NOBR_N\">");
/* Time since first click */
fprintf (Gbl.F.Out,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/clock.svg');\">",
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,"<span id=\"%s\"></span>",IdFirstClickTime);
if (UsrFigures.NumDays > 0)
fprintf (Gbl.F.Out,"&nbsp;(%d&nbsp;%s)",
UsrFigures.NumDays,
(UsrFigures.NumDays == 1) ? Txt_day :
Txt_days);
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('%s',%ld,"
"%u,',&nbsp;','%s',true,false,0x6);"
"</script>",
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,"</li>");
/***** Number of courses in which the user is teacher *****/
NumCrssUsrIsTch = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TCH);
fprintf (Gbl.F.Out,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/user-tie.svg');\">"
"%u&nbsp;%s",
Txt_ROLES_SINGUL_Abc[Rol_TCH][UsrDat->Sex],
Gbl.Prefs.URLIcons,
NumCrssUsrIsTch,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsTch)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%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,"</li>");
/***** Number of courses in which the user is non-editing teacher *****/
NumCrssUsrIsNET = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_NET);
fprintf (Gbl.F.Out,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/user-tie.svg');\">"
"%u&nbsp;%s",
Txt_ROLES_SINGUL_Abc[Rol_NET][UsrDat->Sex],
Gbl.Prefs.URLIcons,
NumCrssUsrIsNET,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsNET)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%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,"</li>");
/***** Number of courses in which the user is student *****/
NumCrssUsrIsStd = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STD);
fprintf (Gbl.F.Out,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/user.svg');\">"
"%u&nbsp;%s",
Txt_ROLES_SINGUL_Abc[Rol_STD][UsrDat->Sex],
Gbl.Prefs.URLIcons,
NumCrssUsrIsStd,
Txt_courses_ABBREVIATION);
if (NumCrssUsrIsStd)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%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,"</li>");
/***** 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)
"</div>");
}
/*****************************************************************************/
/************** 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,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/clock.svg');\">",
Txt_TIME_Since,
Gbl.Prefs.URLIcons);
if (UsrFigures->FirstClickTimeUTC)
{
/* Create unique id */
Frm_SetUniqueId (IdFirstClickTime);
fprintf (Gbl.F.Out,"<span id=\"%s\"></span>",IdFirstClickTime);
if (UsrFigures->NumDays > 0)
fprintf (Gbl.F.Out,"&nbsp;(%d&nbsp;%s)",
UsrFigures->NumDays,
(UsrFigures->NumDays == 1) ? Txt_day :
Txt_days);
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('%s',%ld,"
"%u,',&nbsp;','%s',true,false,0x6);"
"</script>",
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,"</li>");
}
/*****************************************************************************/
/************** 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,"<li title=\"%s\" class=\"PRF_FIG_LI\""
" style=\"background-image:url('%s/%s');\">"
"%u&nbsp;%s",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex],
Gbl.Prefs.URLIcons,Rol_Icons[Role],
NumCrss,
Txt_courses_ABBREVIATION);
if (NumCrss)
fprintf (Gbl.F.Out,"&nbsp;(%u&nbsp;%s/%u&nbsp;%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,"</li>");
}
/*****************************************************************************/
/******** Put contextual link with animated icon to update an action *********/
/*****************************************************************************/

View File

@ -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 *****************************/
/*****************************************************************************/

View File

@ -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]);
}