Version 15.26

This commit is contained in:
Antonio Cañas Vargas 2015-10-27 22:59:49 +01:00
parent 2ae53c304a
commit b4075bd63f
6 changed files with 91 additions and 55 deletions

View File

@ -193,6 +193,14 @@ function setUTCFromLocalDateTimeForm(id) {
}
}
// Set form param with time difference between UTC time and client local time, in minutes
function setTZ(id) {
var FormTZ = document.getElementById(id);
var d = new (Date);
FormTZ.value = d.getTimezoneOffset();
}
// Adjust a date form correcting days in the month
function adjustDateForm (id) {
var FormYea = document.getElementById(id+'Year' );

View File

@ -108,11 +108,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.25.4 (2015/10/27)"
#define Log_PLATFORM_VERSION "SWAD 15.26 (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.26: Oct 27, 2015 Statistics are computed properly for clients with time-zones different to that of the server. (186278 lines)
Version 15.25.4: Oct 27, 2015 Day and month are displayed in clock. (186251 lines)
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)

View File

@ -467,6 +467,50 @@ time_t Dat_GetTimeUTCFromForm (const char *ParamName)
return Dat_GetUNIXTimeFromStr (LongStr);
}
/*****************************************************************************/
/**************** Put a hidden param with time difference ********************/
/**************** between UTC time and client local time, ********************/
/**************** in minutes ********************/
/*****************************************************************************/
void Dat_PutHiddenParClientTZDiff (void)
{
fprintf (Gbl.F.Out,"<input type=\"hidden\""
" id=\"ClientTZDiff\" name=\"ClientTZDiff\""
" value=\"0\" />"
"<script type=\"text/javascript\">"
"setTZ('ClientTZDiff');"
"</script>");
}
/*****************************************************************************/
/**************** Get string with time difference ********************/
/**************** between UTC time and client local time, ********************/
/**************** in +hh:mm or -hh:mm format ********************/
/*****************************************************************************/
// ClientTZStr must have space for strings in +hh:mm format (6 characters + \0)
void Dat_GetClientTZDiff (char *ClientTZStr)
{
char IntStr[1+10+1];
int ClientTZDiff; // Time difference between UTC time and client local time, in minutes
/***** Get client time zone *****/
Par_GetParToText ("ClientTZDiff",IntStr,1+10);
if (sscanf (IntStr,"%d",&ClientTZDiff) != 1)
ClientTZDiff = 0;
/***** Convert from minutes to +hh:mm or -hh:mm *****/
if (ClientTZDiff >= 0)
sprintf (ClientTZStr,"+%02u:%02u",
(unsigned) ClientTZDiff / 60,
(unsigned) ClientTZDiff % 60);
else
sprintf (ClientTZStr,"-%02u:%02u",
(unsigned) (-ClientTZDiff) / 60,
(unsigned) (-ClientTZDiff) % 60);
}
/*****************************************************************************/
/************************* Show a form to enter a date ***********************/
/*****************************************************************************/

View File

@ -86,6 +86,9 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id,
bool SubmitFormOnChange);
time_t Dat_GetTimeUTCFromForm (const char *ParamName);
void Dat_PutHiddenParClientTZDiff (void);
void Dat_GetClientTZDiff (char *ClientTZStr);
void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear,
const char *Id,
struct Date *DateSelected,

View File

@ -445,7 +445,6 @@ void Sta_AskShowCrsHits (void)
extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY];
extern const char *Txt_results_per_page;
extern const char *Txt_The_statistics_marked_with_;
extern const char *Txt_Show_hits;
extern const char *Txt_No_teachers_or_students_found;
static unsigned long RowsPerPage[] = {10,20,30,40,50,100,500,1000,5000,10000,50000,100000};
@ -579,9 +578,8 @@ void Sta_AskShowCrsHits (void)
"</tr>"
"</table>");
/***** Warning *****/
fprintf (Gbl.F.Out,"<p class=\"DAT_SMALL\">%s</p>",
Txt_The_statistics_marked_with_);
/***** Hidden param used to get client time zone *****/
Dat_PutHiddenParClientTZDiff ();
/***** Send button *****/
Lay_PutConfirmButton (Txt_Show_hits);
@ -621,7 +619,6 @@ void Sta_AskShowGblHits (void)
extern const char *Txt_Show;
extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY];
extern const char *Txt_The_statistics_marked_with_;
extern const char *Txt_Show_hits;
Sta_Role_t RoleStat;
Sta_ClicksGroupedBy_t ClicksGroupedBy;
@ -729,9 +726,8 @@ void Sta_AskShowGblHits (void)
"</tr>"
"</table>");
/***** Warning *****/
fprintf (Gbl.F.Out,"<p class=\"DAT_SMALL\">%s</p>",
Txt_The_statistics_marked_with_);
/***** Hidden param used to get client time zone *****/
Dat_PutHiddenParClientTZDiff ();
/***** Send button *****/
Lay_PutConfirmButton (Txt_Show_hits);
@ -857,6 +853,8 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
const char *LogTable;
Sta_ClicksDetailedOrGrouped_t DetailedOrGrouped = Sta_CLICKS_GROUPED;
struct UsrData UsrDat;
char ClientTZStr[1+2+1+2+1]; // Time difference between UTC time and client local time,
// in +hh:mm or -hh:mm format
unsigned NumUsr = 0;
const char *Ptr;
char StrRole[256];
@ -869,6 +867,9 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
/***** Get initial and ending dates *****/
Dat_GetIniEndDatesFromForm ();
/***** Get client time zone *****/
Dat_GetClientTZDiff (ClientTZStr);
/***** 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,&Gbl.Now.Date) <= Cfg_DAYS_IN_RECENT_LOG) ? "log_recent" :
@ -1028,14 +1029,20 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
break;
case Sta_CLICKS_CRS_PER_DAYS:
case Sta_CLICKS_GBL_PER_DAYS:
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%Y%%m%%d') AS Day,%s FROM %s",
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%Y%%m%%d') AS Day,"
"%s FROM %s",
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_DAYS_AND_HOUR:
case Sta_CLICKS_GBL_PER_DAYS_AND_HOUR:
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(ClickTime,'%%Y%%m%%d') AS Day,"
"DATE_FORMAT(ClickTime,'%%H') AS Hour,%s FROM %s",
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%Y%%m%%d') AS Day,"
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%H') AS Hour,"
"%s FROM %s",
ClientTZStr,
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_WEEKS:
@ -1043,22 +1050,34 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
/* With %v the weeks always are counted from monday to sunday.
01/01/2006 was sunday => it's counted in the week 52 of 2005, that goes from 26/12/2005 (monday) to 01/01/2006 (sunday).
The week 1 of 2006 goes from 02/01/2006 (monday) to 08/01/2006 (sunday) */
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%x%%v') AS Week,%s FROM %s",
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%x%%v') AS Week,"
"%s FROM %s",
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_MONTHS:
case Sta_CLICKS_GBL_PER_MONTHS:
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%Y%%m') AS Month,%s FROM %s",
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%Y%%m') AS Month,"
"%s FROM %s",
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_HOUR:
case Sta_CLICKS_GBL_PER_HOUR:
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%H') AS Hour,%s FROM %s",
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%H') AS Hour,"
"%s FROM %s",
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_MINUTE:
case Sta_CLICKS_GBL_PER_MINUTE:
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%H%%i') AS Minute,%s FROM %s",
sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(CONVERT_TZ(ClickTime,@@session.time_zone,'%s'),'%%H%%i') AS Minute,"
"%s FROM %s",
ClientTZStr,
StrQueryCountType,LogTable);
break;
case Sta_CLICKS_CRS_PER_ACTION:

View File

@ -42039,45 +42039,6 @@ const char *Txt_The_session_has_expired_due_to_inactivity = // Expired due to ti
"A sess&atilde;o expirou devido &agrave; inatividade.";
#endif
const char *Txt_The_statistics_marked_with_ =
#if L==0
"Les estadístiques marcades amb *"
" es calculen segons l'hora del servidor,"
" que pot no coincidir amb la seva hora local.";
#elif L==1
"Die mit * gekennzeichneten Statistiken"
" werden nach der Serverzeit,"
" die nicht Ihrer lokalen Zeit entsprechen berechnet.";
#elif L==2
"The statistics marked with *"
" are calculated according to the server time,"
" which may not match your local time.";
#elif L==3
"Las estad&iacute;sticas marcadas con *"
" se calculan seg&uacute;n la hora del servidor,"
" que puede no coincidir con su hora local.";
#elif L==4
"Les statistiques marqu&eacute;s d'une *"
" sont calcul&eacute;s selon l'heure du serveur,"
" qui peut ne pas correspondre &agrave; votre heure locale.";
#elif L==5
"Las estad&iacute;sticas marcadas con *"
" se calculan seg&uacute;n la hora del servidor,"
" que puede no coincidir con su hora local."; // Okoteve traducción
#elif L==6
"Le statistiche contrassegnati con *"
" sono calcolati secondo l'ora del server,"
" che non pu&ograve; corrispondere l'ora locale.";
#elif L==7
"Statystyki oznaczone *"
" s&aogon; obliczane wed&lstrok;ug czasu serwera,"
" kt&oacute;re mog&aogon; nie odpowiada&cacute; czasu lokalnego.";
#elif L==8
"As estat&iacute;sticas marcados com *"
" s&atilde;o calculados de acordo com a hora do servidor,"
" que pode n&atilde;o coincidir com a hora local.";
#endif
const char *Txt_The_status_of_the_centre_X_has_changed = // Warning: it is very important to include %s in the following sentences
#if L==0
"El estado del centro <strong>%s</strong> ha cambiado."; // Necessita traduccio