From 85ec81b870a1505a2bfa4a9401c0ced3f79f7b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 6 Mar 2019 23:52:04 +0100 Subject: [PATCH] Version18.66.5 --- swad_changelog.h | 3 +- swad_profile.c | 491 ++++++++++++++++++++++++++++------------------- 2 files changed, 298 insertions(+), 196 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 098699d4..16a65ddf 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.4 (2019-03-06)" +#define Log_PLATFORM_VERSION "SWAD 18.66.5 (2019-03-06)" #define CSS_FILE "swad18.66.3.css" #define JS_FILE "swad18.64.js" /* + Version 18.66.5: Mar 06, 2019 Code refactoring in user's figures. (238739 lines) 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) diff --git a/swad_profile.c b/swad_profile.c index a1a30912..32c5462b 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -74,10 +74,23 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures, - const struct UsrData *UsrDat); +static void Prf_ShowTimeSinceFirstClick (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat, Rol_Role_t Role); +static void Prf_ShowNumFilesCurrentlyPublished (const struct UsrData *UsrDat); +static void Prf_ShowNumClicks (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); +static void Prf_ShowNumFileViews (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); +static void Prf_ShowNumSocialPublications (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); +static void Prf_ShowNumForumPosts (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); +static void Prf_ShowNumMessagesSent (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures); +static void Prf_StartListItem (const char *Title,const char *Icon); +static void Prf_EndListItem (void); static void Prf_PutLinkCalculateFigures (const char *EncryptedUsrCod); static unsigned long Prf_GetRankingFigure (long UsrCod,const char *FieldName); @@ -356,223 +369,71 @@ void Prf_ChangeProfileVisibility (void) void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) { - 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_Clicks; - extern const char *Txt_clicks; - extern const char *Txt_Timeline; - extern const char *Txt_SOCIAL_post; - extern const char *Txt_SOCIAL_posts; - extern const char *Txt_Downloads; - extern const char *Txt_download; - extern const char *Txt_downloads; - extern const char *Txt_Forums; - extern const char *Txt_FORUM_post; - extern const char *Txt_FORUM_posts; - 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; Rol_Role_t Role; - unsigned NumFiles; - unsigned NumPublicFiles; /***** Get figures *****/ Prf_GetUsrFigures (UsrDat->UsrCod,&UsrFigures); - /***** Start left list *****/ + /***** Left list *****/ + /* Start left list */ fprintf (Gbl.F.Out,"
" "" "
"); - /***** Start right list *****/ - fprintf (Gbl.F.Out,"
" - "" - "
"); + fprintf (Gbl.F.Out,""); } /*****************************************************************************/ /************** Show time since first click in user's profile ****************/ /*****************************************************************************/ -static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures, - const struct UsrData *UsrDat) +static void Prf_ShowTimeSinceFirstClick (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) { extern const char *Txt_TIME_Since; extern const char *Txt_day; @@ -580,11 +441,9 @@ static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures, 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); + /***** Time since first click *****/ + Prf_StartListItem (Txt_TIME_Since,"clock.svg"); + if (UsrFigures->FirstClickTimeUTC) { /* Create unique id */ @@ -606,11 +465,12 @@ static void Prf_ShowTimeSinceFirstClick (const struct UsrFigures *UsrFigures, 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,"
  • "); + + Prf_EndListItem (); } /*****************************************************************************/ -/************** Show time since first click in user's profile ****************/ +/*** Show number of courses in which the user has a role in user's profile ***/ /*****************************************************************************/ static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat, @@ -625,13 +485,12 @@ static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat, /***** 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); + + Prf_StartListItem (Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex],Rol_Icons[Role]); + + fprintf (Gbl.F.Out,"%u %s", + NumCrss,Txt_courses_ABBREVIATION); + if (NumCrss) fprintf (Gbl.F.Out," (%u %s/%u %s)", Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Role, @@ -641,6 +500,248 @@ static void Prf_ShowNumCrssWithRole (const struct UsrData *UsrDat, Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Role, (1 << Rol_STD)), Txt_students_ABBREVIATION); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/******** Show number of files currently published in user's profile *********/ +/*****************************************************************************/ + +static void Prf_ShowNumFilesCurrentlyPublished (const struct UsrData *UsrDat) + { + extern const char *Txt_Files_uploaded; + extern const char *Txt_file; + extern const char *Txt_files; + extern const char *Txt_public_FILES; + unsigned NumFiles; + unsigned NumPublicFiles; + + /***** Number of files currently published *****/ + if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod))) + NumPublicFiles = Brw_GetNumPublicFilesUsr (UsrDat->UsrCod); + else + NumPublicFiles = 0; + + Prf_StartListItem (Txt_Files_uploaded,"file.svg"); + + fprintf (Gbl.F.Out,"%u %s (%u %s)", + NumFiles,(NumFiles == 1) ? Txt_file : + Txt_files, + NumPublicFiles,Txt_public_FILES); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/****************** Show number of clicks in user's profile ******************/ +/*****************************************************************************/ + +static void Prf_ShowNumClicks (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) + { + extern const char *Txt_Clicks; + extern const char *Txt_clicks; + extern const char *Txt_day; + + /***** Number of clicks *****/ + Prf_StartListItem (Txt_Clicks,"mouse-pointer.svg"); + + if (UsrFigures->NumClicks >= 0) + { + fprintf (Gbl.F.Out,"%ld %s ", + UsrFigures->NumClicks,Txt_clicks); + Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumClicks"), + Prf_GetNumUsrsWithFigure ("NumClicks")); + if (UsrFigures->NumDays > 0) + { + fprintf (Gbl.F.Out," ("); + Str_WriteFloatNum (Gbl.F.Out, + (float) UsrFigures->NumClicks / + (float) UsrFigures->NumDays); + fprintf (Gbl.F.Out,"/%s ",Txt_day); + Prf_ShowRanking (Prf_GetRankingNumClicksPerDay (UsrDat->UsrCod), + Prf_GetNumUsrsWithNumClicksPerDay ()); + fprintf (Gbl.F.Out,")"); + } + } + else // Number of clicks is unknown + /***** Button to fetch and store user's figures *****/ + Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/*************** Show number of file views in user's profile *****************/ +/*****************************************************************************/ + +static void Prf_ShowNumFileViews (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) + { + extern const char *Txt_Downloads; + extern const char *Txt_download; + extern const char *Txt_downloads; + extern const char *Txt_day; + + /***** Number of file views *****/ + Prf_StartListItem (Txt_Downloads,"download.svg"); + + if (UsrFigures->NumFileViews >= 0) + { + fprintf (Gbl.F.Out,"%ld %s ", + UsrFigures->NumFileViews, + (UsrFigures->NumFileViews == 1) ? Txt_download : + Txt_downloads); + Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumFileViews"), + Prf_GetNumUsrsWithFigure ("NumFileViews")); + if (UsrFigures->NumDays > 0) + { + fprintf (Gbl.F.Out," ("); + Str_WriteFloatNum (Gbl.F.Out, + (float) UsrFigures->NumFileViews / + (float) UsrFigures->NumDays); + fprintf (Gbl.F.Out,"/%s)",Txt_day); + } + } + else // Number of file views is unknown + /***** Button to fetch and store user's figures *****/ + Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/*********** Show number of social publications in user's profile ************/ +/*****************************************************************************/ + +static void Prf_ShowNumSocialPublications (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) + { + extern const char *Txt_Timeline; + extern const char *Txt_SOCIAL_post; + extern const char *Txt_SOCIAL_posts; + extern const char *Txt_day; + + /***** Number of social publications *****/ + Prf_StartListItem (Txt_Timeline,"comment-dots.svg"); + + if (UsrFigures->NumSocPub >= 0) + { + fprintf (Gbl.F.Out,"%ld %s ", + UsrFigures->NumSocPub, + (UsrFigures->NumSocPub == 1) ? Txt_SOCIAL_post : + Txt_SOCIAL_posts); + Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumSocPub"), + Prf_GetNumUsrsWithFigure ("NumSocPub")); + if (UsrFigures->NumDays > 0) + { + fprintf (Gbl.F.Out," ("); + Str_WriteFloatNum (Gbl.F.Out, + (float) UsrFigures->NumSocPub / + (float) UsrFigures->NumDays); + fprintf (Gbl.F.Out,"/%s)",Txt_day); + } + } + else // Number of social publications is unknown + /***** Button to fetch and store user's figures *****/ + Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/*********** Show number of social publications in user's profile ************/ +/*****************************************************************************/ + +static void Prf_ShowNumForumPosts (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) + { + extern const char *Txt_Forums; + extern const char *Txt_FORUM_post; + extern const char *Txt_FORUM_posts; + extern const char *Txt_day; + + /***** Number of posts in forums *****/ + Prf_StartListItem (Txt_Forums,"comments.svg"); + + if (UsrFigures->NumForPst >= 0) + { + fprintf (Gbl.F.Out,"%ld %s ", + UsrFigures->NumForPst, + (UsrFigures->NumForPst == 1) ? Txt_FORUM_post : + Txt_FORUM_posts); + Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumForPst"), + Prf_GetNumUsrsWithFigure ("NumForPst")); + if (UsrFigures->NumDays > 0) + { + fprintf (Gbl.F.Out," ("); + Str_WriteFloatNum (Gbl.F.Out, + (float) UsrFigures->NumForPst / + (float) UsrFigures->NumDays); + fprintf (Gbl.F.Out,"/%s)",Txt_day); + } + } + else // Number of forum posts is unknown + /***** Button to fetch and store user's figures *****/ + Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/************** Show number of messages sent in user's profile ***************/ +/*****************************************************************************/ + +static void Prf_ShowNumMessagesSent (const struct UsrData *UsrDat, + const struct UsrFigures *UsrFigures) + { + extern const char *Txt_Messages; + extern const char *Txt_message; + extern const char *Txt_messages; + extern const char *Txt_day; + + /***** Number of messages sent *****/ + Prf_StartListItem (Txt_Messages,"envelope.svg"); + + if (UsrFigures->NumMsgSnt >= 0) + { + fprintf (Gbl.F.Out,"%ld %s ", + UsrFigures->NumMsgSnt, + (UsrFigures->NumMsgSnt == 1) ? Txt_message : + Txt_messages); + Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumMsgSnt"), + Prf_GetNumUsrsWithFigure ("NumMsgSnt")); + if (UsrFigures->NumDays > 0) + { + fprintf (Gbl.F.Out," ("); + Str_WriteFloatNum (Gbl.F.Out, + (float) UsrFigures->NumMsgSnt / + (float) UsrFigures->NumDays); + fprintf (Gbl.F.Out,"/%s)",Txt_day); + } + } + else // Number of messages sent is unknown + /***** Button to fetch and store user's figures *****/ + Prf_PutLinkCalculateFigures (UsrDat->EncryptedUsrCod); + + Prf_EndListItem (); + } + +/*****************************************************************************/ +/****************** Start/end list item in user's profile ********************/ +/*****************************************************************************/ + +static void Prf_StartListItem (const char *Title,const char *Icon) + { + fprintf (Gbl.F.Out,"
  • ", + Title, + Gbl.Prefs.URLIcons,Icon); + } + +static void Prf_EndListItem (void) + { fprintf (Gbl.F.Out,"
  • "); }