Version 14.84

This commit is contained in:
Antonio Cañas Vargas 2015-03-11 00:36:12 +01:00
parent 889eb34e94
commit 43425e4aa1
9 changed files with 298 additions and 200 deletions

View File

@ -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

View File

@ -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
};
/*****************************************************************************/

View File

@ -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 *******************************/

View File

@ -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;

View File

@ -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 *****/

View File

@ -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;
}

View File

@ -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);

View File

@ -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:"
"</td>"
"<td class=\"DAT\""
" style=\"text-align:left; vertical-align:middle;\">"
"%u"
"</a>"
"</td>"
"</tr>",
" 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,"</form>");
}
fprintf (Gbl.F.Out,"</td>"
"</tr>");
/***** 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");
}

View File

@ -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