mirror of https://github.com/acanas/swad-core.git
Version 15.25.3
This commit is contained in:
parent
201a2c327e
commit
4b14fb8722
|
@ -253,22 +253,21 @@ function setDateTo (Yea,Mon,Day) {
|
|||
|
||||
// Write clock in client local time updated every minute
|
||||
function writeLocalClock() {
|
||||
var d = new Date;
|
||||
var d;
|
||||
var H;
|
||||
var M;
|
||||
var StrH;
|
||||
var StrM;
|
||||
|
||||
setTimeout('writeLocalClock()',60000);
|
||||
|
||||
d = new Date;
|
||||
d.setTime(secondsSince1970UTC * 1000);
|
||||
secondsSince1970UTC += 60; // For next call
|
||||
|
||||
H = d.getHours();
|
||||
M = d.getMinutes();
|
||||
StrH = ((H < 10) ? '0' : '') + H;
|
||||
StrM = ((M < 10) ? '0' : '') + M;
|
||||
document.getElementById('hm').innerHTML = StrH + ':' + StrM;
|
||||
document.getElementById('hm').innerHTML = H + ':' + StrM;
|
||||
}
|
||||
|
||||
function writeClockConnected() {
|
||||
|
|
|
@ -108,12 +108,12 @@ void RSS_UpdateRSSFileForACrs (struct Course *Crs)
|
|||
|
||||
// All date-times in RSS conform to the Date and Time Specification of RFC 822, with the exception that the year may be expressed with two characters or four characters (four preferred)
|
||||
fprintf (FileRSS,"<pubDate>");
|
||||
tm = gmtime (&Gbl.TimeStartExecution);
|
||||
tm = gmtime (&Gbl.StartExecutionTimeUTC);
|
||||
Dat_WriteRFC822DateFromTM (FileRSS,tm);
|
||||
fprintf (FileRSS,"</pubDate>\n");
|
||||
|
||||
fprintf (FileRSS,"<lastBuildDate>");
|
||||
tm = gmtime (&Gbl.TimeStartExecution);
|
||||
tm = gmtime (&Gbl.StartExecutionTimeUTC);
|
||||
Dat_WriteRFC822DateFromTM (FileRSS,tm);
|
||||
fprintf (FileRSS,"</lastBuildDate>\n");
|
||||
|
||||
|
|
|
@ -1028,8 +1028,8 @@ void Asg_RequestCreatOrEditAsg (void)
|
|||
{
|
||||
/* Initialize to empty assignment */
|
||||
Asg.AsgCod = -1L;
|
||||
Asg.TimeUTC[Asg_START_TIME] = Gbl.TimeStartExecution;
|
||||
Asg.TimeUTC[Asg_END_TIME ] = Gbl.TimeStartExecution + (2 * 60 * 60); // +2 hours
|
||||
Asg.TimeUTC[Asg_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
Asg.TimeUTC[Asg_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||
Asg.Open = true;
|
||||
Asg.Title[0] = '\0';
|
||||
Asg.SendWork = false;
|
||||
|
@ -1222,7 +1222,7 @@ void Asg_RecFormAssignment (void)
|
|||
|
||||
/***** Adjust dates *****/
|
||||
if (NewAsg.TimeUTC[Asg_START_TIME] == 0)
|
||||
NewAsg.TimeUTC[Asg_START_TIME] = Gbl.TimeStartExecution;
|
||||
NewAsg.TimeUTC[Asg_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
if (NewAsg.TimeUTC[Asg_END_TIME] == 0)
|
||||
NewAsg.TimeUTC[Asg_END_TIME] = NewAsg.TimeUTC[Asg_START_TIME] + 2*60*60; // +2 hours
|
||||
|
||||
|
|
|
@ -998,8 +998,8 @@ void Att_RequestCreatOrEditAttEvent (void)
|
|||
{
|
||||
/* Initialize to empty attendance event */
|
||||
Att.AttCod = -1L;
|
||||
Att.TimeUTC[Att_START_TIME] = Gbl.TimeStartExecution;
|
||||
Att.TimeUTC[Att_END_TIME ] = Gbl.TimeStartExecution + (2 * 60 * 60); // +2 hours
|
||||
Att.TimeUTC[Att_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
Att.TimeUTC[Att_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||
Att.Open = true;
|
||||
Att.Title[0] = '\0';
|
||||
}
|
||||
|
@ -1194,7 +1194,7 @@ void Att_RecFormAttEvent (void)
|
|||
|
||||
/***** Adjust dates *****/
|
||||
if (NewAtt.TimeUTC[Att_START_TIME] == 0)
|
||||
NewAtt.TimeUTC[Att_START_TIME] = Gbl.TimeStartExecution;
|
||||
NewAtt.TimeUTC[Att_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
if (NewAtt.TimeUTC[Att_END_TIME] == 0)
|
||||
NewAtt.TimeUTC[Att_END_TIME] = NewAtt.TimeUTC[Att_START_TIME] + 2*60*60; // +2 hours
|
||||
|
||||
|
|
|
@ -901,7 +901,7 @@ void Ban_WriteMenuWithBanners (void)
|
|||
" FROM banners"
|
||||
" WHERE Hidden='N'"
|
||||
" ORDER BY RAND(%lu) LIMIT %u",
|
||||
(unsigned long) (Gbl.TimeStartExecution / Cfg_TIME_TO_CHANGE_BANNER),
|
||||
(unsigned long) (Gbl.StartExecutionTimeUTC / Cfg_TIME_TO_CHANGE_BANNER),
|
||||
Cfg_NUMBER_OF_BANNERS); // The banner(s) will change once in a while
|
||||
Ban_GetListBanners (Query);
|
||||
|
||||
|
|
|
@ -108,11 +108,12 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.25.2 (2015/10/26)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.25.3 (2015/10/27)"
|
||||
|
||||
// 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 15.25.3: Oct 27, 2015 Statistics computed using time UTC. (186225 lines)
|
||||
Version 15.25.2: Oct 26, 2015 Changes related to date-times. (186247 lines)
|
||||
Version 15.25.1: Oct 26, 2015 Warning about stats computed in server time instead of user's local time. (186263 lines)
|
||||
Version 15.25: Oct 26, 2015 Clicks in real time are displayed as time ago. (186211 lines)
|
||||
|
|
68
swad_date.c
68
swad_date.c
|
@ -64,12 +64,12 @@ const unsigned Dat_NumDaysMonth[1+12] =
|
|||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Get current time ******************************/
|
||||
/************************** Get current time UTC *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Dat_GetTimeStartExecution (void)
|
||||
void Dat_GetStartExecutionTimeUTC (void)
|
||||
{
|
||||
Gbl.TimeStartExecution = time (NULL);
|
||||
Gbl.StartExecutionTimeUTC = time (NULL);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -79,7 +79,7 @@ void Dat_GetTimeStartExecution (void)
|
|||
void Dat_GetAndConvertCurrentDateTime (void)
|
||||
{
|
||||
/***** Convert current local time to a struct tblock *****/
|
||||
Dat_GetLocalTimeFromClock (&Gbl.TimeStartExecution);
|
||||
Dat_GetLocalTimeFromClock (&Gbl.StartExecutionTimeUTC);
|
||||
|
||||
Gbl.Now.Date.Year = Gbl.tblock->tm_year + 1900;
|
||||
Gbl.Now.Date.Month = Gbl.tblock->tm_mon + 1;
|
||||
|
@ -156,7 +156,7 @@ void Dat_ShowClientLocalTime (void)
|
|||
"writeLocalClock();"
|
||||
"</script>",
|
||||
The_ClassCurrentTime[Gbl.Prefs.Theme],
|
||||
(long) Gbl.TimeStartExecution);
|
||||
(long) Gbl.StartExecutionTimeUTC);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -602,36 +602,28 @@ void Dat_GetDateFromForm (const char *ParamNameDay,const char *ParamNameMonth,co
|
|||
void Dat_GetIniEndDatesFromForm (void)
|
||||
{
|
||||
/***** Get initial date *****/
|
||||
Dat_GetDateFromForm ("StartDay","StartMonth","StartYear",
|
||||
&Gbl.DateRange.DateIni.Day,
|
||||
&Gbl.DateRange.DateIni.Month,
|
||||
&Gbl.DateRange.DateIni.Year);
|
||||
// TODO: Get hour, minute and second
|
||||
if (Gbl.DateRange.DateIni.Day == 0 ||
|
||||
Gbl.DateRange.DateIni.Month == 0 ||
|
||||
Gbl.DateRange.DateIni.Year == 0)
|
||||
{
|
||||
Gbl.DateRange.DateIni.Day = Cfg_LOG_START_DAY;
|
||||
Gbl.DateRange.DateIni.Month = Cfg_LOG_START_MONTH;
|
||||
Gbl.DateRange.DateIni.Year = Cfg_LOG_START_YEAR;
|
||||
}
|
||||
Gbl.DateRange.TimeUTC[0] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||
|
||||
/* Convert current time UTC to a local date */
|
||||
Dat_GetLocalTimeFromClock (&Gbl.DateRange.TimeUTC[0]);
|
||||
Gbl.DateRange.DateIni.Date.Year = Gbl.tblock->tm_year + 1900;
|
||||
Gbl.DateRange.DateIni.Date.Month = Gbl.tblock->tm_mon + 1;
|
||||
Gbl.DateRange.DateIni.Date.Day = Gbl.tblock->tm_mday;
|
||||
Gbl.DateRange.DateIni.Time.Hour = Gbl.tblock->tm_hour;
|
||||
Gbl.DateRange.DateIni.Time.Minute = Gbl.tblock->tm_min;
|
||||
Gbl.DateRange.DateIni.Time.Second = Gbl.tblock->tm_sec;
|
||||
|
||||
/***** Get end date *****/
|
||||
Dat_GetDateFromForm ("EndDay","EndMonth","EndYear",
|
||||
&Gbl.DateRange.DateEnd.Day,
|
||||
&Gbl.DateRange.DateEnd.Month,
|
||||
&Gbl.DateRange.DateEnd.Year);
|
||||
// TODO: Get hour, minute and second
|
||||
if (Gbl.DateRange.DateEnd.Day == 0 ||
|
||||
Gbl.DateRange.DateEnd.Month == 0 ||
|
||||
Gbl.DateRange.DateEnd.Year == 0)
|
||||
{
|
||||
Gbl.DateRange.DateEnd.Day = Gbl.Now.Date.Day;
|
||||
Gbl.DateRange.DateEnd.Month = Gbl.Now.Date.Month;
|
||||
Gbl.DateRange.DateEnd.Year = Gbl.Now.Date.Year;
|
||||
}
|
||||
Gbl.DateRange.TimeUTC[1] = Dat_GetTimeUTCFromForm ("EndTimeUTC");
|
||||
|
||||
/* Convert current time UTC to a local date */
|
||||
Dat_GetLocalTimeFromClock (&Gbl.DateRange.TimeUTC[1]);
|
||||
Gbl.DateRange.DateEnd.Date.Year = Gbl.tblock->tm_year + 1900;
|
||||
Gbl.DateRange.DateEnd.Date.Month = Gbl.tblock->tm_mon + 1;
|
||||
Gbl.DateRange.DateEnd.Date.Day = Gbl.tblock->tm_mday;
|
||||
Gbl.DateRange.DateEnd.Time.Hour = Gbl.tblock->tm_hour;
|
||||
Gbl.DateRange.DateEnd.Time.Minute = Gbl.tblock->tm_min;
|
||||
Gbl.DateRange.DateEnd.Time.Second = Gbl.tblock->tm_sec;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -798,8 +790,8 @@ unsigned Dat_GetNumDaysBetweenDates (struct Date *DateIni,struct Date *DateEnd)
|
|||
Year < DateEnd->Year;
|
||||
Year++)
|
||||
DiffDays += (int) Dat_GetNumDaysInYear (Year);
|
||||
return (DiffDays >= 0) ? (unsigned) DiffDays :
|
||||
0;
|
||||
return (DiffDays > 0) ? (unsigned) DiffDays :
|
||||
0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -823,8 +815,8 @@ unsigned Dat_GetNumWeeksBetweenDates (struct Date *DateIni,struct Date *DateEnd)
|
|||
Year < DateEnd->Year;
|
||||
Year++)
|
||||
DiffWeeks += (int) Dat_GetNumWeeksInYear (Year);
|
||||
return (DiffWeeks >= 0) ? (unsigned) DiffWeeks :
|
||||
0;
|
||||
return (DiffWeeks > 0) ? (unsigned) DiffWeeks :
|
||||
0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -837,10 +829,10 @@ unsigned Dat_GetNumMonthsBetweenDates (struct Date *DateIni,struct Date *DateEnd
|
|||
int DiffMonths;
|
||||
|
||||
/***** Compute the difference in months *****/
|
||||
DiffMonths = ((int) DateEnd->Year - (int) DateIni->Year) * 12 +
|
||||
DiffMonths = ((int) DateEnd->Year - (int) DateIni->Year) * 12 +
|
||||
(int) DateEnd->Month - (int) DateIni->Month + 1;
|
||||
return (DiffMonths >= 0) ? (unsigned) DiffMonths :
|
||||
0;
|
||||
return (DiffMonths > 0) ? (unsigned) DiffMonths :
|
||||
0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -65,7 +65,7 @@ struct DateTime
|
|||
/***************************** Public prototypes *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Dat_GetTimeStartExecution (void);
|
||||
void Dat_GetStartExecutionTimeUTC (void);
|
||||
void Dat_GetAndConvertCurrentDateTime (void);
|
||||
|
||||
time_t Dat_GetUNIXTimeFromStr (const char *Str);
|
||||
|
|
|
@ -131,7 +131,7 @@ bool Fil_ReadStdinIntoTmpFile (void)
|
|||
if (TmpFileSize < Fil_MAX_FILE_SIZE)
|
||||
{
|
||||
if (!(TmpFileSize % (64ULL*1024ULL))) // Check timeout from time to time
|
||||
if (time (NULL) - Gbl.TimeStartExecution >= Cfg_TIME_TO_ABORT_FILE_UPLOAD)
|
||||
if (time (NULL) - Gbl.StartExecutionTimeUTC >= Cfg_TIME_TO_ABORT_FILE_UPLOAD)
|
||||
TimeExceeded = true;
|
||||
fputc (fgetc (stdin),Gbl.F.Tmp);
|
||||
}
|
||||
|
@ -437,11 +437,11 @@ void Fil_RemoveOldTmpFiles (const char *Path,time_t TimeToRemove,bool RemoveDire
|
|||
}
|
||||
if (RemoveDirectory)
|
||||
/* Remove the directory itself */
|
||||
if (Gbl.TimeStartExecution - FileStatus.st_mtime > TimeToRemove)
|
||||
if (Gbl.StartExecutionTimeUTC - FileStatus.st_mtime > TimeToRemove)
|
||||
rmdir (Path);
|
||||
}
|
||||
else
|
||||
if (Gbl.TimeStartExecution - FileStatus.st_mtime > TimeToRemove)
|
||||
if (Gbl.StartExecutionTimeUTC - FileStatus.st_mtime > TimeToRemove)
|
||||
unlink (Path);
|
||||
}
|
||||
|
||||
|
|
|
@ -4775,7 +4775,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
|
|||
|
||||
/***** Check if is a recent file or folder *****/
|
||||
// If less than a week since last modify ==> indicate the file is recent by writting its name in green
|
||||
if (Gbl.TimeStartExecution < FileMetadata.Time + (7L*24L*60L*60L))
|
||||
if (Gbl.StartExecutionTimeUTC < FileMetadata.Time + (7L*24L*60L*60L))
|
||||
IsRecent = true;
|
||||
|
||||
/* Style of the text in this row */
|
||||
|
|
|
@ -87,7 +87,7 @@ void Gbl_InitializeGlobals (void)
|
|||
setlocale (LC_ALL,"es_ES.utf8");
|
||||
|
||||
gettimeofday (&Gbl.tvStart, &Gbl.tz);
|
||||
Dat_GetTimeStartExecution ();
|
||||
Dat_GetStartExecutionTimeUTC ();
|
||||
Dat_GetAndConvertCurrentDateTime ();
|
||||
|
||||
Gbl.Config.DatabasePassword[0] = '\0';
|
||||
|
@ -96,10 +96,10 @@ void Gbl_InitializeGlobals (void)
|
|||
Gbl.TimeGenerationInMicroseconds = Gbl.TimeSendInMicroseconds = 0L;
|
||||
Gbl.PID = getpid ();
|
||||
Sta_GetRemoteAddr ();
|
||||
sprintf (UniqueNamePlain,"%s-%lx-%x",Gbl.IP,Gbl.TimeStartExecution,Gbl.PID);
|
||||
sprintf (UniqueNamePlain,"%s-%lx-%x",Gbl.IP,Gbl.StartExecutionTimeUTC,Gbl.PID);
|
||||
Cry_EncryptSHA256Base64 (UniqueNamePlain,Gbl.UniqueNameEncrypted); // Make difficult to guess a unique name
|
||||
|
||||
srand ((unsigned int) Gbl.TimeStartExecution); // Initialize seed for rand()
|
||||
srand ((unsigned int) Gbl.StartExecutionTimeUTC); // Initialize seed for rand()
|
||||
|
||||
Gbl.WebService.IsWebService = false;
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ struct Globals
|
|||
bool YearOK;
|
||||
Act_Tab_t CurrentTab;
|
||||
Act_Action_t CurrentAct;
|
||||
time_t TimeStartExecution;
|
||||
time_t StartExecutionTimeUTC;
|
||||
struct tm *tblock;
|
||||
struct DateTime Now;
|
||||
struct Date Yesterday;
|
||||
|
@ -642,8 +642,8 @@ struct Globals
|
|||
} Test;
|
||||
struct
|
||||
{
|
||||
struct Date DateIni; // TODO: Remove in future versions
|
||||
struct Date DateEnd; // TODO: Remove in future versions
|
||||
struct DateTime DateIni; // TODO: Remove in future versions
|
||||
struct DateTime DateEnd; // TODO: Remove in future versions
|
||||
time_t TimeUTC[2];
|
||||
} DateRange;
|
||||
struct
|
||||
|
|
|
@ -3092,7 +3092,7 @@ static bool Grp_CheckIfOpenTimeInTheFuture (time_t OpenTimeUTC)
|
|||
return false;
|
||||
|
||||
/***** Is open time in the future? *****/
|
||||
return (OpenTimeUTC > Gbl.TimeStartExecution);
|
||||
return (OpenTimeUTC > Gbl.StartExecutionTimeUTC);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -1163,7 +1163,7 @@ void Pho_CalcPhotoDegree (void)
|
|||
|
||||
/***** Prevent the computing of an average photo too recently updated *****/
|
||||
if (Pho_GetTimeAvgPhotoWasComputed (DegCod) >=
|
||||
Gbl.TimeStartExecution - Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO)
|
||||
Gbl.StartExecutionTimeUTC - Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO)
|
||||
Lay_ShowErrorAndExit ("Average photo has been computed recently.");
|
||||
|
||||
/***** Get list of students in this degree *****/
|
||||
|
@ -1815,7 +1815,7 @@ static void Pho_PutLinkToCalculateDegreeStats (void)
|
|||
Gbl.Degs.AllDegs.Lst[NumDeg].DegCod,
|
||||
Gbl.Degs.AllDegs.Lst[NumDeg].DegCod == Deg.DegCod ? " selected=\"selected\"" :
|
||||
((Pho_GetTimeAvgPhotoWasComputed (Gbl.Degs.AllDegs.Lst[NumDeg].DegCod) >=
|
||||
Gbl.TimeStartExecution - Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO) ? " disabled=\"disabled\"" :
|
||||
Gbl.StartExecutionTimeUTC - Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO) ? " disabled=\"disabled\"" :
|
||||
""),
|
||||
Gbl.Degs.AllDegs.Lst[NumDeg].ShortName,
|
||||
Txt_time,
|
||||
|
|
|
@ -815,8 +815,8 @@ static void Sta_WriteSelectorAction (void)
|
|||
|
||||
void Sta_SetIniEndDates (void)
|
||||
{
|
||||
Gbl.DateRange.TimeUTC[0] = Gbl.TimeStartExecution - ((Cfg_DAYS_IN_RECENT_LOG - 1) * 24 * 60 * 60);
|
||||
Gbl.DateRange.TimeUTC[1] = Gbl.TimeStartExecution;
|
||||
Gbl.DateRange.TimeUTC[0] = Gbl.StartExecutionTimeUTC - ((Cfg_DAYS_IN_RECENT_LOG - 1) * 24 * 60 * 60);
|
||||
Gbl.DateRange.TimeUTC[1] = Gbl.StartExecutionTimeUTC;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -871,8 +871,8 @@ 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,&Gbl.Now.Date) <= Cfg_DAYS_IN_RECENT_LOG) ? "log_recent" :
|
||||
"log_full";
|
||||
LogTable = (Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&Gbl.Now.Date) <= Cfg_DAYS_IN_RECENT_LOG) ? "log_recent" :
|
||||
"log_full";
|
||||
|
||||
/***** Get the type of stat of clicks ******/
|
||||
Par_GetParToText ("GroupedOrDetailed",UnsignedStr,10);
|
||||
|
@ -981,7 +981,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
}
|
||||
|
||||
/***** Check if range of dates is forbidden for me *****/
|
||||
NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni,&Gbl.DateRange.DateEnd);
|
||||
NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&Gbl.DateRange.DateEnd.Date);
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
|
||||
(Gbl.Usrs.Me.LoggedRole == Rol_TEACHER && GlobalOrCourse == Sta_SHOW_COURSE_ACCESSES)))
|
||||
// TODO: How long can query other admins?
|
||||
|
@ -1099,15 +1099,12 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
StrQueryCountType,LogTable);
|
||||
break;
|
||||
}
|
||||
sprintf (QueryAux," WHERE %s.ClickTime >= '%04u%02u%02u' AND %s.ClickTime <= '%04u%02u%02u235959'",
|
||||
LogTable,
|
||||
Gbl.DateRange.DateIni.Year,
|
||||
Gbl.DateRange.DateIni.Month,
|
||||
Gbl.DateRange.DateIni.Day,
|
||||
LogTable,
|
||||
Gbl.DateRange.DateEnd.Year,
|
||||
Gbl.DateRange.DateEnd.Month,
|
||||
Gbl.DateRange.DateEnd.Day);
|
||||
sprintf (QueryAux," WHERE"
|
||||
" UNIX_TIMESTAMP(%s.ClickTime)>='%ld'"
|
||||
" AND"
|
||||
" UNIX_TIMESTAMP(%s.ClickTime)<='%ld'",
|
||||
LogTable,(long) Gbl.DateRange.TimeUTC[0],
|
||||
LogTable,(long) Gbl.DateRange.TimeUTC[1]);
|
||||
strcat (Query,QueryAux);
|
||||
|
||||
switch (GlobalOrCourse)
|
||||
|
@ -1874,7 +1871,7 @@ static void Sta_ShowNumHitsPerDays (unsigned long NumRows,
|
|||
MYSQL_ROW row;
|
||||
|
||||
/***** Initialize LastDate *****/
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd));
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd.Date));
|
||||
|
||||
/***** Write heading *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -1948,7 +1945,7 @@ static void Sta_ShowNumHitsPerDays (unsigned long NumRows,
|
|||
}
|
||||
Dat_AssignDate (&LastDate,&Date);
|
||||
}
|
||||
NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni,&LastDate);
|
||||
NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&LastDate);
|
||||
|
||||
/***** Finally NumDaysFromLastDateToCurrDate days are shown with 0 clicks
|
||||
(the oldest days from the requested initial day until the first with clicks) *****/
|
||||
|
@ -2061,7 +2058,7 @@ static void Sta_ShowDistrAccessesPerDaysAndHour (unsigned long NumRows,MYSQL_RES
|
|||
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,2,1);
|
||||
|
||||
/***** Initialize LastDate *****/
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd));
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd.Date));
|
||||
|
||||
/***** Reset number of pages generated per hour *****/
|
||||
for (Hour = 0;
|
||||
|
@ -2223,7 +2220,7 @@ static void Sta_ShowDistrAccessesPerDaysAndHour (unsigned long NumRows,MYSQL_RES
|
|||
/***** 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,&LastDate);
|
||||
NumDaysFromLastDateToCurrDate = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&LastDate);
|
||||
for (D = 1;
|
||||
D <= NumDaysFromLastDateToCurrDate;
|
||||
D++)
|
||||
|
@ -2455,8 +2452,8 @@ static void Sta_ShowNumHitsPerWeeks (unsigned long NumRows,
|
|||
MYSQL_ROW row;
|
||||
|
||||
/***** Initialize LastDate to avoid warning *****/
|
||||
Dat_CalculateWeekOfYear (&Gbl.DateRange.DateEnd); // Changes Week and Year
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd));
|
||||
Dat_CalculateWeekOfYear (&Gbl.DateRange.DateEnd.Date); // Changes Week and Year
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd.Date));
|
||||
|
||||
/***** Write heading *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -2514,8 +2511,8 @@ static void Sta_ShowNumHitsPerWeeks (unsigned long NumRows,
|
|||
}
|
||||
|
||||
/***** Finally, show the old weeks without pages generated *****/
|
||||
Dat_CalculateWeekOfYear (&Gbl.DateRange.DateIni); // Changes Week and Year
|
||||
NumWeeksBetweenLastDateAndCurrentDate = Dat_GetNumWeeksBetweenDates (&Gbl.DateRange.DateIni,&LastDate);
|
||||
Dat_CalculateWeekOfYear (&Gbl.DateRange.DateIni.Date); // Changes Week and Year
|
||||
NumWeeksBetweenLastDateAndCurrentDate = Dat_GetNumWeeksBetweenDates (&Gbl.DateRange.DateIni.Date,&LastDate);
|
||||
for (W = 1;
|
||||
W <= NumWeeksBetweenLastDateAndCurrentDate;
|
||||
W++)
|
||||
|
@ -2549,12 +2546,12 @@ static void Sta_ShowNumHitsPerMonths (unsigned long NumRows,
|
|||
struct Date LastDate;
|
||||
struct Date Date;
|
||||
unsigned M;
|
||||
unsigned NumMesesEntreLastDateYAct;
|
||||
unsigned NumMonthsBetweenLastDateAndCurrentDate;
|
||||
struct Sta_Hits Hits;
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Initialize LastDate *****/
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd));
|
||||
Dat_AssignDate (&LastDate,&(Gbl.DateRange.DateEnd.Date));
|
||||
|
||||
/***** Write heading *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -2587,9 +2584,9 @@ static void Sta_ShowNumHitsPerMonths (unsigned long NumRows,
|
|||
Hits.Num = Str_GetFloatNumFromStr (row[1]);
|
||||
|
||||
Dat_AssignDate (&Date,&LastDate);
|
||||
NumMesesEntreLastDateYAct = Dat_GetNumMonthsBetweenDates (&ReadDate,&LastDate);
|
||||
NumMonthsBetweenLastDateAndCurrentDate = Dat_GetNumMonthsBetweenDates (&ReadDate,&LastDate);
|
||||
for (M = 1;
|
||||
M <= NumMesesEntreLastDateYAct;
|
||||
M <= NumMonthsBetweenLastDateAndCurrentDate;
|
||||
M++)
|
||||
{
|
||||
/* Write the month */
|
||||
|
@ -2601,7 +2598,7 @@ static void Sta_ShowNumHitsPerMonths (unsigned long NumRows,
|
|||
|
||||
/* Draw bar proportional to number of pages generated */
|
||||
Sta_DrawBarNumHits ('c',
|
||||
M == NumMesesEntreLastDateYAct ? Hits.Num :
|
||||
M == NumMonthsBetweenLastDateAndCurrentDate ? Hits.Num :
|
||||
0.0,
|
||||
Hits.Max,Hits.Total,500);
|
||||
|
||||
|
@ -2612,9 +2609,9 @@ static void Sta_ShowNumHitsPerMonths (unsigned long NumRows,
|
|||
}
|
||||
|
||||
/***** Finally, show the oldest months without clicks *****/
|
||||
NumMesesEntreLastDateYAct = Dat_GetNumMonthsBetweenDates (&Gbl.DateRange.DateIni,&LastDate);
|
||||
NumMonthsBetweenLastDateAndCurrentDate = Dat_GetNumMonthsBetweenDates (&Gbl.DateRange.DateIni.Date,&LastDate);
|
||||
for (M = 1;
|
||||
M <= NumMesesEntreLastDateYAct;
|
||||
M <= NumMonthsBetweenLastDateAndCurrentDate;
|
||||
M++)
|
||||
{
|
||||
/* Write the month */
|
||||
|
@ -2651,7 +2648,7 @@ static void Sta_ShowNumHitsPerHour (unsigned long NumRows,
|
|||
unsigned ColumnWidth;
|
||||
MYSQL_ROW row;
|
||||
|
||||
if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni,&Gbl.DateRange.DateEnd)))
|
||||
if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&Gbl.DateRange.DateEnd.Date)))
|
||||
{
|
||||
/***** Compute maximum number of pages generated per hour *****/
|
||||
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,NumDays);
|
||||
|
@ -2756,7 +2753,7 @@ static void Sta_ShowAverageAccessesPerMinute (unsigned long NumRows,MYSQL_RES *m
|
|||
float IncX;
|
||||
char *Format;
|
||||
|
||||
if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni,&Gbl.DateRange.DateEnd)))
|
||||
if ((NumDays = Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni.Date,&Gbl.DateRange.DateEnd.Date)))
|
||||
{
|
||||
/***** Compute number of clicks (and máximo) in every minute *****/
|
||||
Hits.Max = 0.0;
|
||||
|
@ -3781,13 +3778,8 @@ static void Sta_DrawBarNumHits (char Color,float HitsNum,float HitsMax,float Hit
|
|||
|
||||
void Sta_WriteParamsDatesSeeAccesses (void)
|
||||
{
|
||||
Par_PutHiddenParamUnsigned ("StartDay" ,Gbl.DateRange.DateIni.Day);
|
||||
Par_PutHiddenParamUnsigned ("StartMonth",Gbl.DateRange.DateIni.Month);
|
||||
Par_PutHiddenParamUnsigned ("StartYear" ,Gbl.DateRange.DateIni.Year);
|
||||
|
||||
Par_PutHiddenParamUnsigned ("EndDay" ,Gbl.DateRange.DateEnd.Day);
|
||||
Par_PutHiddenParamUnsigned ("EndMonth" ,Gbl.DateRange.DateEnd.Month);
|
||||
Par_PutHiddenParamUnsigned ("EndYear" ,Gbl.DateRange.DateEnd.Year);
|
||||
Par_PutHiddenParamUnsigned ("StartTimeUTC",Gbl.DateRange.TimeUTC[0]);
|
||||
Par_PutHiddenParamUnsigned ("EndTimeUTC" ,Gbl.DateRange.TimeUTC[1]);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -1475,8 +1475,8 @@ void Svy_RequestCreatOrEditSvy (void)
|
|||
|
||||
/* Initialize to empty survey */
|
||||
Svy.SvyCod = -1L;
|
||||
Svy.TimeUTC[Svy_START_TIME] = Gbl.TimeStartExecution;
|
||||
Svy.TimeUTC[Svy_END_TIME ] = Gbl.TimeStartExecution + (24 * 60 * 60); // +24 hours
|
||||
Svy.TimeUTC[Svy_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
Svy.TimeUTC[Svy_END_TIME ] = Gbl.StartExecutionTimeUTC + (24 * 60 * 60); // +24 hours
|
||||
Svy.Title[0] = '\0';
|
||||
Svy.Roles = (1 << Rol_STUDENT);
|
||||
Svy.NumQsts = 0;
|
||||
|
@ -1767,7 +1767,7 @@ void Svy_RecFormSurvey (void)
|
|||
|
||||
/***** Adjust dates *****/
|
||||
if (NewSvy.TimeUTC[Svy_START_TIME] == 0)
|
||||
NewSvy.TimeUTC[Svy_START_TIME] = Gbl.TimeStartExecution;
|
||||
NewSvy.TimeUTC[Svy_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
if (NewSvy.TimeUTC[Svy_END_TIME] == 0)
|
||||
NewSvy.TimeUTC[Svy_END_TIME] = NewSvy.TimeUTC[Svy_START_TIME] + 24*60*60; // +24 hours
|
||||
|
||||
|
|
15
swad_test.c
15
swad_test.c
|
@ -1088,7 +1088,7 @@ static void Tst_UpdateLastAccTst (void)
|
|||
void Tst_SetIniEndDates (void)
|
||||
{
|
||||
Gbl.DateRange.TimeUTC[0] = (time_t) 0;
|
||||
Gbl.DateRange.TimeUTC[1] = Gbl.TimeStartExecution;
|
||||
Gbl.DateRange.TimeUTC[1] = Gbl.StartExecutionTimeUTC;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -6205,21 +6205,16 @@ static void Tst_ShowResultsOfTestExams (struct UsrData *UsrDat)
|
|||
|
||||
/***** Make database query *****/
|
||||
sprintf (Query,"SELECT TstCod,AllowTeachers,"
|
||||
"UNIX_TIMESTAMP(TstTime),"
|
||||
"UNIX_TIMESTAMP(TstTime) AS T,"
|
||||
"NumQsts,NumQstsNotBlank,Score"
|
||||
" FROM tst_exams"
|
||||
" WHERE CrsCod='%ld' AND UsrCod='%ld'"
|
||||
" AND TstTime>='%04u%02u%02u'"
|
||||
" AND TstTime<='%04u%02u%02u235959'"
|
||||
" AND T>='%ld' AND T<='%ld'"
|
||||
" ORDER BY TstCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
UsrDat->UsrCod,
|
||||
Gbl.DateRange.DateIni.Year,
|
||||
Gbl.DateRange.DateIni.Month,
|
||||
Gbl.DateRange.DateIni.Day,
|
||||
Gbl.DateRange.DateEnd.Year,
|
||||
Gbl.DateRange.DateEnd.Month,
|
||||
Gbl.DateRange.DateEnd.Day);
|
||||
(long) Gbl.DateRange.TimeUTC[0],
|
||||
(long) Gbl.DateRange.TimeUTC[1]);
|
||||
NumExams = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test exams of a user");
|
||||
|
||||
/***** Show user's data *****/
|
||||
|
|
Loading…
Reference in New Issue