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
|
---. ActFolUsr Follow another user
|
||||||
---. ActUnfUsr Unfollow another user
|
---. ActUnfUsr Unfollow another user
|
||||||
|
---. ActSeeFlg Show following
|
||||||
|
---. ActSeeFlr Show followers
|
||||||
|
|
||||||
Messages:
|
Messages:
|
||||||
794. ActSeeNtf Show my recent notifications
|
794. ActSeeNtf Show my recent notifications
|
||||||
795. ActSeeAnn Show global announcements
|
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},
|
/* 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},
|
/* 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 ******************************************************************
|
// TabMsg ******************************************************************
|
||||||
// Actions in menu:
|
// Actions in menu:
|
||||||
|
@ -4084,6 +4089,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
||||||
ActCalNumFilVie, // #1409
|
ActCalNumFilVie, // #1409
|
||||||
ActFolUsr, // #1410
|
ActFolUsr, // #1410
|
||||||
ActUnfUsr, // #1411
|
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
|
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
|
#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 ActFolUsr (ActChgNumRowFooGrp+106)
|
||||||
#define ActUnfUsr (ActChgNumRowFooGrp+107)
|
#define ActUnfUsr (ActChgNumRowFooGrp+107)
|
||||||
|
#define ActSeeFlg (ActChgNumRowFooGrp+108)
|
||||||
|
#define ActSeeFlr (ActChgNumRowFooGrp+109)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************* Messages tab ********************************/
|
/******************************* Messages tab ********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
// Actions in menu
|
// Actions in menu
|
||||||
#define ActSeeNtf (ActUnfUsr+ 1)
|
#define ActSeeNtf (ActSeeFlr+ 1)
|
||||||
#define ActSeeAnn (ActUnfUsr+ 2)
|
#define ActSeeAnn (ActSeeFlr+ 2)
|
||||||
#define ActSeeNot (ActUnfUsr+ 3)
|
#define ActSeeNot (ActSeeFlr+ 3)
|
||||||
#define ActSeeFor (ActUnfUsr+ 4)
|
#define ActSeeFor (ActSeeFlr+ 4)
|
||||||
#define ActSeeChtRms (ActUnfUsr+ 5)
|
#define ActSeeChtRms (ActSeeFlr+ 5)
|
||||||
#define ActReqMsgUsr (ActUnfUsr+ 6)
|
#define ActReqMsgUsr (ActSeeFlr+ 6)
|
||||||
#define ActSeeRcvMsg (ActUnfUsr+ 7)
|
#define ActSeeRcvMsg (ActSeeFlr+ 7)
|
||||||
#define ActSeeSntMsg (ActUnfUsr+ 8)
|
#define ActSeeSntMsg (ActSeeFlr+ 8)
|
||||||
#define ActMaiStd (ActUnfUsr+ 9)
|
#define ActMaiStd (ActSeeFlr+ 9)
|
||||||
// Secondary actions
|
// Secondary actions
|
||||||
#define ActWriAnn (ActUnfUsr+ 10)
|
#define ActWriAnn (ActSeeFlr+ 10)
|
||||||
#define ActRcvAnn (ActUnfUsr+ 11)
|
#define ActRcvAnn (ActSeeFlr+ 11)
|
||||||
#define ActRemAnn (ActUnfUsr+ 12)
|
#define ActRemAnn (ActSeeFlr+ 12)
|
||||||
#define ActShoNot (ActUnfUsr+ 13)
|
#define ActShoNot (ActSeeFlr+ 13)
|
||||||
#define ActWriNot (ActUnfUsr+ 14)
|
#define ActWriNot (ActSeeFlr+ 14)
|
||||||
#define ActRcvNot (ActUnfUsr+ 15)
|
#define ActRcvNot (ActSeeFlr+ 15)
|
||||||
#define ActHidNot (ActUnfUsr+ 16)
|
#define ActHidNot (ActSeeFlr+ 16)
|
||||||
#define ActRevNot (ActUnfUsr+ 17)
|
#define ActRevNot (ActSeeFlr+ 17)
|
||||||
#define ActRemNot (ActUnfUsr+ 18)
|
#define ActRemNot (ActSeeFlr+ 18)
|
||||||
#define ActSeeNewNtf (ActUnfUsr+ 19)
|
#define ActSeeNewNtf (ActSeeFlr+ 19)
|
||||||
#define ActMrkNtfSee (ActUnfUsr+ 20)
|
#define ActMrkNtfSee (ActSeeFlr+ 20)
|
||||||
#define ActSeeForCrsUsr (ActUnfUsr+ 21)
|
#define ActSeeForCrsUsr (ActSeeFlr+ 21)
|
||||||
#define ActSeeForCrsTch (ActUnfUsr+ 22)
|
#define ActSeeForCrsTch (ActSeeFlr+ 22)
|
||||||
#define ActSeeForDegUsr (ActUnfUsr+ 23)
|
#define ActSeeForDegUsr (ActSeeFlr+ 23)
|
||||||
#define ActSeeForDegTch (ActUnfUsr+ 24)
|
#define ActSeeForDegTch (ActSeeFlr+ 24)
|
||||||
#define ActSeeForCtrUsr (ActUnfUsr+ 25)
|
#define ActSeeForCtrUsr (ActSeeFlr+ 25)
|
||||||
#define ActSeeForCtrTch (ActUnfUsr+ 26)
|
#define ActSeeForCtrTch (ActSeeFlr+ 26)
|
||||||
#define ActSeeForInsUsr (ActUnfUsr+ 27)
|
#define ActSeeForInsUsr (ActSeeFlr+ 27)
|
||||||
#define ActSeeForInsTch (ActUnfUsr+ 28)
|
#define ActSeeForInsTch (ActSeeFlr+ 28)
|
||||||
#define ActSeeForGenUsr (ActUnfUsr+ 29)
|
#define ActSeeForGenUsr (ActSeeFlr+ 29)
|
||||||
#define ActSeeForGenTch (ActUnfUsr+ 30)
|
#define ActSeeForGenTch (ActSeeFlr+ 30)
|
||||||
#define ActSeeForSWAUsr (ActUnfUsr+ 31)
|
#define ActSeeForSWAUsr (ActSeeFlr+ 31)
|
||||||
#define ActSeeForSWATch (ActUnfUsr+ 32)
|
#define ActSeeForSWATch (ActSeeFlr+ 32)
|
||||||
#define ActSeePstForCrsUsr (ActUnfUsr+ 33)
|
#define ActSeePstForCrsUsr (ActSeeFlr+ 33)
|
||||||
#define ActSeePstForCrsTch (ActUnfUsr+ 34)
|
#define ActSeePstForCrsTch (ActSeeFlr+ 34)
|
||||||
#define ActSeePstForDegUsr (ActUnfUsr+ 35)
|
#define ActSeePstForDegUsr (ActSeeFlr+ 35)
|
||||||
#define ActSeePstForDegTch (ActUnfUsr+ 36)
|
#define ActSeePstForDegTch (ActSeeFlr+ 36)
|
||||||
#define ActSeePstForCtrUsr (ActUnfUsr+ 37)
|
#define ActSeePstForCtrUsr (ActSeeFlr+ 37)
|
||||||
#define ActSeePstForCtrTch (ActUnfUsr+ 38)
|
#define ActSeePstForCtrTch (ActSeeFlr+ 38)
|
||||||
#define ActSeePstForInsUsr (ActUnfUsr+ 39)
|
#define ActSeePstForInsUsr (ActSeeFlr+ 39)
|
||||||
#define ActSeePstForInsTch (ActUnfUsr+ 40)
|
#define ActSeePstForInsTch (ActSeeFlr+ 40)
|
||||||
#define ActSeePstForGenUsr (ActUnfUsr+ 41)
|
#define ActSeePstForGenUsr (ActSeeFlr+ 41)
|
||||||
#define ActSeePstForGenTch (ActUnfUsr+ 42)
|
#define ActSeePstForGenTch (ActSeeFlr+ 42)
|
||||||
#define ActSeePstForSWAUsr (ActUnfUsr+ 43)
|
#define ActSeePstForSWAUsr (ActSeeFlr+ 43)
|
||||||
#define ActSeePstForSWATch (ActUnfUsr+ 44)
|
#define ActSeePstForSWATch (ActSeeFlr+ 44)
|
||||||
#define ActRcvThrForCrsUsr (ActUnfUsr+ 45)
|
#define ActRcvThrForCrsUsr (ActSeeFlr+ 45)
|
||||||
#define ActRcvThrForCrsTch (ActUnfUsr+ 46)
|
#define ActRcvThrForCrsTch (ActSeeFlr+ 46)
|
||||||
#define ActRcvThrForDegUsr (ActUnfUsr+ 47)
|
#define ActRcvThrForDegUsr (ActSeeFlr+ 47)
|
||||||
#define ActRcvThrForDegTch (ActUnfUsr+ 48)
|
#define ActRcvThrForDegTch (ActSeeFlr+ 48)
|
||||||
#define ActRcvThrForCtrUsr (ActUnfUsr+ 49)
|
#define ActRcvThrForCtrUsr (ActSeeFlr+ 49)
|
||||||
#define ActRcvThrForCtrTch (ActUnfUsr+ 50)
|
#define ActRcvThrForCtrTch (ActSeeFlr+ 50)
|
||||||
#define ActRcvThrForInsUsr (ActUnfUsr+ 51)
|
#define ActRcvThrForInsUsr (ActSeeFlr+ 51)
|
||||||
#define ActRcvThrForInsTch (ActUnfUsr+ 52)
|
#define ActRcvThrForInsTch (ActSeeFlr+ 52)
|
||||||
#define ActRcvThrForGenUsr (ActUnfUsr+ 53)
|
#define ActRcvThrForGenUsr (ActSeeFlr+ 53)
|
||||||
#define ActRcvThrForGenTch (ActUnfUsr+ 54)
|
#define ActRcvThrForGenTch (ActSeeFlr+ 54)
|
||||||
#define ActRcvThrForSWAUsr (ActUnfUsr+ 55)
|
#define ActRcvThrForSWAUsr (ActSeeFlr+ 55)
|
||||||
#define ActRcvThrForSWATch (ActUnfUsr+ 56)
|
#define ActRcvThrForSWATch (ActSeeFlr+ 56)
|
||||||
#define ActRcvRepForCrsUsr (ActUnfUsr+ 57)
|
#define ActRcvRepForCrsUsr (ActSeeFlr+ 57)
|
||||||
#define ActRcvRepForCrsTch (ActUnfUsr+ 58)
|
#define ActRcvRepForCrsTch (ActSeeFlr+ 58)
|
||||||
#define ActRcvRepForDegUsr (ActUnfUsr+ 59)
|
#define ActRcvRepForDegUsr (ActSeeFlr+ 59)
|
||||||
#define ActRcvRepForDegTch (ActUnfUsr+ 60)
|
#define ActRcvRepForDegTch (ActSeeFlr+ 60)
|
||||||
#define ActRcvRepForCtrUsr (ActUnfUsr+ 61)
|
#define ActRcvRepForCtrUsr (ActSeeFlr+ 61)
|
||||||
#define ActRcvRepForCtrTch (ActUnfUsr+ 62)
|
#define ActRcvRepForCtrTch (ActSeeFlr+ 62)
|
||||||
#define ActRcvRepForInsUsr (ActUnfUsr+ 63)
|
#define ActRcvRepForInsUsr (ActSeeFlr+ 63)
|
||||||
#define ActRcvRepForInsTch (ActUnfUsr+ 64)
|
#define ActRcvRepForInsTch (ActSeeFlr+ 64)
|
||||||
#define ActRcvRepForGenUsr (ActUnfUsr+ 65)
|
#define ActRcvRepForGenUsr (ActSeeFlr+ 65)
|
||||||
#define ActRcvRepForGenTch (ActUnfUsr+ 66)
|
#define ActRcvRepForGenTch (ActSeeFlr+ 66)
|
||||||
#define ActRcvRepForSWAUsr (ActUnfUsr+ 67)
|
#define ActRcvRepForSWAUsr (ActSeeFlr+ 67)
|
||||||
#define ActRcvRepForSWATch (ActUnfUsr+ 68)
|
#define ActRcvRepForSWATch (ActSeeFlr+ 68)
|
||||||
#define ActReqDelThrCrsUsr (ActUnfUsr+ 69)
|
#define ActReqDelThrCrsUsr (ActSeeFlr+ 69)
|
||||||
#define ActReqDelThrCrsTch (ActUnfUsr+ 70)
|
#define ActReqDelThrCrsTch (ActSeeFlr+ 70)
|
||||||
#define ActReqDelThrDegUsr (ActUnfUsr+ 71)
|
#define ActReqDelThrDegUsr (ActSeeFlr+ 71)
|
||||||
#define ActReqDelThrDegTch (ActUnfUsr+ 72)
|
#define ActReqDelThrDegTch (ActSeeFlr+ 72)
|
||||||
#define ActReqDelThrCtrUsr (ActUnfUsr+ 73)
|
#define ActReqDelThrCtrUsr (ActSeeFlr+ 73)
|
||||||
#define ActReqDelThrCtrTch (ActUnfUsr+ 74)
|
#define ActReqDelThrCtrTch (ActSeeFlr+ 74)
|
||||||
#define ActReqDelThrInsUsr (ActUnfUsr+ 75)
|
#define ActReqDelThrInsUsr (ActSeeFlr+ 75)
|
||||||
#define ActReqDelThrInsTch (ActUnfUsr+ 76)
|
#define ActReqDelThrInsTch (ActSeeFlr+ 76)
|
||||||
#define ActReqDelThrGenUsr (ActUnfUsr+ 77)
|
#define ActReqDelThrGenUsr (ActSeeFlr+ 77)
|
||||||
#define ActReqDelThrGenTch (ActUnfUsr+ 78)
|
#define ActReqDelThrGenTch (ActSeeFlr+ 78)
|
||||||
#define ActReqDelThrSWAUsr (ActUnfUsr+ 79)
|
#define ActReqDelThrSWAUsr (ActSeeFlr+ 79)
|
||||||
#define ActReqDelThrSWATch (ActUnfUsr+ 80)
|
#define ActReqDelThrSWATch (ActSeeFlr+ 80)
|
||||||
#define ActDelThrForCrsUsr (ActUnfUsr+ 81)
|
#define ActDelThrForCrsUsr (ActSeeFlr+ 81)
|
||||||
#define ActDelThrForCrsTch (ActUnfUsr+ 82)
|
#define ActDelThrForCrsTch (ActSeeFlr+ 82)
|
||||||
#define ActDelThrForDegUsr (ActUnfUsr+ 83)
|
#define ActDelThrForDegUsr (ActSeeFlr+ 83)
|
||||||
#define ActDelThrForDegTch (ActUnfUsr+ 84)
|
#define ActDelThrForDegTch (ActSeeFlr+ 84)
|
||||||
#define ActDelThrForCtrUsr (ActUnfUsr+ 85)
|
#define ActDelThrForCtrUsr (ActSeeFlr+ 85)
|
||||||
#define ActDelThrForCtrTch (ActUnfUsr+ 86)
|
#define ActDelThrForCtrTch (ActSeeFlr+ 86)
|
||||||
#define ActDelThrForInsUsr (ActUnfUsr+ 87)
|
#define ActDelThrForInsUsr (ActSeeFlr+ 87)
|
||||||
#define ActDelThrForInsTch (ActUnfUsr+ 88)
|
#define ActDelThrForInsTch (ActSeeFlr+ 88)
|
||||||
#define ActDelThrForGenUsr (ActUnfUsr+ 89)
|
#define ActDelThrForGenUsr (ActSeeFlr+ 89)
|
||||||
#define ActDelThrForGenTch (ActUnfUsr+ 90)
|
#define ActDelThrForGenTch (ActSeeFlr+ 90)
|
||||||
#define ActDelThrForSWAUsr (ActUnfUsr+ 91)
|
#define ActDelThrForSWAUsr (ActSeeFlr+ 91)
|
||||||
#define ActDelThrForSWATch (ActUnfUsr+ 92)
|
#define ActDelThrForSWATch (ActSeeFlr+ 92)
|
||||||
#define ActCutThrForCrsUsr (ActUnfUsr+ 93)
|
#define ActCutThrForCrsUsr (ActSeeFlr+ 93)
|
||||||
#define ActCutThrForCrsTch (ActUnfUsr+ 94)
|
#define ActCutThrForCrsTch (ActSeeFlr+ 94)
|
||||||
#define ActCutThrForDegUsr (ActUnfUsr+ 95)
|
#define ActCutThrForDegUsr (ActSeeFlr+ 95)
|
||||||
#define ActCutThrForDegTch (ActUnfUsr+ 96)
|
#define ActCutThrForDegTch (ActSeeFlr+ 96)
|
||||||
#define ActCutThrForCtrUsr (ActUnfUsr+ 97)
|
#define ActCutThrForCtrUsr (ActSeeFlr+ 97)
|
||||||
#define ActCutThrForCtrTch (ActUnfUsr+ 98)
|
#define ActCutThrForCtrTch (ActSeeFlr+ 98)
|
||||||
#define ActCutThrForInsUsr (ActUnfUsr+ 99)
|
#define ActCutThrForInsUsr (ActSeeFlr+ 99)
|
||||||
#define ActCutThrForInsTch (ActUnfUsr+100)
|
#define ActCutThrForInsTch (ActSeeFlr+100)
|
||||||
#define ActCutThrForGenUsr (ActUnfUsr+101)
|
#define ActCutThrForGenUsr (ActSeeFlr+101)
|
||||||
#define ActCutThrForGenTch (ActUnfUsr+102)
|
#define ActCutThrForGenTch (ActSeeFlr+102)
|
||||||
#define ActCutThrForSWAUsr (ActUnfUsr+103)
|
#define ActCutThrForSWAUsr (ActSeeFlr+103)
|
||||||
#define ActCutThrForSWATch (ActUnfUsr+104)
|
#define ActCutThrForSWATch (ActSeeFlr+104)
|
||||||
#define ActPasThrForCrsUsr (ActUnfUsr+105)
|
#define ActPasThrForCrsUsr (ActSeeFlr+105)
|
||||||
#define ActPasThrForCrsTch (ActUnfUsr+106)
|
#define ActPasThrForCrsTch (ActSeeFlr+106)
|
||||||
#define ActPasThrForDegUsr (ActUnfUsr+107)
|
#define ActPasThrForDegUsr (ActSeeFlr+107)
|
||||||
#define ActPasThrForDegTch (ActUnfUsr+108)
|
#define ActPasThrForDegTch (ActSeeFlr+108)
|
||||||
#define ActPasThrForCtrUsr (ActUnfUsr+109)
|
#define ActPasThrForCtrUsr (ActSeeFlr+109)
|
||||||
#define ActPasThrForCtrTch (ActUnfUsr+110)
|
#define ActPasThrForCtrTch (ActSeeFlr+110)
|
||||||
#define ActPasThrForInsUsr (ActUnfUsr+111)
|
#define ActPasThrForInsUsr (ActSeeFlr+111)
|
||||||
#define ActPasThrForInsTch (ActUnfUsr+112)
|
#define ActPasThrForInsTch (ActSeeFlr+112)
|
||||||
#define ActPasThrForGenUsr (ActUnfUsr+113)
|
#define ActPasThrForGenUsr (ActSeeFlr+113)
|
||||||
#define ActPasThrForGenTch (ActUnfUsr+114)
|
#define ActPasThrForGenTch (ActSeeFlr+114)
|
||||||
#define ActPasThrForSWAUsr (ActUnfUsr+115)
|
#define ActPasThrForSWAUsr (ActSeeFlr+115)
|
||||||
#define ActPasThrForSWATch (ActUnfUsr+116)
|
#define ActPasThrForSWATch (ActSeeFlr+116)
|
||||||
#define ActDelPstForCrsUsr (ActUnfUsr+117)
|
#define ActDelPstForCrsUsr (ActSeeFlr+117)
|
||||||
#define ActDelPstForCrsTch (ActUnfUsr+118)
|
#define ActDelPstForCrsTch (ActSeeFlr+118)
|
||||||
#define ActDelPstForDegUsr (ActUnfUsr+119)
|
#define ActDelPstForDegUsr (ActSeeFlr+119)
|
||||||
#define ActDelPstForDegTch (ActUnfUsr+120)
|
#define ActDelPstForDegTch (ActSeeFlr+120)
|
||||||
#define ActDelPstForCtrUsr (ActUnfUsr+121)
|
#define ActDelPstForCtrUsr (ActSeeFlr+121)
|
||||||
#define ActDelPstForCtrTch (ActUnfUsr+122)
|
#define ActDelPstForCtrTch (ActSeeFlr+122)
|
||||||
#define ActDelPstForInsUsr (ActUnfUsr+123)
|
#define ActDelPstForInsUsr (ActSeeFlr+123)
|
||||||
#define ActDelPstForInsTch (ActUnfUsr+124)
|
#define ActDelPstForInsTch (ActSeeFlr+124)
|
||||||
#define ActDelPstForGenUsr (ActUnfUsr+125)
|
#define ActDelPstForGenUsr (ActSeeFlr+125)
|
||||||
#define ActDelPstForGenTch (ActUnfUsr+126)
|
#define ActDelPstForGenTch (ActSeeFlr+126)
|
||||||
#define ActDelPstForSWAUsr (ActUnfUsr+127)
|
#define ActDelPstForSWAUsr (ActSeeFlr+127)
|
||||||
#define ActDelPstForSWATch (ActUnfUsr+128)
|
#define ActDelPstForSWATch (ActSeeFlr+128)
|
||||||
#define ActEnbPstForCrsUsr (ActUnfUsr+129)
|
#define ActEnbPstForCrsUsr (ActSeeFlr+129)
|
||||||
#define ActEnbPstForCrsTch (ActUnfUsr+130)
|
#define ActEnbPstForCrsTch (ActSeeFlr+130)
|
||||||
#define ActEnbPstForDegUsr (ActUnfUsr+131)
|
#define ActEnbPstForDegUsr (ActSeeFlr+131)
|
||||||
#define ActEnbPstForDegTch (ActUnfUsr+132)
|
#define ActEnbPstForDegTch (ActSeeFlr+132)
|
||||||
#define ActEnbPstForCtrUsr (ActUnfUsr+133)
|
#define ActEnbPstForCtrUsr (ActSeeFlr+133)
|
||||||
#define ActEnbPstForCtrTch (ActUnfUsr+134)
|
#define ActEnbPstForCtrTch (ActSeeFlr+134)
|
||||||
#define ActEnbPstForInsUsr (ActUnfUsr+135)
|
#define ActEnbPstForInsUsr (ActSeeFlr+135)
|
||||||
#define ActEnbPstForInsTch (ActUnfUsr+136)
|
#define ActEnbPstForInsTch (ActSeeFlr+136)
|
||||||
#define ActEnbPstForGenUsr (ActUnfUsr+137)
|
#define ActEnbPstForGenUsr (ActSeeFlr+137)
|
||||||
#define ActEnbPstForGenTch (ActUnfUsr+138)
|
#define ActEnbPstForGenTch (ActSeeFlr+138)
|
||||||
#define ActEnbPstForSWAUsr (ActUnfUsr+139)
|
#define ActEnbPstForSWAUsr (ActSeeFlr+139)
|
||||||
#define ActEnbPstForSWATch (ActUnfUsr+140)
|
#define ActEnbPstForSWATch (ActSeeFlr+140)
|
||||||
#define ActDisPstForCrsUsr (ActUnfUsr+141)
|
#define ActDisPstForCrsUsr (ActSeeFlr+141)
|
||||||
#define ActDisPstForCrsTch (ActUnfUsr+142)
|
#define ActDisPstForCrsTch (ActSeeFlr+142)
|
||||||
#define ActDisPstForDegUsr (ActUnfUsr+143)
|
#define ActDisPstForDegUsr (ActSeeFlr+143)
|
||||||
#define ActDisPstForDegTch (ActUnfUsr+144)
|
#define ActDisPstForDegTch (ActSeeFlr+144)
|
||||||
#define ActDisPstForCtrUsr (ActUnfUsr+145)
|
#define ActDisPstForCtrUsr (ActSeeFlr+145)
|
||||||
#define ActDisPstForCtrTch (ActUnfUsr+146)
|
#define ActDisPstForCtrTch (ActSeeFlr+146)
|
||||||
#define ActDisPstForInsUsr (ActUnfUsr+147)
|
#define ActDisPstForInsUsr (ActSeeFlr+147)
|
||||||
#define ActDisPstForInsTch (ActUnfUsr+148)
|
#define ActDisPstForInsTch (ActSeeFlr+148)
|
||||||
#define ActDisPstForGenUsr (ActUnfUsr+149)
|
#define ActDisPstForGenUsr (ActSeeFlr+149)
|
||||||
#define ActDisPstForGenTch (ActUnfUsr+150)
|
#define ActDisPstForGenTch (ActSeeFlr+150)
|
||||||
#define ActDisPstForSWAUsr (ActUnfUsr+151)
|
#define ActDisPstForSWAUsr (ActSeeFlr+151)
|
||||||
#define ActDisPstForSWATch (ActUnfUsr+152)
|
#define ActDisPstForSWATch (ActSeeFlr+152)
|
||||||
#define ActRcvMsgUsr (ActUnfUsr+153)
|
#define ActRcvMsgUsr (ActSeeFlr+153)
|
||||||
#define ActReqDelAllSntMsg (ActUnfUsr+154)
|
#define ActReqDelAllSntMsg (ActSeeFlr+154)
|
||||||
#define ActReqDelAllRcvMsg (ActUnfUsr+155)
|
#define ActReqDelAllRcvMsg (ActSeeFlr+155)
|
||||||
#define ActDelAllSntMsg (ActUnfUsr+156)
|
#define ActDelAllSntMsg (ActSeeFlr+156)
|
||||||
#define ActDelAllRcvMsg (ActUnfUsr+157)
|
#define ActDelAllRcvMsg (ActSeeFlr+157)
|
||||||
#define ActDelSntMsg (ActUnfUsr+158)
|
#define ActDelSntMsg (ActSeeFlr+158)
|
||||||
#define ActDelRcvMsg (ActUnfUsr+159)
|
#define ActDelRcvMsg (ActSeeFlr+159)
|
||||||
#define ActExpSntMsg (ActUnfUsr+160)
|
#define ActExpSntMsg (ActSeeFlr+160)
|
||||||
#define ActExpRcvMsg (ActUnfUsr+161)
|
#define ActExpRcvMsg (ActSeeFlr+161)
|
||||||
#define ActConSntMsg (ActUnfUsr+162)
|
#define ActConSntMsg (ActSeeFlr+162)
|
||||||
#define ActConRcvMsg (ActUnfUsr+163)
|
#define ActConRcvMsg (ActSeeFlr+163)
|
||||||
#define ActLstBanUsr (ActUnfUsr+164)
|
#define ActLstBanUsr (ActSeeFlr+164)
|
||||||
#define ActBanUsrMsg (ActUnfUsr+165)
|
#define ActBanUsrMsg (ActSeeFlr+165)
|
||||||
#define ActUnbUsrMsg (ActUnfUsr+166)
|
#define ActUnbUsrMsg (ActSeeFlr+166)
|
||||||
#define ActUnbUsrLst (ActUnfUsr+167)
|
#define ActUnbUsrLst (ActSeeFlr+167)
|
||||||
#define ActCht (ActUnfUsr+168)
|
#define ActCht (ActSeeFlr+168)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Statistics tab *******************************/
|
/****************************** Statistics tab *******************************/
|
||||||
|
|
|
@ -103,11 +103,12 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** 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:
|
// 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
|
// 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.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.3: Mar 18, 2015 Changes in record cards. (183017 lines)
|
||||||
Version 14.96.2: Mar 18, 2015 Changes in record cards. (183011 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_GetNumFollowing (long UsrCod);
|
||||||
static unsigned Fol_GetNumFollowers (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 ***************/
|
/*************** 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 *********************/
|
/**************** 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 *The_ClassFormul[The_NUM_THEMES];
|
||||||
extern const char *Txt_Following;
|
extern const char *Txt_Following;
|
||||||
extern const char *Txt_Followers;
|
extern const char *Txt_Followers;
|
||||||
unsigned Following = Fol_GetNumFollowing (UsrCod);
|
unsigned Following = Fol_GetNumFollowing (UsrDat->UsrCod);
|
||||||
unsigned Followers = Fol_GetNumFollowers (UsrCod);
|
unsigned Followers = Fol_GetNumFollowers (UsrDat->UsrCod);
|
||||||
|
|
||||||
/***** Start table *****/
|
/***** Start table *****/
|
||||||
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_4\" style=\"margin:0 auto;\">"
|
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_4\" style=\"margin:0 auto;\">"
|
||||||
|
@ -100,30 +101,38 @@ void Fol_ShowFollowingAndFollowers (long UsrCod)
|
||||||
/***** Following *****/
|
/***** Following *****/
|
||||||
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
||||||
" text-align:center; vertical-align:top;\">"
|
" text-align:center; vertical-align:top;\">"
|
||||||
"<div class=\"FOLLOW\">"
|
"<div class=\"FOLLOW\">");
|
||||||
"%u"
|
|
||||||
"</div>"
|
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\">"
|
"<div class=\"%s\">"
|
||||||
"%s"
|
"%s</div>"
|
||||||
"</div>"
|
|
||||||
"</td>",
|
"</td>",
|
||||||
Following,
|
|
||||||
The_ClassFormul[Gbl.Prefs.Theme],
|
The_ClassFormul[Gbl.Prefs.Theme],
|
||||||
Txt_Following);
|
Txt_Following);
|
||||||
|
|
||||||
/***** Followers *****/
|
/***** Followers *****/
|
||||||
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
fprintf (Gbl.F.Out,"<td style=\"min-width:100px;"
|
||||||
" text-align:center; vertical-align:top;\">"
|
" text-align:center; vertical-align:top;\">"
|
||||||
"<div class=\"FOLLOW\">"
|
"<div class=\"FOLLOW\">");
|
||||||
"%u"
|
|
||||||
"</div>"
|
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\">"
|
"<div class=\"%s\">"
|
||||||
"%s"
|
"%s</div>"
|
||||||
"</div>"
|
|
||||||
"</td>",
|
"</td>",
|
||||||
Followers,
|
|
||||||
The_ClassFormul[Gbl.Prefs.Theme],
|
The_ClassFormul[Gbl.Prefs.Theme],
|
||||||
Txt_Followers);
|
Txt_Followers);
|
||||||
|
|
||||||
/***** End table *****/
|
/***** End table *****/
|
||||||
fprintf (Gbl.F.Out,"</tr>"
|
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");
|
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 ***************************/
|
/***************************** Follow another user ***************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -168,7 +357,7 @@ void Fol_FollowUsr (void)
|
||||||
char Query[256];
|
char Query[256];
|
||||||
bool Error;
|
bool Error;
|
||||||
|
|
||||||
/***** Get user to be removed *****/
|
/***** Get user to be followed *****/
|
||||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||||
{
|
{
|
||||||
if (!Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
if (!Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
|
@ -203,7 +392,7 @@ void Fol_UnfollowUsr (void)
|
||||||
char Query[256];
|
char Query[256];
|
||||||
bool Error;
|
bool Error;
|
||||||
|
|
||||||
/***** Get user to be removed *****/
|
/***** Get user to be unfollowed *****/
|
||||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||||
{
|
{
|
||||||
if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
/********************************** Headers **********************************/
|
/********************************** Headers **********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include "swad_user.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -40,7 +42,9 @@
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod);
|
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_FollowUsr (void);
|
||||||
void Fol_UnfollowUsr (void);
|
void Fol_UnfollowUsr (void);
|
||||||
|
|
|
@ -240,7 +240,7 @@ bool Prf_ShowUserProfile (void)
|
||||||
|
|
||||||
/***** Show following and followers *****/
|
/***** Show following and followers *****/
|
||||||
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SYS_ADM)
|
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>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"<td style=\"text-align:left;"
|
"<td style=\"text-align:left;"
|
||||||
|
|
Loading…
Reference in New Issue