From 91e3111909775a7323efad30854196cdee9e188d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 11 Mar 2015 12:38:47 +0100 Subject: [PATCH] Version 14.85 --- sql/swad.sql | 1 + swad_action.c | 3 + swad_action.h | 7 ++- swad_changelog.h | 9 ++- swad_database.c | 4 +- swad_forum.c | 3 + swad_message.c | 2 +- swad_statistic.c | 2 +- swad_user.c | 152 ++++++++++++++++++++++++++++++++++++----------- swad_user.h | 6 +- 10 files changed, 143 insertions(+), 46 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index 38e95e507..cfb4f4d5a 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -1176,6 +1176,7 @@ CREATE TABLE IF NOT EXISTS usr_figures ( UsrCod INT NOT NULL, FirstClickTime DATETIME NOT NULL, NumClicks INT NOT NULL DEFAULT -1, + NumForPst INT NOT NULL DEFAULT -1, NumMsgSnt INT NOT NULL DEFAULT -1, PRIMARY KEY(UsrCod)); -- diff --git a/swad_action.c b/swad_action.c index 6dcb10180..4608d1729 100644 --- a/swad_action.c +++ b/swad_action.c @@ -947,6 +947,7 @@ Users: 793. ActSeePubPrf Show a public user's profile ---. ActCal1stClkTim Calculate first click time from log and store into user's figures ---. ActCalNumClk Calculate number of clicks from log and store into user's figures + ---. ActCalNumForPst Calculate number of clicks from log and store into user's figures ---. ActCalNumMsgSnt Calculate number of messages sent from log and store into user's figures Messages: 794. ActSeeNtf Show my recent notifications @@ -2330,6 +2331,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActSeePubPrf */{1402,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_GetUsrCodAndShowUserProfile,NULL}, /* ActCal1stClkTim */{1405,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_CalculateFirstClickTime ,NULL}, /* ActCalNumClk */{1406,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_CalculateNumClicks ,NULL}, + /* ActCalNumForPst */{1408,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_CalculateNumForPst ,NULL}, /* ActCalNumMsgSnt */{1407,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_CalculateNumMsgSnt ,NULL}, // TabMsg ****************************************************************** @@ -4068,6 +4070,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActCal1stClkTim, // #1405 ActCalNumClk, // #1406 ActCalNumMsgSnt, // #1407 + ActCalNumForPst, // #1408 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 03f2fa27b..90c706188 100644 --- a/swad_action.h +++ b/swad_action.h @@ -69,9 +69,9 @@ typedef enum typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+103+168+28+77) +#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+104+168+28+77) -#define Act_MAX_ACTION_COD 1407 +#define Act_MAX_ACTION_COD 1408 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 @@ -982,7 +982,8 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica #define ActSeePubPrf (ActChgNumRowFooGrp+100) #define ActCal1stClkTim (ActChgNumRowFooGrp+101) #define ActCalNumClk (ActChgNumRowFooGrp+102) -#define ActCalNumMsgSnt (ActChgNumRowFooGrp+103) +#define ActCalNumForPst (ActChgNumRowFooGrp+103) +#define ActCalNumMsgSnt (ActChgNumRowFooGrp+104) /*****************************************************************************/ /******************************* Messages tab ********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index ba5ede8dc..30c12312f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,14 +103,19 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.84 (2015/03/10)" +#define Log_PLATFORM_VERSION "SWAD 14.85 (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: 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; +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1408','es','N','Calcular número de mensajes en foros'); + Version 14.84: Mar 10, 2015 Number of messages sent is stored in user's figures. (181374 lines) 2 changes necessary in database: -ALTER TABLE usr_figures ADD COLUMN NumMsgSnt INT NOT NULL DEFAULT -1; +ALTER TABLE usr_figures ADD COLUMN NumMsgSnt INT NOT NULL DEFAULT -1 AFTER NumClicks; INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1407','es','N','Calcular número de mensajes enviados'); Version 14.83: Mar 10, 2015 New action to compute first click when not available in public profile. (181287 lines) diff --git a/swad_database.c b/swad_database.c index ae4a27eb8..fdec5e94a 100644 --- a/swad_database.c +++ b/swad_database.c @@ -2346,14 +2346,16 @@ mysql> DESCRIBE usr_figures; | UsrCod | int(11) | NO | PRI | NULL | | | FirstClickTime | datetime | NO | | NULL | | | NumClicks | int(11) | NO | | -1 | | +| NumForPst | int(11) | NO | | -1 | | | NumMsgSnt | int(11) | NO | | -1 | | +----------------+----------+------+-----+---------+-------+ -4 rows in set (0.01 sec) +5 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_figures (" "UsrCod INT NOT NULL," "FirstClickTime DATETIME NOT NULL," "NumClicks INT NOT NULL DEFAULT -1," + "NumForPst INT NOT NULL DEFAULT -1," "NumMsgSnt INT NOT NULL DEFAULT -1," "PRIMARY KEY(UsrCod))"); diff --git a/swad_forum.c b/swad_forum.c index 271fecb33..3cf43b0d8 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -3819,6 +3819,9 @@ void For_RecForumPst (void) For_UpdateThrFirstAndLastPst (ThrCod,PstCod,PstCod); } + /***** Increment number of forum posts in my user's figures *****/ + Usr_IncrementNumForPstUsr (Gbl.Usrs.Me.UsrDat.UsrCod); + /***** Write message of success *****/ Lay_ShowAlert (Lay_SUCCESS,Txt_Post_sent); Lay_ShowAlert (Lay_INFO,Txt_Do_not_reload_this_page_because_the_post_will_be_sent_again_); diff --git a/swad_message.c b/swad_message.c index 712a072b0..4af19aca1 100644 --- a/swad_message.c +++ b/swad_message.c @@ -1185,7 +1185,7 @@ static long Msg_InsertNewMsg (const char *Subject,const char *Content) DB_QueryINSERT (Query,"can not create message"); /***** Increment number of messages sent by me *****/ - Usr_IncrementNumMsgSntUsr (); + Usr_IncrementNumMsgSntUsr (Gbl.Usrs.Me.UsrDat.UsrCod); return MsgCod; } diff --git a/swad_statistic.c b/swad_statistic.c index ffabc6e2f..b61ded521 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -346,7 +346,7 @@ void Sta_LogAccess (const char *Comments) /***** Increment my number of clicks *****/ if (Gbl.Usrs.Me.UsrDat.UsrCod > 0) - Usr_IncrementNumClicksUsr (); + Usr_IncrementNumClicksUsr (Gbl.Usrs.Me.UsrDat.UsrCod); } /*****************************************************************************/ diff --git a/swad_user.c b/swad_user.c index 6dec67a80..b78fbafaf 100644 --- a/swad_user.c +++ b/swad_user.c @@ -95,6 +95,7 @@ struct UsrFigures { struct DateTime FirstClickTime; // 0 ==> unknown first click time of user never logged long NumClicks; // -1L ==> unknown number of clicks + long NumForPst; // -1L ==> unknown number of forum posts long NumMsgSnt; // -1L ==> unknown number of messages sent }; @@ -184,8 +185,9 @@ static float Usr_GetNumUsrsPerCrs (Rol_Role_t Role); static void Usr_ShowUserProfile (void); static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures); static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod); -static void Usr_GetNumClicksFromLogAndStoreAsUsrFigure (long UsrCod); -static void Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetNumClicksAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetNumForPstAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod); static bool Usr_CheckIfUsrFiguresExists (long UsrCod); /*****************************************************************************/ @@ -7744,14 +7746,22 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat) "%s:" "" "" - "%u" - "" - "" - "", + " style=\"text-align:left; vertical-align:middle;\">", The_ClassFormul[Gbl.Prefs.Theme], - Txt_Forum_posts, - For_GetNumPostsUsr (UsrDat->UsrCod)); + Txt_Forum_posts); + if (UsrFigures.NumForPst >= 0) + fprintf (Gbl.F.Out,"%ld",UsrFigures.NumForPst); + else // Number of forum posts is unknown + { + /***** Button to fetch and store number of forum posts *****/ + Act_FormStart (ActCalNumForPst); + Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]); + Lay_PutSendIcon ("recycle",Txt_Calculate,Txt_Calculate); + fprintf (Gbl.F.Out,""); + } + fprintf (Gbl.F.Out,"" + ""); /***** Number of messages sent *****/ fprintf (Gbl.F.Out,"" @@ -7793,7 +7803,8 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) unsigned NumRows; /***** Get user's code from database *****/ - sprintf (Query,"SELECT DATE_FORMAT(FirstClickTime,'%%Y%%m%%d%%H%%i%%S'),NumClicks,NumMsgSnt" + sprintf (Query,"SELECT DATE_FORMAT(FirstClickTime,'%%Y%%m%%d%%H%%i%%S')," + "NumClicks,NumForPst,NumMsgSnt" " FROM usr_figures WHERE UsrCod='%ld'", UsrCod); if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's figures"))) @@ -7805,12 +7816,16 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),row[0]))) Lay_ShowErrorAndExit ("Error when reading first click time."); - /* Get number of clicks */ + /* Get number of clicks (row[1]) */ if (sscanf (row[1],"%ld",&UsrFigures->NumClicks) != 1) UsrFigures->NumClicks = -1L; - /* Get number of messages sent */ - if (sscanf (row[2],"%ld",&UsrFigures->NumMsgSnt) != 1) + /* Get number of forum posts (row[2]) */ + if (sscanf (row[2],"%ld",&UsrFigures->NumForPst) != 1) + UsrFigures->NumForPst = -1L; + + /* Get number of messages sent (row[3]) */ + if (sscanf (row[3],"%ld",&UsrFigures->NumMsgSnt) != 1) UsrFigures->NumMsgSnt = -1L; } else @@ -7819,6 +7834,7 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000"))) Lay_ShowErrorAndExit ("Error when reading first click time."); UsrFigures->NumClicks = -1L; + UsrFigures->NumForPst = -1L; UsrFigures->NumMsgSnt = -1L; } @@ -7886,8 +7902,8 @@ static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) } else // User entry does not exist { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumMsgSnt)" - " VALUES ('%ld','%s','-1','-1')", + 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"); } @@ -7904,8 +7920,8 @@ void Usr_CalculateNumClicks (void) /***** Get user's code *****/ Usr_GetParamOtherUsrCodEncrypted (); - /***** Get number of clicks from log and store as user's figure *****/ - Usr_GetNumClicksFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); + /***** Get number of clicks and store as user's figure *****/ + Usr_GetNumClicksAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); /***** Show user's profile again *****/ Usr_ShowUserProfile (); @@ -7915,7 +7931,7 @@ void Usr_CalculateNumClicks (void) /* Get number of clicks of a user from log table and store in user's figures */ /*****************************************************************************/ -static void Usr_GetNumClicksFromLogAndStoreAsUsrFigure (long UsrCod) +static void Usr_GetNumClicksAndStoreAsUsrFigure (long UsrCod) { char Query[256]; unsigned long NumClicks; @@ -7937,14 +7953,62 @@ static void Usr_GetNumClicksFromLogAndStoreAsUsrFigure (long UsrCod) } else // User entry does not exist { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumMsgSnt)" - " VALUES ('%ld','00000000000000','%ld','-1')", + 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"); } } } +/*****************************************************************************/ +/******* Calculate number of forum posts and show user's profile again *******/ +/*****************************************************************************/ + +void Usr_CalculateNumForPst (void) + { + /***** Get user's code *****/ + Usr_GetParamOtherUsrCodEncrypted (); + + /***** Get number of forum posts and store as user's figure *****/ + Usr_GetNumForPstAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); + + /***** Show user's profile again *****/ + Usr_ShowUserProfile (); + } + +/*****************************************************************************/ +/**** Get number of forum posts sent by a user and store in user's figures ***/ +/*****************************************************************************/ + +static void Usr_GetNumForPstAndStoreAsUsrFigure (long UsrCod) + { + char Query[256]; + unsigned long NumForPst; + + if (Usr_ChkIfUsrCodExists (UsrCod)) + { + /***** Get number of forum posts from database *****/ + 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); + 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"); + } + } + } + /*****************************************************************************/ /****** Calculate number of messages sent and show user's profile again ******/ /*****************************************************************************/ @@ -7954,28 +8018,28 @@ void Usr_CalculateNumMsgSnt (void) /***** Get user's code *****/ Usr_GetParamOtherUsrCodEncrypted (); - /***** Get number of clicks from log and store as user's figure *****/ - Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); + /***** Get number of messages sent and store as user's figure *****/ + Usr_GetNumMsgSntAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); /***** Show user's profile again *****/ Usr_ShowUserProfile (); } /*****************************************************************************/ -/* Get number of clicks of a user from log table and store in user's figures */ +/***** Get number of messages sent by a user and store in user's figures *****/ /*****************************************************************************/ -static void Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (long UsrCod) +static void Usr_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod) { char Query[256]; unsigned long NumMsgSnt; if (Usr_ChkIfUsrCodExists (UsrCod)) { - /***** Get number of clicks from database *****/ + /***** Get number of messages sent from database *****/ NumMsgSnt = Msg_GetNumMsgsSentByUsr (UsrCod); - /***** Update number of clicks in user's figures *****/ + /***** Update number of messages sent in user's figures *****/ if (Usr_CheckIfUsrFiguresExists (UsrCod)) { sprintf (Query,"UPDATE usr_figures SET NumMsgSnt='%ld'" @@ -7985,8 +8049,8 @@ static void Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (long UsrCod) } else // User entry does not exist { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumMsgSnt)" - " VALUES ('%ld','00000000000000','-1','%ld')", + 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"); } @@ -8007,33 +8071,49 @@ static bool Usr_CheckIfUsrFiguresExists (long UsrCod) } /*****************************************************************************/ -/********************** Select values on user's figures **********************/ +/*************** Increment number of clicks made by a user *******************/ /*****************************************************************************/ -void Usr_IncrementNumClicksUsr (void) +void Usr_IncrementNumClicksUsr (long UsrCod) { char Query[256]; - /***** Increment my number of clicks *****/ + /***** Increment number of clicks *****/ // If NumClicks < 0 ==> not yet calculated, so do nothing sprintf (Query,"UPDATE IGNORE usr_figures SET NumClicks=NumClicks+1" " WHERE UsrCod='%ld' AND NumClicks>=0", - Gbl.Usrs.Me.UsrDat.UsrCod); + UsrCod); DB_QueryINSERT (Query,"can not increment user's clicks"); } /*****************************************************************************/ -/********************** Select values on user's figures **********************/ +/************* Increment number of forum posts sent by a user ****************/ /*****************************************************************************/ -void Usr_IncrementNumMsgSntUsr (void) +void Usr_IncrementNumForPstUsr (long UsrCod) { char Query[256]; - /***** Increment my number of messages sent *****/ + /***** Increment number of forum posts *****/ + // If NumForPst < 0 ==> not yet calculated, so do nothing + sprintf (Query,"UPDATE IGNORE usr_figures SET NumForPst=NumForPst+1" + " WHERE UsrCod='%ld' AND NumForPst>=0", + UsrCod); + DB_QueryINSERT (Query,"can not increment user's forum posts"); + } + +/*****************************************************************************/ +/*************** Increment number of messages sent by a user *****************/ +/*****************************************************************************/ + +void Usr_IncrementNumMsgSntUsr (long UsrCod) + { + char Query[256]; + + /***** Increment number of messages sent *****/ // If NumMsgSnt < 0 ==> not yet calculated, so do nothing sprintf (Query,"UPDATE IGNORE usr_figures SET NumMsgSnt=NumMsgSnt+1" " WHERE UsrCod='%ld' AND NumMsgSnt>=0", - Gbl.Usrs.Me.UsrDat.UsrCod); + UsrCod); DB_QueryINSERT (Query,"can not increment user's messages sent"); } diff --git a/swad_user.h b/swad_user.h index 6505b59a4..7dc2b9f5f 100644 --- a/swad_user.h +++ b/swad_user.h @@ -330,8 +330,10 @@ void Usr_ChangeProfileVisibility (void); void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat); void Usr_CalculateFirstClickTime (void); void Usr_CalculateNumClicks (void); +void Usr_CalculateNumForPst (void); void Usr_CalculateNumMsgSnt (void); -void Usr_IncrementNumClicksUsr (void); -void Usr_IncrementNumMsgSntUsr (void); +void Usr_IncrementNumClicksUsr (long UsrCod); +void Usr_IncrementNumForPstUsr (long UsrCod); +void Usr_IncrementNumMsgSntUsr (long UsrCod); #endif