diff --git a/sql/cambios.sql b/sql/cambios.sql
index 69019e49..fb9c4ae6 100644
--- a/sql/cambios.sql
+++ b/sql/cambios.sql
@@ -10573,3 +10573,9 @@ UPDATE usr_data SET EmailNtfEvent =(((EmailNtfEvent & ~0xFF) << 1) | (EmailNtfE
UPDATE usr_data SET NotifNtfEvents=(NotifNtfEvents | 0x2000);
+-----------------
+
+
+CREATE TABLE IF NOT EXISTS usr_banned (
+ UsrCod INT NOT NULL,
+ UNIQUE INDEX(UsrCod));
diff --git a/sql/swad.sql b/sql/swad.sql
index 7549160b..a8f81761 100644
--- a/sql/swad.sql
+++ b/sql/swad.sql
@@ -1100,15 +1100,11 @@ CREATE TABLE IF NOT EXISTS tst_tags (
INDEX(CrsCod,ChangeTime),
INDEX(TagTxt));
--
--- Table usr_IDs: stores the users' IDs
+-- Table usr_banned: stores users banned for ranking
--
-CREATE TABLE IF NOT EXISTS usr_IDs (
+CREATE TABLE IF NOT EXISTS usr_banned (
UsrCod INT NOT NULL,
- UsrID CHAR(16) NOT NULL,
- CreatTime DATETIME NOT NULL,
- Confirmed ENUM('N','Y') NOT NULL DEFAULT 'N',
- UNIQUE INDEX(UsrCod,UsrID),
- INDEX(UsrID));
+ UNIQUE INDEX(UsrCod));
--
-- Table usr_data: stores users' data
--
@@ -1158,7 +1154,6 @@ CREATE TABLE IF NOT EXISTS usr_data (
INDEX(CtrCod),
INDEX(Menu),
INDEX(SideCols));
-);
--
-- Table usr_emails: stores the users' e-mails
--
@@ -1193,6 +1188,16 @@ CREATE TABLE IF NOT EXISTS usr_follow (
UNIQUE INDEX (FollowedCod,FollowerCod),
INDEX (FollowTime));
--
+-- Table usr_IDs: stores the users' IDs
+--
+CREATE TABLE IF NOT EXISTS usr_IDs (
+ UsrCod INT NOT NULL,
+ UsrID CHAR(16) NOT NULL,
+ CreatTime DATETIME NOT NULL,
+ Confirmed ENUM('N','Y') NOT NULL DEFAULT 'N',
+ UNIQUE INDEX(UsrCod,UsrID),
+ INDEX(UsrID));
+--
-- Table usr_last: stores some variable data related to users
--
CREATE TABLE IF NOT EXISTS usr_last (
diff --git a/swad_account.c b/swad_account.c
index 9e3b2e1a..5e49b229 100644
--- a/swad_account.c
+++ b/swad_account.c
@@ -737,7 +737,8 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
}
- /***** Remove user from table of banned users *****/
+ /***** Remove user from tables of banned users *****/
+ Usr_RemoveUsrFromUsrBanned (UsrDat->UsrCod);
Msg_RemoveUsrFromBanned (UsrDat->UsrCod);
/***** Delete thread read status for this user *****/
diff --git a/swad_changelog.h b/swad_changelog.h
index a04b7dda..cafdc168 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -103,11 +103,15 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 14.102.12 (2015/03/28)"
+#define Log_PLATFORM_VERSION "SWAD 14.103 (2015/03/28)"
// 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.103: Mar 29, 2015 New table to ban users out of ranking. (184014 lines)
+ 1 change necessary in database:
+CREATE TABLE IF NOT EXISTS usr_banned (UsrCod INT NOT NULL,UNIQUE INDEX(UsrCod));
+
Version 14.102.12:Mar 28, 2015 Some help messages changed. (183953 lines)
Version 14.102.11:Mar 28, 2015 Some help messages changed. (183943 lines)
Version 14.102.10:Mar 28, 2015 Create user's figures when a user account is created. (183942 lines)
diff --git a/swad_database.c b/swad_database.c
index ee9dcecf..3c0ad29f 100644
--- a/swad_database.c
+++ b/swad_database.c
@@ -2241,6 +2241,21 @@ mysql> DESCRIBE tst_tags;
"TagHidden ENUM('N','Y') NOT NULL,"
"UNIQUE INDEX(TagCod),INDEX(CrsCod,ChangeTime),INDEX(TagTxt))");
+ /***** Table usr_banned *****/
+/*
+mysql> DESCRIBE usr_banned;
++--------+---------+------+-----+---------+-------+
+| Field | Type | Null | Key | Default | Extra |
++--------+---------+------+-----+---------+-------+
+| UsrCod | int(11) | NO | PRI | NULL | |
++--------+---------+------+-----+---------+-------+
+1 row in set (0.01 sec)
+
+*/
+ DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_banned ("
+ "UsrCod INT NOT NULL,"
+ "UNIQUE INDEX(UsrCod))");
+
/***** Table usr_data *****/
/*
mysql> DESCRIBE usr_data;
diff --git a/swad_profile.c b/swad_profile.c
index 3c271f5b..8c11dbf7 100644
--- a/swad_profile.c
+++ b/swad_profile.c
@@ -321,6 +321,7 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
extern const char *Txt_Messages;
extern const char *Txt_message;
extern const char *Txt_messages;
+ bool UsrIsBannedFromRanking;
struct UsrFigures UsrFigures;
unsigned NumCrssUsrIsTeacher;
unsigned NumCrssUsrIsStudent;
@@ -445,154 +446,159 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
fprintf (Gbl.F.Out,""
"");
- /* Number of clicks */
- fprintf (Gbl.F.Out,"
"
- ""
- ""
- " | "
- "",
- Gbl.Prefs.IconsURL,
- Txt_Clicks);
- if (UsrFigures.NumClicks >= 0)
+ UsrIsBannedFromRanking = Usr_CheckIfUsrBanned (UsrDat->UsrCod);
+ if (!UsrIsBannedFromRanking)
{
- fprintf (Gbl.F.Out,"%ld %s ",
- UsrFigures.NumClicks,Txt_clicks);
- Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumClicks"),
- Prf_GetNumUsrsWithFigure ("NumClicks"));
- if (UsrFigures.NumDays > 0)
- {
- fprintf (Gbl.F.Out," (");
- Str_WriteFloatNum ((float) UsrFigures.NumClicks /
- (float) UsrFigures.NumDays);
- fprintf (Gbl.F.Out," / %s ",Txt_day);
- Prf_ShowRanking (Prf_GetRankingNumClicksPerDay (UsrDat->UsrCod),
- Prf_GetNumUsrsWithNumClicksPerDay ());
- fprintf (Gbl.F.Out,")");
- }
- }
- else // Number of clicks is unknown
- {
- /***** Button to fetch and store number of clicks *****/
- Act_FormStart (ActCalNumClk);
- Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
- Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
- Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
- Act_FormEnd ();
- }
- fprintf (Gbl.F.Out," | "
- "
");
+ /* Number of clicks */
+ fprintf (Gbl.F.Out,""
+ ""
+ ""
+ " | "
+ "",
+ Gbl.Prefs.IconsURL,
+ Txt_Clicks);
- /***** Number of file views *****/
- fprintf (Gbl.F.Out," |
"
- ""
- ""
- " | "
- "",
- Gbl.Prefs.IconsURL,
- Txt_Downloads);
- if (UsrFigures.NumFileViews >= 0)
- {
- fprintf (Gbl.F.Out,"%ld %s ",
- UsrFigures.NumFileViews,
- (UsrFigures.NumFileViews == 1) ? Txt_download :
- Txt_downloads);
- Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumFileViews"),
- Prf_GetNumUsrsWithFigure ("NumFileViews"));
- if (UsrFigures.NumDays > 0)
+ if (UsrFigures.NumClicks >= 0)
{
- fprintf (Gbl.F.Out," (");
- Str_WriteFloatNum ((float) UsrFigures.NumFileViews /
- (float) UsrFigures.NumDays);
- fprintf (Gbl.F.Out," / %s)",Txt_day);
+ fprintf (Gbl.F.Out,"%ld %s ",
+ UsrFigures.NumClicks,Txt_clicks);
+ Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumClicks"),
+ Prf_GetNumUsrsWithFigure ("NumClicks"));
+ if (UsrFigures.NumDays > 0)
+ {
+ fprintf (Gbl.F.Out," (");
+ Str_WriteFloatNum ((float) UsrFigures.NumClicks /
+ (float) UsrFigures.NumDays);
+ fprintf (Gbl.F.Out," / %s ",Txt_day);
+ Prf_ShowRanking (Prf_GetRankingNumClicksPerDay (UsrDat->UsrCod),
+ Prf_GetNumUsrsWithNumClicksPerDay ());
+ fprintf (Gbl.F.Out,")");
+ }
}
- }
- else // Number of file views is unknown
- {
- /***** Button to fetch and store number of file views *****/
- Act_FormStart (ActCalNumFilVie);
- Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
- Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
- Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
- Act_FormEnd ();
- }
- fprintf (Gbl.F.Out," | "
- "
");
+ else // Number of clicks is unknown
+ {
+ /***** Button to fetch and store number of clicks *****/
+ Act_FormStart (ActCalNumClk);
+ Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
+ Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
+ Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
+ Act_FormEnd ();
+ }
+ fprintf (Gbl.F.Out,""
+ "");
- /***** Number of posts in forums *****/
- fprintf (Gbl.F.Out,""
- ""
- ""
- " | "
- "",
- Gbl.Prefs.IconsURL,
- Txt_Forums);
- if (UsrFigures.NumForPst >= 0)
- {
- fprintf (Gbl.F.Out,"%ld %s ",
- UsrFigures.NumForPst,
- (UsrFigures.NumForPst == 1) ? Txt_post :
- Txt_posts);
- Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumForPst"),
- Prf_GetNumUsrsWithFigure ("NumForPst"));
- if (UsrFigures.NumDays > 0)
+ /***** Number of file views *****/
+ fprintf (Gbl.F.Out," |
"
+ ""
+ ""
+ " | "
+ "",
+ Gbl.Prefs.IconsURL,
+ Txt_Downloads);
+ if (UsrFigures.NumFileViews >= 0)
{
- fprintf (Gbl.F.Out," (");
- Str_WriteFloatNum ((float) UsrFigures.NumForPst /
- (float) UsrFigures.NumDays);
- fprintf (Gbl.F.Out," / %s)",Txt_day);
+ fprintf (Gbl.F.Out,"%ld %s ",
+ UsrFigures.NumFileViews,
+ (UsrFigures.NumFileViews == 1) ? Txt_download :
+ Txt_downloads);
+ Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumFileViews"),
+ Prf_GetNumUsrsWithFigure ("NumFileViews"));
+ if (UsrFigures.NumDays > 0)
+ {
+ fprintf (Gbl.F.Out," (");
+ Str_WriteFloatNum ((float) UsrFigures.NumFileViews /
+ (float) UsrFigures.NumDays);
+ fprintf (Gbl.F.Out," / %s)",Txt_day);
+ }
}
- }
- else // Number of forum posts is unknown
- {
- /***** Button to fetch and store number of forum posts *****/
- Act_FormStart (ActCalNumForPst);
- Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
- Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
- Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
- Act_FormEnd ();
- }
- fprintf (Gbl.F.Out," | "
- "
");
+ else // Number of file views is unknown
+ {
+ /***** Button to fetch and store number of file views *****/
+ Act_FormStart (ActCalNumFilVie);
+ Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
+ Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
+ Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
+ Act_FormEnd ();
+ }
+ fprintf (Gbl.F.Out,""
+ "");
- /***** Number of messages sent *****/
- fprintf (Gbl.F.Out,""
- ""
- ""
- " | "
- "",
- Gbl.Prefs.IconsURL,
- Txt_Messages);
- if (UsrFigures.NumMsgSnt >= 0)
- {
- fprintf (Gbl.F.Out,"%ld %s ",
- UsrFigures.NumMsgSnt,
- (UsrFigures.NumMsgSnt == 1) ? Txt_message :
- Txt_messages);
- Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumMsgSnt"),
- Prf_GetNumUsrsWithFigure ("NumMsgSnt"));
- if (UsrFigures.NumDays > 0)
+ /***** Number of posts in forums *****/
+ fprintf (Gbl.F.Out," |
"
+ ""
+ ""
+ " | "
+ "",
+ Gbl.Prefs.IconsURL,
+ Txt_Forums);
+ if (UsrFigures.NumForPst >= 0)
{
- fprintf (Gbl.F.Out," (");
- Str_WriteFloatNum ((float) UsrFigures.NumMsgSnt /
- (float) UsrFigures.NumDays);
- fprintf (Gbl.F.Out," / %s)",Txt_day);
+ fprintf (Gbl.F.Out,"%ld %s ",
+ UsrFigures.NumForPst,
+ (UsrFigures.NumForPst == 1) ? Txt_post :
+ Txt_posts);
+ Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumForPst"),
+ Prf_GetNumUsrsWithFigure ("NumForPst"));
+ if (UsrFigures.NumDays > 0)
+ {
+ fprintf (Gbl.F.Out," (");
+ Str_WriteFloatNum ((float) UsrFigures.NumForPst /
+ (float) UsrFigures.NumDays);
+ fprintf (Gbl.F.Out," / %s)",Txt_day);
+ }
}
+ else // Number of forum posts is unknown
+ {
+ /***** Button to fetch and store number of forum posts *****/
+ Act_FormStart (ActCalNumForPst);
+ Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
+ Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
+ Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
+ Act_FormEnd ();
+ }
+ fprintf (Gbl.F.Out," | "
+ "
");
+
+ /***** Number of messages sent *****/
+ fprintf (Gbl.F.Out,""
+ ""
+ ""
+ " | "
+ "",
+ Gbl.Prefs.IconsURL,
+ Txt_Messages);
+ if (UsrFigures.NumMsgSnt >= 0)
+ {
+ fprintf (Gbl.F.Out,"%ld %s ",
+ UsrFigures.NumMsgSnt,
+ (UsrFigures.NumMsgSnt == 1) ? Txt_message :
+ Txt_messages);
+ Prf_ShowRanking (Prf_GetRankingFigure (UsrDat->UsrCod,"NumMsgSnt"),
+ Prf_GetNumUsrsWithFigure ("NumMsgSnt"));
+ if (UsrFigures.NumDays > 0)
+ {
+ fprintf (Gbl.F.Out," (");
+ Str_WriteFloatNum ((float) UsrFigures.NumMsgSnt /
+ (float) UsrFigures.NumDays);
+ fprintf (Gbl.F.Out," / %s)",Txt_day);
+ }
+ }
+ else // Number of clicks is unknown
+ {
+ /***** Button to fetch and store number of messages sent *****/
+ Act_FormStart (ActCalNumMsgSnt);
+ Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
+ Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
+ Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
+ Act_FormEnd ();
+ }
+ fprintf (Gbl.F.Out," | "
+ "
");
}
- else // Number of clicks is unknown
- {
- /***** Button to fetch and store number of messages sent *****/
- Act_FormStart (ActCalNumMsgSnt);
- Usr_PutParamOtherUsrCodEncrypted (UsrDat->EncryptedUsrCod);
- Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormul[Gbl.Prefs.Theme]);
- Lay_PutCalculateIcon (Txt_Calculate,Txt_Calculate);
- Act_FormEnd ();
- }
- fprintf (Gbl.F.Out,""
- "");
/***** End of table *****/
fprintf (Gbl.F.Out,"");
@@ -1167,7 +1173,7 @@ void Prf_GetAndShowRankingMsgSnt (void)
static void Prf_GetAndShowRankingFigure (const char *FieldName)
{
- char Query[512];
+ char Query[1024];
/***** Get ranking from database *****/
switch (Gbl.Scope.Current)
@@ -1176,6 +1182,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
sprintf (Query,"SELECT UsrCod,%s"
" FROM usr_figures"
" WHERE %s>='0'"
+ " AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY %s DESC,UsrCod LIMIT 100",
FieldName,
FieldName,FieldName);
@@ -1190,6 +1197,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>='0'"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCty.Cty.CtyCod,
@@ -1204,6 +1212,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>='0'"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentIns.Ins.InsCod,
@@ -1217,6 +1226,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>='0'"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCtr.Ctr.CtrCod,
@@ -1229,6 +1239,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>='0'"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentDeg.Deg.DegCod,
@@ -1240,6 +1251,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
" WHERE crs_usr.CrsCod='%ld'"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>='0'"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCrs.Crs.CrsCod,
@@ -1317,7 +1329,7 @@ void Prf_ShowRankingFigure (const char *Query)
void Prf_GetAndShowRankingClicksPerDay (void)
{
- char Query[512];
+ char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsrs;
@@ -1335,6 +1347,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
"NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay"
" FROM usr_figures"
" WHERE FirstClickTime>0"
+ " AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,UsrCod LIMIT 100");
break;
case Sco_SCOPE_CTY:
@@ -1348,6 +1361,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>0"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCty.Cty.CtyCod);
break;
@@ -1361,6 +1375,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>0"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentIns.Ins.InsCod);
break;
@@ -1373,6 +1388,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>0"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
@@ -1384,6 +1400,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>0"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentDeg.Deg.DegCod);
break;
@@ -1394,6 +1411,7 @@ void Prf_GetAndShowRankingClicksPerDay (void)
" WHERE crs_usr.CrsCod='%ld'"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>0"
+ " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCrs.Crs.CrsCod);
break;
diff --git a/swad_user.c b/swad_user.c
index e69e3707..c3dba97d 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -7440,3 +7440,30 @@ static float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
return NumUsrsPerCrs;
}
+
+/*****************************************************************************/
+/****************** Check if a user is banned in ranking *********************/
+/*****************************************************************************/
+
+bool Usr_CheckIfUsrBanned (long UsrCod)
+ {
+ char Query[128];
+
+ sprintf (Query,"SELECT COUNT(*) FROM usr_banned WHERE UsrCod='%ld'",
+ UsrCod);
+ return (DB_QueryCOUNT (Query,"can not check if user is banned") != 0);
+ }
+
+/*****************************************************************************/
+/****************** Check if a user is banned in ranking *********************/
+/*****************************************************************************/
+
+void Usr_RemoveUsrFromUsrBanned (long UsrCod)
+ {
+ char Query[128];
+
+ sprintf (Query,"DELETE FROM usr_banned WHERE UsrCod='%ld'",
+ UsrCod);
+ DB_QueryDELETE (Query,"can not remove user from users banned");
+ }
+
diff --git a/swad_user.h b/swad_user.h
index c76befca..15766dd4 100644
--- a/swad_user.h
+++ b/swad_user.h
@@ -327,4 +327,7 @@ void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);
void Usr_GetAndShowNumUsrsInPlatform (Rol_Role_t Role);
+bool Usr_CheckIfUsrBanned (long UsrCod);
+void Usr_RemoveUsrFromUsrBanned (long UsrCod);
+
#endif