From 43425e4aa170aefdc3aa12a954f85582b645983c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 11 Mar 2015 00:36:12 +0100 Subject: [PATCH] Version 14.84 --- sql/swad.sql | 1 + swad_action.c | 3 + swad_action.h | 341 ++++++++++++++++++++++++----------------------- swad_changelog.h | 7 +- swad_database.c | 4 +- swad_message.c | 13 +- swad_message.h | 2 - swad_user.c | 125 +++++++++++++---- swad_user.h | 2 + 9 files changed, 298 insertions(+), 200 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index 9f8e2233c..38e95e507 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, + NumMsgSnt INT NOT NULL DEFAULT -1, PRIMARY KEY(UsrCod)); -- -- Table usr_last: stores some variable data related to users diff --git a/swad_action.c b/swad_action.c index a9210f8aa..6dcb10180 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 + ---. ActCalNumMsgSnt Calculate number of messages sent from log and store into user's figures Messages: 794. ActSeeNtf Show my recent notifications 795. ActSeeAnn Show global announcements @@ -2329,6 +2330,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}, + /* ActCalNumMsgSnt */{1407,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_CalculateNumMsgSnt ,NULL}, // TabMsg ****************************************************************** // Actions in menu: @@ -4065,6 +4067,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActChgPriPrf, // #1404 ActCal1stClkTim, // #1405 ActCalNumClk, // #1406 + ActCalNumMsgSnt, // #1407 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index c304a22c6..03f2fa27b 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+102+168+28+77) +#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+103+168+28+77) -#define Act_MAX_ACTION_COD 1406 +#define Act_MAX_ACTION_COD 1407 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 @@ -982,180 +982,181 @@ 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) /*****************************************************************************/ /******************************* Messages tab ********************************/ /*****************************************************************************/ // Actions in menu -#define ActSeeNtf (ActCalNumClk+ 1) -#define ActSeeAnn (ActCalNumClk+ 2) -#define ActSeeNot (ActCalNumClk+ 3) -#define ActSeeFor (ActCalNumClk+ 4) -#define ActSeeChtRms (ActCalNumClk+ 5) -#define ActReqMsgUsr (ActCalNumClk+ 6) -#define ActSeeRcvMsg (ActCalNumClk+ 7) -#define ActSeeSntMsg (ActCalNumClk+ 8) -#define ActMaiStd (ActCalNumClk+ 9) +#define ActSeeNtf (ActCalNumMsgSnt+ 1) +#define ActSeeAnn (ActCalNumMsgSnt+ 2) +#define ActSeeNot (ActCalNumMsgSnt+ 3) +#define ActSeeFor (ActCalNumMsgSnt+ 4) +#define ActSeeChtRms (ActCalNumMsgSnt+ 5) +#define ActReqMsgUsr (ActCalNumMsgSnt+ 6) +#define ActSeeRcvMsg (ActCalNumMsgSnt+ 7) +#define ActSeeSntMsg (ActCalNumMsgSnt+ 8) +#define ActMaiStd (ActCalNumMsgSnt+ 9) // Secondary actions -#define ActWriAnn (ActCalNumClk+ 10) -#define ActRcvAnn (ActCalNumClk+ 11) -#define ActRemAnn (ActCalNumClk+ 12) -#define ActShoNot (ActCalNumClk+ 13) -#define ActWriNot (ActCalNumClk+ 14) -#define ActRcvNot (ActCalNumClk+ 15) -#define ActHidNot (ActCalNumClk+ 16) -#define ActRevNot (ActCalNumClk+ 17) -#define ActRemNot (ActCalNumClk+ 18) -#define ActSeeNewNtf (ActCalNumClk+ 19) -#define ActMrkNtfSee (ActCalNumClk+ 20) -#define ActSeeForCrsUsr (ActCalNumClk+ 21) -#define ActSeeForCrsTch (ActCalNumClk+ 22) -#define ActSeeForDegUsr (ActCalNumClk+ 23) -#define ActSeeForDegTch (ActCalNumClk+ 24) -#define ActSeeForCtrUsr (ActCalNumClk+ 25) -#define ActSeeForCtrTch (ActCalNumClk+ 26) -#define ActSeeForInsUsr (ActCalNumClk+ 27) -#define ActSeeForInsTch (ActCalNumClk+ 28) -#define ActSeeForGenUsr (ActCalNumClk+ 29) -#define ActSeeForGenTch (ActCalNumClk+ 30) -#define ActSeeForSWAUsr (ActCalNumClk+ 31) -#define ActSeeForSWATch (ActCalNumClk+ 32) -#define ActSeePstForCrsUsr (ActCalNumClk+ 33) -#define ActSeePstForCrsTch (ActCalNumClk+ 34) -#define ActSeePstForDegUsr (ActCalNumClk+ 35) -#define ActSeePstForDegTch (ActCalNumClk+ 36) -#define ActSeePstForCtrUsr (ActCalNumClk+ 37) -#define ActSeePstForCtrTch (ActCalNumClk+ 38) -#define ActSeePstForInsUsr (ActCalNumClk+ 39) -#define ActSeePstForInsTch (ActCalNumClk+ 40) -#define ActSeePstForGenUsr (ActCalNumClk+ 41) -#define ActSeePstForGenTch (ActCalNumClk+ 42) -#define ActSeePstForSWAUsr (ActCalNumClk+ 43) -#define ActSeePstForSWATch (ActCalNumClk+ 44) -#define ActRcvThrForCrsUsr (ActCalNumClk+ 45) -#define ActRcvThrForCrsTch (ActCalNumClk+ 46) -#define ActRcvThrForDegUsr (ActCalNumClk+ 47) -#define ActRcvThrForDegTch (ActCalNumClk+ 48) -#define ActRcvThrForCtrUsr (ActCalNumClk+ 49) -#define ActRcvThrForCtrTch (ActCalNumClk+ 50) -#define ActRcvThrForInsUsr (ActCalNumClk+ 51) -#define ActRcvThrForInsTch (ActCalNumClk+ 52) -#define ActRcvThrForGenUsr (ActCalNumClk+ 53) -#define ActRcvThrForGenTch (ActCalNumClk+ 54) -#define ActRcvThrForSWAUsr (ActCalNumClk+ 55) -#define ActRcvThrForSWATch (ActCalNumClk+ 56) -#define ActRcvRepForCrsUsr (ActCalNumClk+ 57) -#define ActRcvRepForCrsTch (ActCalNumClk+ 58) -#define ActRcvRepForDegUsr (ActCalNumClk+ 59) -#define ActRcvRepForDegTch (ActCalNumClk+ 60) -#define ActRcvRepForCtrUsr (ActCalNumClk+ 61) -#define ActRcvRepForCtrTch (ActCalNumClk+ 62) -#define ActRcvRepForInsUsr (ActCalNumClk+ 63) -#define ActRcvRepForInsTch (ActCalNumClk+ 64) -#define ActRcvRepForGenUsr (ActCalNumClk+ 65) -#define ActRcvRepForGenTch (ActCalNumClk+ 66) -#define ActRcvRepForSWAUsr (ActCalNumClk+ 67) -#define ActRcvRepForSWATch (ActCalNumClk+ 68) -#define ActReqDelThrCrsUsr (ActCalNumClk+ 69) -#define ActReqDelThrCrsTch (ActCalNumClk+ 70) -#define ActReqDelThrDegUsr (ActCalNumClk+ 71) -#define ActReqDelThrDegTch (ActCalNumClk+ 72) -#define ActReqDelThrCtrUsr (ActCalNumClk+ 73) -#define ActReqDelThrCtrTch (ActCalNumClk+ 74) -#define ActReqDelThrInsUsr (ActCalNumClk+ 75) -#define ActReqDelThrInsTch (ActCalNumClk+ 76) -#define ActReqDelThrGenUsr (ActCalNumClk+ 77) -#define ActReqDelThrGenTch (ActCalNumClk+ 78) -#define ActReqDelThrSWAUsr (ActCalNumClk+ 79) -#define ActReqDelThrSWATch (ActCalNumClk+ 80) -#define ActDelThrForCrsUsr (ActCalNumClk+ 81) -#define ActDelThrForCrsTch (ActCalNumClk+ 82) -#define ActDelThrForDegUsr (ActCalNumClk+ 83) -#define ActDelThrForDegTch (ActCalNumClk+ 84) -#define ActDelThrForCtrUsr (ActCalNumClk+ 85) -#define ActDelThrForCtrTch (ActCalNumClk+ 86) -#define ActDelThrForInsUsr (ActCalNumClk+ 87) -#define ActDelThrForInsTch (ActCalNumClk+ 88) -#define ActDelThrForGenUsr (ActCalNumClk+ 89) -#define ActDelThrForGenTch (ActCalNumClk+ 90) -#define ActDelThrForSWAUsr (ActCalNumClk+ 91) -#define ActDelThrForSWATch (ActCalNumClk+ 92) -#define ActCutThrForCrsUsr (ActCalNumClk+ 93) -#define ActCutThrForCrsTch (ActCalNumClk+ 94) -#define ActCutThrForDegUsr (ActCalNumClk+ 95) -#define ActCutThrForDegTch (ActCalNumClk+ 96) -#define ActCutThrForCtrUsr (ActCalNumClk+ 97) -#define ActCutThrForCtrTch (ActCalNumClk+ 98) -#define ActCutThrForInsUsr (ActCalNumClk+ 99) -#define ActCutThrForInsTch (ActCalNumClk+100) -#define ActCutThrForGenUsr (ActCalNumClk+101) -#define ActCutThrForGenTch (ActCalNumClk+102) -#define ActCutThrForSWAUsr (ActCalNumClk+103) -#define ActCutThrForSWATch (ActCalNumClk+104) -#define ActPasThrForCrsUsr (ActCalNumClk+105) -#define ActPasThrForCrsTch (ActCalNumClk+106) -#define ActPasThrForDegUsr (ActCalNumClk+107) -#define ActPasThrForDegTch (ActCalNumClk+108) -#define ActPasThrForCtrUsr (ActCalNumClk+109) -#define ActPasThrForCtrTch (ActCalNumClk+110) -#define ActPasThrForInsUsr (ActCalNumClk+111) -#define ActPasThrForInsTch (ActCalNumClk+112) -#define ActPasThrForGenUsr (ActCalNumClk+113) -#define ActPasThrForGenTch (ActCalNumClk+114) -#define ActPasThrForSWAUsr (ActCalNumClk+115) -#define ActPasThrForSWATch (ActCalNumClk+116) -#define ActDelPstForCrsUsr (ActCalNumClk+117) -#define ActDelPstForCrsTch (ActCalNumClk+118) -#define ActDelPstForDegUsr (ActCalNumClk+119) -#define ActDelPstForDegTch (ActCalNumClk+120) -#define ActDelPstForCtrUsr (ActCalNumClk+121) -#define ActDelPstForCtrTch (ActCalNumClk+122) -#define ActDelPstForInsUsr (ActCalNumClk+123) -#define ActDelPstForInsTch (ActCalNumClk+124) -#define ActDelPstForGenUsr (ActCalNumClk+125) -#define ActDelPstForGenTch (ActCalNumClk+126) -#define ActDelPstForSWAUsr (ActCalNumClk+127) -#define ActDelPstForSWATch (ActCalNumClk+128) -#define ActEnbPstForCrsUsr (ActCalNumClk+129) -#define ActEnbPstForCrsTch (ActCalNumClk+130) -#define ActEnbPstForDegUsr (ActCalNumClk+131) -#define ActEnbPstForDegTch (ActCalNumClk+132) -#define ActEnbPstForCtrUsr (ActCalNumClk+133) -#define ActEnbPstForCtrTch (ActCalNumClk+134) -#define ActEnbPstForInsUsr (ActCalNumClk+135) -#define ActEnbPstForInsTch (ActCalNumClk+136) -#define ActEnbPstForGenUsr (ActCalNumClk+137) -#define ActEnbPstForGenTch (ActCalNumClk+138) -#define ActEnbPstForSWAUsr (ActCalNumClk+139) -#define ActEnbPstForSWATch (ActCalNumClk+140) -#define ActDisPstForCrsUsr (ActCalNumClk+141) -#define ActDisPstForCrsTch (ActCalNumClk+142) -#define ActDisPstForDegUsr (ActCalNumClk+143) -#define ActDisPstForDegTch (ActCalNumClk+144) -#define ActDisPstForCtrUsr (ActCalNumClk+145) -#define ActDisPstForCtrTch (ActCalNumClk+146) -#define ActDisPstForInsUsr (ActCalNumClk+147) -#define ActDisPstForInsTch (ActCalNumClk+148) -#define ActDisPstForGenUsr (ActCalNumClk+149) -#define ActDisPstForGenTch (ActCalNumClk+150) -#define ActDisPstForSWAUsr (ActCalNumClk+151) -#define ActDisPstForSWATch (ActCalNumClk+152) -#define ActRcvMsgUsr (ActCalNumClk+153) -#define ActReqDelAllSntMsg (ActCalNumClk+154) -#define ActReqDelAllRcvMsg (ActCalNumClk+155) -#define ActDelAllSntMsg (ActCalNumClk+156) -#define ActDelAllRcvMsg (ActCalNumClk+157) -#define ActDelSntMsg (ActCalNumClk+158) -#define ActDelRcvMsg (ActCalNumClk+159) -#define ActExpSntMsg (ActCalNumClk+160) -#define ActExpRcvMsg (ActCalNumClk+161) -#define ActConSntMsg (ActCalNumClk+162) -#define ActConRcvMsg (ActCalNumClk+163) -#define ActLstBanUsr (ActCalNumClk+164) -#define ActBanUsrMsg (ActCalNumClk+165) -#define ActUnbUsrMsg (ActCalNumClk+166) -#define ActUnbUsrLst (ActCalNumClk+167) -#define ActCht (ActCalNumClk+168) +#define ActWriAnn (ActCalNumMsgSnt+ 10) +#define ActRcvAnn (ActCalNumMsgSnt+ 11) +#define ActRemAnn (ActCalNumMsgSnt+ 12) +#define ActShoNot (ActCalNumMsgSnt+ 13) +#define ActWriNot (ActCalNumMsgSnt+ 14) +#define ActRcvNot (ActCalNumMsgSnt+ 15) +#define ActHidNot (ActCalNumMsgSnt+ 16) +#define ActRevNot (ActCalNumMsgSnt+ 17) +#define ActRemNot (ActCalNumMsgSnt+ 18) +#define ActSeeNewNtf (ActCalNumMsgSnt+ 19) +#define ActMrkNtfSee (ActCalNumMsgSnt+ 20) +#define ActSeeForCrsUsr (ActCalNumMsgSnt+ 21) +#define ActSeeForCrsTch (ActCalNumMsgSnt+ 22) +#define ActSeeForDegUsr (ActCalNumMsgSnt+ 23) +#define ActSeeForDegTch (ActCalNumMsgSnt+ 24) +#define ActSeeForCtrUsr (ActCalNumMsgSnt+ 25) +#define ActSeeForCtrTch (ActCalNumMsgSnt+ 26) +#define ActSeeForInsUsr (ActCalNumMsgSnt+ 27) +#define ActSeeForInsTch (ActCalNumMsgSnt+ 28) +#define ActSeeForGenUsr (ActCalNumMsgSnt+ 29) +#define ActSeeForGenTch (ActCalNumMsgSnt+ 30) +#define ActSeeForSWAUsr (ActCalNumMsgSnt+ 31) +#define ActSeeForSWATch (ActCalNumMsgSnt+ 32) +#define ActSeePstForCrsUsr (ActCalNumMsgSnt+ 33) +#define ActSeePstForCrsTch (ActCalNumMsgSnt+ 34) +#define ActSeePstForDegUsr (ActCalNumMsgSnt+ 35) +#define ActSeePstForDegTch (ActCalNumMsgSnt+ 36) +#define ActSeePstForCtrUsr (ActCalNumMsgSnt+ 37) +#define ActSeePstForCtrTch (ActCalNumMsgSnt+ 38) +#define ActSeePstForInsUsr (ActCalNumMsgSnt+ 39) +#define ActSeePstForInsTch (ActCalNumMsgSnt+ 40) +#define ActSeePstForGenUsr (ActCalNumMsgSnt+ 41) +#define ActSeePstForGenTch (ActCalNumMsgSnt+ 42) +#define ActSeePstForSWAUsr (ActCalNumMsgSnt+ 43) +#define ActSeePstForSWATch (ActCalNumMsgSnt+ 44) +#define ActRcvThrForCrsUsr (ActCalNumMsgSnt+ 45) +#define ActRcvThrForCrsTch (ActCalNumMsgSnt+ 46) +#define ActRcvThrForDegUsr (ActCalNumMsgSnt+ 47) +#define ActRcvThrForDegTch (ActCalNumMsgSnt+ 48) +#define ActRcvThrForCtrUsr (ActCalNumMsgSnt+ 49) +#define ActRcvThrForCtrTch (ActCalNumMsgSnt+ 50) +#define ActRcvThrForInsUsr (ActCalNumMsgSnt+ 51) +#define ActRcvThrForInsTch (ActCalNumMsgSnt+ 52) +#define ActRcvThrForGenUsr (ActCalNumMsgSnt+ 53) +#define ActRcvThrForGenTch (ActCalNumMsgSnt+ 54) +#define ActRcvThrForSWAUsr (ActCalNumMsgSnt+ 55) +#define ActRcvThrForSWATch (ActCalNumMsgSnt+ 56) +#define ActRcvRepForCrsUsr (ActCalNumMsgSnt+ 57) +#define ActRcvRepForCrsTch (ActCalNumMsgSnt+ 58) +#define ActRcvRepForDegUsr (ActCalNumMsgSnt+ 59) +#define ActRcvRepForDegTch (ActCalNumMsgSnt+ 60) +#define ActRcvRepForCtrUsr (ActCalNumMsgSnt+ 61) +#define ActRcvRepForCtrTch (ActCalNumMsgSnt+ 62) +#define ActRcvRepForInsUsr (ActCalNumMsgSnt+ 63) +#define ActRcvRepForInsTch (ActCalNumMsgSnt+ 64) +#define ActRcvRepForGenUsr (ActCalNumMsgSnt+ 65) +#define ActRcvRepForGenTch (ActCalNumMsgSnt+ 66) +#define ActRcvRepForSWAUsr (ActCalNumMsgSnt+ 67) +#define ActRcvRepForSWATch (ActCalNumMsgSnt+ 68) +#define ActReqDelThrCrsUsr (ActCalNumMsgSnt+ 69) +#define ActReqDelThrCrsTch (ActCalNumMsgSnt+ 70) +#define ActReqDelThrDegUsr (ActCalNumMsgSnt+ 71) +#define ActReqDelThrDegTch (ActCalNumMsgSnt+ 72) +#define ActReqDelThrCtrUsr (ActCalNumMsgSnt+ 73) +#define ActReqDelThrCtrTch (ActCalNumMsgSnt+ 74) +#define ActReqDelThrInsUsr (ActCalNumMsgSnt+ 75) +#define ActReqDelThrInsTch (ActCalNumMsgSnt+ 76) +#define ActReqDelThrGenUsr (ActCalNumMsgSnt+ 77) +#define ActReqDelThrGenTch (ActCalNumMsgSnt+ 78) +#define ActReqDelThrSWAUsr (ActCalNumMsgSnt+ 79) +#define ActReqDelThrSWATch (ActCalNumMsgSnt+ 80) +#define ActDelThrForCrsUsr (ActCalNumMsgSnt+ 81) +#define ActDelThrForCrsTch (ActCalNumMsgSnt+ 82) +#define ActDelThrForDegUsr (ActCalNumMsgSnt+ 83) +#define ActDelThrForDegTch (ActCalNumMsgSnt+ 84) +#define ActDelThrForCtrUsr (ActCalNumMsgSnt+ 85) +#define ActDelThrForCtrTch (ActCalNumMsgSnt+ 86) +#define ActDelThrForInsUsr (ActCalNumMsgSnt+ 87) +#define ActDelThrForInsTch (ActCalNumMsgSnt+ 88) +#define ActDelThrForGenUsr (ActCalNumMsgSnt+ 89) +#define ActDelThrForGenTch (ActCalNumMsgSnt+ 90) +#define ActDelThrForSWAUsr (ActCalNumMsgSnt+ 91) +#define ActDelThrForSWATch (ActCalNumMsgSnt+ 92) +#define ActCutThrForCrsUsr (ActCalNumMsgSnt+ 93) +#define ActCutThrForCrsTch (ActCalNumMsgSnt+ 94) +#define ActCutThrForDegUsr (ActCalNumMsgSnt+ 95) +#define ActCutThrForDegTch (ActCalNumMsgSnt+ 96) +#define ActCutThrForCtrUsr (ActCalNumMsgSnt+ 97) +#define ActCutThrForCtrTch (ActCalNumMsgSnt+ 98) +#define ActCutThrForInsUsr (ActCalNumMsgSnt+ 99) +#define ActCutThrForInsTch (ActCalNumMsgSnt+100) +#define ActCutThrForGenUsr (ActCalNumMsgSnt+101) +#define ActCutThrForGenTch (ActCalNumMsgSnt+102) +#define ActCutThrForSWAUsr (ActCalNumMsgSnt+103) +#define ActCutThrForSWATch (ActCalNumMsgSnt+104) +#define ActPasThrForCrsUsr (ActCalNumMsgSnt+105) +#define ActPasThrForCrsTch (ActCalNumMsgSnt+106) +#define ActPasThrForDegUsr (ActCalNumMsgSnt+107) +#define ActPasThrForDegTch (ActCalNumMsgSnt+108) +#define ActPasThrForCtrUsr (ActCalNumMsgSnt+109) +#define ActPasThrForCtrTch (ActCalNumMsgSnt+110) +#define ActPasThrForInsUsr (ActCalNumMsgSnt+111) +#define ActPasThrForInsTch (ActCalNumMsgSnt+112) +#define ActPasThrForGenUsr (ActCalNumMsgSnt+113) +#define ActPasThrForGenTch (ActCalNumMsgSnt+114) +#define ActPasThrForSWAUsr (ActCalNumMsgSnt+115) +#define ActPasThrForSWATch (ActCalNumMsgSnt+116) +#define ActDelPstForCrsUsr (ActCalNumMsgSnt+117) +#define ActDelPstForCrsTch (ActCalNumMsgSnt+118) +#define ActDelPstForDegUsr (ActCalNumMsgSnt+119) +#define ActDelPstForDegTch (ActCalNumMsgSnt+120) +#define ActDelPstForCtrUsr (ActCalNumMsgSnt+121) +#define ActDelPstForCtrTch (ActCalNumMsgSnt+122) +#define ActDelPstForInsUsr (ActCalNumMsgSnt+123) +#define ActDelPstForInsTch (ActCalNumMsgSnt+124) +#define ActDelPstForGenUsr (ActCalNumMsgSnt+125) +#define ActDelPstForGenTch (ActCalNumMsgSnt+126) +#define ActDelPstForSWAUsr (ActCalNumMsgSnt+127) +#define ActDelPstForSWATch (ActCalNumMsgSnt+128) +#define ActEnbPstForCrsUsr (ActCalNumMsgSnt+129) +#define ActEnbPstForCrsTch (ActCalNumMsgSnt+130) +#define ActEnbPstForDegUsr (ActCalNumMsgSnt+131) +#define ActEnbPstForDegTch (ActCalNumMsgSnt+132) +#define ActEnbPstForCtrUsr (ActCalNumMsgSnt+133) +#define ActEnbPstForCtrTch (ActCalNumMsgSnt+134) +#define ActEnbPstForInsUsr (ActCalNumMsgSnt+135) +#define ActEnbPstForInsTch (ActCalNumMsgSnt+136) +#define ActEnbPstForGenUsr (ActCalNumMsgSnt+137) +#define ActEnbPstForGenTch (ActCalNumMsgSnt+138) +#define ActEnbPstForSWAUsr (ActCalNumMsgSnt+139) +#define ActEnbPstForSWATch (ActCalNumMsgSnt+140) +#define ActDisPstForCrsUsr (ActCalNumMsgSnt+141) +#define ActDisPstForCrsTch (ActCalNumMsgSnt+142) +#define ActDisPstForDegUsr (ActCalNumMsgSnt+143) +#define ActDisPstForDegTch (ActCalNumMsgSnt+144) +#define ActDisPstForCtrUsr (ActCalNumMsgSnt+145) +#define ActDisPstForCtrTch (ActCalNumMsgSnt+146) +#define ActDisPstForInsUsr (ActCalNumMsgSnt+147) +#define ActDisPstForInsTch (ActCalNumMsgSnt+148) +#define ActDisPstForGenUsr (ActCalNumMsgSnt+149) +#define ActDisPstForGenTch (ActCalNumMsgSnt+150) +#define ActDisPstForSWAUsr (ActCalNumMsgSnt+151) +#define ActDisPstForSWATch (ActCalNumMsgSnt+152) +#define ActRcvMsgUsr (ActCalNumMsgSnt+153) +#define ActReqDelAllSntMsg (ActCalNumMsgSnt+154) +#define ActReqDelAllRcvMsg (ActCalNumMsgSnt+155) +#define ActDelAllSntMsg (ActCalNumMsgSnt+156) +#define ActDelAllRcvMsg (ActCalNumMsgSnt+157) +#define ActDelSntMsg (ActCalNumMsgSnt+158) +#define ActDelRcvMsg (ActCalNumMsgSnt+159) +#define ActExpSntMsg (ActCalNumMsgSnt+160) +#define ActExpRcvMsg (ActCalNumMsgSnt+161) +#define ActConSntMsg (ActCalNumMsgSnt+162) +#define ActConRcvMsg (ActCalNumMsgSnt+163) +#define ActLstBanUsr (ActCalNumMsgSnt+164) +#define ActBanUsrMsg (ActCalNumMsgSnt+165) +#define ActUnbUsrMsg (ActCalNumMsgSnt+166) +#define ActUnbUsrLst (ActCalNumMsgSnt+167) +#define ActCht (ActCalNumMsgSnt+168) /*****************************************************************************/ /****************************** Statistics tab *******************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 41dc0dbc3..ba5ede8dc 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,11 +103,16 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.83 (2015/03/10)" +#define Log_PLATFORM_VERSION "SWAD 14.84 (2015/03/10)" // 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.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; +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) 3 changes necessary in database: ALTER TABLE usr_figures CHANGE COLUMN NumClicks NumClicks INT NOT NULL DEFAULT -1; diff --git a/swad_database.c b/swad_database.c index 2216aa89c..ae4a27eb8 100644 --- a/swad_database.c +++ b/swad_database.c @@ -2346,13 +2346,15 @@ mysql> DESCRIBE usr_figures; | UsrCod | int(11) | NO | PRI | NULL | | | FirstClickTime | datetime | NO | | NULL | | | NumClicks | int(11) | NO | | -1 | | +| NumMsgSnt | int(11) | NO | | -1 | | +----------------+----------+------+-----+---------+-------+ -3 rows in set (0.00 sec) +4 rows in set (0.01 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_figures (" "UsrCod INT NOT NULL," "FirstClickTime DATETIME NOT NULL," "NumClicks INT NOT NULL DEFAULT -1," + "NumMsgSnt INT NOT NULL DEFAULT -1," "PRIMARY KEY(UsrCod))"); /***** Table usr_IDs *****/ diff --git a/swad_message.c b/swad_message.c index 1698f2bab..712a072b0 100644 --- a/swad_message.c +++ b/swad_message.c @@ -87,6 +87,8 @@ static void Msg_ExpandReceivedMsg (long MsgCod); static void Msg_ContractSentMsg (long MsgCod); static void Msg_ContractReceivedMsg (long MsgCod); +static long Msg_InsertNewMsg (const char *Subject,const char *Content); + static unsigned long Msg_DelSomeRecOrSntMsgsUsr (Msg_TypeOfMessages_t TypeOfMessages,long UsrCod, long FilterCrsCod,const char *FilterFromToSubquery); static void Msg_InsertReceivedMsgIntoDB (long MsgCod,long UsrCod,bool NotifyByEmail); @@ -642,7 +644,7 @@ void Msg_RecMsgFromUsr (void) if (!MsgAlreadyInserted) { // The message is inserted only once in the table of messages sent - NewMsgCod = Msg_InsertNewMsg (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Msg.Subject,Content); + NewMsgCod = Msg_InsertNewMsg (Gbl.Msg.Subject,Content); MsgAlreadyInserted = true; } @@ -1163,7 +1165,7 @@ void Msg_SetReceivedMsgAsOpen (long MsgCod,long UsrCod) /*****************************************************************************/ // Return the code of the new inserted message -long Msg_InsertNewMsg (long CrsCod,long UsrCod,const char *Subject,const char *Content) +static long Msg_InsertNewMsg (const char *Subject,const char *Content) { char Query[128+Cns_MAX_BYTES_SUBJECT+Cns_MAX_BYTES_LONG_TEXT]; long MsgCod; @@ -1177,9 +1179,14 @@ long Msg_InsertNewMsg (long CrsCod,long UsrCod,const char *Subject,const char *C /***** Insert message in sent messages *****/ sprintf (Query,"INSERT INTO msg_snt (MsgCod,CrsCod,UsrCod,Expanded,CreatTime)" " VALUES ('%ld','%ld','%ld','N',NOW())", - MsgCod,CrsCod,UsrCod); + MsgCod, + Gbl.CurrentCrs.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod); DB_QueryINSERT (Query,"can not create message"); + /***** Increment number of messages sent by me *****/ + Usr_IncrementNumMsgSntUsr (); + return MsgCod; } diff --git a/swad_message.h b/swad_message.h index 6a78deb19..97c392293 100644 --- a/swad_message.h +++ b/swad_message.h @@ -80,8 +80,6 @@ void Msg_ConSntMsg (void); void Msg_ConRecMsg (void); void Msg_SetReceivedMsgAsOpen (long MsgCod,long UsrCod); -long Msg_InsertNewMsg (long CrsCod,long UsrCod,const char *Subject,const char *Content); - void Msg_DelAllRecAndSntMsgsUsr (long UsrCod); void Msg_MoveUnusedMsgsContentToDeleted (void); diff --git a/swad_user.c b/swad_user.c index 4ed31c721..6dec67a80 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 NumMsgSnt; // -1L ==> unknown number of messages sent }; /*****************************************************************************/ @@ -182,8 +183,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_FetchFirstClickFromLogAndStoreAsUsrFigure (long UsrCod); -static void Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetNumClicksFromLogAndStoreAsUsrFigure (long UsrCod); +static void Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (long UsrCod); static bool Usr_CheckIfUsrFiguresExists (long UsrCod); /*****************************************************************************/ @@ -7758,14 +7760,22 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat) "%s:" "" "" - "%u" - "" - "" - "", + " style=\"text-align:left; vertical-align:middle;\">", The_ClassFormul[Gbl.Prefs.Theme], - Txt_Messages_sent, - Msg_GetNumMsgsSentByUsr (UsrDat->UsrCod)); + Txt_Messages_sent); + if (UsrFigures.NumMsgSnt >= 0) + fprintf (Gbl.F.Out,"%ld",UsrFigures.NumMsgSnt); + else // Number of clicks is unknown + { + /***** Button to fetch and store number of messages sent *****/ + Act_FormStart (ActCalNumMsgSnt); + 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,"" + ""); /***** End of table *****/ Lay_EndRoundFrameTable10 (); @@ -7783,7 +7793,7 @@ 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" + sprintf (Query,"SELECT DATE_FORMAT(FirstClickTime,'%%Y%%m%%d%%H%%i%%S'),NumClicks,NumMsgSnt" " FROM usr_figures WHERE UsrCod='%ld'", UsrCod); if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's figures"))) @@ -7798,14 +7808,18 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures) /* Get number of clicks */ if (sscanf (row[1],"%ld",&UsrFigures->NumClicks) != 1) UsrFigures->NumClicks = -1L; + + /* Get number of messages sent */ + if (sscanf (row[2],"%ld",&UsrFigures->NumMsgSnt) != 1) + 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->NumMsgSnt = -1L; } /***** Free structure that stores the query result *****/ @@ -7822,17 +7836,17 @@ void Usr_CalculateFirstClickTime (void) Usr_GetParamOtherUsrCodEncrypted (); /***** Get first click time from log and store as user's figure *****/ - Usr_FetchFirstClickFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); + Usr_GetFirstClickFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); /***** Show user's profile again *****/ Usr_ShowUserProfile (); } /*****************************************************************************/ -/** Fetch first click of a user from log table and store in user's figures ***/ +/*** Get first click of a user from log table and store in user's figures ****/ /*****************************************************************************/ -static void Usr_FetchFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) +static void Usr_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) { char Query[256]; MYSQL_RES *mysql_res; @@ -7872,8 +7886,8 @@ static void Usr_FetchFirstClickFromLogAndStoreAsUsrFigure (long UsrCod) } else // User entry does not exist { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks)" - " VALUES ('%ld','%s','-1')", + sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumMsgSnt)" + " VALUES ('%ld','%s','-1','-1')", UsrCod,FirstClickTime.YYYYMMDDHHMMSS); DB_QueryINSERT (Query,"can not create user's figures"); } @@ -7891,17 +7905,17 @@ void Usr_CalculateNumClicks (void) Usr_GetParamOtherUsrCodEncrypted (); /***** Get number of clicks from log and store as user's figure *****/ - Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); + Usr_GetNumClicksFromLogAndStoreAsUsrFigure (Gbl.Usrs.Other.UsrDat.UsrCod); /***** Show user's profile again *****/ Usr_ShowUserProfile (); } /*****************************************************************************/ -/** Fetch first click of a user from log table and store in user's figures ***/ +/* Get number of clicks of a user from log table and store in user's figures */ /*****************************************************************************/ -static void Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (long UsrCod) +static void Usr_GetNumClicksFromLogAndStoreAsUsrFigure (long UsrCod) { char Query[256]; unsigned long NumClicks; @@ -7923,14 +7937,62 @@ static void Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (long UsrCod) } else // User entry does not exist { - sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks)" - " VALUES ('%ld','00000000000000','%ld')", + sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumMsgSnt)" + " VALUES ('%ld','00000000000000','%ld','-1')", UsrCod,NumClicks); DB_QueryINSERT (Query,"can not create user's figures"); } } } +/*****************************************************************************/ +/****** Calculate number of messages sent and show user's profile again ******/ +/*****************************************************************************/ + +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); + + /***** Show user's profile again *****/ + Usr_ShowUserProfile (); + } + +/*****************************************************************************/ +/* Get number of clicks of a user from log table and store in user's figures */ +/*****************************************************************************/ + +static void Usr_GetNumMsgSntFromLogAndStoreAsUsrFigure (long UsrCod) + { + char Query[256]; + unsigned long NumMsgSnt; + + if (Usr_ChkIfUsrCodExists (UsrCod)) + { + /***** Get number of clicks from database *****/ + NumMsgSnt = Msg_GetNumMsgsSentByUsr (UsrCod); + + /***** Update number of clicks in user's figures *****/ + if (Usr_CheckIfUsrFiguresExists (UsrCod)) + { + sprintf (Query,"UPDATE usr_figures SET NumMsgSnt='%ld'" + " WHERE UsrCod='%ld'", + 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,NumMsgSnt)" + " VALUES ('%ld','00000000000000','-1','%ld')", + UsrCod,NumMsgSnt); + DB_QueryINSERT (Query,"can not create user's figures"); + } + } + } + /*****************************************************************************/ /*** Check if it exists an entry for this user in table of user's figures ****/ /*****************************************************************************/ @@ -7950,11 +8012,28 @@ static bool Usr_CheckIfUsrFiguresExists (long UsrCod) void Usr_IncrementNumClicksUsr (void) { - char Query[512]; + char Query[256]; /***** Increment my 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'", + " WHERE UsrCod='%ld' AND NumClicks>=0", Gbl.Usrs.Me.UsrDat.UsrCod); DB_QueryINSERT (Query,"can not increment user's clicks"); } + +/*****************************************************************************/ +/********************** Select values on user's figures **********************/ +/*****************************************************************************/ + +void Usr_IncrementNumMsgSntUsr (void) + { + char Query[256]; + + /***** Increment my 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); + DB_QueryINSERT (Query,"can not increment user's messages sent"); + } diff --git a/swad_user.h b/swad_user.h index 6a064e7db..6505b59a4 100644 --- a/swad_user.h +++ b/swad_user.h @@ -330,6 +330,8 @@ void Usr_ChangeProfileVisibility (void); void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat); void Usr_CalculateFirstClickTime (void); void Usr_CalculateNumClicks (void); +void Usr_CalculateNumMsgSnt (void); void Usr_IncrementNumClicksUsr (void); +void Usr_IncrementNumMsgSntUsr (void); #endif