diff --git a/swad_changelog.h b/swad_changelog.h index ea5c22e81..65f99574f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -143,14 +143,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.11 (2016-10-03)" +#define Log_PLATFORM_VERSION "SWAD 16.11.1 (2016-10-04)" #define CSS_FILE "swad15.229.css" #define JS_FILE "swad15.238.1.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* - * + Version 16.11.1: Oct 04, 2016 Code refactoring in user's usage report. (205824 lines) Version 16.11: Oct 03, 2016 Created permalinks to report files. (205793 lines) 1 change necessary in database: UPDATE actions SET Obsolete='Y' WHERE ActCod='1583'; diff --git a/swad_report.c b/swad_report.c index 220668d02..26485c1ba 100644 --- a/swad_report.c +++ b/swad_report.c @@ -57,6 +57,14 @@ /****************************** Internal types *******************************/ /*****************************************************************************/ +struct CurrentTimeUTC + { + char StrDate[10+1]; // Example: 2016-10-02 + // 1234567890 + char StrTime[8+1]; // Example: 19:03:49 + // 12345678 + }; + /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ @@ -71,18 +79,23 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Rep_WriteHeader (const char *StrCurrentDateUTC,const char *Permalink); +static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, + char *Permalink); +static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, + const char *Permalink); + +static void Rep_WriteHeader (struct CurrentTimeUTC *CurrentTimeUTC, + const char *Permalink); static void Rep_WriteSectionPlatform (void); static void Rep_WriteSectionUsrInfo (void); static void Rep_WriteSectionUsrFigures (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime, - const char *StrCurrentDateUTC, - const char *StrCurrentTimeUTC); + struct CurrentTimeUTC *CurrentTimeUTC); static void Rep_WriteSectionGlobalHits (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime); static void Rep_WriteSectionCurrentCourses (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime, - const char *StrCurrentDateUTC, + struct CurrentTimeUTC *CurrentTimeUTC, unsigned long MaxHitsPerYear); static void Rep_WriteSectionHistoricCourses (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime, @@ -110,20 +123,18 @@ static void Rep_DrawBarNumHits (float HitsNum,float HitsMax, unsigned MaxBarWidth); /*****************************************************************************/ -/********* Show my usage report (report on my use of the platform) ***********/ +/******* Request my usage report (report on my use of the platform) **********/ /*****************************************************************************/ void Rep_ReqMyUsageReport (void) { extern const char *Txt_Report_of_use_of_PLATFORM; extern const char *Txt_Generate_report; - char StrCurrentDateUTC[10+1]; // Example: 2016-10-02 - // 1234567890 - char StrCurrentTimeUTC[8+1]; // Example: 19:03:49 - // 12345678 + struct CurrentTimeUTC CurrentTimeUTC; /***** Get current date-time *****/ - Dat_GetCurrentDateTimeUTC (StrCurrentDateUTC,StrCurrentTimeUTC); + Dat_GetCurrentDateTimeUTC (CurrentTimeUTC.StrDate, + CurrentTimeUTC.StrTime); /***** Form to show my usage report *****/ Act_FormStart (ActSeeMyUsgRep); @@ -135,8 +146,8 @@ void Rep_ReqMyUsageReport (void) /***** Header *****/ fprintf (Gbl.F.Out,"
" "%s",Gbl.Usrs.Me.UsrDat.FullName); - if (StrCurrentDateUTC[0]) - fprintf (Gbl.F.Out,"
%s",StrCurrentDateUTC); + if (CurrentTimeUTC.StrDate[0]) + fprintf (Gbl.F.Out,"
%s",CurrentTimeUTC.StrDate); fprintf (Gbl.F.Out,"
"); /***** Send button and end frame *****/ @@ -146,25 +157,41 @@ void Rep_ReqMyUsageReport (void) Act_FormEnd (); } +/*****************************************************************************/ +/********* Show my usage report (report on my use of the platform) ***********/ +/*****************************************************************************/ + void Rep_ShowMyUsageReport (void) + { + struct CurrentTimeUTC CurrentTimeUTC; + char Permalink[PATH_MAX+1]; + + /***** Create my usage report *****/ + Rep_CreateMyUsageReport (&CurrentTimeUTC,Permalink); + + /***** Put link to my usage report *****/ + Rep_PutLinkToMyUsageReport (&CurrentTimeUTC,Permalink); + } + +/*****************************************************************************/ +/******** Create my usage report (report on my use of the platform) **********/ +/*****************************************************************************/ + +static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, + char *Permalink) { extern const char *Txt_Report_of_use_of_PLATFORM; extern const char *Txt_Report; - extern const char *Txt_Download; struct UsrFigures UsrFigures; char PathReports[PATH_MAX+1]; char PathFileReport[PATH_MAX+1]; - char Permalink[PATH_MAX+1]; struct tm tm_FirstClickTime; - char StrCurrentDateUTC[10+1]; // Example: 2016-10-02 - // 1234567890 - char StrCurrentTimeUTC[8+1]; // Example: 19:03:49 - // 12345678 bool GetUsrFiguresAgain; unsigned long MaxHitsPerYear; /***** Get current date-time *****/ - Dat_GetCurrentDateTimeUTC (StrCurrentDateUTC,StrCurrentTimeUTC); + Dat_GetCurrentDateTimeUTC (CurrentTimeUTC->StrDate, + CurrentTimeUTC->StrTime); /***** Path for reports *****/ sprintf (PathReports,"%s/%s",Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_REP); @@ -186,7 +213,7 @@ void Rep_ShowMyUsageReport (void) fprintf (Gbl.F.Rep,"
\n"); /***** Header *****/ - Rep_WriteHeader (StrCurrentDateUTC,Permalink); + Rep_WriteHeader (CurrentTimeUTC,Permalink); /***** Platform *****/ Rep_WriteSectionPlatform (); @@ -201,8 +228,7 @@ void Rep_ShowMyUsageReport (void) Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&UsrFigures); if (UsrFigures.FirstClickTimeUTC) gmtime_r (&UsrFigures.FirstClickTimeUTC,&tm_FirstClickTime); - Rep_WriteSectionUsrFigures (&UsrFigures,&tm_FirstClickTime, - StrCurrentDateUTC,StrCurrentTimeUTC); + Rep_WriteSectionUsrFigures (&UsrFigures,&tm_FirstClickTime,CurrentTimeUTC); /***** Global hits *****/ Rep_WriteSectionGlobalHits (&UsrFigures,&tm_FirstClickTime); @@ -210,7 +236,7 @@ void Rep_ShowMyUsageReport (void) /***** Current courses *****/ MaxHitsPerYear = Rep_GetMaxHitsPerYear (UsrFigures.FirstClickTimeUTC); Rep_WriteSectionCurrentCourses (&UsrFigures,&tm_FirstClickTime, - StrCurrentDateUTC,MaxHitsPerYear); + CurrentTimeUTC,MaxHitsPerYear); /***** Historic courses *****/ Rep_WriteSectionHistoricCourses (&UsrFigures,&tm_FirstClickTime, @@ -223,6 +249,18 @@ void Rep_ShowMyUsageReport (void) /***** Close report file *****/ Fil_CloseReportFile (); + } + +/*****************************************************************************/ +/******* Put link to my usage report (report on my use of the platform) ******/ +/*****************************************************************************/ + +static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, + const char *Permalink) + { + extern const char *Txt_Report_of_use_of_PLATFORM; + extern const char *Txt_Report; + extern const char *Txt_Download; /***** Start frame *****/ sprintf (Gbl.Title,Txt_Report_of_use_of_PLATFORM,Cfg_PLATFORM_SHORT_NAME); @@ -231,8 +269,8 @@ void Rep_ShowMyUsageReport (void) /***** Header *****/ fprintf (Gbl.F.Out,"
" "%s",Gbl.Usrs.Me.UsrDat.FullName); - if (StrCurrentDateUTC[0]) - fprintf (Gbl.F.Out,"
%s",StrCurrentDateUTC); + if (CurrentTimeUTC->StrDate[0]) + fprintf (Gbl.F.Out,"
%s",CurrentTimeUTC->StrDate); fprintf (Gbl.F.Out,"
"); /***** Put anchor and report filename *****/ @@ -260,7 +298,8 @@ void Rep_ShowMyUsageReport (void) /******************** Write header of user's usage report ********************/ /*****************************************************************************/ -static void Rep_WriteHeader (const char *StrCurrentDateUTC,const char *Permalink) +static void Rep_WriteHeader (struct CurrentTimeUTC *CurrentTimeUTC, + const char *Permalink) { extern const char *Txt_Report_of_use_of_PLATFORM; @@ -273,8 +312,8 @@ static void Rep_WriteHeader (const char *StrCurrentDateUTC,const char *Permalink /***** Subtitle *****/ fprintf (Gbl.F.Rep,"

%s",Gbl.Usrs.Me.UsrDat.FullName); - if (StrCurrentDateUTC[0]) - fprintf (Gbl.F.Rep,", %s",StrCurrentDateUTC); + if (CurrentTimeUTC->StrDate[0]) + fprintf (Gbl.F.Rep,", %s",CurrentTimeUTC->StrDate); fprintf (Gbl.F.Rep,"

"); /***** Permalink *****/ @@ -370,8 +409,7 @@ static void Rep_WriteSectionUsrInfo (void) static void Rep_WriteSectionUsrFigures (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime, - const char *StrCurrentDateUTC, - const char *StrCurrentTimeUTC) + struct CurrentTimeUTC *CurrentTimeUTC) { extern const char *Txt_Figures; extern const char *Txt_TIME_Since; @@ -414,9 +452,9 @@ static void Rep_WriteSectionUsrFigures (struct UsrFigures *UsrFigures, tm_FirstClickTime->tm_hour, // hours tm_FirstClickTime->tm_min, // minutes tm_FirstClickTime->tm_sec); // seconds - if (StrCurrentDateUTC[0]) + if (CurrentTimeUTC->StrDate[0]) fprintf (Gbl.F.Rep," %s %s %s UTC", - Txt_TIME_until,StrCurrentDateUTC,StrCurrentTimeUTC); + Txt_TIME_until,CurrentTimeUTC->StrDate,CurrentTimeUTC->StrTime); if (UsrFigures->NumDays > 0) fprintf (Gbl.F.Rep," (%d %s)", UsrFigures->NumDays, @@ -427,8 +465,10 @@ static void Rep_WriteSectionUsrFigures (struct UsrFigures *UsrFigures, else // Time of first click is unknown { fprintf (Gbl.F.Rep,"?"); - if (StrCurrentDateUTC[0]) - fprintf (Gbl.F.Rep," - %s %s UTC",StrCurrentDateUTC,StrCurrentTimeUTC); + if (CurrentTimeUTC->StrDate[0]) + fprintf (Gbl.F.Rep," - %s %s UTC", + CurrentTimeUTC->StrDate, + CurrentTimeUTC->StrTime); } fprintf (Gbl.F.Rep,""); @@ -563,7 +603,7 @@ static void Rep_WriteSectionGlobalHits (struct UsrFigures *UsrFigures, static void Rep_WriteSectionCurrentCourses (struct UsrFigures *UsrFigures, struct tm *tm_FirstClickTime, - const char *StrCurrentDateUTC, + struct CurrentTimeUTC *CurrentTimeUTC, unsigned long MaxHitsPerYear) { extern const char *Txt_Courses; @@ -573,8 +613,8 @@ static void Rep_WriteSectionCurrentCourses (struct UsrFigures *UsrFigures, fprintf (Gbl.F.Rep,"
" "

%s", Txt_Courses); - if (StrCurrentDateUTC[0]) - fprintf (Gbl.F.Rep," (%s)",StrCurrentDateUTC); + if (CurrentTimeUTC->StrDate[0]) + fprintf (Gbl.F.Rep," (%s)",CurrentTimeUTC->StrDate); fprintf (Gbl.F.Rep,"

" "