Version 15.132

This commit is contained in:
Antonio Cañas Vargas 2016-01-27 22:31:36 +01:00
parent 88d58c5583
commit 9bc3e2e446
11 changed files with 269 additions and 162 deletions

View File

@ -1222,6 +1222,8 @@ CREATE TABLE IF NOT EXISTS usr_data (
INDEX(IconSet),
INDEX(Language),
INDEX(FirstDayOfWeek),
INDEX(PhotoVisibility),
INDEX(ProfileVisibility),
INDEX(CtyCod),
INDEX(InsCtyCod),
INDEX(InsCod),

View File

@ -1038,6 +1038,7 @@ Social:
869. ActCalNumForPst Calculate number of forum posts and store into user's figures
870. ActCalNumMsgSnt Calculate number of messages sent from log and store into user's figures
NEW.....871. ActWhoFol Suggest list of users to follow
871. ActFolUsr Follow another user
872. ActUnfUsr Unfollow another user
873. ActSeeFlg Show following
@ -2374,6 +2375,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActCalNumForPst */{1408,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_CalculateNumForPst ,NULL},
/* ActCalNumMsgSnt */{1407,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_CalculateNumMsgSnt ,NULL},
/* ActWhoFol */{1520,-1,TabSoc,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_SuggestWhoToFollow ,NULL},
/* ActFolUsr */{1410,-1,TabSoc,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_FollowUsr ,NULL},
/* ActUnfUsr */{1411,-1,TabSoc,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_UnfollowUsr ,NULL},
/* ActSeeFlg */{1412,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Fol_ListFollowing ,NULL},
@ -4233,6 +4235,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActUnfSocComGbl, // #1517
ActFavSocComUsr, // #1518
ActUnfSocComUsr, // #1519
ActWhoFol, // #1520
};
/*****************************************************************************/

View File

@ -71,9 +71,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 (1+9+52+15+90+72+67+205+183+143+171+36+27+82)
#define Act_NUM_ACTIONS (1+9+52+15+90+72+67+205+183+143+172+36+27+82)
#define Act_MAX_ACTION_COD 1519
#define Act_MAX_ACTION_COD 1520
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -1080,145 +1080,146 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActCalNumForPst (ActLstClk+ 33)
#define ActCalNumMsgSnt (ActLstClk+ 34)
#define ActFolUsr (ActLstClk+ 35)
#define ActUnfUsr (ActLstClk+ 36)
#define ActSeeFlg (ActLstClk+ 37)
#define ActSeeFlr (ActLstClk+ 38)
#define ActWhoFol (ActLstClk+ 35)
#define ActFolUsr (ActLstClk+ 36)
#define ActUnfUsr (ActLstClk+ 37)
#define ActSeeFlg (ActLstClk+ 38)
#define ActSeeFlr (ActLstClk+ 39)
#define ActSeeForCrsUsr (ActLstClk+ 39)
#define ActSeeForCrsTch (ActLstClk+ 40)
#define ActSeeForDegUsr (ActLstClk+ 41)
#define ActSeeForDegTch (ActLstClk+ 42)
#define ActSeeForCtrUsr (ActLstClk+ 43)
#define ActSeeForCtrTch (ActLstClk+ 44)
#define ActSeeForInsUsr (ActLstClk+ 45)
#define ActSeeForInsTch (ActLstClk+ 46)
#define ActSeeForGenUsr (ActLstClk+ 47)
#define ActSeeForGenTch (ActLstClk+ 48)
#define ActSeeForSWAUsr (ActLstClk+ 49)
#define ActSeeForSWATch (ActLstClk+ 50)
#define ActSeePstForCrsUsr (ActLstClk+ 51)
#define ActSeePstForCrsTch (ActLstClk+ 52)
#define ActSeePstForDegUsr (ActLstClk+ 53)
#define ActSeePstForDegTch (ActLstClk+ 54)
#define ActSeePstForCtrUsr (ActLstClk+ 55)
#define ActSeePstForCtrTch (ActLstClk+ 56)
#define ActSeePstForInsUsr (ActLstClk+ 57)
#define ActSeePstForInsTch (ActLstClk+ 58)
#define ActSeePstForGenUsr (ActLstClk+ 59)
#define ActSeePstForGenTch (ActLstClk+ 60)
#define ActSeePstForSWAUsr (ActLstClk+ 61)
#define ActSeePstForSWATch (ActLstClk+ 62)
#define ActRcvThrForCrsUsr (ActLstClk+ 63)
#define ActRcvThrForCrsTch (ActLstClk+ 64)
#define ActRcvThrForDegUsr (ActLstClk+ 65)
#define ActRcvThrForDegTch (ActLstClk+ 66)
#define ActRcvThrForCtrUsr (ActLstClk+ 67)
#define ActRcvThrForCtrTch (ActLstClk+ 68)
#define ActRcvThrForInsUsr (ActLstClk+ 69)
#define ActRcvThrForInsTch (ActLstClk+ 70)
#define ActRcvThrForGenUsr (ActLstClk+ 71)
#define ActRcvThrForGenTch (ActLstClk+ 72)
#define ActRcvThrForSWAUsr (ActLstClk+ 73)
#define ActRcvThrForSWATch (ActLstClk+ 74)
#define ActRcvRepForCrsUsr (ActLstClk+ 75)
#define ActRcvRepForCrsTch (ActLstClk+ 76)
#define ActRcvRepForDegUsr (ActLstClk+ 77)
#define ActRcvRepForDegTch (ActLstClk+ 78)
#define ActRcvRepForCtrUsr (ActLstClk+ 79)
#define ActRcvRepForCtrTch (ActLstClk+ 80)
#define ActRcvRepForInsUsr (ActLstClk+ 81)
#define ActRcvRepForInsTch (ActLstClk+ 82)
#define ActRcvRepForGenUsr (ActLstClk+ 83)
#define ActRcvRepForGenTch (ActLstClk+ 84)
#define ActRcvRepForSWAUsr (ActLstClk+ 85)
#define ActRcvRepForSWATch (ActLstClk+ 86)
#define ActReqDelThrCrsUsr (ActLstClk+ 87)
#define ActReqDelThrCrsTch (ActLstClk+ 88)
#define ActReqDelThrDegUsr (ActLstClk+ 89)
#define ActReqDelThrDegTch (ActLstClk+ 90)
#define ActReqDelThrCtrUsr (ActLstClk+ 91)
#define ActReqDelThrCtrTch (ActLstClk+ 92)
#define ActReqDelThrInsUsr (ActLstClk+ 93)
#define ActReqDelThrInsTch (ActLstClk+ 94)
#define ActReqDelThrGenUsr (ActLstClk+ 95)
#define ActReqDelThrGenTch (ActLstClk+ 96)
#define ActReqDelThrSWAUsr (ActLstClk+ 97)
#define ActReqDelThrSWATch (ActLstClk+ 98)
#define ActDelThrForCrsUsr (ActLstClk+ 99)
#define ActDelThrForCrsTch (ActLstClk+100)
#define ActDelThrForDegUsr (ActLstClk+101)
#define ActDelThrForDegTch (ActLstClk+102)
#define ActDelThrForCtrUsr (ActLstClk+103)
#define ActDelThrForCtrTch (ActLstClk+104)
#define ActDelThrForInsUsr (ActLstClk+105)
#define ActDelThrForInsTch (ActLstClk+106)
#define ActDelThrForGenUsr (ActLstClk+107)
#define ActDelThrForGenTch (ActLstClk+108)
#define ActDelThrForSWAUsr (ActLstClk+109)
#define ActDelThrForSWATch (ActLstClk+110)
#define ActCutThrForCrsUsr (ActLstClk+111)
#define ActCutThrForCrsTch (ActLstClk+112)
#define ActCutThrForDegUsr (ActLstClk+113)
#define ActCutThrForDegTch (ActLstClk+114)
#define ActCutThrForCtrUsr (ActLstClk+115)
#define ActCutThrForCtrTch (ActLstClk+116)
#define ActCutThrForInsUsr (ActLstClk+117)
#define ActCutThrForInsTch (ActLstClk+118)
#define ActCutThrForGenUsr (ActLstClk+119)
#define ActCutThrForGenTch (ActLstClk+120)
#define ActCutThrForSWAUsr (ActLstClk+121)
#define ActCutThrForSWATch (ActLstClk+122)
#define ActPasThrForCrsUsr (ActLstClk+123)
#define ActPasThrForCrsTch (ActLstClk+124)
#define ActPasThrForDegUsr (ActLstClk+125)
#define ActPasThrForDegTch (ActLstClk+126)
#define ActPasThrForCtrUsr (ActLstClk+127)
#define ActPasThrForCtrTch (ActLstClk+128)
#define ActPasThrForInsUsr (ActLstClk+129)
#define ActPasThrForInsTch (ActLstClk+130)
#define ActPasThrForGenUsr (ActLstClk+131)
#define ActPasThrForGenTch (ActLstClk+132)
#define ActPasThrForSWAUsr (ActLstClk+133)
#define ActPasThrForSWATch (ActLstClk+134)
#define ActDelPstForCrsUsr (ActLstClk+135)
#define ActDelPstForCrsTch (ActLstClk+136)
#define ActDelPstForDegUsr (ActLstClk+137)
#define ActDelPstForDegTch (ActLstClk+138)
#define ActDelPstForCtrUsr (ActLstClk+139)
#define ActDelPstForCtrTch (ActLstClk+140)
#define ActDelPstForInsUsr (ActLstClk+141)
#define ActDelPstForInsTch (ActLstClk+142)
#define ActDelPstForGenUsr (ActLstClk+143)
#define ActDelPstForGenTch (ActLstClk+144)
#define ActDelPstForSWAUsr (ActLstClk+145)
#define ActDelPstForSWATch (ActLstClk+146)
#define ActEnbPstForCrsUsr (ActLstClk+147)
#define ActEnbPstForCrsTch (ActLstClk+148)
#define ActEnbPstForDegUsr (ActLstClk+149)
#define ActEnbPstForDegTch (ActLstClk+150)
#define ActEnbPstForCtrUsr (ActLstClk+151)
#define ActEnbPstForCtrTch (ActLstClk+152)
#define ActEnbPstForInsUsr (ActLstClk+153)
#define ActEnbPstForInsTch (ActLstClk+154)
#define ActEnbPstForGenUsr (ActLstClk+155)
#define ActEnbPstForGenTch (ActLstClk+156)
#define ActEnbPstForSWAUsr (ActLstClk+157)
#define ActEnbPstForSWATch (ActLstClk+158)
#define ActDisPstForCrsUsr (ActLstClk+159)
#define ActDisPstForCrsTch (ActLstClk+160)
#define ActDisPstForDegUsr (ActLstClk+161)
#define ActDisPstForDegTch (ActLstClk+162)
#define ActDisPstForCtrUsr (ActLstClk+163)
#define ActDisPstForCtrTch (ActLstClk+164)
#define ActDisPstForInsUsr (ActLstClk+165)
#define ActDisPstForInsTch (ActLstClk+166)
#define ActDisPstForGenUsr (ActLstClk+167)
#define ActDisPstForGenTch (ActLstClk+168)
#define ActDisPstForSWAUsr (ActLstClk+169)
#define ActDisPstForSWATch (ActLstClk+170)
#define ActSeeForCrsUsr (ActLstClk+ 40)
#define ActSeeForCrsTch (ActLstClk+ 41)
#define ActSeeForDegUsr (ActLstClk+ 42)
#define ActSeeForDegTch (ActLstClk+ 43)
#define ActSeeForCtrUsr (ActLstClk+ 44)
#define ActSeeForCtrTch (ActLstClk+ 45)
#define ActSeeForInsUsr (ActLstClk+ 46)
#define ActSeeForInsTch (ActLstClk+ 47)
#define ActSeeForGenUsr (ActLstClk+ 48)
#define ActSeeForGenTch (ActLstClk+ 49)
#define ActSeeForSWAUsr (ActLstClk+ 50)
#define ActSeeForSWATch (ActLstClk+ 51)
#define ActSeePstForCrsUsr (ActLstClk+ 52)
#define ActSeePstForCrsTch (ActLstClk+ 53)
#define ActSeePstForDegUsr (ActLstClk+ 54)
#define ActSeePstForDegTch (ActLstClk+ 55)
#define ActSeePstForCtrUsr (ActLstClk+ 56)
#define ActSeePstForCtrTch (ActLstClk+ 57)
#define ActSeePstForInsUsr (ActLstClk+ 58)
#define ActSeePstForInsTch (ActLstClk+ 59)
#define ActSeePstForGenUsr (ActLstClk+ 60)
#define ActSeePstForGenTch (ActLstClk+ 61)
#define ActSeePstForSWAUsr (ActLstClk+ 62)
#define ActSeePstForSWATch (ActLstClk+ 63)
#define ActRcvThrForCrsUsr (ActLstClk+ 64)
#define ActRcvThrForCrsTch (ActLstClk+ 65)
#define ActRcvThrForDegUsr (ActLstClk+ 66)
#define ActRcvThrForDegTch (ActLstClk+ 67)
#define ActRcvThrForCtrUsr (ActLstClk+ 68)
#define ActRcvThrForCtrTch (ActLstClk+ 69)
#define ActRcvThrForInsUsr (ActLstClk+ 70)
#define ActRcvThrForInsTch (ActLstClk+ 71)
#define ActRcvThrForGenUsr (ActLstClk+ 72)
#define ActRcvThrForGenTch (ActLstClk+ 73)
#define ActRcvThrForSWAUsr (ActLstClk+ 74)
#define ActRcvThrForSWATch (ActLstClk+ 75)
#define ActRcvRepForCrsUsr (ActLstClk+ 76)
#define ActRcvRepForCrsTch (ActLstClk+ 77)
#define ActRcvRepForDegUsr (ActLstClk+ 78)
#define ActRcvRepForDegTch (ActLstClk+ 79)
#define ActRcvRepForCtrUsr (ActLstClk+ 80)
#define ActRcvRepForCtrTch (ActLstClk+ 81)
#define ActRcvRepForInsUsr (ActLstClk+ 82)
#define ActRcvRepForInsTch (ActLstClk+ 83)
#define ActRcvRepForGenUsr (ActLstClk+ 84)
#define ActRcvRepForGenTch (ActLstClk+ 85)
#define ActRcvRepForSWAUsr (ActLstClk+ 86)
#define ActRcvRepForSWATch (ActLstClk+ 87)
#define ActReqDelThrCrsUsr (ActLstClk+ 88)
#define ActReqDelThrCrsTch (ActLstClk+ 89)
#define ActReqDelThrDegUsr (ActLstClk+ 90)
#define ActReqDelThrDegTch (ActLstClk+ 91)
#define ActReqDelThrCtrUsr (ActLstClk+ 92)
#define ActReqDelThrCtrTch (ActLstClk+ 93)
#define ActReqDelThrInsUsr (ActLstClk+ 94)
#define ActReqDelThrInsTch (ActLstClk+ 95)
#define ActReqDelThrGenUsr (ActLstClk+ 96)
#define ActReqDelThrGenTch (ActLstClk+ 97)
#define ActReqDelThrSWAUsr (ActLstClk+ 98)
#define ActReqDelThrSWATch (ActLstClk+ 99)
#define ActDelThrForCrsUsr (ActLstClk+100)
#define ActDelThrForCrsTch (ActLstClk+101)
#define ActDelThrForDegUsr (ActLstClk+102)
#define ActDelThrForDegTch (ActLstClk+103)
#define ActDelThrForCtrUsr (ActLstClk+104)
#define ActDelThrForCtrTch (ActLstClk+105)
#define ActDelThrForInsUsr (ActLstClk+106)
#define ActDelThrForInsTch (ActLstClk+107)
#define ActDelThrForGenUsr (ActLstClk+108)
#define ActDelThrForGenTch (ActLstClk+109)
#define ActDelThrForSWAUsr (ActLstClk+110)
#define ActDelThrForSWATch (ActLstClk+111)
#define ActCutThrForCrsUsr (ActLstClk+112)
#define ActCutThrForCrsTch (ActLstClk+113)
#define ActCutThrForDegUsr (ActLstClk+114)
#define ActCutThrForDegTch (ActLstClk+115)
#define ActCutThrForCtrUsr (ActLstClk+116)
#define ActCutThrForCtrTch (ActLstClk+117)
#define ActCutThrForInsUsr (ActLstClk+118)
#define ActCutThrForInsTch (ActLstClk+119)
#define ActCutThrForGenUsr (ActLstClk+120)
#define ActCutThrForGenTch (ActLstClk+121)
#define ActCutThrForSWAUsr (ActLstClk+122)
#define ActCutThrForSWATch (ActLstClk+123)
#define ActPasThrForCrsUsr (ActLstClk+124)
#define ActPasThrForCrsTch (ActLstClk+125)
#define ActPasThrForDegUsr (ActLstClk+126)
#define ActPasThrForDegTch (ActLstClk+127)
#define ActPasThrForCtrUsr (ActLstClk+128)
#define ActPasThrForCtrTch (ActLstClk+129)
#define ActPasThrForInsUsr (ActLstClk+130)
#define ActPasThrForInsTch (ActLstClk+131)
#define ActPasThrForGenUsr (ActLstClk+132)
#define ActPasThrForGenTch (ActLstClk+133)
#define ActPasThrForSWAUsr (ActLstClk+134)
#define ActPasThrForSWATch (ActLstClk+135)
#define ActDelPstForCrsUsr (ActLstClk+136)
#define ActDelPstForCrsTch (ActLstClk+137)
#define ActDelPstForDegUsr (ActLstClk+138)
#define ActDelPstForDegTch (ActLstClk+139)
#define ActDelPstForCtrUsr (ActLstClk+140)
#define ActDelPstForCtrTch (ActLstClk+141)
#define ActDelPstForInsUsr (ActLstClk+142)
#define ActDelPstForInsTch (ActLstClk+143)
#define ActDelPstForGenUsr (ActLstClk+144)
#define ActDelPstForGenTch (ActLstClk+145)
#define ActDelPstForSWAUsr (ActLstClk+146)
#define ActDelPstForSWATch (ActLstClk+147)
#define ActEnbPstForCrsUsr (ActLstClk+148)
#define ActEnbPstForCrsTch (ActLstClk+149)
#define ActEnbPstForDegUsr (ActLstClk+150)
#define ActEnbPstForDegTch (ActLstClk+151)
#define ActEnbPstForCtrUsr (ActLstClk+152)
#define ActEnbPstForCtrTch (ActLstClk+153)
#define ActEnbPstForInsUsr (ActLstClk+154)
#define ActEnbPstForInsTch (ActLstClk+155)
#define ActEnbPstForGenUsr (ActLstClk+156)
#define ActEnbPstForGenTch (ActLstClk+157)
#define ActEnbPstForSWAUsr (ActLstClk+158)
#define ActEnbPstForSWATch (ActLstClk+159)
#define ActDisPstForCrsUsr (ActLstClk+160)
#define ActDisPstForCrsTch (ActLstClk+161)
#define ActDisPstForDegUsr (ActLstClk+162)
#define ActDisPstForDegTch (ActLstClk+163)
#define ActDisPstForCtrUsr (ActLstClk+164)
#define ActDisPstForCtrTch (ActLstClk+165)
#define ActDisPstForInsUsr (ActLstClk+166)
#define ActDisPstForInsTch (ActLstClk+167)
#define ActDisPstForGenUsr (ActLstClk+168)
#define ActDisPstForGenTch (ActLstClk+169)
#define ActDisPstForSWAUsr (ActLstClk+170)
#define ActDisPstForSWATch (ActLstClk+171)
#define ActCht (ActLstClk+171)
#define ActCht (ActLstClk+172)
/*****************************************************************************/
/******************************* Messages tab ********************************/

View File

@ -118,33 +118,24 @@
// TODO: Width of column for data in notifications is too short
// TODO: Recommendations about users to follow
/* The query can be something like this:
SELECT DISTINCT usr_follow.FollowedCod,usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_nicknames.Nickname
FROM usr_follow,usr_data,usr_nicknames
WHERE usr_follow.FollowerCod IN (SELECT FollowedCod FROM usr_follow WHERE FollowerCod='1346')
AND usr_follow.FollowedCod NOT IN (SELECT FollowedCod FROM usr_follow WHERE FollowerCod='1346')
AND usr_follow.FollowedCod<>'1346'
AND usr_follow.FollowedCod=usr_data.UsrCod
AND (usr_data.ProfileVisibility IN ('system','world')
OR (usr_data.ProfileVisibility='course'
AND usr_data.UsrCod IN
(SELECT UsrCod FROM crs_usr WHERE CrsCod IN
(SELECT CrsCod FROM crs_usr WHERE UsrCod='1346'))))
AND usr_follow.FollowedCod=usr_nicknames.UsrCod ORDER BY RAND() LIMIT 3;
*/
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.131.4 (2016-01-27)"
#define Log_PLATFORM_VERSION "SWAD 15.132 (2016-01-27)"
#define CSS_FILE "swad15.131.2.css"
#define JS_FILE "swad15.131.3.js"
// 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 15.132: Jan 27, 2016 Put link to suggest users to follow. (195116 lines)
2 changes necessary in database:
CREATE INDEX PhotoVisibility ON usr_data (PhotoVisibility);
CREATE INDEX ProfileVisibility ON usr_data (ProfileVisibility);
Version 15.131.4: Jan 27, 2016 Fixed bug in ranking of followed. (195030 lines)
Version 15.131.3: Jan 27, 2016 Animated link to view old timeline. (195015 lines)
Version 15.131.2: Jan 26, 2016 Change in default color of links. (194998 lines)

View File

@ -2520,13 +2520,14 @@ mysql> DESCRIBE usr_data;
| Surname2 | varchar(32) | NO | | NULL | |
| FirstName | varchar(32) | NO | | NULL | |
| Sex | enum('unknown','female','male') | NO | | unknown | |
| Layout | tinyint(4) | NO | MUL | 0 | |
| Theme | char(16) | NO | MUL | NULL | |
| IconSet | char(16) | NO | MUL | NULL | |
| Language | char(2) | NO | MUL | NULL | |
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
| Photo | char(43) | NO | | NULL | |
| PhotoVisibility | enum('unknown','user','course','system','world') | NO | | unknown | |
| ProfileVisibility | enum('unknown','user','course','system','world') | NO | | unknown | |
| PhotoVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
| ProfileVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
| CtyCod | int(11) | NO | MUL | -1 | |
| InsCtyCod | int(11) | NO | MUL | -1 | |
| InsCod | int(11) | NO | MUL | -1 | |
@ -2543,10 +2544,10 @@ mysql> DESCRIBE usr_data;
| Comments | text | NO | | NULL | |
| Menu | tinyint(4) | NO | MUL | 0 | |
| SideCols | tinyint(4) | NO | MUL | 3 | |
| NotifNtfEvents | int(11) | NO | | 0 | |
| NotifNtfEvents | int(11) | NO | | -1 | |
| EmailNtfEvents | int(11) | NO | | 0 | |
+-------------------+--------------------------------------------------+------+-----+---------+----------------+
32 rows in set (0.00 sec)
33 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_data ("
"UsrCod INT NOT NULL AUTO_INCREMENT,"
@ -2587,6 +2588,8 @@ mysql> DESCRIBE usr_data;
"INDEX(IconSet),"
"INDEX(Language),"
"INDEX(FirstDayOfWeek),"
"INDEX(PhotoVisibility),"
"INDEX(ProfileVisibility),"
"INDEX(CtyCod),"
"INDEX(InsCtyCod),"
"INDEX(InsCod),"

View File

@ -70,6 +70,77 @@ static void Fol_ShowNumberOfFollowingOrFollowers (const struct UsrData *UsrDat,
const char *Title);
static void Fol_ShowFollowedOrFollower (const struct UsrData *UsrDat);
/*****************************************************************************/
/******************** Put link to suggest users to follow ********************/
/*****************************************************************************/
void Fol_PutLinkWhoToFollow (void)
{
extern const char *Txt_Who_to_follow;
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
Lay_PutContextualLink (ActWhoFol,NULL,
"follow64x64.png",
Txt_Who_to_follow,Txt_Who_to_follow);
fprintf (Gbl.F.Out,"</div>");
}
/*****************************************************************************/
/******************** Put link to suggest users to follow ********************/
/*****************************************************************************/
void Fol_SuggestWhoToFollow (void)
{
/* The query can be something like this:
SELECT UsrCod FROM
(
SELECT DISTINCT usr_follow.FollowedCod AS UsrCod
FROM usr_follow,
(SELECT FollowedCod FROM usr_follow
WHERE FollowerCod='1346') AS my_followed,
usr_data
WHERE usr_follow.FollowerCod=my_followed.FollowedCod
AND usr_follow.FollowedCod<>'1346'
AND usr_follow.FollowedCod=usr_data.UsrCod
AND usr_data.ProfileVisibility IN ('system','world')
UNION
SELECT DISTINCT crs_usr.UsrCod
FROM crs_usr,
(SELECT CrsCod FROM crs_usr
WHERE UsrCod='1346') AS my_crs,
usr_data
WHERE crs_usr.CrsCod=my_crs.CrsCod
AND crs_usr.UsrCod<>'1346'
AND crs_usr.UsrCod=usr_data.UsrCod
AND usr_data.ProfileVisibility='course'
UNION
SELECT DISTINCT crs_usr.UsrCod
FROM crs_usr,
(SELECT CrsCod,Role FROM crs_usr WHERE
UsrCod='1346') AS my_crs_role,
usr_data
WHERE crs_usr.CrsCod=my_crs_role.CrsCod
AND crs_usr.Role<>my_crs_role.Role
AND crs_usr.UsrCod=usr_data.UsrCod
AND usr_data.ProfileVisibility='user'
) AS UsrsToFollow
WHERE UsrCod NOT IN
(SELECT FollowedCod FROM usr_follow
WHERE FollowerCod='1346')
ORDER BY RAND() LIMIT 3;
*/
}
/*****************************************************************************/
/*************** Check if a user is a follower of another user ***************/
/*****************************************************************************/

View File

@ -43,6 +43,9 @@
/****************************** Public prototypes ****************************/
/*****************************************************************************/
void Fol_PutLinkWhoToFollow (void);
void Fol_SuggestWhoToFollow (void);
bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod);
unsigned Fol_GetNumFollowing (long UsrCod);
unsigned Fol_GetNumFollowers (long UsrCod);

View File

@ -127,6 +127,9 @@ char *Prf_GetURLPublicProfile (char *URL,const char *NicknameWithoutArroba)
void Prf_RequestUserProfile (void)
{
/***** Put links to suggests users to follow *****/
Fol_PutLinkWhoToFollow ();
/* By default, the nickname is filled with my nickname
If no user logged ==> the nickname is empty */
Prf_RequestUserProfileWithDefaultNickname (Gbl.Usrs.Me.UsrDat.Nickname);
@ -189,6 +192,9 @@ void Prf_GetUsrDatAndShowUserProfile (void)
if (Error)
{
/***** Put links to suggests users to follow *****/
Fol_PutLinkWhoToFollow ();
/* Show error message */
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);

View File

@ -332,9 +332,15 @@ static void Soc_ShowTimelineGblHighlightingNot (long NotCod)
extern const char *Txt_You_dont_follow_any_user;
char Query[1024];
/***** Show warning if I do not follow anyone *****/
/***** Check if I follow someone *****/
if (!Fol_GetNumFollowing (Gbl.Usrs.Me.UsrDat.UsrCod))
Lay_ShowAlert (Lay_INFO,Txt_You_dont_follow_any_user);
{
/***** Put links to suggests users to follow *****/
Fol_PutLinkWhoToFollow ();
/***** Show warning if I do not follow anyone *****/
Lay_ShowAlert (Lay_WARNING,Txt_You_dont_follow_any_user);
}
/***** Build query to get timeline *****/
Soc_BuildQueryToGetTimeline (Soc_TIMELINE_GBL,

View File

@ -49201,6 +49201,27 @@ const char *Txt_What_would_you_like_to_do =
"O que voc&ecirc; faria?";
#endif
const char *Txt_Who_to_follow =
#if L==1
"A qui seguir";
#elif L==2
"Wer zu folgen";
#elif L==3
"Who to follow";
#elif L==4
"A qui&eacute;n seguir";
#elif L==5
"Qui &agrave; suivre";
#elif L==6
"A qui&eacute;n seguir"; // Okoteve traducción
#elif L==7
"Chi da seguire";
#elif L==8
"Kto do na&sacute;ladowania";
#elif L==9
"Quem seguir";
#endif
const char *Txt_With_centres =
#if L==1
"Amb centres";

View File

@ -858,7 +858,7 @@ bool Usr_CheckIfUsrSharesAnyOfMyCrsWithDifferentRole (long UsrCod)
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_courses,"
"(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS usr_courses"
" WHERE my_courses.CrsCod=usr_courses.CrsCod"
" AND my_courses.Role!=usr_courses.Role",
" AND my_courses.Role<>usr_courses.Role",
Gbl.Usrs.Me.UsrDat.UsrCod,UsrCod);
return (DB_QueryCOUNT (Query,"can not check if a user shares any course with you") != 0);
}