mirror of https://github.com/acanas/swad-core.git
Version 14.98
This commit is contained in:
parent
04e21f0745
commit
bf0d59fa6a
|
@ -955,6 +955,9 @@ Users:
|
|||
|
||||
---. ActFolUsr Follow another user
|
||||
---. ActUnfUsr Unfollow another user
|
||||
---. ActSeeFlg Show following
|
||||
---. ActSeeFlr Show followers
|
||||
|
||||
Messages:
|
||||
794. ActSeeNtf Show my recent notifications
|
||||
795. ActSeeAnn Show global announcements
|
||||
|
@ -2343,6 +2346,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
|
||||
/* ActFolUsr */{1410,-1,TabUsr,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_FollowUsr ,NULL},
|
||||
/* ActUnfUsr */{1411,-1,TabUsr,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_UnfollowUsr ,NULL},
|
||||
/* ActSeeFlg */{1412,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_ListFollowing ,NULL},
|
||||
/* ActSeeFlr */{1413,-1,TabUsr,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_ListFollowers ,NULL},
|
||||
|
||||
// TabMsg ******************************************************************
|
||||
// Actions in menu:
|
||||
|
@ -4084,6 +4089,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
|||
ActCalNumFilVie, // #1409
|
||||
ActFolUsr, // #1410
|
||||
ActUnfUsr, // #1411
|
||||
ActSeeFlg, // #1412
|
||||
ActSeeFlr, // #1413
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
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
|
||||
|
||||
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+107+168+28+77)
|
||||
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+184+109+168+28+77)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1411
|
||||
#define Act_MAX_ACTION_COD 1413
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
||||
|
||||
|
@ -988,180 +988,182 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
|||
|
||||
#define ActFolUsr (ActChgNumRowFooGrp+106)
|
||||
#define ActUnfUsr (ActChgNumRowFooGrp+107)
|
||||
#define ActSeeFlg (ActChgNumRowFooGrp+108)
|
||||
#define ActSeeFlr (ActChgNumRowFooGrp+109)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Messages tab ********************************/
|
||||
/*****************************************************************************/
|
||||
// Actions in menu
|
||||
#define ActSeeNtf (ActUnfUsr+ 1)
|
||||
#define ActSeeAnn (ActUnfUsr+ 2)
|
||||
#define ActSeeNot (ActUnfUsr+ 3)
|
||||
#define ActSeeFor (ActUnfUsr+ 4)
|
||||
#define ActSeeChtRms (ActUnfUsr+ 5)
|
||||
#define ActReqMsgUsr (ActUnfUsr+ 6)
|
||||
#define ActSeeRcvMsg (ActUnfUsr+ 7)
|
||||
#define ActSeeSntMsg (ActUnfUsr+ 8)
|
||||
#define ActMaiStd (ActUnfUsr+ 9)
|
||||
#define ActSeeNtf (ActSeeFlr+ 1)
|
||||
#define ActSeeAnn (ActSeeFlr+ 2)
|
||||
#define ActSeeNot (ActSeeFlr+ 3)
|
||||
#define ActSeeFor (ActSeeFlr+ 4)
|
||||
#define ActSeeChtRms (ActSeeFlr+ 5)
|
||||
#define ActReqMsgUsr (ActSeeFlr+ 6)
|
||||
#define ActSeeRcvMsg (ActSeeFlr+ 7)
|
||||
#define ActSeeSntMsg (ActSeeFlr+ 8)
|
||||
#define ActMaiStd (ActSeeFlr+ 9)
|
||||
// Secondary actions
|
||||
#define ActWriAnn (ActUnfUsr+ 10)
|
||||
#define ActRcvAnn (ActUnfUsr+ 11)
|
||||
#define ActRemAnn (ActUnfUsr+ 12)
|
||||
#define ActShoNot (ActUnfUsr+ 13)
|
||||
#define ActWriNot (ActUnfUsr+ 14)
|
||||
#define ActRcvNot (ActUnfUsr+ 15)
|
||||
#define ActHidNot (ActUnfUsr+ 16)
|
||||
#define ActRevNot (ActUnfUsr+ 17)
|
||||
#define ActRemNot (ActUnfUsr+ 18)
|
||||
#define ActSeeNewNtf (ActUnfUsr+ 19)
|
||||
#define ActMrkNtfSee (ActUnfUsr+ 20)
|
||||
#define ActSeeForCrsUsr (ActUnfUsr+ 21)
|
||||
#define ActSeeForCrsTch (ActUnfUsr+ 22)
|
||||
#define ActSeeForDegUsr (ActUnfUsr+ 23)
|
||||
#define ActSeeForDegTch (ActUnfUsr+ 24)
|
||||
#define ActSeeForCtrUsr (ActUnfUsr+ 25)
|
||||
#define ActSeeForCtrTch (ActUnfUsr+ 26)
|
||||
#define ActSeeForInsUsr (ActUnfUsr+ 27)
|
||||
#define ActSeeForInsTch (ActUnfUsr+ 28)
|
||||
#define ActSeeForGenUsr (ActUnfUsr+ 29)
|
||||
#define ActSeeForGenTch (ActUnfUsr+ 30)
|
||||
#define ActSeeForSWAUsr (ActUnfUsr+ 31)
|
||||
#define ActSeeForSWATch (ActUnfUsr+ 32)
|
||||
#define ActSeePstForCrsUsr (ActUnfUsr+ 33)
|
||||
#define ActSeePstForCrsTch (ActUnfUsr+ 34)
|
||||
#define ActSeePstForDegUsr (ActUnfUsr+ 35)
|
||||
#define ActSeePstForDegTch (ActUnfUsr+ 36)
|
||||
#define ActSeePstForCtrUsr (ActUnfUsr+ 37)
|
||||
#define ActSeePstForCtrTch (ActUnfUsr+ 38)
|
||||
#define ActSeePstForInsUsr (ActUnfUsr+ 39)
|
||||
#define ActSeePstForInsTch (ActUnfUsr+ 40)
|
||||
#define ActSeePstForGenUsr (ActUnfUsr+ 41)
|
||||
#define ActSeePstForGenTch (ActUnfUsr+ 42)
|
||||
#define ActSeePstForSWAUsr (ActUnfUsr+ 43)
|
||||
#define ActSeePstForSWATch (ActUnfUsr+ 44)
|
||||
#define ActRcvThrForCrsUsr (ActUnfUsr+ 45)
|
||||
#define ActRcvThrForCrsTch (ActUnfUsr+ 46)
|
||||
#define ActRcvThrForDegUsr (ActUnfUsr+ 47)
|
||||
#define ActRcvThrForDegTch (ActUnfUsr+ 48)
|
||||
#define ActRcvThrForCtrUsr (ActUnfUsr+ 49)
|
||||
#define ActRcvThrForCtrTch (ActUnfUsr+ 50)
|
||||
#define ActRcvThrForInsUsr (ActUnfUsr+ 51)
|
||||
#define ActRcvThrForInsTch (ActUnfUsr+ 52)
|
||||
#define ActRcvThrForGenUsr (ActUnfUsr+ 53)
|
||||
#define ActRcvThrForGenTch (ActUnfUsr+ 54)
|
||||
#define ActRcvThrForSWAUsr (ActUnfUsr+ 55)
|
||||
#define ActRcvThrForSWATch (ActUnfUsr+ 56)
|
||||
#define ActRcvRepForCrsUsr (ActUnfUsr+ 57)
|
||||
#define ActRcvRepForCrsTch (ActUnfUsr+ 58)
|
||||
#define ActRcvRepForDegUsr (ActUnfUsr+ 59)
|
||||
#define ActRcvRepForDegTch (ActUnfUsr+ 60)
|
||||
#define ActRcvRepForCtrUsr (ActUnfUsr+ 61)
|
||||
#define ActRcvRepForCtrTch (ActUnfUsr+ 62)
|
||||
#define ActRcvRepForInsUsr (ActUnfUsr+ 63)
|
||||
#define ActRcvRepForInsTch (ActUnfUsr+ 64)
|
||||
#define ActRcvRepForGenUsr (ActUnfUsr+ 65)
|
||||
#define ActRcvRepForGenTch (ActUnfUsr+ 66)
|
||||
#define ActRcvRepForSWAUsr (ActUnfUsr+ 67)
|
||||
#define ActRcvRepForSWATch (ActUnfUsr+ 68)
|
||||
#define ActReqDelThrCrsUsr (ActUnfUsr+ 69)
|
||||
#define ActReqDelThrCrsTch (ActUnfUsr+ 70)
|
||||
#define ActReqDelThrDegUsr (ActUnfUsr+ 71)
|
||||
#define ActReqDelThrDegTch (ActUnfUsr+ 72)
|
||||
#define ActReqDelThrCtrUsr (ActUnfUsr+ 73)
|
||||
#define ActReqDelThrCtrTch (ActUnfUsr+ 74)
|
||||
#define ActReqDelThrInsUsr (ActUnfUsr+ 75)
|
||||
#define ActReqDelThrInsTch (ActUnfUsr+ 76)
|
||||
#define ActReqDelThrGenUsr (ActUnfUsr+ 77)
|
||||
#define ActReqDelThrGenTch (ActUnfUsr+ 78)
|
||||
#define ActReqDelThrSWAUsr (ActUnfUsr+ 79)
|
||||
#define ActReqDelThrSWATch (ActUnfUsr+ 80)
|
||||
#define ActDelThrForCrsUsr (ActUnfUsr+ 81)
|
||||
#define ActDelThrForCrsTch (ActUnfUsr+ 82)
|
||||
#define ActDelThrForDegUsr (ActUnfUsr+ 83)
|
||||
#define ActDelThrForDegTch (ActUnfUsr+ 84)
|
||||
#define ActDelThrForCtrUsr (ActUnfUsr+ 85)
|
||||
#define ActDelThrForCtrTch (ActUnfUsr+ 86)
|
||||
#define ActDelThrForInsUsr (ActUnfUsr+ 87)
|
||||
#define ActDelThrForInsTch (ActUnfUsr+ 88)
|
||||
#define ActDelThrForGenUsr (ActUnfUsr+ 89)
|
||||
#define ActDelThrForGenTch (ActUnfUsr+ 90)
|
||||
#define ActDelThrForSWAUsr (ActUnfUsr+ 91)
|
||||
#define ActDelThrForSWATch (ActUnfUsr+ 92)
|
||||
#define ActCutThrForCrsUsr (ActUnfUsr+ 93)
|
||||
#define ActCutThrForCrsTch (ActUnfUsr+ 94)
|
||||
#define ActCutThrForDegUsr (ActUnfUsr+ 95)
|
||||
#define ActCutThrForDegTch (ActUnfUsr+ 96)
|
||||
#define ActCutThrForCtrUsr (ActUnfUsr+ 97)
|
||||
#define ActCutThrForCtrTch (ActUnfUsr+ 98)
|
||||
#define ActCutThrForInsUsr (ActUnfUsr+ 99)
|
||||
#define ActCutThrForInsTch (ActUnfUsr+100)
|
||||
#define ActCutThrForGenUsr (ActUnfUsr+101)
|
||||
#define ActCutThrForGenTch (ActUnfUsr+102)
|
||||
#define ActCutThrForSWAUsr (ActUnfUsr+103)
|
||||
#define ActCutThrForSWATch (ActUnfUsr+104)
|
||||
#define ActPasThrForCrsUsr (ActUnfUsr+105)
|
||||
#define ActPasThrForCrsTch (ActUnfUsr+106)
|
||||
#define ActPasThrForDegUsr (ActUnfUsr+107)
|
||||
#define ActPasThrForDegTch (ActUnfUsr+108)
|
||||
#define ActPasThrForCtrUsr (ActUnfUsr+109)
|
||||
#define ActPasThrForCtrTch (ActUnfUsr+110)
|
||||
#define ActPasThrForInsUsr (ActUnfUsr+111)
|
||||
#define ActPasThrForInsTch (ActUnfUsr+112)
|
||||
#define ActPasThrForGenUsr (ActUnfUsr+113)
|
||||
#define ActPasThrForGenTch (ActUnfUsr+114)
|
||||
#define ActPasThrForSWAUsr (ActUnfUsr+115)
|
||||
#define ActPasThrForSWATch (ActUnfUsr+116)
|
||||
#define ActDelPstForCrsUsr (ActUnfUsr+117)
|
||||
#define ActDelPstForCrsTch (ActUnfUsr+118)
|
||||
#define ActDelPstForDegUsr (ActUnfUsr+119)
|
||||
#define ActDelPstForDegTch (ActUnfUsr+120)
|
||||
#define ActDelPstForCtrUsr (ActUnfUsr+121)
|
||||
#define ActDelPstForCtrTch (ActUnfUsr+122)
|
||||
#define ActDelPstForInsUsr (ActUnfUsr+123)
|
||||
#define ActDelPstForInsTch (ActUnfUsr+124)
|
||||
#define ActDelPstForGenUsr (ActUnfUsr+125)
|
||||
#define ActDelPstForGenTch (ActUnfUsr+126)
|
||||
#define ActDelPstForSWAUsr (ActUnfUsr+127)
|
||||
#define ActDelPstForSWATch (ActUnfUsr+128)
|
||||
#define ActEnbPstForCrsUsr (ActUnfUsr+129)
|
||||
#define ActEnbPstForCrsTch (ActUnfUsr+130)
|
||||
#define ActEnbPstForDegUsr (ActUnfUsr+131)
|
||||
#define ActEnbPstForDegTch (ActUnfUsr+132)
|
||||
#define ActEnbPstForCtrUsr (ActUnfUsr+133)
|
||||
#define ActEnbPstForCtrTch (ActUnfUsr+134)
|
||||
#define ActEnbPstForInsUsr (ActUnfUsr+135)
|
||||
#define ActEnbPstForInsTch (ActUnfUsr+136)
|
||||
#define ActEnbPstForGenUsr (ActUnfUsr+137)
|
||||
#define ActEnbPstForGenTch (ActUnfUsr+138)
|
||||
#define ActEnbPstForSWAUsr (ActUnfUsr+139)
|
||||
#define ActEnbPstForSWATch (ActUnfUsr+140)
|
||||
#define ActDisPstForCrsUsr (ActUnfUsr+141)
|
||||
#define ActDisPstForCrsTch (ActUnfUsr+142)
|
||||
#define ActDisPstForDegUsr (ActUnfUsr+143)
|
||||
#define ActDisPstForDegTch (ActUnfUsr+144)
|
||||
#define ActDisPstForCtrUsr (ActUnfUsr+145)
|
||||
#define ActDisPstForCtrTch (ActUnfUsr+146)
|
||||
#define ActDisPstForInsUsr (ActUnfUsr+147)
|
||||
#define ActDisPstForInsTch (ActUnfUsr+148)
|
||||
#define ActDisPstForGenUsr (ActUnfUsr+149)
|
||||
#define ActDisPstForGenTch (ActUnfUsr+150)
|
||||
#define ActDisPstForSWAUsr (ActUnfUsr+151)
|
||||
#define ActDisPstForSWATch (ActUnfUsr+152)
|
||||
#define ActRcvMsgUsr (ActUnfUsr+153)
|
||||
#define ActReqDelAllSntMsg (ActUnfUsr+154)
|
||||
#define ActReqDelAllRcvMsg (ActUnfUsr+155)
|
||||
#define ActDelAllSntMsg (ActUnfUsr+156)
|
||||
#define ActDelAllRcvMsg (ActUnfUsr+157)
|
||||
#define ActDelSntMsg (ActUnfUsr+158)
|
||||
#define ActDelRcvMsg (ActUnfUsr+159)
|
||||
#define ActExpSntMsg (ActUnfUsr+160)
|
||||
#define ActExpRcvMsg (ActUnfUsr+161)
|
||||
#define ActConSntMsg (ActUnfUsr+162)
|
||||
#define ActConRcvMsg (ActUnfUsr+163)
|
||||
#define ActLstBanUsr (ActUnfUsr+164)
|
||||
#define ActBanUsrMsg (ActUnfUsr+165)
|
||||
#define ActUnbUsrMsg (ActUnfUsr+166)
|
||||
#define ActUnbUsrLst (ActUnfUsr+167)
|
||||
#define ActCht (ActUnfUsr+168)
|
||||
#define ActWriAnn (ActSeeFlr+ 10)
|
||||
#define ActRcvAnn (ActSeeFlr+ 11)
|
||||
#define ActRemAnn (ActSeeFlr+ 12)
|
||||
#define ActShoNot (ActSeeFlr+ 13)
|
||||
#define ActWriNot (ActSeeFlr+ 14)
|
||||
#define ActRcvNot (ActSeeFlr+ 15)
|
||||
#define ActHidNot (ActSeeFlr+ 16)
|
||||
#define ActRevNot (ActSeeFlr+ 17)
|
||||
#define ActRemNot (ActSeeFlr+ 18)
|
||||
#define ActSeeNewNtf (ActSeeFlr+ 19)
|
||||
#define ActMrkNtfSee (ActSeeFlr+ 20)
|
||||
#define ActSeeForCrsUsr (ActSeeFlr+ 21)
|
||||
#define ActSeeForCrsTch (ActSeeFlr+ 22)
|
||||
#define ActSeeForDegUsr (ActSeeFlr+ 23)
|
||||
#define ActSeeForDegTch (ActSeeFlr+ 24)
|
||||
#define ActSeeForCtrUsr (ActSeeFlr+ 25)
|
||||
#define ActSeeForCtrTch (ActSeeFlr+ 26)
|
||||
#define ActSeeForInsUsr (ActSeeFlr+ 27)
|
||||
#define ActSeeForInsTch (ActSeeFlr+ 28)
|
||||
#define ActSeeForGenUsr (ActSeeFlr+ 29)
|
||||
#define ActSeeForGenTch (ActSeeFlr+ 30)
|
||||
#define ActSeeForSWAUsr (ActSeeFlr+ 31)
|
||||
#define ActSeeForSWATch (ActSeeFlr+ 32)
|
||||
#define ActSeePstForCrsUsr (ActSeeFlr+ 33)
|
||||
#define ActSeePstForCrsTch (ActSeeFlr+ 34)
|
||||
#define ActSeePstForDegUsr (ActSeeFlr+ 35)
|
||||
#define ActSeePstForDegTch (ActSeeFlr+ 36)
|
||||
#define ActSeePstForCtrUsr (ActSeeFlr+ 37)
|
||||
#define ActSeePstForCtrTch (ActSeeFlr+ 38)
|
||||
#define ActSeePstForInsUsr (ActSeeFlr+ 39)
|
||||
#define ActSeePstForInsTch (ActSeeFlr+ 40)
|
||||
#define ActSeePstForGenUsr (ActSeeFlr+ 41)
|
||||
#define ActSeePstForGenTch (ActSeeFlr+ 42)
|
||||
#define ActSeePstForSWAUsr (ActSeeFlr+ 43)
|
||||
#define ActSeePstForSWATch (ActSeeFlr+ 44)
|
||||
#define ActRcvThrForCrsUsr (ActSeeFlr+ 45)
|
||||
#define ActRcvThrForCrsTch (ActSeeFlr+ 46)
|
||||
#define ActRcvThrForDegUsr (ActSeeFlr+ 47)
|
||||
#define ActRcvThrForDegTch (ActSeeFlr+ 48)
|
||||
#define ActRcvThrForCtrUsr (ActSeeFlr+ 49)
|
||||
#define ActRcvThrForCtrTch (ActSeeFlr+ 50)
|
||||
#define ActRcvThrForInsUsr (ActSeeFlr+ 51)
|
||||
#define ActRcvThrForInsTch (ActSeeFlr+ 52)
|
||||
#define ActRcvThrForGenUsr (ActSeeFlr+ 53)
|
||||
#define ActRcvThrForGenTch (ActSeeFlr+ 54)
|
||||
#define ActRcvThrForSWAUsr (ActSeeFlr+ 55)
|
||||
#define ActRcvThrForSWATch (ActSeeFlr+ 56)
|
||||
#define ActRcvRepForCrsUsr (ActSeeFlr+ 57)
|
||||
#define ActRcvRepForCrsTch (ActSeeFlr+ 58)
|
||||
#define ActRcvRepForDegUsr (ActSeeFlr+ 59)
|
||||
#define ActRcvRepForDegTch (ActSeeFlr+ 60)
|
||||
#define ActRcvRepForCtrUsr (ActSeeFlr+ 61)
|
||||
#define ActRcvRepForCtrTch (ActSeeFlr+ 62)
|
||||
#define ActRcvRepForInsUsr (ActSeeFlr+ 63)
|
||||
#define ActRcvRepForInsTch (ActSeeFlr+ 64)
|
||||
#define ActRcvRepForGenUsr (ActSeeFlr+ 65)
|
||||
#define ActRcvRepForGenTch (ActSeeFlr+ 66)
|
||||
#define ActRcvRepForSWAUsr (ActSeeFlr+ 67)
|
||||
#define ActRcvRepForSWATch (ActSeeFlr+ 68)
|
||||
#define ActReqDelThrCrsUsr (ActSeeFlr+ 69)
|
||||
#define ActReqDelThrCrsTch (ActSeeFlr+ 70)
|
||||
#define ActReqDelThrDegUsr (ActSeeFlr+ 71)
|
||||
#define ActReqDelThrDegTch (ActSeeFlr+ 72)
|
||||
#define ActReqDelThrCtrUsr (ActSeeFlr+ 73)
|
||||
#define ActReqDelThrCtrTch (ActSeeFlr+ 74)
|
||||
#define ActReqDelThrInsUsr (ActSeeFlr+ 75)
|
||||
#define ActReqDelThrInsTch (ActSeeFlr+ 76)
|
||||
#define ActReqDelThrGenUsr (ActSeeFlr+ 77)
|
||||
#define ActReqDelThrGenTch (ActSeeFlr+ 78)
|
||||
#define ActReqDelThrSWAUsr (ActSeeFlr+ 79)
|
||||
#define ActReqDelThrSWATch (ActSeeFlr+ 80)
|
||||
#define ActDelThrForCrsUsr (ActSeeFlr+ 81)
|
||||
#define ActDelThrForCrsTch (ActSeeFlr+ 82)
|
||||
#define ActDelThrForDegUsr (ActSeeFlr+ 83)
|
||||
#define ActDelThrForDegTch (ActSeeFlr+ 84)
|
||||
#define ActDelThrForCtrUsr (ActSeeFlr+ 85)
|
||||
#define ActDelThrForCtrTch (ActSeeFlr+ 86)
|
||||
#define ActDelThrForInsUsr (ActSeeFlr+ 87)
|
||||
#define ActDelThrForInsTch (ActSeeFlr+ 88)
|
||||
#define ActDelThrForGenUsr (ActSeeFlr+ 89)
|
||||
#define ActDelThrForGenTch (ActSeeFlr+ 90)
|
||||
#define ActDelThrForSWAUsr (ActSeeFlr+ 91)
|
||||
#define ActDelThrForSWATch (ActSeeFlr+ 92)
|
||||
#define ActCutThrForCrsUsr (ActSeeFlr+ 93)
|
||||
#define ActCutThrForCrsTch (ActSeeFlr+ 94)
|
||||
#define ActCutThrForDegUsr (ActSeeFlr+ 95)
|
||||
#define ActCutThrForDegTch (ActSeeFlr+ 96)
|
||||
#define ActCutThrForCtrUsr (ActSeeFlr+ 97)
|
||||
#define ActCutThrForCtrTch (ActSeeFlr+ 98)
|
||||
#define ActCutThrForInsUsr (ActSeeFlr+ 99)
|
||||
#define ActCutThrForInsTch (ActSeeFlr+100)
|
||||
#define ActCutThrForGenUsr (ActSeeFlr+101)
|
||||
#define ActCutThrForGenTch (ActSeeFlr+102)
|
||||
#define ActCutThrForSWAUsr (ActSeeFlr+103)
|
||||
#define ActCutThrForSWATch (ActSeeFlr+104)
|
||||
#define ActPasThrForCrsUsr (ActSeeFlr+105)
|
||||
#define ActPasThrForCrsTch (ActSeeFlr+106)
|
||||
#define ActPasThrForDegUsr (ActSeeFlr+107)
|
||||
#define ActPasThrForDegTch (ActSeeFlr+108)
|
||||
#define ActPasThrForCtrUsr (ActSeeFlr+109)
|
||||
#define ActPasThrForCtrTch (ActSeeFlr+110)
|
||||
#define ActPasThrForInsUsr (ActSeeFlr+111)
|
||||
#define ActPasThrForInsTch (ActSeeFlr+112)
|
||||
#define ActPasThrForGenUsr (ActSeeFlr+113)
|
||||
#define ActPasThrForGenTch (ActSeeFlr+114)
|
||||
#define ActPasThrForSWAUsr (ActSeeFlr+115)
|
||||
#define ActPasThrForSWATch (ActSeeFlr+116)
|
||||
#define ActDelPstForCrsUsr (ActSeeFlr+117)
|
||||
#define ActDelPstForCrsTch (ActSeeFlr+118)
|
||||
#define ActDelPstForDegUsr (ActSeeFlr+119)
|
||||
#define ActDelPstForDegTch (ActSeeFlr+120)
|
||||
#define ActDelPstForCtrUsr (ActSeeFlr+121)
|
||||
#define ActDelPstForCtrTch (ActSeeFlr+122)
|
||||
#define ActDelPstForInsUsr (ActSeeFlr+123)
|
||||
#define ActDelPstForInsTch (ActSeeFlr+124)
|
||||
#define ActDelPstForGenUsr (ActSeeFlr+125)
|
||||
#define ActDelPstForGenTch (ActSeeFlr+126)
|
||||
#define ActDelPstForSWAUsr (ActSeeFlr+127)
|
||||
#define ActDelPstForSWATch (ActSeeFlr+128)
|
||||
#define ActEnbPstForCrsUsr (ActSeeFlr+129)
|
||||
#define ActEnbPstForCrsTch (ActSeeFlr+130)
|
||||
#define ActEnbPstForDegUsr (ActSeeFlr+131)
|
||||
#define ActEnbPstForDegTch (ActSeeFlr+132)
|
||||
#define ActEnbPstForCtrUsr (ActSeeFlr+133)
|
||||
#define ActEnbPstForCtrTch (ActSeeFlr+134)
|
||||
#define ActEnbPstForInsUsr (ActSeeFlr+135)
|
||||
#define ActEnbPstForInsTch (ActSeeFlr+136)
|
||||
#define ActEnbPstForGenUsr (ActSeeFlr+137)
|
||||
#define ActEnbPstForGenTch (ActSeeFlr+138)
|
||||
#define ActEnbPstForSWAUsr (ActSeeFlr+139)
|
||||
#define ActEnbPstForSWATch (ActSeeFlr+140)
|
||||
#define ActDisPstForCrsUsr (ActSeeFlr+141)
|
||||
#define ActDisPstForCrsTch (ActSeeFlr+142)
|
||||
#define ActDisPstForDegUsr (ActSeeFlr+143)
|
||||
#define ActDisPstForDegTch (ActSeeFlr+144)
|
||||
#define ActDisPstForCtrUsr (ActSeeFlr+145)
|
||||
#define ActDisPstForCtrTch (ActSeeFlr+146)
|
||||
#define ActDisPstForInsUsr (ActSeeFlr+147)
|
||||
#define ActDisPstForInsTch (ActSeeFlr+148)
|
||||
#define ActDisPstForGenUsr (ActSeeFlr+149)
|
||||
#define ActDisPstForGenTch (ActSeeFlr+150)
|
||||
#define ActDisPstForSWAUsr (ActSeeFlr+151)
|
||||
#define ActDisPstForSWATch (ActSeeFlr+152)
|
||||
#define ActRcvMsgUsr (ActSeeFlr+153)
|
||||
#define ActReqDelAllSntMsg (ActSeeFlr+154)
|
||||
#define ActReqDelAllRcvMsg (ActSeeFlr+155)
|
||||
#define ActDelAllSntMsg (ActSeeFlr+156)
|
||||
#define ActDelAllRcvMsg (ActSeeFlr+157)
|
||||
#define ActDelSntMsg (ActSeeFlr+158)
|
||||
#define ActDelRcvMsg (ActSeeFlr+159)
|
||||
#define ActExpSntMsg (ActSeeFlr+160)
|
||||
#define ActExpRcvMsg (ActSeeFlr+161)
|
||||
#define ActConSntMsg (ActSeeFlr+162)
|
||||
#define ActConRcvMsg (ActSeeFlr+163)
|
||||
#define ActLstBanUsr (ActSeeFlr+164)
|
||||
#define ActBanUsrMsg (ActSeeFlr+165)
|
||||
#define ActUnbUsrMsg (ActSeeFlr+166)
|
||||
#define ActUnbUsrLst (ActSeeFlr+167)
|
||||
#define ActCht (ActSeeFlr+168)
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Statistics tab *******************************/
|
||||
|
|
|
@ -103,11 +103,12 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.97 (2015/03/18)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.98 (2015/03/19)"
|
||||
|
||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||
/*
|
||||
Version 14.98: Mar 19, 2015 Show list of following and followers. (183300 lines)
|
||||
Version 14.97: Mar 18, 2015 Show number of following and followers in user's profile. (183130 lines)
|
||||
Version 14.96.3: Mar 18, 2015 Changes in record cards. (183017 lines)
|
||||
Version 14.96.2: Mar 18, 2015 Changes in record cards. (183011 lines)
|
||||
|
|
227
swad_follow.c
227
swad_follow.c
|
@ -62,6 +62,7 @@ extern struct Globals Gbl;
|
|||
|
||||
static unsigned Fol_GetNumFollowing (long UsrCod);
|
||||
static unsigned Fol_GetNumFollowers (long UsrCod);
|
||||
static void Fol_ShowFollowedOrFollowed (const struct UsrData *UsrDat);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Check if a user is a follower of another user ***************/
|
||||
|
@ -85,13 +86,13 @@ bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod)
|
|||
/**************** Show following and followers of a user *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Fol_ShowFollowingAndFollowers (long UsrCod)
|
||||
void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat)
|
||||
{
|
||||
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||
extern const char *Txt_Following;
|
||||
extern const char *Txt_Followers;
|
||||
unsigned Following = Fol_GetNumFollowing (UsrCod);
|
||||
unsigned Followers = Fol_GetNumFollowers (UsrCod);
|
||||
unsigned Following = Fol_GetNumFollowing (UsrDat->UsrCod);
|
||||
unsigned Followers = Fol_GetNumFollowers (UsrDat->UsrCod);
|
||||
|
||||
/***** Start table *****/
|
||||
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_4\" style=\"margin:0 auto;\">"
|
||||
|
@ -100,30 +101,38 @@ void Fol_ShowFollowingAndFollowers (long UsrCod)
|
|||
/***** Following *****/
|
||||
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
||||
" text-align:center; vertical-align:top;\">"
|
||||
"<div class=\"FOLLOW\">"
|
||||
"%u"
|
||||
"</div>"
|
||||
"<div class=\"FOLLOW\">");
|
||||
|
||||
Act_FormStart (ActSeeFlg);
|
||||
Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
||||
Act_LinkFormSubmit (Txt_Following,"FOLLOW");
|
||||
fprintf (Gbl.F.Out,"%u</a>",Following);
|
||||
Act_FormEnd ();
|
||||
|
||||
fprintf (Gbl.F.Out,"</div>"
|
||||
"<div class=\"%s\">"
|
||||
"%s"
|
||||
"</div>"
|
||||
"%s</div>"
|
||||
"</td>",
|
||||
Following,
|
||||
The_ClassFormul[Gbl.Prefs.Theme],
|
||||
Txt_Following);
|
||||
Txt_Following);
|
||||
|
||||
/***** Followers *****/
|
||||
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
||||
" text-align:center; vertical-align:top;\">"
|
||||
"<div class=\"FOLLOW\">"
|
||||
"%u"
|
||||
"</div>"
|
||||
"<div class=\"FOLLOW\">");
|
||||
|
||||
Act_FormStart (ActSeeFlr);
|
||||
Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
||||
Act_LinkFormSubmit (Txt_Followers,"FOLLOW");
|
||||
fprintf (Gbl.F.Out,"%u</a>",Followers);
|
||||
Act_FormEnd ();
|
||||
|
||||
fprintf (Gbl.F.Out,"</div>"
|
||||
"<div class=\"%s\">"
|
||||
"%s"
|
||||
"</div>"
|
||||
"%s</div>"
|
||||
"</td>",
|
||||
Followers,
|
||||
The_ClassFormul[Gbl.Prefs.Theme],
|
||||
Txt_Followers);
|
||||
Txt_Followers);
|
||||
|
||||
/***** End table *****/
|
||||
fprintf (Gbl.F.Out,"</tr>"
|
||||
|
@ -158,6 +167,186 @@ static unsigned Fol_GetNumFollowers (long UsrCod)
|
|||
return DB_QueryCOUNT (Query,"can not get number of followers");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** List followed users ***************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Fol_ListFollowing (void)
|
||||
{
|
||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||
extern const char *Txt_Following;
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
unsigned NumUsr;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Get user to view user he/she follows *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/***** Show user's profile *****/
|
||||
if (Prf_ShowUserProfile ())
|
||||
{
|
||||
/***** Check if a user is a follower of another user *****/
|
||||
sprintf (Query,"SELECT FollowedCod FROM usr_follow"
|
||||
" WHERE FollowerCod='%ld' ORDER BY FollowTime DESC",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get followed users");
|
||||
if (NumUsrs)
|
||||
{
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/***** Start listing *****/
|
||||
Lay_StartRoundFrameTable10 (NULL,2,Txt_Following);
|
||||
|
||||
for (NumUsr = 0;
|
||||
NumUsr < NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
/***** Get user and number of clicks *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Get user's code (row[0]) */
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
Usr_GetAllUsrDataFromUsrCod (&UsrDat);
|
||||
|
||||
/***** Show user *****/
|
||||
if (!(NumUsr % 10))
|
||||
fprintf (Gbl.F.Out,"<tr>");
|
||||
Fol_ShowFollowedOrFollowed (&UsrDat);
|
||||
if ((NumUsr % 10) == 9 || NumUsr == NumUsrs - 1)
|
||||
fprintf (Gbl.F.Out,"</tr>");
|
||||
}
|
||||
|
||||
/***** End listing *****/
|
||||
Lay_EndRoundFrameTable10 ();
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
else
|
||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||
}
|
||||
else
|
||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* List followers ******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Fol_ListFollowers (void)
|
||||
{
|
||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||
extern const char *Txt_Followers;
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
unsigned NumUsr;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Get user to view user he/she follows *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/***** Show user's profile *****/
|
||||
if (Prf_ShowUserProfile ())
|
||||
{
|
||||
/***** Check if a user is a follower of another user *****/
|
||||
sprintf (Query,"SELECT FollowerCod FROM usr_follow"
|
||||
" WHERE FollowedCod='%ld' ORDER BY FollowTime DESC",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get followers");
|
||||
if (NumUsrs)
|
||||
{
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/***** Start listing *****/
|
||||
Lay_StartRoundFrameTable10 (NULL,2,Txt_Followers);
|
||||
|
||||
for (NumUsr = 0;
|
||||
NumUsr < NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
/***** Get user and number of clicks *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Get user's code (row[0]) */
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
Usr_GetAllUsrDataFromUsrCod (&UsrDat);
|
||||
|
||||
/***** Show user *****/
|
||||
if (!(NumUsr % 10))
|
||||
fprintf (Gbl.F.Out,"<tr>");
|
||||
Fol_ShowFollowedOrFollowed (&UsrDat);
|
||||
if ((NumUsr % 10) == 9 || NumUsr == NumUsrs - 1)
|
||||
fprintf (Gbl.F.Out,"</tr>");
|
||||
}
|
||||
|
||||
/***** End listing *****/
|
||||
Lay_EndRoundFrameTable10 ();
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
else
|
||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||
}
|
||||
else
|
||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Show user's photo and nickname in ranking list ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Fol_ShowFollowedOrFollowed (const struct UsrData *UsrDat)
|
||||
{
|
||||
extern const char *Txt_View_public_profile;
|
||||
bool ShowPhoto;
|
||||
char PhotoURL[PATH_MAX+1];
|
||||
bool Visible = Pri_ShowIsAllowed (UsrDat->ProfileVisibility,UsrDat->UsrCod);
|
||||
|
||||
fprintf (Gbl.F.Out,"<td style=\"width:18px; height:40px;\">");
|
||||
|
||||
/***** Check if I can see the public profile *****/
|
||||
if (Visible)
|
||||
{
|
||||
/***** User's photo *****/
|
||||
ShowPhoto = Pho_ShowUsrPhotoIsAllowed (UsrDat,PhotoURL);
|
||||
Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL :
|
||||
NULL,
|
||||
"PHOTO18x24",Pho_ZOOM);
|
||||
}
|
||||
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td style=\"height:40px;>");
|
||||
|
||||
/***** Put form to go to public profile *****/
|
||||
if (Visible && UsrDat->Nickname[0])
|
||||
{
|
||||
Act_FormStart (ActSeePubPrf);
|
||||
Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
||||
Act_LinkFormSubmit (Txt_View_public_profile,"DAT_SMALL");
|
||||
Usr_RestrictLengthAndWriteName (UsrDat,8);
|
||||
fprintf (Gbl.F.Out,"</a>");
|
||||
Act_FormEnd ();
|
||||
}
|
||||
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Follow another user ***************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -168,7 +357,7 @@ void Fol_FollowUsr (void)
|
|||
char Query[256];
|
||||
bool Error;
|
||||
|
||||
/***** Get user to be removed *****/
|
||||
/***** Get user to be followed *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
if (!Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
|
@ -203,7 +392,7 @@ void Fol_UnfollowUsr (void)
|
|||
char Query[256];
|
||||
bool Error;
|
||||
|
||||
/***** Get user to be removed *****/
|
||||
/***** Get user to be unfollowed *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -40,7 +42,9 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod);
|
||||
void Fol_ShowFollowingAndFollowers (long UsrCod);
|
||||
void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat);
|
||||
void Fol_ListFollowing (void);
|
||||
void Fol_ListFollowers (void);
|
||||
|
||||
void Fol_FollowUsr (void);
|
||||
void Fol_UnfollowUsr (void);
|
||||
|
|
|
@ -240,7 +240,7 @@ bool Prf_ShowUserProfile (void)
|
|||
|
||||
/***** Show following and followers *****/
|
||||
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SYS_ADM)
|
||||
Fol_ShowFollowingAndFollowers (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
Fol_ShowFollowingAndFollowers (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td style=\"text-align:left;"
|
||||
|
|
Loading…
Reference in New Issue