diff --git a/swad_changelog.h b/swad_changelog.h index a9ea5b05e..f3c5d06f2 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -148,13 +148,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.17.4 (2016-10-08)" +#define Log_PLATFORM_VERSION "SWAD 16.17.5 (2016-10-08)" #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.17.5: Oct 08, 2016 Code refactoring in user's usage report. (206301 lines) Version 16.17.4: Oct 08, 2016 Code refactoring in user's usage report. (206292 lines) Version 16.17.3: Oct 08, 2016 Message translated in user's usage report. (206255 lines) Version 16.17.2: Oct 08, 2016 Message translated in user's usage report. (206233 lines) diff --git a/swad_report.c b/swad_report.c index ba14b235d..79e8e164a 100644 --- a/swad_report.c +++ b/swad_report.c @@ -60,7 +60,7 @@ /****************************** Internal types *******************************/ /*****************************************************************************/ -struct CurrentTimeUTC +struct Rep_CurrentTimeUTC { char StrDate[10+1]; // Example: 2016-10-02 // 1234567890 @@ -76,6 +76,18 @@ struct Rep_Hits unsigned long Max; }; +struct Rep_Report + { + struct UsrFigures UsrFigures; + struct tm tm_FirstClickTime; + struct tm tm_CurrentTime; + struct Rep_CurrentTimeUTC CurrentTimeUTC; + struct Rep_Hits Hits; + unsigned long MaxHitsPerYear; + char *FilenameReport; + char *Permalink; + }; + /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ @@ -90,35 +102,35 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_CreateMyUsageReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC, char *FilenameReport, char *Permalink); -static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_PutLinkToMyUsageReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC, const char *FilenameReport, const char *Permalink); -static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC); +static void Req_TitleReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC); static void Rep_GetCurrentDateTimeUTC (struct tm *tm_CurrentTime, - struct CurrentTimeUTC *CurrentTimeUTC); + struct Rep_CurrentTimeUTC *CurrentTimeUTC); -static void Rep_CreateNewReportFile (const struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_CreateNewReportFile (const struct Rep_CurrentTimeUTC *CurrentTimeUTC, char *FilenameReport,char *Permalink); static void Rep_CreateNewReportEntryIntoDB (const struct tm *tm_CurrentTime, const char *FilenameReport, const char *Permalink); -static void Rep_WriteHeader (const struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_WriteHeader (const struct Rep_CurrentTimeUTC *CurrentTimeUTC, const char *Permalink); static void Rep_WriteSectionPlatform (void); static void Rep_WriteSectionUsrInfo (void); static void Rep_WriteSectionUsrFigures (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime, - const struct CurrentTimeUTC *CurrentTimeUTC); + const struct Rep_CurrentTimeUTC *CurrentTimeUTC); static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures); static void Rep_WriteSectionGlobalHits (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime); static void Rep_WriteSectionCurrentCourses (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime, - const struct CurrentTimeUTC *CurrentTimeUTC, + const struct Rep_CurrentTimeUTC *CurrentTimeUTC, unsigned long MaxHitsPerYear); static void Rep_WriteSectionHistoricCourses (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime, @@ -187,7 +199,7 @@ void Rep_ReqMyUsageReport (void) void Rep_ShowMyUsageReport (void) { - struct CurrentTimeUTC CurrentTimeUTC; + struct Rep_CurrentTimeUTC CurrentTimeUTC; char FilenameReport[NAME_MAX+1]; char Permalink[PATH_MAX+1]; @@ -202,25 +214,22 @@ void Rep_ShowMyUsageReport (void) /******** Create my usage report (report on my use of the platform) **********/ /*****************************************************************************/ -static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_CreateMyUsageReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC, char *FilenameReport, char *Permalink) { extern const char *Txt_Report_of_use_of_PLATFORM; - struct tm tm_CurrentTime; - struct UsrFigures UsrFigures; - struct tm tm_FirstClickTime; + struct Rep_Report Report; bool GetUsrFiguresAgain; - unsigned long MaxHitsPerYear; /***** Get current date-time *****/ - Rep_GetCurrentDateTimeUTC (&tm_CurrentTime,CurrentTimeUTC); + Rep_GetCurrentDateTimeUTC (&Report.tm_CurrentTime,CurrentTimeUTC); /***** Create a new report file *****/ Rep_CreateNewReportFile (CurrentTimeUTC,FilenameReport,Permalink); /***** Store report entry into database *****/ - Rep_CreateNewReportEntryIntoDB (&tm_CurrentTime,FilenameReport,Permalink); + Rep_CreateNewReportEntryIntoDB (&Report.tm_CurrentTime,FilenameReport,Permalink); /***** Start file *****/ Lay_StartHTMLFile (Gbl.F.Rep,FilenameReport); @@ -238,28 +247,28 @@ static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, Rep_WriteSectionUsrInfo (); /***** Figures *****/ - Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&UsrFigures); - GetUsrFiguresAgain = Prf_GetAndStoreAllUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&UsrFigures); + Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&Report.UsrFigures); + GetUsrFiguresAgain = Prf_GetAndStoreAllUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&Report.UsrFigures); if (GetUsrFiguresAgain) - Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&UsrFigures); - if (UsrFigures.FirstClickTimeUTC) - gmtime_r (&UsrFigures.FirstClickTimeUTC,&tm_FirstClickTime); - Rep_WriteSectionUsrFigures (&UsrFigures,&tm_FirstClickTime,CurrentTimeUTC); + Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&Report.UsrFigures); + if (Report.UsrFigures.FirstClickTimeUTC) + gmtime_r (&Report.UsrFigures.FirstClickTimeUTC,&Report.tm_FirstClickTime); + Rep_WriteSectionUsrFigures (&Report.UsrFigures,&Report.tm_FirstClickTime,CurrentTimeUTC); /***** Global count of hits *****/ - Rep_WriteSectionGlobalHits (&UsrFigures,&tm_FirstClickTime); + Rep_WriteSectionGlobalHits (&Report.UsrFigures,&Report.tm_FirstClickTime); /***** Global hits distributed by action *****/ - Rep_WriteSectionHitsPerAction (&UsrFigures); + Rep_WriteSectionHitsPerAction (&Report.UsrFigures); /***** Current courses *****/ - MaxHitsPerYear = Rep_GetMaxHitsPerYear (UsrFigures.FirstClickTimeUTC); - Rep_WriteSectionCurrentCourses (&UsrFigures,&tm_FirstClickTime, - CurrentTimeUTC,MaxHitsPerYear); + Report.MaxHitsPerYear = Rep_GetMaxHitsPerYear (Report.UsrFigures.FirstClickTimeUTC); + Rep_WriteSectionCurrentCourses (&Report.UsrFigures,&Report.tm_FirstClickTime, + CurrentTimeUTC,Report.MaxHitsPerYear); /***** Historic courses *****/ - Rep_WriteSectionHistoricCourses (&UsrFigures,&tm_FirstClickTime, - MaxHitsPerYear); + Rep_WriteSectionHistoricCourses (&Report.UsrFigures,&Report.tm_FirstClickTime, + Report.MaxHitsPerYear); /***** End file *****/ fprintf (Gbl.F.Rep,"\n" @@ -273,7 +282,7 @@ static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, /******* Put link to my usage report (report on my use of the platform) ******/ /*****************************************************************************/ -static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_PutLinkToMyUsageReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC, const char *FilenameReport, const char *Permalink) { @@ -314,7 +323,7 @@ static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC, /*****************************************************************************/ // CurrentTimeUTC == NULL ==> do not write date -static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC) +static void Req_TitleReport (struct Rep_CurrentTimeUTC *CurrentTimeUTC) { extern const char *Txt_User[Usr_NUM_SEXS]; extern const char *Txt_Date; @@ -342,7 +351,7 @@ static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC) /*****************************************************************************/ static void Rep_GetCurrentDateTimeUTC (struct tm *tm_CurrentTime, - struct CurrentTimeUTC *CurrentTimeUTC) + struct Rep_CurrentTimeUTC *CurrentTimeUTC) { time_t CurrentTime; @@ -378,7 +387,7 @@ static void Rep_GetCurrentDateTimeUTC (struct tm *tm_CurrentTime, /*************** Create a new file for user's usage report *******************/ /*****************************************************************************/ -static void Rep_CreateNewReportFile (const struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_CreateNewReportFile (const struct Rep_CurrentTimeUTC *CurrentTimeUTC, char *FilenameReport,char *Permalink) { char PathReports[PATH_MAX+1]; @@ -459,7 +468,7 @@ static void Rep_CreateNewReportEntryIntoDB (const struct tm *tm_CurrentTime, /******************** Write header of user's usage report ********************/ /*****************************************************************************/ -static void Rep_WriteHeader (const struct CurrentTimeUTC *CurrentTimeUTC, +static void Rep_WriteHeader (const struct Rep_CurrentTimeUTC *CurrentTimeUTC, const char *Permalink) { extern const char *Txt_Report_of_use_of_PLATFORM; @@ -592,7 +601,7 @@ static void Rep_WriteSectionUsrInfo (void) static void Rep_WriteSectionUsrFigures (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime, - const struct CurrentTimeUTC *CurrentTimeUTC) + const struct Rep_CurrentTimeUTC *CurrentTimeUTC) { extern const char *Txt_Figures; extern const char *Txt_TIME_Since; @@ -871,7 +880,7 @@ static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures) static void Rep_WriteSectionCurrentCourses (const struct UsrFigures *UsrFigures, const struct tm *tm_FirstClickTime, - const struct CurrentTimeUTC *CurrentTimeUTC, + const struct Rep_CurrentTimeUTC *CurrentTimeUTC, unsigned long MaxHitsPerYear) { extern const char *Txt_Courses;