From b1aa6514caeb6afede0b4e42e980c8bbe8eb8dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 11 Mar 2015 13:50:35 +0100 Subject: [PATCH] Version 14.85.2 --- swad_changelog.h | 5 +- swad_user.c | 121 ++++++++++++++++++++++++++--------------------- 2 files changed, 70 insertions(+), 56 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index a0db0e8d0..a0549fc18 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,12 +103,13 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.85.1 (2015/03/11)" +#define Log_PLATFORM_VERSION "SWAD 14.85.2 (2015/03/11)" // 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 14.85.1: Mar 11, 2015 Remove user's figures when removing a user. (181472 lines) + Version 14.85.2: Mar 11, 2015 Refactoring in user's figures. (181478 lines) + Version 14.85.1: Mar 11, 2015 Remove user's figures when removing user's account. (181472 lines) Version 14.85: Mar 11, 2015 Number of messages sent is stored in user's figures. (181457 lines) 2 changes necessary in database: ALTER TABLE usr_figures ADD COLUMN NumForPst INT NOT NULL DEFAULT -1 AFTER NumClicks; diff --git a/swad_user.c b/swad_user.c index 34c3dbd2a..cfd7f4b83 100644 --- a/swad_user.c +++ b/swad_user.c @@ -188,6 +188,8 @@ static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod); static void Usr_GetNumClicksAndStoreAsUsrFigure (long UsrCod); static void Usr_GetNumForPstAndStoreAsUsrFigure (long UsrCod); static void Usr_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod); +static void Usr_ResetUsrFigures (struct UsrFigures *UsrFigures); +static void Usr_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigures); static bool Usr_CheckIfUsrFiguresExists (long UsrCod); /*****************************************************************************/ @@ -7829,14 +7831,8 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) UsrFigures->NumMsgSnt = -1L; } else - { /***** Return special user's figures indicating "not present" *****/ - if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000"))) - Lay_ShowErrorAndExit ("Error when reading first click time."); - UsrFigures->NumClicks = -1L; - UsrFigures->NumForPst = -1L; - UsrFigures->NumMsgSnt = -1L; - } + Usr_ResetUsrFigures (UsrFigures); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -7867,11 +7863,13 @@ static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) char Query[256]; MYSQL_RES *mysql_res; MYSQL_ROW row; - struct DateTime FirstClickTime; - bool UsrIsInLog = false; + struct UsrFigures UsrFigures; if (Usr_ChkIfUsrCodExists (UsrCod)) { + /***** Reset user's figures *****/ + Usr_ResetUsrFigures (&UsrFigures); + /***** Get first click from log table *****/ sprintf (Query,"SELECT DATE_FORMAT(ClickTime,'%%Y%%m%%d%%H%%i%%S') FROM log" " WHERE UsrCod='%ld' ORDER BY ClickTime LIMIT 1", @@ -7882,32 +7880,22 @@ static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) row = mysql_fetch_row (mysql_res); /* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */ - if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&FirstClickTime,row[0]))) + if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures.FirstClickTime),row[0]))) Lay_ShowErrorAndExit ("Error when reading first click time."); - - UsrIsInLog = true; } /* Free structure that stores the query result */ DB_FreeMySQLResult (&mysql_res); /***** Update first click time in user's figures *****/ - if (UsrIsInLog) // If first click time found + if (Usr_CheckIfUsrFiguresExists (UsrCod)) { - if (Usr_CheckIfUsrFiguresExists (UsrCod)) - { - sprintf (Query,"UPDATE usr_figures SET FirstClickTime='%s'" - " WHERE UsrCod='%ld'", - FirstClickTime.YYYYMMDDHHMMSS,UsrCod); - DB_QueryUPDATE (Query,"can not update user's figures"); - } - else // User entry does not exist - { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumForPst,NumMsgSnt)" - " VALUES ('%ld','%s','-1','-1','-1')", - UsrCod,FirstClickTime.YYYYMMDDHHMMSS); - DB_QueryINSERT (Query,"can not create user's figures"); - } + sprintf (Query,"UPDATE usr_figures SET FirstClickTime='%s'" + " WHERE UsrCod='%ld'", + UsrFigures.FirstClickTime.YYYYMMDDHHMMSS,UsrCod); + DB_QueryUPDATE (Query,"can not update user's figures"); } + else // User entry does not exist + Usr_CreateUsrFigures (UsrCod,&UsrFigures); } } @@ -7934,30 +7922,28 @@ void Usr_CalculateNumClicks (void) static void Usr_GetNumClicksAndStoreAsUsrFigure (long UsrCod) { char Query[256]; - unsigned long NumClicks; + struct UsrFigures UsrFigures; if (Usr_ChkIfUsrCodExists (UsrCod)) { + /***** Reset user's figures *****/ + Usr_ResetUsrFigures (&UsrFigures); + /***** Get number of clicks from database *****/ sprintf (Query,"SELECT COUNT(*) FROM log WHERE UsrCod='%ld'", UsrCod); - NumClicks = (long) DB_QueryCOUNT (Query,"can not get number of clicks"); + UsrFigures.NumClicks = (long) DB_QueryCOUNT (Query,"can not get number of clicks"); /***** Update number of clicks in user's figures *****/ if (Usr_CheckIfUsrFiguresExists (UsrCod)) { sprintf (Query,"UPDATE usr_figures SET NumClicks='%ld'" " WHERE UsrCod='%ld'", - NumClicks,UsrCod); + UsrFigures.NumClicks,UsrCod); DB_QueryUPDATE (Query,"can not update user's figures"); } else // User entry does not exist - { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumForPst,NumMsgSnt)" - " VALUES ('%ld','00000000000000','%ld','-1','-1')", - UsrCod,NumClicks); - DB_QueryINSERT (Query,"can not create user's figures"); - } + Usr_CreateUsrFigures (UsrCod,&UsrFigures); } } @@ -7984,28 +7970,26 @@ void Usr_CalculateNumForPst (void) static void Usr_GetNumForPstAndStoreAsUsrFigure (long UsrCod) { char Query[256]; - unsigned long NumForPst; + struct UsrFigures UsrFigures; if (Usr_ChkIfUsrCodExists (UsrCod)) { + /***** Reset user's figures *****/ + Usr_ResetUsrFigures (&UsrFigures); + /***** Get number of forum posts from database *****/ - NumForPst = For_GetNumPostsUsr (UsrCod); + UsrFigures.NumForPst = For_GetNumPostsUsr (UsrCod); /***** Update number of forum posts in user's figures *****/ if (Usr_CheckIfUsrFiguresExists (UsrCod)) { sprintf (Query,"UPDATE usr_figures SET NumForPst='%ld'" " WHERE UsrCod='%ld'", - NumForPst,UsrCod); + UsrFigures.NumForPst,UsrCod); DB_QueryUPDATE (Query,"can not update user's figures"); } else // User entry does not exist - { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumForPst,NumMsgSnt)" - " VALUES ('%ld','00000000000000','-1','%ld','-1')", - UsrCod,NumForPst); - DB_QueryINSERT (Query,"can not create user's figures"); - } + Usr_CreateUsrFigures (UsrCod,&UsrFigures); } } @@ -8032,31 +8016,60 @@ void Usr_CalculateNumMsgSnt (void) static void Usr_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod) { char Query[256]; - unsigned long NumMsgSnt; + struct UsrFigures UsrFigures; if (Usr_ChkIfUsrCodExists (UsrCod)) { + /***** Reset user's figures *****/ + Usr_ResetUsrFigures (&UsrFigures); + /***** Get number of messages sent from database *****/ - NumMsgSnt = Msg_GetNumMsgsSentByUsr (UsrCod); + UsrFigures.NumMsgSnt = Msg_GetNumMsgsSentByUsr (UsrCod); /***** Update number of messages sent in user's figures *****/ if (Usr_CheckIfUsrFiguresExists (UsrCod)) { sprintf (Query,"UPDATE usr_figures SET NumMsgSnt='%ld'" " WHERE UsrCod='%ld'", - NumMsgSnt,UsrCod); + UsrFigures.NumMsgSnt,UsrCod); DB_QueryUPDATE (Query,"can not update user's figures"); } else // User entry does not exist - { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumForPst,NumMsgSnt)" - " VALUES ('%ld','00000000000000','-1','-1','-1','%ld')", - UsrCod,NumMsgSnt); - DB_QueryINSERT (Query,"can not create user's figures"); - } + Usr_CreateUsrFigures (UsrCod,&UsrFigures); } } +/*****************************************************************************/ +/********************** Reset values of user's figures ***********************/ +/*****************************************************************************/ + +static void Usr_ResetUsrFigures (struct UsrFigures *UsrFigures) + { + Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000"); // unknown first click time or user never logged + UsrFigures->NumClicks = -1L; // unknown number of clicks + UsrFigures->NumForPst = -1L; // unknown number of forum posts + UsrFigures->NumMsgSnt = -1L; // unknown number of messages sent + } + +/*****************************************************************************/ +/***** Get number of messages sent by a user and store in user's figures *****/ +/*****************************************************************************/ + +static void Usr_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigures) + { + char Query[256]; + + /***** Create user's figures *****/ + sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumForPst,NumMsgSnt)" + " VALUES ('%ld','%s','%ld','%ld','%ld')", + UsrCod, + UsrFigures->FirstClickTime.YYYYMMDDHHMMSS, // 0 ==> unknown first click time or user never logged + UsrFigures->NumClicks, // -1L ==> unknown number of clicks + UsrFigures->NumForPst, // -1L ==> unknown number of forum posts + UsrFigures->NumMsgSnt); // -1L ==> unknown number of messages sent + DB_QueryINSERT (Query,"can not create user's figures"); + } + /*****************************************************************************/ /**************************** Remove user's figures **************************/ /*****************************************************************************/