From 801dd37d00f60dc53e33f335ea460e6fc3b8d087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 26 Oct 2015 14:35:50 +0100 Subject: [PATCH] Version 15.22 --- swad_changelog.h | 3 ++- swad_profile.c | 50 +++++++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index ac225abb..85c85d9e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -108,11 +108,12 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.21.3 (2015/10/26)" +#define Log_PLATFORM_VERSION "SWAD 15.22 (2015/10/26)" // 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.22: Oct 26, 2015 First click time in users' profiles is displayed in client local date-time. (186328 lines) Version 15.21.3: Oct 26, 2015 Changes in date-times of test exams. (186325 lines) Version 15.21.2: Oct 26, 2015 Date-times in tests are displayed in client local date-time. (186315 lines) Version 15.21.1: Oct 26, 2015 New forms to enter range of date-times in statistic and test. (186313 lines) diff --git a/swad_profile.c b/swad_profile.c index bc8e5fc5..0d7909af 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -54,12 +54,12 @@ struct UsrFigures { - struct DateTime FirstClickTime; // 0 ==> unknown first click time of user never logged - int NumDays; // -1 ==> not applicable - long NumClicks; // -1L ==> unknown number of clicks - long NumFileViews; // -1L ==> unknown number of file views - long NumForPst; // -1L ==> unknown number of forum posts - long NumMsgSnt; // -1L ==> unknown number of messages sent + time_t FirstClickTimeUTC; // 0 ==> unknown first click time of user never logged + int NumDays; // -1 ==> not applicable + long NumClicks; // -1L ==> unknown number of clicks + long NumFileViews; // -1L ==> unknown number of file views + long NumForPst; // -1L ==> unknown number of forum posts + long NumMsgSnt; // -1L ==> unknown number of messages sent }; /*****************************************************************************/ @@ -421,14 +421,18 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) Gbl.Prefs.IconsURL, Txt_From_TIME, Txt_From_TIME); - if (UsrFigures.FirstClickTime.Date.Year) + if (UsrFigures.FirstClickTimeUTC) { - Dat_WriteDate (UsrFigures.FirstClickTime.Date.YYYYMMDD); + fprintf (Gbl.F.Out,""); if (UsrFigures.NumDays > 0) fprintf (Gbl.F.Out," (%d %s)", UsrFigures.NumDays, (UsrFigures.NumDays == 1) ? Txt_day : Txt_days); + fprintf (Gbl.F.Out,"", + (long) UsrFigures.FirstClickTimeUTC); } else // First click time is unknown or user never logged { @@ -620,7 +624,7 @@ static void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) unsigned NumRows; /***** Get user's figures from database *****/ - sprintf (Query,"SELECT DATE_FORMAT(FirstClickTime,'%%Y%%m%%d%%H%%i%%S')," + sprintf (Query,"SELECT UNIX_TIMESTAMP(FirstClickTime)," "DATEDIFF(NOW(),FirstClickTime)+1," "NumClicks,NumFileViews,NumForPst,NumMsgSnt" " FROM usr_figures WHERE UsrCod='%ld'", @@ -630,12 +634,11 @@ static void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) /***** Get user's figures *****/ row = mysql_fetch_row (mysql_res); - /* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */ - if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),row[0]))) - Lay_ShowErrorAndExit ("Error when reading first click time."); + /* Get first click (row[0] holds first click time UTC) */ + UsrFigures->FirstClickTimeUTC = Dat_GetUNIXTimeFromStr (row[0]); /* Get number of days since first click (row[1]) */ - if (UsrFigures->FirstClickTime.Date.Year) + if (UsrFigures->FirstClickTimeUTC) { if (sscanf (row[1],"%d",&UsrFigures->NumDays) != 1) UsrFigures->NumDays = -1; @@ -794,19 +797,18 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) Prf_ResetUsrFigures (&UsrFigures); /***** Get first click from log table *****/ - sprintf (Query,"SELECT DATE_FORMAT(" + sprintf (Query,"SELECT UNIX_TIMESTAMP(" "(SELECT MIN(ClickTime) FROM log_full WHERE UsrCod='%ld')" - ",'%%Y%%m%%d%%H%%i%%S')", + ")", UsrCod); if (DB_QuerySELECT (Query,&mysql_res,"can not get user's first click")) { /* Get first click */ row = mysql_fetch_row (mysql_res); - /* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */ + /* Get first click (row[0] holds the start date-time UTC) */ if (row[0]) // It is NULL when user never logged - if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures.FirstClickTime),row[0]))) - Lay_ShowErrorAndExit ("Error when reading first click time."); + UsrFigures.FirstClickTimeUTC = Dat_GetUNIXTimeFromStr (row[0]); } /* Free structure that stores the query result */ DB_FreeMySQLResult (&mysql_res); @@ -814,9 +816,9 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) /***** Update first click time in user's figures *****/ if (Prf_CheckIfUsrFiguresExists (UsrCod)) { - sprintf (Query,"UPDATE usr_figures SET FirstClickTime='%s'" + sprintf (Query,"UPDATE usr_figures SET FirstClickTime=FROM_UNIXTIME('%ld')" " WHERE UsrCod='%ld'", - UsrFigures.FirstClickTime.YYYYMMDDHHMMSS,UsrCod); + (long) UsrFigures.FirstClickTimeUTC,UsrCod); DB_QueryUPDATE (Query,"can not update user's figures"); } else // User entry does not exist @@ -1031,7 +1033,7 @@ void Prf_CreateNewUsrFigures (long UsrCod) static void Prf_ResetUsrFigures (struct UsrFigures *UsrFigures) { - Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000"); // unknown first click time or user never logged + UsrFigures->FirstClickTimeUTC = (time_t) 0; // unknown first click time or user never logged UsrFigures->NumDays = -1; // not applicable UsrFigures->NumClicks = -1L; // unknown number of clicks UsrFigures->NumFileViews = -1L; // unknown number of file views @@ -1049,10 +1051,10 @@ static void Prf_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigure /***** Create user's figures *****/ sprintf (Query,"INSERT INTO usr_figures" - "(UsrCod,FirstClickTime,NumClicks,NumFileViews,NumForPst,NumMsgSnt)" - " VALUES ('%ld','%s','%ld','%ld','%ld','%ld')", + "(UsrCod,FROM_UNIXTIME(FirstClickTime),NumClicks,NumFileViews,NumForPst,NumMsgSnt)" + " VALUES ('%ld','%ld','%ld','%ld','%ld','%ld')", UsrCod, - UsrFigures->FirstClickTime.YYYYMMDDHHMMSS, // 0 ==> unknown first click time or user never logged + (long) UsrFigures->FirstClickTimeUTC, // 0 ==> unknown first click time or user never logged UsrFigures->NumClicks, // -1L ==> unknown number of clicks UsrFigures->NumFileViews, // -1L ==> unknown number of file views UsrFigures->NumForPst, // -1L ==> unknown number of forum posts