mirror of https://github.com/acanas/swad-core.git
Version 16.13
This commit is contained in:
parent
37da766464
commit
d38cf52c33
|
@ -143,13 +143,14 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.12 (2016-10-04)"
|
#define Log_PLATFORM_VERSION "SWAD 16.13 (2016-10-04)"
|
||||||
#define CSS_FILE "swad15.229.css"
|
#define CSS_FILE "swad15.229.css"
|
||||||
#define JS_FILE "swad15.238.1.js"
|
#define JS_FILE "swad15.238.1.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 16.13: Oct 04, 2016 New filename for user's usage report. (205883 lines)
|
||||||
Version 16.12: Oct 04, 2016 Code refactoring in user's usage report. (205882 lines)
|
Version 16.12: Oct 04, 2016 Code refactoring in user's usage report. (205882 lines)
|
||||||
Copy icon/report64x64.png to icon directory
|
Copy icon/report64x64.png to icon directory
|
||||||
|
|
||||||
|
|
42
swad_date.c
42
swad_date.c
|
@ -103,48 +103,6 @@ void Dat_GetAndConvertCurrentDateTime (void)
|
||||||
Dat_GetDateBefore (&Gbl.Now.Date,&Gbl.Yesterday);
|
Dat_GetDateBefore (&Gbl.Now.Date,&Gbl.Yesterday);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/********************* Get current date and time in UTC **********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*
|
|
||||||
char StrCurrentDateUTC[10+1]; // Example: 2016-10-02
|
|
||||||
// 1234567890
|
|
||||||
char StrCurrentTimeUTC[8+1]; // Example: 19:03:49
|
|
||||||
// 12345678
|
|
||||||
*/
|
|
||||||
void Dat_GetCurrentDateTimeUTC (char StrCurrentDateUTC[10+1],
|
|
||||||
char StrCurrentTimeUTC[8+1])
|
|
||||||
{
|
|
||||||
time_t CurrentTime;
|
|
||||||
struct tm tm_CurrentTime;
|
|
||||||
|
|
||||||
if (StrCurrentDateUTC &&
|
|
||||||
StrCurrentDateUTC) // If both pointers are not NULL
|
|
||||||
{
|
|
||||||
/***** Initialize to empty strings *****/
|
|
||||||
if (StrCurrentDateUTC)
|
|
||||||
StrCurrentDateUTC[0] = '\0';
|
|
||||||
if (StrCurrentTimeUTC)
|
|
||||||
StrCurrentTimeUTC[0] = '\0';
|
|
||||||
|
|
||||||
/***** Get current time UTC *****/
|
|
||||||
time (&CurrentTime);
|
|
||||||
if ((gmtime_r (&CurrentTime,&tm_CurrentTime)) != NULL)
|
|
||||||
{
|
|
||||||
if (StrCurrentDateUTC) // If not NULL
|
|
||||||
sprintf (StrCurrentDateUTC,"%04d-%02d-%02d",
|
|
||||||
1900 + tm_CurrentTime.tm_year, // year
|
|
||||||
1 + tm_CurrentTime.tm_mon, // month
|
|
||||||
tm_CurrentTime.tm_mday); // day of the month
|
|
||||||
if (StrCurrentTimeUTC) // If not NULL
|
|
||||||
sprintf (StrCurrentTimeUTC,"%02d:%02d:%02d",
|
|
||||||
tm_CurrentTime.tm_hour, // hours
|
|
||||||
tm_CurrentTime.tm_min, // minutes
|
|
||||||
tm_CurrentTime.tm_sec); // seconds
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************ Get UNIX time (seconds since 1970 UTC) from string *************/
|
/************ Get UNIX time (seconds since 1970 UTC) from string *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -76,9 +76,6 @@ struct DateTime
|
||||||
void Dat_GetStartExecutionTimeUTC (void);
|
void Dat_GetStartExecutionTimeUTC (void);
|
||||||
void Dat_GetAndConvertCurrentDateTime (void);
|
void Dat_GetAndConvertCurrentDateTime (void);
|
||||||
|
|
||||||
void Dat_GetCurrentDateTimeUTC (char StrCurrentDateUTC[10+1],
|
|
||||||
char StrCurrentTimeUTC[8+1]);
|
|
||||||
|
|
||||||
time_t Dat_GetUNIXTimeFromStr (const char *Str);
|
time_t Dat_GetUNIXTimeFromStr (const char *Str);
|
||||||
bool Dat_GetDateFromYYYYMMDD (struct Date *Date,const char *YYYYMMDDString);
|
bool Dat_GetDateFromYYYYMMDD (struct Date *Date,const char *YYYYMMDDString);
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,8 @@
|
||||||
/***************************** Private constants *****************************/
|
/***************************** Private constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#define Rep_FILENAME_ROOT "report"
|
||||||
|
|
||||||
#define Rep_MIN_CLICKS_CRS 100 // Minimum number of clicks to show a course in historic log
|
#define Rep_MIN_CLICKS_CRS 100 // Minimum number of clicks to show a course in historic log
|
||||||
#define Rep_MAX_BAR_WIDTH 50 // Maximum width of graphic bar
|
#define Rep_MAX_BAR_WIDTH 50 // Maximum width of graphic bar
|
||||||
|
|
||||||
|
@ -63,6 +65,8 @@ struct CurrentTimeUTC
|
||||||
// 1234567890
|
// 1234567890
|
||||||
char StrTime[8+1]; // Example: 19:03:49
|
char StrTime[8+1]; // Example: 19:03:49
|
||||||
// 12345678
|
// 12345678
|
||||||
|
unsigned Date; // Example: 20161002
|
||||||
|
unsigned Time; // Example: 190349
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -80,11 +84,15 @@ extern struct Globals Gbl;
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
|
char *FilenameReport,
|
||||||
char *Permalink);
|
char *Permalink);
|
||||||
static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
|
const char *FilenameReport,
|
||||||
const char *Permalink);
|
const char *Permalink);
|
||||||
static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC);
|
static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC);
|
||||||
|
|
||||||
|
static void Rep_GetCurrentDateTimeUTC (struct CurrentTimeUTC *CurrentTimeUTC);
|
||||||
|
|
||||||
static void Rep_WriteHeader (struct CurrentTimeUTC *CurrentTimeUTC,
|
static void Rep_WriteHeader (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
const char *Permalink);
|
const char *Permalink);
|
||||||
static void Rep_WriteSectionPlatform (void);
|
static void Rep_WriteSectionPlatform (void);
|
||||||
|
@ -134,8 +142,7 @@ void Rep_ReqMyUsageReport (void)
|
||||||
struct CurrentTimeUTC CurrentTimeUTC;
|
struct CurrentTimeUTC CurrentTimeUTC;
|
||||||
|
|
||||||
/***** Get current date-time *****/
|
/***** Get current date-time *****/
|
||||||
Dat_GetCurrentDateTimeUTC (CurrentTimeUTC.StrDate,
|
Rep_GetCurrentDateTimeUTC (&CurrentTimeUTC);
|
||||||
CurrentTimeUTC.StrTime);
|
|
||||||
|
|
||||||
/***** Form to show my usage report *****/
|
/***** Form to show my usage report *****/
|
||||||
Act_FormStart (ActSeeMyUsgRep);
|
Act_FormStart (ActSeeMyUsgRep);
|
||||||
|
@ -161,13 +168,14 @@ void Rep_ReqMyUsageReport (void)
|
||||||
void Rep_ShowMyUsageReport (void)
|
void Rep_ShowMyUsageReport (void)
|
||||||
{
|
{
|
||||||
struct CurrentTimeUTC CurrentTimeUTC;
|
struct CurrentTimeUTC CurrentTimeUTC;
|
||||||
|
char FilenameReport[NAME_MAX+1];
|
||||||
char Permalink[PATH_MAX+1];
|
char Permalink[PATH_MAX+1];
|
||||||
|
|
||||||
/***** Create my usage report *****/
|
/***** Create my usage report *****/
|
||||||
Rep_CreateMyUsageReport (&CurrentTimeUTC,Permalink);
|
Rep_CreateMyUsageReport (&CurrentTimeUTC,FilenameReport,Permalink);
|
||||||
|
|
||||||
/***** Put link to my usage report *****/
|
/***** Put link to my usage report *****/
|
||||||
Rep_PutLinkToMyUsageReport (&CurrentTimeUTC,Permalink);
|
Rep_PutLinkToMyUsageReport (&CurrentTimeUTC,FilenameReport,Permalink);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -175,10 +183,10 @@ void Rep_ShowMyUsageReport (void)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
|
char *FilenameReport,
|
||||||
char *Permalink)
|
char *Permalink)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Report_of_use_of_PLATFORM;
|
extern const char *Txt_Report_of_use_of_PLATFORM;
|
||||||
extern const char *Txt_Report;
|
|
||||||
struct UsrFigures UsrFigures;
|
struct UsrFigures UsrFigures;
|
||||||
char PathReports[PATH_MAX+1];
|
char PathReports[PATH_MAX+1];
|
||||||
char PathDirReport[PATH_MAX+1];
|
char PathDirReport[PATH_MAX+1];
|
||||||
|
@ -188,8 +196,7 @@ static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
unsigned long MaxHitsPerYear;
|
unsigned long MaxHitsPerYear;
|
||||||
|
|
||||||
/***** Get current date-time *****/
|
/***** Get current date-time *****/
|
||||||
Dat_GetCurrentDateTimeUTC (CurrentTimeUTC->StrDate,
|
Rep_GetCurrentDateTimeUTC (CurrentTimeUTC);
|
||||||
CurrentTimeUTC->StrTime);
|
|
||||||
|
|
||||||
/***** Path for reports *****/
|
/***** Path for reports *****/
|
||||||
sprintf (PathReports,"%s/%s",
|
sprintf (PathReports,"%s/%s",
|
||||||
|
@ -210,20 +217,24 @@ static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
Lay_ShowErrorAndExit ("Can not create directory for report.");
|
Lay_ShowErrorAndExit ("Can not create directory for report.");
|
||||||
|
|
||||||
/* Path of the public file with the report */
|
/* Path of the public file with the report */
|
||||||
sprintf (PathFileReport,"%s/index.html",PathDirReport);
|
sprintf (FilenameReport,"%s_%06u_%06u.html",
|
||||||
|
Rep_FILENAME_ROOT,CurrentTimeUTC->Date,CurrentTimeUTC->Time);
|
||||||
|
sprintf (PathFileReport,"%s/%s",
|
||||||
|
PathDirReport,FilenameReport);
|
||||||
if ((Gbl.F.Rep = fopen (PathFileReport,"wb")) == NULL)
|
if ((Gbl.F.Rep = fopen (PathFileReport,"wb")) == NULL)
|
||||||
Lay_ShowErrorAndExit ("Can not create report file.");
|
Lay_ShowErrorAndExit ("Can not create report file.");
|
||||||
|
|
||||||
/* Permalink */
|
/* Permalink */
|
||||||
sprintf (Permalink,"%s/%s/%c%c/%s/",
|
sprintf (Permalink,"%s/%s/%c%c/%s/%s",
|
||||||
Cfg_URL_SWAD_PUBLIC,
|
Cfg_URL_SWAD_PUBLIC,
|
||||||
Cfg_FOLDER_REP,
|
Cfg_FOLDER_REP,
|
||||||
Gbl.UniqueNameEncrypted[0],
|
Gbl.UniqueNameEncrypted[0],
|
||||||
Gbl.UniqueNameEncrypted[1],
|
Gbl.UniqueNameEncrypted[1],
|
||||||
&Gbl.UniqueNameEncrypted[2]);
|
&Gbl.UniqueNameEncrypted[2],
|
||||||
|
FilenameReport);
|
||||||
|
|
||||||
/***** Start file *****/
|
/***** Start file *****/
|
||||||
Lay_StartHTMLFile (Gbl.F.Rep,Txt_Report);
|
Lay_StartHTMLFile (Gbl.F.Rep,FilenameReport);
|
||||||
fprintf (Gbl.F.Rep,"<body style=\"margin:1em;text-align:left;"
|
fprintf (Gbl.F.Rep,"<body style=\"margin:1em;text-align:left;"
|
||||||
"font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;\">\n");
|
"font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;\">\n");
|
||||||
|
|
||||||
|
@ -270,6 +281,7 @@ static void Rep_CreateMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
|
const char *FilenameReport,
|
||||||
const char *Permalink)
|
const char *Permalink)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Report_of_use_of_PLATFORM;
|
extern const char *Txt_Report_of_use_of_PLATFORM;
|
||||||
|
@ -295,7 +307,7 @@ static void Rep_PutLinkToMyUsageReport (struct CurrentTimeUTC *CurrentTimeUTC,
|
||||||
Txt_Report,
|
Txt_Report,
|
||||||
Gbl.Prefs.IconsURL,
|
Gbl.Prefs.IconsURL,
|
||||||
Txt_Report,
|
Txt_Report,
|
||||||
Permalink);
|
FilenameReport);
|
||||||
|
|
||||||
/***** End frame *****/
|
/***** End frame *****/
|
||||||
Lay_EndRoundFrame ();
|
Lay_EndRoundFrame ();
|
||||||
|
@ -314,6 +326,43 @@ static void Req_TitleReport (struct CurrentTimeUTC *CurrentTimeUTC)
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Get current date and time in UTC **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Rep_GetCurrentDateTimeUTC (struct CurrentTimeUTC *CurrentTimeUTC)
|
||||||
|
{
|
||||||
|
time_t CurrentTime;
|
||||||
|
struct tm tm_CurrentTime;
|
||||||
|
|
||||||
|
/***** Initialize to empty strings *****/
|
||||||
|
CurrentTimeUTC->StrDate[0] = '\0';
|
||||||
|
CurrentTimeUTC->StrTime[0] = '\0';
|
||||||
|
|
||||||
|
/***** Get current time UTC *****/
|
||||||
|
time (&CurrentTime);
|
||||||
|
if ((gmtime_r (&CurrentTime,&tm_CurrentTime)) != NULL)
|
||||||
|
{
|
||||||
|
/* Date and time as strings */
|
||||||
|
sprintf (CurrentTimeUTC->StrDate,"%04d-%02d-%02d",
|
||||||
|
1900 + tm_CurrentTime.tm_year, // year
|
||||||
|
1 + tm_CurrentTime.tm_mon, // month
|
||||||
|
tm_CurrentTime.tm_mday); // day of the month
|
||||||
|
sprintf (CurrentTimeUTC->StrTime,"%02d:%02d:%02d",
|
||||||
|
tm_CurrentTime.tm_hour, // hours
|
||||||
|
tm_CurrentTime.tm_min, // minutes
|
||||||
|
tm_CurrentTime.tm_sec); // seconds
|
||||||
|
|
||||||
|
/* Date and time as unsigned */
|
||||||
|
CurrentTimeUTC->Date = (1900 + tm_CurrentTime.tm_year) * 10000 +
|
||||||
|
(1 + tm_CurrentTime.tm_mon) * 100 +
|
||||||
|
tm_CurrentTime.tm_mday;
|
||||||
|
CurrentTimeUTC->Time = tm_CurrentTime.tm_hour * 10000 +
|
||||||
|
tm_CurrentTime.tm_min * 100 +
|
||||||
|
tm_CurrentTime.tm_sec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************** Write header of user's usage report ********************/
|
/******************** Write header of user's usage report ********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue