mirror of https://github.com/acanas/swad-core.git
Version18.66.4
This commit is contained in:
parent
57a7ebe54b
commit
0316fd2f57
|
@ -428,10 +428,11 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
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 CSS_FILE "swad18.66.3.css"
|
||||||
#define JS_FILE "swad18.64.js"
|
#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.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.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)
|
Version 18.66.1: Mar 06, 2019 Changed order of figures in user's profile. (238671 lines)
|
||||||
|
|
188
swad_profile.c
188
swad_profile.c
|
@ -74,6 +74,10 @@ extern struct Globals Gbl;
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** 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 void Prf_PutLinkCalculateFigures (const char *EncryptedUsrCod);
|
||||||
|
|
||||||
static unsigned long Prf_GetRankingFigure (long UsrCod,const char *FieldName);
|
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)
|
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_Files_uploaded;
|
||||||
extern const char *Txt_file;
|
extern const char *Txt_file;
|
||||||
extern const char *Txt_files;
|
extern const char *Txt_files;
|
||||||
extern const char *Txt_public_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_clicks;
|
extern const char *Txt_clicks;
|
||||||
extern const char *Txt_Timeline;
|
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_Messages;
|
||||||
extern const char *Txt_message;
|
extern const char *Txt_message;
|
||||||
extern const char *Txt_messages;
|
extern const char *Txt_messages;
|
||||||
|
extern const char *Txt_day;
|
||||||
bool UsrIsBannedFromRanking;
|
bool UsrIsBannedFromRanking;
|
||||||
struct UsrFigures UsrFigures;
|
struct UsrFigures UsrFigures;
|
||||||
unsigned NumCrssUsrIsTch;
|
Rol_Role_t Role;
|
||||||
unsigned NumCrssUsrIsNET;
|
|
||||||
unsigned NumCrssUsrIsStd;
|
|
||||||
unsigned NumFiles;
|
unsigned NumFiles;
|
||||||
unsigned NumPublicFiles;
|
unsigned NumPublicFiles;
|
||||||
char IdFirstClickTime[Frm_MAX_BYTES_ID + 1];
|
|
||||||
|
|
||||||
/***** Get figures *****/
|
/***** Get figures *****/
|
||||||
Prf_GetUsrFigures (UsrDat->UsrCod,&UsrFigures);
|
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\">"
|
fprintf (Gbl.F.Out,"<div class=\"PRF_FIG_LEFT_CONTAINER\">"
|
||||||
"<ul class=\"PRF_FIG_UL DAT_NOBR_N\">");
|
"<ul class=\"PRF_FIG_UL DAT_NOBR_N\">");
|
||||||
|
|
||||||
/* Time since first click */
|
/***** Time since first click *****/
|
||||||
fprintf (Gbl.F.Out,"<li title=\"%s\" class=\"PRF_FIG_LI\""
|
Prf_ShowTimeSinceFirstClick (&UsrFigures,UsrDat);
|
||||||
" 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);
|
/***** Number of courses in which the user has a role *****/
|
||||||
if (UsrFigures.NumDays > 0)
|
for (Role = Rol_TCH;
|
||||||
fprintf (Gbl.F.Out," (%d %s)",
|
Role >= Rol_STD;
|
||||||
UsrFigures.NumDays,
|
Role--)
|
||||||
(UsrFigures.NumDays == 1) ? Txt_day :
|
Prf_ShowNumCrssWithRole (UsrDat,Role);
|
||||||
Txt_days);
|
|
||||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
|
||||||
"writeLocalDateHMSFromUTC('%s',%ld,"
|
|
||||||
"%u,', ','%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 %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,"</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 %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,"</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 %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,"</li>");
|
|
||||||
|
|
||||||
/***** Number of files currently published *****/
|
/***** Number of files currently published *****/
|
||||||
if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod)))
|
if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod)))
|
||||||
|
@ -652,6 +567,83 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
|
||||||
"</div>");
|
"</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," (%d %s)",
|
||||||
|
UsrFigures->NumDays,
|
||||||
|
(UsrFigures->NumDays == 1) ? Txt_day :
|
||||||
|
Txt_days);
|
||||||
|
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
||||||
|
"writeLocalDateHMSFromUTC('%s',%ld,"
|
||||||
|
"%u,', ','%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 %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,"</li>");
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******** Put contextual link with animated icon to update an action *********/
|
/******** Put contextual link with animated icon to update an action *********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
15
swad_role.c
15
swad_role.c
|
@ -36,6 +36,21 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** 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 *****************************/
|
/***************************** Private constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -7470,11 +7470,12 @@ static void Usr_UpdateMyPrefAboutListWithPhotosPhotoInDB (void)
|
||||||
|
|
||||||
static void Usr_PutLinkToSeeAdmins (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];
|
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
|
|
||||||
/***** Put form to list admins *****/
|
/***** Put form to list admins *****/
|
||||||
Lay_PutContextualLinkIconText (ActLstOth,NULL,NULL,
|
Lay_PutContextualLinkIconText (ActLstOth,NULL,NULL,
|
||||||
"user-tie.svg",
|
Rol_Icons[Rol_DEG_ADM],
|
||||||
Txt_ROLES_PLURAL_Abc[Rol_DEG_ADM][Usr_SEX_UNKNOWN]);
|
Txt_ROLES_PLURAL_Abc[Rol_DEG_ADM][Usr_SEX_UNKNOWN]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue