mirror of https://github.com/acanas/swad-core.git
Version 16.138
This commit is contained in:
parent
65d14b53f5
commit
e273a739f4
|
@ -2629,8 +2629,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
/* ActCalNumForPst */{1408,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Prf_CalculateFigures ,NULL},
|
/* ActCalNumForPst */{1408,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Prf_CalculateFigures ,NULL},
|
||||||
/* ActCalNumMsgSnt */{1407,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Prf_CalculateFigures ,NULL},
|
/* ActCalNumMsgSnt */{1407,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Prf_CalculateFigures ,NULL},
|
||||||
|
|
||||||
/* ActFolUsr */{1410,-1,TabUnk,ActSeeSocPrf ,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_FollowUsr ,NULL},
|
/* ActFolUsr */{1410,-1,TabUnk,ActSeeSocPrf ,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Fol_FollowUsr1 ,Fol_FollowUsr2 ,NULL},
|
||||||
/* ActUnfUsr */{1411,-1,TabUnk,ActSeeSocPrf ,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_UnfollowUsr ,NULL},
|
/* ActUnfUsr */{1411,-1,TabUnk,ActSeeSocPrf ,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Fol_UnfollowUsr1 ,Fol_UnfollowUsr2 ,NULL},
|
||||||
/* ActSeeFlg */{1412,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_ListFollowing ,NULL},
|
/* ActSeeFlg */{1412,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_ListFollowing ,NULL},
|
||||||
/* ActSeeFlr */{1413,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_ListFollowers ,NULL},
|
/* ActSeeFlr */{1413,-1,TabUnk,ActSeeSocPrf ,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_ListFollowers ,NULL},
|
||||||
|
|
||||||
|
|
|
@ -195,19 +195,18 @@
|
||||||
// TODO: Bajo la foto de cada usuario el país
|
// TODO: Bajo la foto de cada usuario el país
|
||||||
// TODO: Permitir elegir entre "Ver actividad de quienes sigo" o "Ver actividad de todos"
|
// TODO: Permitir elegir entre "Ver actividad de quienes sigo" o "Ver actividad de todos"
|
||||||
|
|
||||||
// TODO: On right column show only users to follow who have photo (pass a parameter to function)
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.137 (2017-02-17)"
|
#define Log_PLATFORM_VERSION "SWAD 16.138 (2017-02-17)"
|
||||||
#define CSS_FILE "swad16.136.css"
|
#define CSS_FILE "swad16.136.css"
|
||||||
#define JS_FILE "swad16.123.js"
|
#define JS_FILE "swad16.123.js"
|
||||||
|
|
||||||
// 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 16.138: Feb 17, 2017 On right column show only users to follow with visible photo. (212873 lines)
|
||||||
Version 16.137: Feb 17, 2017 Link to view my public profile. (212808 lines)
|
Version 16.137: Feb 17, 2017 Link to view my public profile. (212808 lines)
|
||||||
1 change necessary in database:
|
1 change necessary in database:
|
||||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1637','es','N','Ver mi perfil público');
|
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1637','es','N','Ver mi perfil público');
|
||||||
|
|
|
@ -66,6 +66,7 @@ extern struct Globals Gbl;
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
|
bool OnlyUsrsWithPhotos,
|
||||||
MYSQL_RES **mysql_res);
|
MYSQL_RES **mysql_res);
|
||||||
|
|
||||||
static void Fol_PutIconsWhoToFollow (void);
|
static void Fol_PutIconsWhoToFollow (void);
|
||||||
|
@ -124,6 +125,7 @@ void Fol_SuggestUsrsToFollowMainZone (void)
|
||||||
|
|
||||||
/***** Get users *****/
|
/***** Get users *****/
|
||||||
if ((NumUsrs = Fol_GetUsrsWhoToFollow (Fol_MAX_USRS_TO_FOLLOW_MAIN_ZONE,
|
if ((NumUsrs = Fol_GetUsrsWhoToFollow (Fol_MAX_USRS_TO_FOLLOW_MAIN_ZONE,
|
||||||
|
false,
|
||||||
&mysql_res)))
|
&mysql_res)))
|
||||||
{
|
{
|
||||||
/***** Start frame *****/
|
/***** Start frame *****/
|
||||||
|
@ -186,6 +188,7 @@ void Fol_SuggestUsrsToFollowMainZoneOnRightColumn (void)
|
||||||
|
|
||||||
/***** Get users *****/
|
/***** Get users *****/
|
||||||
if ((NumUsrs = Fol_GetUsrsWhoToFollow (Fol_MAX_USRS_TO_FOLLOW_RIGHT_COLUMN,
|
if ((NumUsrs = Fol_GetUsrsWhoToFollow (Fol_MAX_USRS_TO_FOLLOW_RIGHT_COLUMN,
|
||||||
|
true,
|
||||||
&mysql_res)))
|
&mysql_res)))
|
||||||
{
|
{
|
||||||
/***** Start container *****/
|
/***** Start container *****/
|
||||||
|
@ -238,10 +241,51 @@ void Fol_SuggestUsrsToFollowMainZoneOnRightColumn (void)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
|
bool OnlyUsrsWithPhotos,
|
||||||
MYSQL_RES **mysql_res)
|
MYSQL_RES **mysql_res)
|
||||||
{
|
{
|
||||||
extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY];
|
extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY];
|
||||||
char Query[2048];
|
char Query[4096];
|
||||||
|
char SubQuery1[256];
|
||||||
|
char SubQuery2[256];
|
||||||
|
char SubQuery3[256];
|
||||||
|
char SubQuery4[256];
|
||||||
|
|
||||||
|
/***** Build subqueries related to photos *****/
|
||||||
|
if (OnlyUsrsWithPhotos)
|
||||||
|
{
|
||||||
|
// Photo visibility should be >= profile visibility in every subquery
|
||||||
|
sprintf (SubQuery1,
|
||||||
|
" AND usr_data.PhotoVisibility IN ('%s','%s')"
|
||||||
|
" AND usr_data.Photo<>''",
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ]);
|
||||||
|
sprintf (SubQuery2,
|
||||||
|
" AND usr_data.PhotoVisibility IN ('%s','%s','%s')"
|
||||||
|
" AND usr_data.Photo<>''",
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ]);
|
||||||
|
sprintf (SubQuery3,
|
||||||
|
" AND usr_data.PhotoVisibility IN ('%s','%s','%s','%s')"
|
||||||
|
" AND usr_data.Photo<>''",
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ]);
|
||||||
|
sprintf (SubQuery4,
|
||||||
|
" AND usr_data.PhotoVisibility IN ('%s','%s')"
|
||||||
|
" AND usr_data.Photo<>''",
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SubQuery1[0] = '\0';
|
||||||
|
SubQuery2[0] = '\0';
|
||||||
|
SubQuery3[0] = '\0';
|
||||||
|
SubQuery4[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/***** Build query to get users to follow *****/
|
/***** Build query to get users to follow *****/
|
||||||
// Get only users with surname 1 and first name
|
// Get only users with surname 1 and first name
|
||||||
|
@ -264,6 +308,7 @@ static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
" AND usr_data.ProfileVisibility IN ('%s','%s')"
|
" AND usr_data.ProfileVisibility IN ('%s','%s')"
|
||||||
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
||||||
" AND usr_data.FirstName<>''" // First name not empty
|
" AND usr_data.FirstName<>''" // First name not empty
|
||||||
|
"%s" // SubQuery1
|
||||||
")"
|
")"
|
||||||
" UNION "
|
" UNION "
|
||||||
// Users who share any course with me
|
// Users who share any course with me
|
||||||
|
@ -281,6 +326,7 @@ static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
" AND usr_data.ProfileVisibility IN ('%s','%s','%s')"
|
" AND usr_data.ProfileVisibility IN ('%s','%s','%s')"
|
||||||
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
||||||
" AND usr_data.FirstName<>''" // First name not empty
|
" AND usr_data.FirstName<>''" // First name not empty
|
||||||
|
"%s" // SubQuery2
|
||||||
")"
|
")"
|
||||||
" UNION "
|
" UNION "
|
||||||
// Users who share any course with me with another role
|
// Users who share any course with me with another role
|
||||||
|
@ -297,6 +343,7 @@ static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
" AND usr_data.ProfileVisibility='%s'"
|
" AND usr_data.ProfileVisibility='%s'"
|
||||||
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
" AND usr_data.Surname1<>''" // Surname 1 not empty
|
||||||
" AND usr_data.FirstName<>''" // First name not empty
|
" AND usr_data.FirstName<>''" // First name not empty
|
||||||
|
"%s" // SubQuery3
|
||||||
")"
|
")"
|
||||||
") AS LikelyKnownUsrsToFollow"
|
") AS LikelyKnownUsrsToFollow"
|
||||||
// Do not select my followed
|
// Do not select my followed
|
||||||
|
@ -314,8 +361,9 @@ static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
"SELECT UsrCod FROM usr_data"
|
"SELECT UsrCod FROM usr_data"
|
||||||
" WHERE UsrCod<>'%ld'"
|
" WHERE UsrCod<>'%ld'"
|
||||||
" AND ProfileVisibility IN ('%s','%s')"
|
" AND ProfileVisibility IN ('%s','%s')"
|
||||||
" AND Surname1<>''" // Surname 1 not empty
|
" AND Surname1<>''" // Surname 1 not empty
|
||||||
" AND FirstName<>''" // First name not empty
|
" AND FirstName<>''" // First name not empty
|
||||||
|
"%s" // SubQuery4
|
||||||
// Do not select my followed
|
// Do not select my followed
|
||||||
" AND UsrCod NOT IN"
|
" AND UsrCod NOT IN"
|
||||||
" (SELECT FollowedCod FROM usr_follow"
|
" (SELECT FollowedCod FROM usr_follow"
|
||||||
|
@ -331,19 +379,23 @@ static unsigned Fol_GetUsrsWhoToFollow (unsigned MaxUsrsToShow,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
||||||
|
SubQuery1,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
|
Pri_VisibilityDB[Pri_VISIBILITY_COURSE],
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
||||||
|
SubQuery2,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
|
Pri_VisibilityDB[Pri_VISIBILITY_USER ],
|
||||||
|
SubQuery3,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
MaxUsrsToShow * 2, // 2/3 likely known users
|
MaxUsrsToShow * 2, // 2/3 likely known users
|
||||||
|
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM],
|
||||||
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
Pri_VisibilityDB[Pri_VISIBILITY_WORLD ],
|
||||||
|
SubQuery4,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
MaxUsrsToShow, // 1/3 likely unknown users
|
MaxUsrsToShow, // 1/3 likely unknown users
|
||||||
|
|
||||||
|
@ -921,11 +973,11 @@ static void Fol_PutIconToUnfollow (struct UsrData *UsrDat)
|
||||||
extern const char *Txt_Unfollow;
|
extern const char *Txt_Unfollow;
|
||||||
|
|
||||||
/* Form to follow */
|
/* Form to follow */
|
||||||
Act_FormStart (ActFolUsr);
|
Act_FormStart (ActUnfUsr);
|
||||||
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
||||||
Act_LinkFormSubmit (Txt_Unfollow,NULL,NULL);
|
Act_LinkFormSubmit (Txt_Unfollow,NULL,NULL);
|
||||||
fprintf (Gbl.F.Out,"<div class=\"FOLLOW_USR_ICO ICO_HIGHLIGHT\">"
|
fprintf (Gbl.F.Out,"<div class=\"FOLLOW_USR_ICO ICO_HIGHLIGHT\">"
|
||||||
"<img src=\"%s/follow64x64.png\""
|
"<img src=\"%s/following64x64.png\""
|
||||||
" alt=\"%s\" title=\"%s\""
|
" alt=\"%s\" title=\"%s\""
|
||||||
" class=\"ICO20x20\" />"
|
" class=\"ICO20x20\" />"
|
||||||
"</div>"
|
"</div>"
|
||||||
|
@ -939,13 +991,11 @@ static void Fol_PutIconToUnfollow (struct UsrData *UsrDat)
|
||||||
/***************************** Follow another user ***************************/
|
/***************************** Follow another user ***************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Fol_FollowUsr (void)
|
void Fol_FollowUsr1 (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
|
||||||
char Query[256];
|
char Query[256];
|
||||||
bool CreateNotif;
|
bool CreateNotif;
|
||||||
bool NotifyByEmail;
|
bool NotifyByEmail;
|
||||||
bool Error;
|
|
||||||
|
|
||||||
/***** Get user to be followed *****/
|
/***** Get user to be followed *****/
|
||||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||||
|
@ -976,14 +1026,20 @@ void Fol_FollowUsr (void)
|
||||||
(Ntf_Status_t) (NotifyByEmail ? Ntf_STATUS_BIT_EMAIL :
|
(Ntf_Status_t) (NotifyByEmail ? Ntf_STATUS_BIT_EMAIL :
|
||||||
0));
|
0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Show user's profile again *****/
|
|
||||||
Error = !Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Error = true;
|
Gbl.Error = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (Error)
|
void Fol_FollowUsr2 (void)
|
||||||
|
{
|
||||||
|
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||||
|
|
||||||
|
if (!Gbl.Error)
|
||||||
|
/***** Show user's profile again *****/
|
||||||
|
Gbl.Error = !Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat);
|
||||||
|
|
||||||
|
if (Gbl.Error)
|
||||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,9 +1047,8 @@ void Fol_FollowUsr (void)
|
||||||
/***************************** Unfollow another user *************************/
|
/***************************** Unfollow another user *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Fol_UnfollowUsr (void)
|
void Fol_UnfollowUsr1 (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
|
||||||
char Query[256];
|
char Query[256];
|
||||||
|
|
||||||
/***** Get user to be unfollowed *****/
|
/***** Get user to be unfollowed *****/
|
||||||
|
@ -1010,7 +1065,18 @@ void Fol_UnfollowUsr (void)
|
||||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
DB_QueryREPLACE (Query,"can not unfollow user");
|
DB_QueryREPLACE (Query,"can not unfollow user");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Gbl.Error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Fol_UnfollowUsr2 (void)
|
||||||
|
{
|
||||||
|
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||||
|
|
||||||
|
/***** Get user to be unfollowed *****/
|
||||||
|
if (!Gbl.Error)
|
||||||
|
{
|
||||||
/***** Show user's profile again *****/
|
/***** Show user's profile again *****/
|
||||||
if (!Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat)) // I can not view user's profile
|
if (!Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat)) // I can not view user's profile
|
||||||
/* 1) I followed a user when I had permission
|
/* 1) I followed a user when I had permission
|
||||||
|
|
|
@ -56,8 +56,10 @@ void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat,
|
||||||
void Fol_ListFollowing (void);
|
void Fol_ListFollowing (void);
|
||||||
void Fol_ListFollowers (void);
|
void Fol_ListFollowers (void);
|
||||||
|
|
||||||
void Fol_FollowUsr (void);
|
void Fol_FollowUsr1 (void);
|
||||||
void Fol_UnfollowUsr (void);
|
void Fol_FollowUsr2 (void);
|
||||||
|
void Fol_UnfollowUsr1 (void);
|
||||||
|
void Fol_UnfollowUsr2 (void);
|
||||||
|
|
||||||
void Fol_GetAndShowRankingFollowers (void);
|
void Fol_GetAndShowRankingFollowers (void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue