mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-26 18:35:44 +02:00
Version 14.83
This commit is contained in:
parent
fd91923c56
commit
5a1cae4060
|
@ -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',
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
342
swad_action.h
342
swad_action.h
|
@ -69,9 +69,9 @@ typedef enum
|
||||||
|
|
||||||
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
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 *******************************/
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
21
swad_text.c
21
swad_text.c
|
@ -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ó";
|
||||||
|
|
215
swad_user.c
215
swad_user.c
|
@ -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," ");
|
fprintf (Gbl.F.Out," ");
|
||||||
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 **********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user