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( Web ENUM(
'www', 'www',
'500px', '500px',
'delicious','deviantart', 'delicious','deviantart','diaspora',
'edmodo', 'edmodo',
'facebook','flickr','foursquare', 'facebook','flickr','foursquare',
'github','googleplus','googlescholar', 'github','googleplus','googlescholar',
'instagram', 'instagram',
'linkedin', 'linkedin',
'paperli','pinterest', 'paperli','pinterest',
'quitter',
'researchgate', 'researchgate',
'scoopit','slideshare','storify', 'scoopit','slideshare','storify',
'tumblr','twitter', 'tumblr','twitter',

View File

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

View File

@ -103,12 +103,13 @@
/****************************** Public constants *****************************/ /****************************** 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: // 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: 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; 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."; " incluindo o seu sexo.";
#endif #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 = const char *Txt_Calculate_average_photo_of_a_degree =
#if L==0 #if L==0
"Calcular fotografia mitjana d'una titulació"; "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 UsrFigures
{ {
struct DateTime FirstClickTime; struct DateTime FirstClickTime; // 0 ==> unknown first click time of user never logged
unsigned long NumClicks; 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_GetNumCrssPerUsr (Rol_Role_t Role);
static float Usr_GetNumUsrsPerCrs (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_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 ****/ /**** Show alert about number of clicks remaining before sending my photo ****/
@ -7445,7 +7449,7 @@ void Usr_RequestUserProfile (void)
Act_FormStart (ActSeePubPrf); Act_FormStart (ActSeePubPrf);
fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"text-align:center;\">" fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"text-align:center;\">"
"%s: " "%s: "
"<input type=\"text\" name=\"Usr\"" "<input type=\"text\" name=\"usr\""
" size=\"20\" maxlength=\"%u\" />" " size=\"20\" maxlength=\"%u\" />"
"</div>", "</div>",
The_ClassFormul[Gbl.Prefs.Theme], 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]; char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA + 1];
long OtherUsrCod; long OtherUsrCod;
bool Error = false;
/***** Get user *****/ /***** Get user from nickname *****/
if (Gbl.Usrs.Other.UsrDat.UsrCod < 0) if (Gbl.Usrs.Other.UsrDat.UsrCod < 0)
{ {
Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA); Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA);
@ -7486,6 +7488,19 @@ void Usr_ShowUserProfile (void)
Usr_GetParamOtherUsrCodEncrypted (); 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 *****/ /***** Check if user exists and get his data *****/
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat)) // Existing user 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_Shortcut;
// extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES]; // extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
extern const char *Txt_First_access; extern const char *Txt_First_access;
extern const char *Txt_Calculate;
extern const char *Txt_Clicks; extern const char *Txt_Clicks;
extern const char *Txt_Courses_as_a_ROLE; extern const char *Txt_Courses_as_a_ROLE;
extern const char *Txt_ROLES_SINGULAR_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; 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;"); fprintf (Gbl.F.Out,"&nbsp;");
Dat_WriteHourMinute (&(UsrFigures.FirstClickTime.YYYYMMDDHHMMSS[8])); Dat_WriteHourMinute (&(UsrFigures.FirstClickTime.YYYYMMDDHHMMSS[8]));
} }
else else // First click time is unknown or user never logged
fprintf (Gbl.F.Out,"-"); {
fprintf (Gbl.F.Out,"</a>" /***** Button to fetch and store first click time *****/
"</td>" 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>"); "</tr>");
/* Number of clicks */ /* Number of clicks */
@ -7634,14 +7656,22 @@ void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat)
"%s:" "%s:"
"</td>" "</td>"
"<td class=\"DAT\"" "<td class=\"DAT\""
" style=\"text-align:left; vertical-align:middle;\">" " style=\"text-align:left; vertical-align:middle;\">",
"%lu"
"</a>"
"</td>"
"</tr>",
The_ClassFormul[Gbl.Prefs.Theme], The_ClassFormul[Gbl.Prefs.Theme],
Txt_Clicks, Txt_Clicks);
UsrFigures.NumClicks); 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 *****/ /***** Number of courses in which the user is teacher or student *****/
if ((NumCrssUsrIsTeacher = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_ROLE_TEACHER))) 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 */ /* Get number of clicks */
if (sscanf (row[1],"%ld",&UsrFigures->NumClicks) != 1) 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 *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); 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" 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); UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's first click")) 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); row = mysql_fetch_row (mysql_res);
/* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */ /* Get first click (row[0] holds the start date in YYYYMMDDHHMMSS format) */
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),row[0]))) if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&FirstClickTime,row[0])))
Lay_ShowErrorAndExit ("Error when reading first click time.");
}
else
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(UsrFigures->FirstClickTime),"00000000000000")))
Lay_ShowErrorAndExit ("Error when reading first click time."); 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); DB_FreeMySQLResult (&mysql_res);
/***** Get first click from database *****/ /***** Update first click time in user's figures *****/
sprintf (Query,"SELECT COUNT(*) FROM log WHERE UsrCod='%ld'", if (UsrIsInLog) // If first click time found
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
{ {
sprintf (Query,"INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks)" if (Usr_CheckIfUsrFiguresExists (UsrCod))
" VALUES ('%ld','%s','%ld')", {
UsrCod, sprintf (Query,"UPDATE usr_figures SET FirstClickTime='%s'"
UsrFigures->FirstClickTime.YYYYMMDDHHMMSS, " WHERE UsrCod='%ld'",
UsrFigures->NumClicks); FirstClickTime.YYYYMMDDHHMMSS,UsrCod);
DB_QueryINSERT (Query,"can not insert user's figures"); 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 **********************/ /********************** 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_GetAndShowNumUsrsInPlatform (Rol_Role_t Role);
void Usr_RequestUserProfile (void); void Usr_RequestUserProfile (void);
void Usr_ShowUserProfile (void); void Usr_GetUsrCodAndShowUserProfile (void);
void Usr_ChangeProfileVisibility (void); void Usr_ChangeProfileVisibility (void);
void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat); void Usr_ShowDetailsUserProfile (const struct UsrData *UsrDat);
void Usr_CalculateFirstClickTime (void);
void Usr_CalculateNumClicks (void);
void Usr_IncrementNumClicksUsr (void); void Usr_IncrementNumClicksUsr (void);
#endif #endif