diff --git a/swad_action.c b/swad_action.c index 2896b565..eafade38 100644 --- a/swad_action.c +++ b/swad_action.c @@ -586,7 +586,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActSeeAsg ] = { 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" }, [ActSeePrj ] = {1674, 2,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" }, [ActSeeAllCfe ] = { 85, 3,TabAss,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsSee ,"bullhorn" }, - [ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Qst_RequestEditQsts ,"tasks" }, + [ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,Qst_RequestEditQsts ,"tasks" }, [ActReqTst ] = { 103, 5,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" }, [ActSeeAllExa ] = {1848, 6,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" }, [ActSeeAllGam ] = {1649, 7,TabAss,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeAllGames ,"gamepad" }, @@ -726,10 +726,10 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActCfgTst ] = { 451,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstCfg_CheckAndShowFormConfig ,NULL}, [ActRcvCfgTst ] = { 454,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstCfg_ReceiveConfigTst ,NULL}, - [ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,TstPrn_SelDatesToSeeMyPrints ,NULL}, + [ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,TstPrn_SelDatesToSeeMyPrints ,NULL}, [ActSeeMyTstResCrs ] = {1084,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstPrn_ShowMyPrints ,NULL}, [ActSeeOneTstResMe ] = {1085,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstPrn_ShowOnePrint ,NULL}, - [ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,TstPrn_SelUsrsToViewUsrsPrints ,NULL}, + [ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,TstPrn_SelUsrsToViewUsrsPrints ,NULL}, [ActSeeUsrTstResCrs ] = {1081,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstPrn_GetUsrsAndShowPrints ,NULL}, [ActSeeOneTstResOth ] = {1082,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TstPrn_ShowOnePrint ,NULL}, @@ -745,7 +745,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActUnhExa ] = {1884,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_UnhideExam ,NULL}, [ActReqLnkExa ] = {1936,-1,TabUnk,ActSeeAllExa ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaRsc_GetLinkToExam ,NULL}, - [ActFrmNewExaSet ] = {1892,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,ExaSet_RequestCreatOrEditSet ,NULL}, + [ActFrmNewExaSet ] = {1892,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,ExaSet_RequestCreatOrEditSet ,NULL}, [ActNewExaSet ] = {1898,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ReceiveFormSet ,NULL}, [ActReqRemExaSet ] = {1893,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RequestRemoveSet ,NULL}, [ActRemExaSet ] = {1894,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RemoveSet ,NULL}, @@ -754,7 +754,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActChgTitExaSet ] = {1897,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ChangeSetTitle ,NULL}, [ActChgNumQstExaSet ] = {1899,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ChangeNumQstsToExam ,NULL}, - [ActReqAddQstExaSet ] = {1885,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,ExaSet_ReqSelectQstsToAddToSet ,NULL}, + [ActReqAddQstExaSet ] = {1885,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,ExaSet_ReqSelectQstsToAddToSet ,NULL}, [ActLstTstQstForSet ] = {1886,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ListQstsToAddToSet ,NULL}, [ActAddQstToExa ] = {1887,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_AddQstsToSet ,NULL}, [ActReqRemSetQst ] = {1888,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RequestRemoveQstFromSet ,NULL}, @@ -834,7 +834,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActRemGam ] = {1657,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RemoveGame ,NULL}, [ActHidGam ] = {1660,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_HideGame ,NULL}, [ActUnhGam ] = {1661,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_UnhideGame ,NULL}, - [ActAddOneGamQst ] = {1662,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Gam_ReqSelectQstsToAddToGame ,NULL}, + [ActAddOneGamQst ] = {1662,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToDistantPastToNow ,Gam_ReqSelectQstsToAddToGame ,NULL}, [ActGamLstTstQst ] = {1666,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ListQstsToAddToGame ,NULL}, [ActAddTstQstToGam ] = {1667,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_AddQstsToGame ,NULL}, [ActReqRemGamQst ] = {1664,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestRemoveQstFromGame ,NULL}, @@ -1765,7 +1765,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActReqUseGbl ] = { 761, 0,TabAna,ActReqUseGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fig_ReqShowFigures ,"chart-pie" }, [ActSeePhoDeg ] = { 447, 1,TabAna,ActSeePhoDeg ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ShowPhotoDegree ,"graduation-cap" }, [ActReqStaCrs ] = { 767, 2,TabAna,ActReqStaCrs ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ind_ReqIndicatorsCourses ,"tasks" }, - [ActReqAccGbl ] = { 591, 3,TabAna,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Sta_SetIniEndDates ,Sta_AskShowGblHits ,"chart-line" }, + [ActReqAccGbl ] = { 591, 3,TabAna,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToRecentWeeks ,Sta_AskShowGblHits ,"chart-line" }, [ActReqMyUsgRep ] = {1586, 4,TabAna,ActReqMyUsgRep ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rep_ReqMyUsageReport ,"file-alt" }, [ActMFUAct ] = { 993, 5,TabAna,ActMFUAct ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MFU_ShowMyMFUActions ,"heart" }, @@ -1774,7 +1774,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActPrnPhoDeg ] = { 448,-1,TabUnk,ActSeePhoDeg ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Pho_PrintPhotoDegree ,NULL}, [ActCalPhoDeg ] = { 444,-1,TabUnk,ActSeePhoDeg ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_CalcPhotoDegree ,NULL}, [ActSeeAccGbl ] = { 79,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_SeeGblAccesses ,NULL}, - [ActReqAccCrs ] = { 594,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Sta_SetIniEndDates ,Sta_AskShowCrsHits ,NULL}, + [ActReqAccCrs ] = { 594,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToRecentWeeks ,Sta_AskShowCrsHits ,NULL}, [ActSeeAccCrs ] = { 119,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_SeeCrsAccesses ,NULL}, [ActSeeAllStaCrs ] = { 768,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Ind_ShowIndicatorsCourses ,NULL}, diff --git a/swad_changelog.h b/swad_changelog.h index e93ab669..37cced2e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -606,10 +606,11 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate TODO: Attach pdf files in multimedia. */ -#define Log_PLATFORM_VERSION "SWAD 22.50 (2022-10-19)" +#define Log_PLATFORM_VERSION "SWAD 22.50.1 (2022-10-19)" #define CSS_FILE "swad22.49.4.css" #define JS_FILE "swad22.49.js" /* + Version 22.50.1: Oct 19, 2022 Code refactoring related to dates. (333332 lines) Version 22.50: Oct 19, 2022 Code refactoring related to dates. (333318 lines) Version 22.49.9: Oct 18, 2022 Code refactoring related to XML. (333257 lines) Version 22.49.8: Oct 18, 2022 Code refactoring related to parameters. (333253 lines) diff --git a/swad_date.c b/swad_date.c index a2e2db49..e9b46076 100644 --- a/swad_date.c +++ b/swad_date.c @@ -95,9 +95,14 @@ static struct struct timeval tvStart; struct timeval tvPageCreated; time_t StartExecutionTimeUTC; - struct Dat_DateTime Now; long TimeGenerationInMicroseconds; long TimeSendInMicroseconds; + struct Dat_DateTime Now; + struct + { + struct Dat_DateTime DateTime[Dat_NUM_START_END_TIME]; // TODO: Remove in future versions? + time_t TimeUTC[Dat_NUM_START_END_TIME]; + } Range; } Dat_Time = { .TimeGenerationInMicroseconds = 0L, @@ -575,6 +580,20 @@ void Dat_ConvDateToDateStr (const struct Dat_Date *Date,char StrDate[Cns_MAX_BYT } } +/*****************************************************************************/ +/**************************** Get start/end date *****************************/ +/*****************************************************************************/ + +time_t Dat_GetRangeTimeUTC (Dat_StartEndTime_t StartEndTime) + { + return Dat_Time.Range.TimeUTC[StartEndTime]; + } + +struct Dat_Date *Dat_GetRangeDate (Dat_StartEndTime_t StartEndTime) + { + return &Dat_Time.Range.DateTime[StartEndTime].Date; + } + /*****************************************************************************/ /*************** Show forms to enter initial and ending dates ****************/ /*****************************************************************************/ @@ -596,7 +615,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS HTM_TD_Begin ("class=\"LM\""); Dat_WriteFormClientLocalDateTimeFromTimeUTC ("Start", "Start", - Gbl.DateRange.TimeUTC[Dat_STR_TIME], + Dat_Time.Range.TimeUTC[Dat_STR_TIME], Cfg_LOG_START_YEAR, CurrentYear, Dat_FORM_SECONDS_ON, @@ -623,7 +642,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS HTM_TD_Begin ("class=\"LM\""); Dat_WriteFormClientLocalDateTimeFromTimeUTC ("End", "End", - Gbl.DateRange.TimeUTC[Dat_END_TIME], + Dat_Time.Range.TimeUTC[Dat_END_TIME], Cfg_LOG_START_YEAR, CurrentYear, Dat_FORM_SECONDS_ON, @@ -1150,10 +1169,22 @@ void Dat_GetDateFromForm (const char *ParamNameDay,const char *ParamNameMonth,co /******* Set initial date to distant past and end date to current date *******/ /*****************************************************************************/ -void Dat_SetIniEndDates (void) +void Dat_SetIniEndDatesToDistantPastToNow (void) { - Gbl.DateRange.TimeUTC[Dat_STR_TIME] = (time_t) 0; - Gbl.DateRange.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); + Dat_Time.Range.TimeUTC[Dat_STR_TIME] = (time_t) 0; + Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); + } + +/*****************************************************************************/ +/************ Set end date to current date ************/ +/************ and set initial date to end date minus several days ************/ +/*****************************************************************************/ + +void Dat_SetIniEndDatesToRecentWeeks (void) + { + Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); + Dat_Time.Range.TimeUTC[Dat_STR_TIME] = Dat_Time.Range.TimeUTC[Dat_END_TIME] - + ((Cfg_DAYS_IN_RECENT_LOG - 1) * 24 * 60 * 60); } /*****************************************************************************/ @@ -1162,8 +1193,8 @@ void Dat_SetIniEndDates (void) void Dat_WriteParamsIniEndDates (void) { - Par_PutHiddenParamUnsigned (NULL,"StartTimeUTC",Gbl.DateRange.TimeUTC[Dat_STR_TIME]); - Par_PutHiddenParamUnsigned (NULL,"EndTimeUTC" ,Gbl.DateRange.TimeUTC[Dat_END_TIME]); + Par_PutHiddenParamUnsigned (NULL,"StartTimeUTC",Dat_Time.Range.TimeUTC[Dat_STR_TIME]); + Par_PutHiddenParamUnsigned (NULL,"EndTimeUTC" ,Dat_Time.Range.TimeUTC[Dat_END_TIME]); } /*****************************************************************************/ @@ -1176,11 +1207,11 @@ void Dat_GetIniEndDatesFromForm (void) struct tm *tm_ptr; /***** Get initial date *****/ - Gbl.DateRange.TimeUTC[Dat_STR_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); - if (Gbl.DateRange.TimeUTC[Dat_STR_TIME]) + Dat_Time.Range.TimeUTC[Dat_STR_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); + if (Dat_Time.Range.TimeUTC[Dat_STR_TIME]) /* Convert time UTC to a local date */ - tm_ptr = Dat_GetLocalTimeFromClock (&Gbl.DateRange.TimeUTC[Dat_STR_TIME]); - else // Gbl.DateRange.TimeUTC[Dat_STR_TIME] == 0 ==> initial date not specified + tm_ptr = Dat_GetLocalTimeFromClock (&Dat_Time.Range.TimeUTC[Dat_STR_TIME]); + else // Dat_Time.Range.TimeUTC[Dat_STR_TIME] == 0 ==> initial date not specified { tm.tm_year = Cfg_LOG_START_YEAR - 1900; tm.tm_mon = 0; // January @@ -1192,32 +1223,32 @@ void Dat_GetIniEndDatesFromForm (void) // (use timezone information and system databases to) // attempt to determine whether DST // is in effect at the specified time. - if ((Gbl.DateRange.TimeUTC[Dat_STR_TIME] = mktime (&tm)) < 0) - Gbl.DateRange.TimeUTC[Dat_STR_TIME] = (time_t) 0; + if ((Dat_Time.Range.TimeUTC[Dat_STR_TIME] = mktime (&tm)) < 0) + Dat_Time.Range.TimeUTC[Dat_STR_TIME] = (time_t) 0; tm_ptr = &tm; } - Gbl.DateRange.DateIni.Date.Year = tm_ptr->tm_year + 1900; - Gbl.DateRange.DateIni.Date.Month = tm_ptr->tm_mon + 1; - Gbl.DateRange.DateIni.Date.Day = tm_ptr->tm_mday; - Gbl.DateRange.DateIni.Time.Hour = tm_ptr->tm_hour; - Gbl.DateRange.DateIni.Time.Minute = tm_ptr->tm_min; - Gbl.DateRange.DateIni.Time.Second = tm_ptr->tm_sec; + Dat_Time.Range.DateTime[Dat_STR_TIME].Date.Year = tm_ptr->tm_year + 1900; + Dat_Time.Range.DateTime[Dat_STR_TIME].Date.Month = tm_ptr->tm_mon + 1; + Dat_Time.Range.DateTime[Dat_STR_TIME].Date.Day = tm_ptr->tm_mday; + Dat_Time.Range.DateTime[Dat_STR_TIME].Time.Hour = tm_ptr->tm_hour; + Dat_Time.Range.DateTime[Dat_STR_TIME].Time.Minute = tm_ptr->tm_min; + Dat_Time.Range.DateTime[Dat_STR_TIME].Time.Second = tm_ptr->tm_sec; /***** Get end date *****/ - Gbl.DateRange.TimeUTC[Dat_END_TIME] = Dat_GetTimeUTCFromForm ("EndTimeUTC"); - if (Gbl.DateRange.TimeUTC[Dat_END_TIME] == 0) // Gbl.DateRange.TimeUTC[Dat_END_TIME] == 0 ==> end date not specified - Gbl.DateRange.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); + Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetTimeUTCFromForm ("EndTimeUTC"); + if (Dat_Time.Range.TimeUTC[Dat_END_TIME] == 0) // Dat_Time.Range.TimeUTC[Dat_END_TIME] == 0 ==> end date not specified + Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); /* Convert current time UTC to a local date */ - tm_ptr = Dat_GetLocalTimeFromClock (&Gbl.DateRange.TimeUTC[Dat_END_TIME]); + tm_ptr = Dat_GetLocalTimeFromClock (&Dat_Time.Range.TimeUTC[Dat_END_TIME]); - Gbl.DateRange.DateEnd.Date.Year = tm_ptr->tm_year + 1900; - Gbl.DateRange.DateEnd.Date.Month = tm_ptr->tm_mon + 1; - Gbl.DateRange.DateEnd.Date.Day = tm_ptr->tm_mday; - Gbl.DateRange.DateEnd.Time.Hour = tm_ptr->tm_hour; - Gbl.DateRange.DateEnd.Time.Minute = tm_ptr->tm_min; - Gbl.DateRange.DateEnd.Time.Second = tm_ptr->tm_sec; + Dat_Time.Range.DateTime[Dat_END_TIME].Date.Year = tm_ptr->tm_year + 1900; + Dat_Time.Range.DateTime[Dat_END_TIME].Date.Month = tm_ptr->tm_mon + 1; + Dat_Time.Range.DateTime[Dat_END_TIME].Date.Day = tm_ptr->tm_mday; + Dat_Time.Range.DateTime[Dat_END_TIME].Time.Hour = tm_ptr->tm_hour; + Dat_Time.Range.DateTime[Dat_END_TIME].Time.Minute = tm_ptr->tm_min; + Dat_Time.Range.DateTime[Dat_END_TIME].Time.Second = tm_ptr->tm_sec; } /*****************************************************************************/ @@ -1377,7 +1408,7 @@ void Dat_GetYearBefore (struct Dat_Date *Date,struct Dat_Date *PrecedingDate) // If the old date is the day before the new data, return 2 // ... -unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd) { int DiffDays; @@ -1385,12 +1416,12 @@ unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateIni, /***** If initial year is less than end year, return 0 (actually the difference in days should be negative) *****/ - if (DateIni->Year > DateEnd->Year) + if (DateStr->Year > DateEnd->Year) return 0; /***** Initial year is less or equal than end year ==> compute difference in days *****/ - DiffDays = (int) Dat_GetDayOfYear (DateEnd) - (int) Dat_GetDayOfYear (DateIni) + 1; - for (Year = DateIni->Year; + DiffDays = (int) Dat_GetDayOfYear (DateEnd) - (int) Dat_GetDayOfYear (DateStr) + 1; + for (Year = DateStr->Year; Year < DateEnd->Year; Year++) DiffDays += (int) Dat_GetNumDaysInYear (Year); @@ -1403,7 +1434,7 @@ unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateIni, /*****************************************************************************/ // If the two dates are in the same week, return 1 -unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd) { int DiffWeeks; @@ -1411,13 +1442,13 @@ unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateIni, /***** If initial year is lower than the ending year, return 0 (actually the difference should be negative) *****/ - if (DateIni->Year > DateEnd->Year) + if (DateStr->Year > DateEnd->Year) return 0; /***** Initial year is lower or equal to ending year ==> compute difference in weeks *****/ - DiffWeeks = (int) DateEnd->Week - (int) DateIni->Week + 1; - for (Year = DateIni->Year; + DiffWeeks = (int) DateEnd->Week - (int) DateStr->Week + 1; + for (Year = DateStr->Year; Year < DateEnd->Year; Year++) DiffWeeks += (int) Dat_GetNumWeeksInYear (Year); @@ -1430,14 +1461,14 @@ unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateIni, /*****************************************************************************/ // If the two dates are in the same month, return 1 -unsigned Dat_GetNumMonthsBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumMonthsBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd) { int DiffMonths; /***** Compute the difference in months *****/ - DiffMonths = ((int) DateEnd->Year - (int) DateIni->Year) * 12 + - (int) DateEnd->Month - (int) DateIni->Month + 1; + DiffMonths = ((int) DateEnd->Year - (int) DateStr->Year) * 12 + + (int) DateEnd->Month - (int) DateStr->Month + 1; return (DiffMonths > 0) ? (unsigned) DiffMonths : 0; } @@ -1447,13 +1478,13 @@ unsigned Dat_GetNumMonthsBetweenDates (struct Dat_Date *DateIni, /*****************************************************************************/ // If the two dates are in the same year, return 1 -unsigned Dat_GetNumYearsBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumYearsBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd) { int DiffYears; /***** Compute the difference in years *****/ - DiffYears = (int) DateEnd->Year - (int) DateIni->Year + 1; + DiffYears = (int) DateEnd->Year - (int) DateStr->Year + 1; return (DiffYears > 0) ? (unsigned) DiffYears : 0; } diff --git a/swad_date.h b/swad_date.h index 1456aa5b..b957c2f4 100644 --- a/swad_date.h +++ b/swad_date.h @@ -161,6 +161,9 @@ void Dat_ShowClientLocalTime (void); struct tm *Dat_GetLocalTimeFromClock (const time_t *timep); void Dat_ConvDateToDateStr (const struct Dat_Date *Date,char StrDate[Cns_MAX_BYTES_DATE + 1]); +time_t Dat_GetRangeTimeUTC (Dat_StartEndTime_t StartEndTime); +struct Dat_Date *Dat_GetRangeDate (Dat_StartEndTime_t StartEndTime); + void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME]); void Dat_PutFormStartEndClientLocalDateTimes (const time_t TimeUTC[Dat_NUM_START_END_TIME], Dat_FormSeconds FormSeconds, @@ -186,7 +189,8 @@ void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear, void Dat_GetDateFromForm (const char *ParamNameDay,const char *ParamNameMonth,const char *ParamNameYear, unsigned *Day,unsigned *Month,unsigned *Year); -void Dat_SetIniEndDates (void); +void Dat_SetIniEndDatesToDistantPastToNow (void); +void Dat_SetIniEndDatesToRecentWeeks (void); void Dat_WriteParamsIniEndDates (void); void Dat_GetIniEndDatesFromForm (void); @@ -197,13 +201,13 @@ void Dat_GetDateBefore (struct Dat_Date *Date,struct Dat_Date *PrecedingDate ); void Dat_GetWeekBefore (struct Dat_Date *Date,struct Dat_Date *PrecedingDate ); void Dat_GetMonthBefore (struct Dat_Date *Date,struct Dat_Date *PrecedingDate ); void Dat_GetYearBefore (struct Dat_Date *Date,struct Dat_Date *PrecedingDate ); -unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumDaysBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd); -unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumWeeksBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd); -unsigned Dat_GetNumMonthsBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumMonthsBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd); -unsigned Dat_GetNumYearsBetweenDates (struct Dat_Date *DateIni, +unsigned Dat_GetNumYearsBetweenDates (struct Dat_Date *DateStr, struct Dat_Date *DateEnd); unsigned Dat_GetNumDaysInYear (unsigned Year); unsigned Dat_GetNumDaysFebruary (unsigned Year); diff --git a/swad_global.h b/swad_global.h index 31a97a9f..c4bf112d 100644 --- a/swad_global.h +++ b/swad_global.h @@ -84,13 +84,6 @@ struct Globals bool HTMLEndWritten; // Used to avoid writing more than once the HTML end } Layout; - struct - { - struct Dat_DateTime DateIni; // TODO: Remove in future versions - struct Dat_DateTime DateEnd; // TODO: Remove in future versions - time_t TimeUTC[Dat_NUM_START_END_TIME]; - } DateRange; // TODO: Move to swad_date.c - char IP[Cns_MAX_BYTES_IP + 1]; char UniqueNameEncrypted[Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]; // Used for session id, temporary directory names, etc. diff --git a/swad_question_database.c b/swad_question_database.c index 311321a6..83cde090 100644 --- a/swad_question_database.c +++ b/swad_question_database.c @@ -293,12 +293,12 @@ unsigned Qst_DB_GetQsts (MYSQL_RES **mysql_res, Str_Concat (Query," AND tst_questions.EditTime>=FROM_UNIXTIME('", Qst_MAX_BYTES_QUERY_QUESTIONS); snprintf (LongStr,sizeof (LongStr),"%ld", - (long) Gbl.DateRange.TimeUTC[Dat_STR_TIME]); + (long) Dat_GetRangeTimeUTC (Dat_STR_TIME)); Str_Concat (Query,LongStr,Qst_MAX_BYTES_QUERY_QUESTIONS); Str_Concat (Query,"') AND tst_questions.EditTime<=FROM_UNIXTIME('", Qst_MAX_BYTES_QUERY_QUESTIONS); snprintf (LongStr,sizeof (LongStr),"%ld", - (long) Gbl.DateRange.TimeUTC[Dat_END_TIME]); + (long) Dat_GetRangeTimeUTC (Dat_END_TIME)); Str_Concat (Query,LongStr,Qst_MAX_BYTES_QUERY_QUESTIONS); Str_Concat (Query,"')",Qst_MAX_BYTES_QUERY_QUESTIONS); diff --git a/swad_record.c b/swad_record.c index 23cf4ffd..1270e0a0 100644 --- a/swad_record.c +++ b/swad_record.c @@ -2488,14 +2488,14 @@ void Rec_PutParamUsrCodEncrypted (__attribute__((unused)) void *Args) static void Rec_PutParamsMyTsts (__attribute__((unused)) void *Args) { - Dat_SetIniEndDates (); + Dat_SetIniEndDatesToDistantPastToNow (); Dat_WriteParamsIniEndDates (); } static void Rec_PutParamsStdTsts (__attribute__((unused)) void *Args) { Rec_PutParamsStudent (NULL); - Dat_SetIniEndDates (); + Dat_SetIniEndDatesToDistantPastToNow (); Dat_WriteParamsIniEndDates (); } diff --git a/swad_statistic.c b/swad_statistic.c index f7f5efc8..c77967a2 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -718,17 +718,6 @@ static void Sta_WriteSelectorAction (const struct Sta_Stats *Stats) HTM_TR_End (); } -/*****************************************************************************/ -/************ Set end date to current date ************/ -/************ and set initial date to end date minus several days ************/ -/*****************************************************************************/ - -void Sta_SetIniEndDates (void) - { - Gbl.DateRange.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); - Gbl.DateRange.TimeUTC[Dat_STR_TIME] = Gbl.DateRange.TimeUTC[Dat_END_TIME] - ((Cfg_DAYS_IN_RECENT_LOG - 1) * 24 * 60 * 60); - } - /*****************************************************************************/ /******************** Compute and show access statistics *********************/ /*****************************************************************************/ @@ -782,7 +771,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse) /***** Set table where to find depending on initial date *****/ /* If initial day is older than current day minus Cfg_DAYS_IN_RECENT_LOG, then use recent log table, else use historic log table */ - LogTable = (Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, + LogTable = (Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), Dat_GetCurrentDate ()) <= Cfg_DAYS_IN_RECENT_LOG) ? "log_recent" : "log"; @@ -905,8 +894,8 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse) } /***** Check if range of dates is forbidden for me *****/ - NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, - &Gbl.DateRange.DateEnd.Date); + NumDays = Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), + Dat_GetRangeDate (Dat_END_TIME)); ICanQueryWholeRange = (Gbl.Usrs.Me.Role.Logged >= Rol_TCH && Stats.GlobalOrCourse == Sta_SHOW_COURSE_ACCESSES) || (Gbl.Usrs.Me.Role.Logged == Rol_TCH && Gbl.Scope.Current == HieLvl_CRS) || (Gbl.Usrs.Me.Role.Logged == Rol_DEG_ADM && (Gbl.Scope.Current == HieLvl_DEG || @@ -1456,7 +1445,7 @@ static void Sta_ShowNumHitsPerDay (Sta_CountType_t CountType, char StrDate[Cns_MAX_BYTES_DATE + 1]; /***** Initialize LastDate *****/ - Dat_AssignDate (&LastDate,&Gbl.DateRange.DateEnd.Date); + Dat_AssignDate (&LastDate,Dat_GetRangeDate (Dat_END_TIME)); /***** Write heading *****/ HTM_TR_Begin (NULL); @@ -1527,7 +1516,7 @@ static void Sta_ShowNumHitsPerDay (Sta_CountType_t CountType, } Dat_AssignDate (&LastDate,&Date); } - NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, + NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), &LastDate); /***** Finally NumDaysFromLastDateToCurrDate days are shown with 0 clicks @@ -1649,7 +1638,7 @@ static void Sta_ShowDistrAccessesPerDayAndHour (const struct Sta_Stats *Stats, Sta_ComputeMaxAndTotalHits (&Hits,NumHits,mysql_res,2,1); /***** Initialize LastDate *****/ - Dat_AssignDate (&LastDate,&Gbl.DateRange.DateEnd.Date); + Dat_AssignDate (&LastDate,Dat_GetRangeDate (Dat_END_TIME)); /***** Reset number of pages generated per hour *****/ for (Hour = 0; @@ -1811,7 +1800,7 @@ static void Sta_ShowDistrAccessesPerDayAndHour (const struct Sta_Stats *Stats, /***** Finally NumDaysFromLastDateToCurrDate days are shown with 0 clicks (the oldest days since the initial day requested by the user until the first with clicks) *****/ Dat_AssignDate (&LastDate,&Date); - NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, + NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), &LastDate); for (D = 1; D <= NumDaysFromLastDateToCurrDate; @@ -2062,8 +2051,8 @@ static void Sta_ShowNumHitsPerWeek (Sta_CountType_t CountType, MYSQL_ROW row; /***** Initialize LastDate to avoid warning *****/ - Dat_CalculateWeekOfYear (&Gbl.DateRange.DateEnd.Date); // Changes Week and Year - Dat_AssignDate (&LastDate,&Gbl.DateRange.DateEnd.Date); + Dat_CalculateWeekOfYear (Dat_GetRangeDate (Dat_END_TIME)); // Changes Week and Year + Dat_AssignDate (&LastDate,Dat_GetRangeDate (Dat_END_TIME)); /***** Write heading *****/ HTM_TR_Begin (NULL); @@ -2117,8 +2106,8 @@ static void Sta_ShowNumHitsPerWeek (Sta_CountType_t CountType, } /***** Finally, show the old weeks without pages generated *****/ - Dat_CalculateWeekOfYear (&Gbl.DateRange.DateIni.Date); // Changes Week and Year - NumWeeksBetweenLastDateAndCurDate = Dat_GetNumWeeksBetweenDates (&Gbl.DateRange.DateIni.Date, + Dat_CalculateWeekOfYear (Dat_GetRangeDate (Dat_STR_TIME)); // Changes Week and Year + NumWeeksBetweenLastDateAndCurDate = Dat_GetNumWeeksBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), &LastDate); for (W = 1; W <= NumWeeksBetweenLastDateAndCurDate; @@ -2162,7 +2151,7 @@ static void Sta_ShowNumHitsPerMonth (Sta_CountType_t CountType, MYSQL_ROW row; /***** Initialize LastDate *****/ - Dat_AssignDate (&LastDate,&Gbl.DateRange.DateEnd.Date); + Dat_AssignDate (&LastDate,Dat_GetRangeDate (Dat_END_TIME)); /***** Write heading *****/ HTM_TR_Begin (NULL); @@ -2217,7 +2206,7 @@ static void Sta_ShowNumHitsPerMonth (Sta_CountType_t CountType, } /***** Finally, show the oldest months without clicks *****/ - NumMonthsBetweenLastDateAndCurDate = Dat_GetNumMonthsBetweenDates (&Gbl.DateRange.DateIni.Date, + NumMonthsBetweenLastDateAndCurDate = Dat_GetNumMonthsBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), &LastDate); for (M = 1; M <= NumMonthsBetweenLastDateAndCurDate; @@ -2261,7 +2250,7 @@ static void Sta_ShowNumHitsPerYear (Sta_CountType_t CountType, MYSQL_ROW row; /***** Initialize LastDate *****/ - Dat_AssignDate (&LastDate,&Gbl.DateRange.DateEnd.Date); + Dat_AssignDate (&LastDate,Dat_GetRangeDate (Dat_END_TIME)); /***** Write heading *****/ HTM_TR_Begin (NULL); @@ -2316,7 +2305,7 @@ static void Sta_ShowNumHitsPerYear (Sta_CountType_t CountType, } /***** Finally, show the oldest years without clicks *****/ - NumYearsBetweenLastDateAndCurDate = Dat_GetNumYearsBetweenDates (&Gbl.DateRange.DateIni.Date, + NumYearsBetweenLastDateAndCurDate = Dat_GetNumYearsBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), &LastDate); for (Y = 1; Y <= NumYearsBetweenLastDateAndCurDate; @@ -2359,8 +2348,8 @@ static void Sta_ShowNumHitsPerHour (unsigned NumHits, unsigned ColumnWidth; MYSQL_ROW row; - if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, - &Gbl.DateRange.DateEnd.Date))) + if ((NumDays = Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), + Dat_GetRangeDate (Dat_END_TIME)))) { /***** Compute maximum number of pages generated per hour *****/ Sta_ComputeMaxAndTotalHits (&Hits,NumHits,mysql_res,1,NumDays); @@ -2470,8 +2459,8 @@ static void Sta_ShowNumHitsPerMinute (unsigned NumHits,MYSQL_RES *mysql_res) double IncX; char *Format; - if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date, - &Gbl.DateRange.DateEnd.Date))) + if ((NumDays = Dat_GetNumDaysBetweenDates (Dat_GetRangeDate (Dat_STR_TIME), + Dat_GetRangeDate (Dat_END_TIME)))) { /***** Compute number of clicks (and máximo) in every minute *****/ Hits.Max = 0.0; diff --git a/swad_statistic.h b/swad_statistic.h index f1016650..c9496b9e 100644 --- a/swad_statistic.h +++ b/swad_statistic.h @@ -158,7 +158,7 @@ void Sta_AskShowCrsHits (void); void Sta_AskShowGblHits (void); void Sta_PutLinkToCourseHits (void); void Sta_PutLinkToGlobalHits (void); -void Sta_SetIniEndDates (void); + void Sta_SeeGblAccesses (void); void Sta_SeeCrsAccesses (void); diff --git a/swad_statistic_database.c b/swad_statistic_database.c index fd481d8c..6eb43796 100644 --- a/swad_statistic_database.c +++ b/swad_statistic_database.c @@ -266,8 +266,8 @@ unsigned Sta_DB_GetHits (MYSQL_RES **mysql_res, " BETWEEN FROM_UNIXTIME(%ld)" " AND FROM_UNIXTIME(%ld)", LogTable, - (long) Gbl.DateRange.TimeUTC[Dat_STR_TIME], - (long) Gbl.DateRange.TimeUTC[Dat_END_TIME]); + (long) Dat_GetRangeTimeUTC (Dat_STR_TIME), + (long) Dat_GetRangeTimeUTC (Dat_END_TIME)); Str_Concat (Query,SubQuery,Sta_DB_MAX_BYTES_QUERY); switch (Stats->GlobalOrCourse) diff --git a/swad_test_database.c b/swad_test_database.c index 893df9d4..f7720267 100644 --- a/swad_test_database.c +++ b/swad_test_database.c @@ -289,8 +289,8 @@ unsigned Tst_DB_GetUsrPrintsInCurrentCrs (MYSQL_RES **mysql_res,long UsrCod) " ORDER BY ExaCod", Gbl.Hierarchy.Crs.CrsCod, UsrCod, - (long) Gbl.DateRange.TimeUTC[Dat_STR_TIME], - (long) Gbl.DateRange.TimeUTC[Dat_END_TIME]); + (long) Dat_GetRangeTimeUTC (Dat_STR_TIME), + (long) Dat_GetRangeTimeUTC (Dat_END_TIME)); } /*****************************************************************************/