diff --git a/swad_action.c b/swad_action.c index 1da249d0..9261a673 100644 --- a/swad_action.c +++ b/swad_action.c @@ -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 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 060af1f9..562951a1 100644 --- a/swad_action.h +++ b/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 *******************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 997657d5..513fb7a1 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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) diff --git a/swad_follow.c b/swad_follow.c index 47ac04ba..e43f8c1a 100644 --- a/swad_follow.c +++ b/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,"" @@ -100,30 +101,38 @@ void Fol_ShowFollowingAndFollowers (long UsrCod) /***** Following *****/ fprintf (Gbl.F.Out,"", - Following, The_ClassFormul[Gbl.Prefs.Theme], - Txt_Following); + Txt_Following); /***** Followers *****/ fprintf (Gbl.F.Out,"", - Followers, The_ClassFormul[Gbl.Prefs.Theme], - Txt_Followers); + Txt_Followers); /***** End table *****/ fprintf (Gbl.F.Out,"" @@ -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,""); + Fol_ShowFollowedOrFollowed (&UsrDat); + if ((NumUsr % 10) == 9 || NumUsr == NumUsrs - 1) + fprintf (Gbl.F.Out,""); + } + + /***** 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,""); + Fol_ShowFollowedOrFollowed (&UsrDat); + if ((NumUsr % 10) == 9 || NumUsr == NumUsrs - 1) + fprintf (Gbl.F.Out,""); + } + + /***** 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,"" + ""); + } + /*****************************************************************************/ /***************************** 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, diff --git a/swad_follow.h b/swad_follow.h index e1de6e7c..996ea4f3 100644 --- a/swad_follow.h +++ b/swad_follow.h @@ -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); diff --git a/swad_profile.c b/swad_profile.c index 6d3a75b2..85ac7cb2 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -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,"" "
" - "
" - "%u" - "
" + "
"); + + Act_FormStart (ActSeeFlg); + Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Following,"FOLLOW"); + fprintf (Gbl.F.Out,"%u",Following); + Act_FormEnd (); + + fprintf (Gbl.F.Out,"
" "
" - "%s" - "
" + "%s" "
" - "
" - "%u" - "
" + "
"); + + Act_FormStart (ActSeeFlr); + Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Followers,"FOLLOW"); + fprintf (Gbl.F.Out,"%u",Followers); + Act_FormEnd (); + + fprintf (Gbl.F.Out,"
" "
" - "%s" - "
" + "%s" "
"); + + /***** 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,""); + + /***** 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,""); + Act_FormEnd (); + } + + fprintf (Gbl.F.Out,"