Version 14.83

This commit is contained in:
Antonio Cañas Vargas 2015-03-10 21:51:34 +01:00
parent fd91923c56
commit 5a1cae4060
7 changed files with 382 additions and 218 deletions

View File

@ -1206,13 +1206,14 @@ CREATE TABLE IF NOT EXISTS usr_webs (
Web ENUM(
'www',
'500px',
'delicious','deviantart',
'delicious','deviantart','diaspora',
'edmodo',
'facebook','flickr','foursquare',
'github','googleplus','googlescholar',
'instagram',
'linkedin',
'paperli','pinterest',
'quitter',
'researchgate',
'scoopit','slideshare','storify',
'tumblr','twitter',

View File

@ -945,6 +945,8 @@ Users:
792. ActRemOldUsr Eliminate completely old 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
Messages:
794. ActSeeNtf Show my recent notifications
795. ActSeeAnn Show global announcements
@ -2324,7 +2326,9 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqRemOldUsr */{ 590,-1,TabUsr,ActReqMdfSevUsr ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskRemoveOldUsrs ,NULL},
/* ActRemOldUsr */{ 773,-1,TabUsr,ActReqMdfSevUsr ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemoveOldUsrs ,NULL},
/* ActSeePubPrf */{1402,10,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ShowUserProfile ,NULL},
/* 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},
// TabMsg ******************************************************************
// Actions in menu:
@ -4059,6 +4063,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActSeePubPrf, // #1402
ActEdiPri, // #1403
ActChgPriPrf, // #1404
ActCal1stClkTim, // #1405
ActCalNumClk, // #1406
};
/*****************************************************************************/

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+100+168+28+77)
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+102+168+28+77)
#define Act_MAX_ACTION_COD 1404
#define Act_MAX_ACTION_COD 1406
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -980,180 +980,182 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActRemOldUsr (ActChgNumRowFooGrp+ 99)
#define ActSeePubPrf (ActChgNumRowFooGrp+100)
#define ActCal1stClkTim (ActChgNumRowFooGrp+101)
#define ActCalNumClk (ActChgNumRowFooGrp+102)
/*****************************************************************************/
/******************************* Messages tab ********************************/
/*****************************************************************************/
// Actions in menu
#define ActSeeNtf (ActSeePubPrf+ 1)
#define ActSeeAnn (ActSeePubPrf+ 2)
#define ActSeeNot (ActSeePubPrf+ 3)
#define ActSeeFor (ActSeePubPrf+ 4)
#define ActSeeChtRms (ActSeePubPrf+ 5)
#define ActReqMsgUsr (ActSeePubPrf+ 6)
#define ActSeeRcvMsg (ActSeePubPrf+ 7)
#define ActSeeSntMsg (ActSeePubPrf+ 8)
#define ActMaiStd (ActSeePubPrf+ 9)
#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)
// Secondary actions
#define ActWriAnn (ActSeePubPrf+ 10)
#define ActRcvAnn (ActSeePubPrf+ 11)
#define ActRemAnn (ActSeePubPrf+ 12)
#define ActShoNot (ActSeePubPrf+ 13)
#define ActWriNot (ActSeePubPrf+ 14)
#define ActRcvNot (ActSeePubPrf+ 15)
#define ActHidNot (ActSeePubPrf+ 16)
#define ActRevNot (ActSeePubPrf+ 17)
#define ActRemNot (ActSeePubPrf+ 18)
#define ActSeeNewNtf (ActSeePubPrf+ 19)
#define ActMrkNtfSee (ActSeePubPrf+ 20)
#define ActSeeForCrsUsr (ActSeePubPrf+ 21)
#define ActSeeForCrsTch (ActSeePubPrf+ 22)
#define ActSeeForDegUsr (ActSeePubPrf+ 23)
#define ActSeeForDegTch (ActSeePubPrf+ 24)
#define ActSeeForCtrUsr (ActSeePubPrf+ 25)
#define ActSeeForCtrTch (ActSeePubPrf+ 26)
#define ActSeeForInsUsr (ActSeePubPrf+ 27)
#define ActSeeForInsTch (ActSeePubPrf+ 28)
#define ActSeeForGenUsr (ActSeePubPrf+ 29)
#define ActSeeForGenTch (ActSeePubPrf+ 30)
#define ActSeeForSWAUsr (ActSeePubPrf+ 31)
#define ActSeeForSWATch (ActSeePubPrf+ 32)
#define ActSeePstForCrsUsr (ActSeePubPrf+ 33)
#define ActSeePstForCrsTch (ActSeePubPrf+ 34)
#define ActSeePstForDegUsr (ActSeePubPrf+ 35)
#define ActSeePstForDegTch (ActSeePubPrf+ 36)
#define ActSeePstForCtrUsr (ActSeePubPrf+ 37)
#define ActSeePstForCtrTch (ActSeePubPrf+ 38)
#define ActSeePstForInsUsr (ActSeePubPrf+ 39)
#define ActSeePstForInsTch (ActSeePubPrf+ 40)
#define ActSeePstForGenUsr (ActSeePubPrf+ 41)
#define ActSeePstForGenTch (ActSeePubPrf+ 42)
#define ActSeePstForSWAUsr (ActSeePubPrf+ 43)
#define ActSeePstForSWATch (ActSeePubPrf+ 44)
#define ActRcvThrForCrsUsr (ActSeePubPrf+ 45)
#define ActRcvThrForCrsTch (ActSeePubPrf+ 46)
#define ActRcvThrForDegUsr (ActSeePubPrf+ 47)
#define ActRcvThrForDegTch (ActSeePubPrf+ 48)
#define ActRcvThrForCtrUsr (ActSeePubPrf+ 49)
#define ActRcvThrForCtrTch (ActSeePubPrf+ 50)
#define ActRcvThrForInsUsr (ActSeePubPrf+ 51)
#define ActRcvThrForInsTch (ActSeePubPrf+ 52)
#define ActRcvThrForGenUsr (ActSeePubPrf+ 53)
#define ActRcvThrForGenTch (ActSeePubPrf+ 54)
#define ActRcvThrForSWAUsr (ActSeePubPrf+ 55)
#define ActRcvThrForSWATch (ActSeePubPrf+ 56)
#define ActRcvRepForCrsUsr (ActSeePubPrf+ 57)
#define ActRcvRepForCrsTch (ActSeePubPrf+ 58)
#define ActRcvRepForDegUsr (ActSeePubPrf+ 59)
#define ActRcvRepForDegTch (ActSeePubPrf+ 60)
#define ActRcvRepForCtrUsr (ActSeePubPrf+ 61)
#define ActRcvRepForCtrTch (ActSeePubPrf+ 62)
#define ActRcvRepForInsUsr (ActSeePubPrf+ 63)
#define ActRcvRepForInsTch (ActSeePubPrf+ 64)
#define ActRcvRepForGenUsr (ActSeePubPrf+ 65)
#define ActRcvRepForGenTch (ActSeePubPrf+ 66)
#define ActRcvRepForSWAUsr (ActSeePubPrf+ 67)
#define ActRcvRepForSWATch (ActSeePubPrf+ 68)
#define ActReqDelThrCrsUsr (ActSeePubPrf+ 69)
#define ActReqDelThrCrsTch (ActSeePubPrf+ 70)
#define ActReqDelThrDegUsr (ActSeePubPrf+ 71)
#define ActReqDelThrDegTch (ActSeePubPrf+ 72)
#define ActReqDelThrCtrUsr (ActSeePubPrf+ 73)
#define ActReqDelThrCtrTch (ActSeePubPrf+ 74)
#define ActReqDelThrInsUsr (ActSeePubPrf+ 75)
#define ActReqDelThrInsTch (ActSeePubPrf+ 76)
#define ActReqDelThrGenUsr (ActSeePubPrf+ 77)
#define ActReqDelThrGenTch (ActSeePubPrf+ 78)
#define ActReqDelThrSWAUsr (ActSeePubPrf+ 79)
#define ActReqDelThrSWATch (ActSeePubPrf+ 80)
#define ActDelThrForCrsUsr (ActSeePubPrf+ 81)
#define ActDelThrForCrsTch (ActSeePubPrf+ 82)
#define ActDelThrForDegUsr (ActSeePubPrf+ 83)
#define ActDelThrForDegTch (ActSeePubPrf+ 84)
#define ActDelThrForCtrUsr (ActSeePubPrf+ 85)
#define ActDelThrForCtrTch (ActSeePubPrf+ 86)
#define ActDelThrForInsUsr (ActSeePubPrf+ 87)
#define ActDelThrForInsTch (ActSeePubPrf+ 88)
#define ActDelThrForGenUsr (ActSeePubPrf+ 89)
#define ActDelThrForGenTch (ActSeePubPrf+ 90)
#define ActDelThrForSWAUsr (ActSeePubPrf+ 91)
#define ActDelThrForSWATch (ActSeePubPrf+ 92)
#define ActCutThrForCrsUsr (ActSeePubPrf+ 93)
#define ActCutThrForCrsTch (ActSeePubPrf+ 94)
#define ActCutThrForDegUsr (ActSeePubPrf+ 95)
#define ActCutThrForDegTch (ActSeePubPrf+ 96)
#define ActCutThrForCtrUsr (ActSeePubPrf+ 97)
#define ActCutThrForCtrTch (ActSeePubPrf+ 98)
#define ActCutThrForInsUsr (ActSeePubPrf+ 99)
#define ActCutThrForInsTch (ActSeePubPrf+100)
#define ActCutThrForGenUsr (ActSeePubPrf+101)
#define ActCutThrForGenTch (ActSeePubPrf+102)
#define ActCutThrForSWAUsr (ActSeePubPrf+103)
#define ActCutThrForSWATch (ActSeePubPrf+104)
#define ActPasThrForCrsUsr (ActSeePubPrf+105)
#define ActPasThrForCrsTch (ActSeePubPrf+106)
#define ActPasThrForDegUsr (ActSeePubPrf+107)
#define ActPasThrForDegTch (ActSeePubPrf+108)
#define ActPasThrForCtrUsr (ActSeePubPrf+109)
#define ActPasThrForCtrTch (ActSeePubPrf+110)
#define ActPasThrForInsUsr (ActSeePubPrf+111)
#define ActPasThrForInsTch (ActSeePubPrf+112)
#define ActPasThrForGenUsr (ActSeePubPrf+113)
#define ActPasThrForGenTch (ActSeePubPrf+114)
#define ActPasThrForSWAUsr (ActSeePubPrf+115)
#define ActPasThrForSWATch (ActSeePubPrf+116)
#define ActDelPstForCrsUsr (ActSeePubPrf+117)
#define ActDelPstForCrsTch (ActSeePubPrf+118)
#define ActDelPstForDegUsr (ActSeePubPrf+119)
#define ActDelPstForDegTch (ActSeePubPrf+120)
#define ActDelPstForCtrUsr (ActSeePubPrf+121)
#define ActDelPstForCtrTch (ActSeePubPrf+122)
#define ActDelPstForInsUsr (ActSeePubPrf+123)
#define ActDelPstForInsTch (ActSeePubPrf+124)
#define ActDelPstForGenUsr (ActSeePubPrf+125)
#define ActDelPstForGenTch (ActSeePubPrf+126)
#define ActDelPstForSWAUsr (ActSeePubPrf+127)
#define ActDelPstForSWATch (ActSeePubPrf+128)
#define ActEnbPstForCrsUsr (ActSeePubPrf+129)
#define ActEnbPstForCrsTch (ActSeePubPrf+130)
#define ActEnbPstForDegUsr (ActSeePubPrf+131)
#define ActEnbPstForDegTch (ActSeePubPrf+132)
#define ActEnbPstForCtrUsr (ActSeePubPrf+133)
#define ActEnbPstForCtrTch (ActSeePubPrf+134)
#define ActEnbPstForInsUsr (ActSeePubPrf+135)
#define ActEnbPstForInsTch (ActSeePubPrf+136)
#define ActEnbPstForGenUsr (ActSeePubPrf+137)
#define ActEnbPstForGenTch (ActSeePubPrf+138)
#define ActEnbPstForSWAUsr (ActSeePubPrf+139)
#define ActEnbPstForSWATch (ActSeePubPrf+140)
#define ActDisPstForCrsUsr (ActSeePubPrf+141)
#define ActDisPstForCrsTch (ActSeePubPrf+142)
#define ActDisPstForDegUsr (ActSeePubPrf+143)
#define ActDisPstForDegTch (ActSeePubPrf+144)
#define ActDisPstForCtrUsr (ActSeePubPrf+145)
#define ActDisPstForCtrTch (ActSeePubPrf+146)
#define ActDisPstForInsUsr (ActSeePubPrf+147)
#define ActDisPstForInsTch (ActSeePubPrf+148)
#define ActDisPstForGenUsr (ActSeePubPrf+149)
#define ActDisPstForGenTch (ActSeePubPrf+150)
#define ActDisPstForSWAUsr (ActSeePubPrf+151)
#define ActDisPstForSWATch (ActSeePubPrf+152)
#define ActRcvMsgUsr (ActSeePubPrf+153)
#define ActReqDelAllSntMsg (ActSeePubPrf+154)
#define ActReqDelAllRcvMsg (ActSeePubPrf+155)
#define ActDelAllSntMsg (ActSeePubPrf+156)
#define ActDelAllRcvMsg (ActSeePubPrf+157)
#define ActDelSntMsg (ActSeePubPrf+158)
#define ActDelRcvMsg (ActSeePubPrf+159)
#define ActExpSntMsg (ActSeePubPrf+160)
#define ActExpRcvMsg (ActSeePubPrf+161)
#define ActConSntMsg (ActSeePubPrf+162)
#define ActConRcvMsg (ActSeePubPrf+163)
#define ActLstBanUsr (ActSeePubPrf+164)
#define ActBanUsrMsg (ActSeePubPrf+165)
#define ActUnbUsrMsg (ActSeePubPrf+166)
#define ActUnbUsrLst (ActSeePubPrf+167)
#define ActCht (ActSeePubPrf+168)
#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)
/*****************************************************************************/
/****************************** Statistics tab *******************************/

View File

@ -103,12 +103,13 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 14.82.1 (2015/03/10)"
#define Log_PLATFORM_VERSION "SWAD 14.83 (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 | tail -1
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
Version 14.82.1: Mar 10, 2015 Added new social networks. (179908 lines)
Version 14.83: Mar 10, 2015 New action to compute first click when not available in public profile. (181285 lines)
Version 14.82.1: Mar 10, 2015 Added new social networks. (181143 lines)
1 change necessary in database:
ALTER TABLE usr_webs CHANGE Web Web ENUM('www','500px','delicious','deviantart','diaspora','edmodo','facebook','flickr','foursquare','github','googleplus','googlescholar','instagram','linkedin','paperli','pinterest','quitter','researchgate','scoopit','slideshare','storify','tumblr','twitter','wikipedia','youtube') NOT NULL;

View File

@ -3623,6 +3623,27 @@ const char *Txt_Before_going_to_any_other_option_you_must_fill_your_record_card_
" incluindo o seu sexo.";
#endif
const char *Txt_Calculate =
#if L==0
"Calcular";
#elif L==1
"Berechnen";
#elif L==2
"Calculate";
#elif L==3
"Calcular";
#elif L==4
"Calculer";
#elif L==5
"Calcular"; // Okoteve traducción
#elif L==6
"Calcolare";
#elif L==7
"Obliczać";
#elif L==8
"Calcular";
#endif
const char *Txt_Calculate_average_photo_of_a_degree =
#if L==0
"Calcular fotografia mitjana d'una titulació";

View File

@ -93,8 +93,8 @@ const char *Usr_UsrDatMainFieldNames[Usr_NUM_MAIN_FIELDS_DATA_USR];
struct UsrFigures
{
struct DateTime FirstClickTime;
unsigned long NumClicks;
struct DateTime FirstClickTime; // 0 ==> unknown first click time of user never logged
long NumClicks; // -1L ==> unknown number of clicks
};
/*****************************************************************************/
@ -180,7 +180,11 @@ static unsigned Usr_GetNumUsrsBelongingToAnyCrs (Rol_Role_t Role);
static float Usr_GetNumCrssPerUsr (Rol_Role_t Role);
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 bool Usr_CheckIfUsrFiguresExists (long UsrCod);
/*****************************************************************************/
/**** Show alert about number of clicks remaining before sending my photo ****/
@ -7445,7 +7449,7 @@ void Usr_RequestUserProfile (void)
Act_FormStart (ActSeePubPrf);
fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"text-align:center;\">"
"%s: "
"<input type=\"text\" name=\"Usr\""
"<input type=\"text\" name=\"usr\""
" size=\"20\" maxlength=\"%u\" />"
"</div>",
The_ClassFormul[Gbl.Prefs.Theme],
@ -7463,17 +7467,15 @@ void Usr_RequestUserProfile (void)
}
/*****************************************************************************/
/*************************** Show a user's profile ***************************/
/**************** Get user's code and show a user's profile ******************/
/*****************************************************************************/
void Usr_ShowUserProfile (void)
void Usr_GetUsrCodAndShowUserProfile (void)
{
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA + 1];
long OtherUsrCod;
bool Error = false;
/***** Get user *****/
/***** Get user from nickname *****/
if (Gbl.Usrs.Other.UsrDat.UsrCod < 0)
{
Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA);
@ -7486,6 +7488,19 @@ void Usr_ShowUserProfile (void)
Usr_GetParamOtherUsrCodEncrypted ();
}
/***** Show user's profile *****/
Usr_ShowUserProfile ();
}
/*****************************************************************************/
/*************************** Show a user's profile ***************************/
/*****************************************************************************/
static void Usr_ShowUserProfile (void)
{
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
bool Error = false;
/***** Check if user exists and get his data *****/
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat)) // Existing user
{
@ -7565,6 +7580,7 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat)
// extern const char *Txt_Shortcut;
// extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
extern const char *Txt_First_access;
extern const char *Txt_Calculate;
extern const char *Txt_Clicks;
extern const char *Txt_Courses_as_a_ROLE;
extern const char *Txt_ROLES_SINGULAR_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
@ -7621,10 +7637,16 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat)
fprintf (Gbl.F.Out,"&nbsp;");
Dat_WriteHourMinute (&(UsrFigures.FirstClickTime.YYYYMMDDHHMMSS[8]));
}
else
fprintf (Gbl.F.Out,"-");
fprintf (Gbl.F.Out,"</a>"
"</td>"
else // First click time is unknown or user never logged
{
/***** Button to fetch and store first click time *****/
Act_FormStart (ActCal1stClkTim);
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>");
/* Number of clicks */
@ -7634,14 +7656,22 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat)
"%s:"
"</td>"
"<td class=\"DAT\""
" style=\"text-align:left; vertical-align:middle;\">"
"%lu"
"</a>"
"</td>"
"</tr>",
" style=\"text-align:left; vertical-align:middle;\">",
The_ClassFormul[Gbl.Prefs.Theme],
Txt_Clicks,
UsrFigures.NumClicks);
Txt_Clicks);
if (UsrFigures.NumClicks >= 0)
fprintf (Gbl.F.Out,"%ld",UsrFigures.NumClicks);
else // Number of clicks is unknown
{
/***** Button to fetch and store number of clicks *****/
Act_FormStart (ActCalNumClk);
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>");
/***** Number of courses in which the user is teacher or student *****/
if ((NumCrssUsrIsTeacher = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_ROLE_TEACHER)))
@ -7767,17 +7797,54 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
/* Get number of clicks */
if (sscanf (row[1],"%ld",&UsrFigures->NumClicks) != 1)
UsrFigures->NumClicks = 0;
UsrFigures->NumClicks = -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;
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
if (!NumRows)
/*****************************************************************************/
/********* Calculate first click time and show user's profile again **********/
/*****************************************************************************/
void Usr_CalculateFirstClickTime (void)
{
/***** Get user's code *****/
Usr_GetParamOtherUsrCodEncrypted ();
/***** Get first click time from log and store as user's figure *****/
Usr_FetchFirstClickFromLogAndStoreAsUsrFigure (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 ***/
/*****************************************************************************/
static void Usr_FetchFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct DateTime FirstClickTime;
bool UsrIsInLog = false;
if (Usr_ChkIfUsrCodExists (UsrCod))
{
/***** Get first click from database *****/
/***** 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",
" WHERE UsrCod='%ld' ORDER BY ClickTime LIMIT 1",
UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's first click"))
{
@ -7785,34 +7852,98 @@ static void Usr_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
row = mysql_fetch_row (mysql_res);
/* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),row[0])))
Lay_ShowErrorAndExit ("Error when reading first click time.");
}
else
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000")))
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&FirstClickTime,row[0])))
Lay_ShowErrorAndExit ("Error when reading first click time.");
/***** Free structure that stores the query result *****/
UsrIsInLog = true;
}
/* Free structure that stores the query result */
DB_FreeMySQLResult (&mysql_res);
/***** Get first click from database *****/
sprintf (Query,"SELECT COUNT(*) FROM log WHERE UsrCod='%ld'",
UsrCod);
UsrFigures->NumClicks = DB_QueryCOUNT (Query,"can not get user's first click");
/***** Insert new user's figures *****/
if (UsrFigures->FirstClickTime.Date.Year) // If first click time found
/***** Update first click time in user's figures *****/
if (UsrIsInLog) // If first click time found
{
sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks)"
" VALUES ('%ld','%s','%ld')",
UsrCod,
UsrFigures->FirstClickTime.YYYYMMDDHHMMSS,
UsrFigures->NumClicks);
DB_QueryINSERT (Query,"can not insert user's figures");
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)"
" VALUES ('%ld','%s','-1')",
UsrCod,FirstClickTime.YYYYMMDDHHMMSS);
DB_QueryINSERT (Query,"can not create user's figures");
}
}
}
}
/*****************************************************************************/
/********* Calculate number of clicks and show user's profile again **********/
/*****************************************************************************/
void Usr_CalculateNumClicks (void)
{
/***** Get user's code *****/
Usr_GetParamOtherUsrCodEncrypted ();
/***** Get number of clicks from log and store as user's figure *****/
Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (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 ***/
/*****************************************************************************/
static void Usr_FetchNumClicksFromLogAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
unsigned long NumClicks;
if (Usr_ChkIfUsrCodExists (UsrCod))
{
/***** 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");
/***** 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);
DB_QueryUPDATE (Query,"can not update user's figures");
}
else // User entry does not exist
{
sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks)"
" VALUES ('%ld','00000000000000','%ld')",
UsrCod,NumClicks);
DB_QueryINSERT (Query,"can not create user's figures");
}
}
}
/*****************************************************************************/
/*** Check if it exists an entry for this user in table of user's figures ****/
/*****************************************************************************/
static bool Usr_CheckIfUsrFiguresExists (long UsrCod)
{
char Query[128];
sprintf (Query,"SELECT COUNT(*) FROM usr_figures WHERE UsrCod='%ld'",
UsrCod);
return (DB_QueryCOUNT (Query,"can not get user's first click") != 0);
}
/*****************************************************************************/
/********************** Select values on user's figures **********************/
/*****************************************************************************/

View File

@ -325,9 +325,11 @@ void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);
void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role);
void Usr_RequestUserProfile (void);
void Usr_ShowUserProfile (void);
void Usr_GetUsrCodAndShowUserProfile (void);
void Usr_ChangeProfileVisibility (void);
void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat);
void Usr_CalculateFirstClickTime (void);
void Usr_CalculateNumClicks (void);
void Usr_IncrementNumClicksUsr (void);
#endif