diff --git a/css/swad_desktop.css b/css/swad_desktop.css index b1c1b643..200bba60 100644 --- a/css/swad_desktop.css +++ b/css/swad_desktop.css @@ -300,7 +300,7 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;} } .TIT_TBL_10 { - margin:0 10px 10px 10px; + margin:10px; color:#808080; font-size:16pt; font-weight:bold; diff --git a/css/swad_mobile.css b/css/swad_mobile.css index 5ccaa737..046e7251 100644 --- a/css/swad_mobile.css +++ b/css/swad_mobile.css @@ -264,7 +264,7 @@ p {margin:0;} } .TIT_TBL_10 { - margin:0 10px 10px 10px; + margin:10px; color:#808080; font-size:20pt; font-weight:bold; diff --git a/sql/cambios.sql b/sql/cambios.sql index 69e6c150..941df0b0 100644 --- a/sql/cambios.sql +++ b/sql/cambios.sql @@ -10518,5 +10518,29 @@ CREATE TABLE IF NOT EXISTS usr_figures (UsrCod INT NOT NULL,FirstClickTime DATET SELECT * FROM usr_figures WHERE NumClicks>='0' AND FirstClickTime>'0'; -SELECT COUNT(*)+1 FROM (SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay FROM usr_figures WHERE NumClicks>='0' AND UNIX_TIMESTAMP(FirstClickTime)>'0') AS TableNumClicksPerDay WHERE NumClicksPerDay>(SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) FROM usr_figures WHERE UsrCod='1' AND NumClicks>='0' AND UNIX_TIMESTAMP(FirstClickTime)>'0'); +SELECT COUNT(*)+1 FROM (SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay FROM (SELECT UsrCod,COUNT(*) AS N FROM msg_snt_deleted GROUP BY UsrCod) UNION (SELECT UsrCod,'0' FROM usr_figures WHERE UsrCod NOT IN (SELECT UsrCod FROM msg_snt_deleted))usr_figures WHERE NumClicks>='0' AND UNIX_TIMESTAMP(FirstClickTime)>'0') AS TableNumClicksPerDay WHERE NumClicksPerDay>(SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) FROM usr_figures WHERE UsrCod='1' AND NumClicks>='0' AND UNIX_TIMESTAMP(FirstClickTime)>'0'); + +----- 2015-03-15, swad14.92.2 + +INSERT INTO usr_figures (UsrCod,FirstClickTime,NumClicks,NumFileViews,NumForPst,NumMsgSnt) SELECT UsrCod,0,-1,-1,-1,-1 FROM usr_data WHERE UsrCod>0 AND UsrCod NOT IN (SELECT UsrCod FROM usr_figures); + + +Hecho: +UPDATE usr_figures,((SELECT UsrCod,COUNT(*) AS N FROM forum_post WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,'0' AS N FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM forum_post))) AS FP SET usr_figures.NumForPst=FP.N WHERE usr_figures.UsrCod>=@USRCODMIN AND usr_figures.UsrCod<=@USRCODMAX AND usr_figures.NumForPst<0 AND usr_figures.UsrCod=FP.UsrCod; +UPDATE usr_figures,((SELECT UsrCod,COUNT(*) AS N FROM log WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,'0' AS N FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM log))) AS NC SET usr_figures.NumClicks=NC.N WHERE usr_figures.UsrCod>=@USRCODMIN AND usr_figures.UsrCod<=@USRCODMAX AND usr_figures.NumClicks<0 AND usr_figures.UsrCod=NC.UsrCod; +UPDATE usr_figures,((SELECT UsrCod,COUNT(*) AS N FROM msg_snt WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,'0' AS N FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM msg_snt))) AS MS,((SELECT UsrCod,COUNT(*) AS N FROM msg_snt_deleted WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,'0' AS N FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM msg_snt_deleted))) AS MSD SET usr_figures.NumMsgSnt=MS.N+MSD.N WHERE usr_figures.UsrCod>=@USRCODMIN AND usr_figures.UsrCod<=@USRCODMAX AND usr_figures.NumMsgSnt<0 AND usr_figures.UsrCod=MS.UsrCod AND usr_figures.UsrCod=MSD.UsrCod; + +Haciendo: +SET @USRCODMIN=0; +SET @USRCODMAX=1000; +UPDATE usr_figures,((SELECT UsrCod,MIN(ClickTime) AS FCT FROM log WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,0 AS FCT FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM log))) AS CT SET usr_figures.FirstClickTime=CT.FCT WHERE usr_figures.UsrCod>=@USRCODMIN AND usr_figures.UsrCod<=@USRCODMAX AND usr_figures.FirstClickTime=0 AND usr_figures.UsrCod=CT.UsrCod; + + +SET @USRCODMIN=0; +SET @USRCODMAX=1000; +UPDATE usr_figures,((SELECT UsrCod,SUM(NumViews) AS N FROM file_view WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX GROUP BY UsrCod) UNION (SELECT UsrCod,'0' AS N FROM usr_figures WHERE UsrCod>=@USRCODMIN AND UsrCod<=@USRCODMAX AND UsrCod NOT IN (SELECT UsrCod FROM file_view))) AS FV SET usr_figures.NumFileViews=FV.N WHERE usr_figures.UsrCod>=@USRCODMIN AND usr_figures.UsrCod<=@USRCODMAX AND usr_figures.NumFileViews<0 AND usr_figures.UsrCod=FV.UsrCod; + + + + diff --git a/swad_changelog.h b/swad_changelog.h index 2039cdfc..56669d26 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,12 +103,13 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.92.2 (2015/03/15)" +#define Log_PLATFORM_VERSION "SWAD 14.93 (2015/03/16)" // 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.92.2: Mar 14, 2015 Fixed minor bug in photo edition. (182208 lines) + Version 14.93: Mar 16, 2015 Users' ranking. (182527 lines) + Version 14.92.2: Mar 15, 2015 Fixed minor bug in photo edition. (182208 lines) Version 14.92.1: Mar 14, 2015 Changes on request of a nickname to view user's profile. (182205 lines) Version 14.92: Mar 14, 2015 New module swad_profile for public user's profile. (182202 lines) 1 change necessary in Makefile: diff --git a/swad_connected.c b/swad_connected.c index 0dfa4626..a953e363 100644 --- a/swad_connected.c +++ b/swad_connected.c @@ -1268,7 +1268,7 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R } /***** Free structure that stores the query result *****/ - mysql_free_result (mysql_res); + DB_FreeMySQLResult (&mysql_res); } /*****************************************************************************/ diff --git a/swad_file_browser.c b/swad_file_browser.c index 35f03aa5..d86a6e6b 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -10004,10 +10004,6 @@ unsigned long Brw_GetNumFileViewsUsr (long UsrCod) MYSQL_ROW row; unsigned long FileViews; - /***** Get number of posts from a user from database *****/ - sprintf (Query,"SELECT SUM(FileViews) FROM file_views WHERE UsrCod='%ld'", - UsrCod); - /***** Get number of filw views *****/ sprintf (Query,"SELECT SUM(NumViews) FROM file_view WHERE UsrCod='%ld'", UsrCod); diff --git a/swad_profile.c b/swad_profile.c index fcaed4c1..ba7f6810 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -1117,3 +1117,265 @@ void Prf_IncrementNumMsgSntUsr (long UsrCod) UsrCod); DB_QueryINSERT (Query,"can not increment user's messages sent"); } + +/*****************************************************************************/ +/******** Get and show ranking of users attending to number of clicks ********/ +/*****************************************************************************/ + +void Prf_GetAndShowRankingClicks (void) + { + char Query[512]; + MYSQL_RES *mysql_res; + MYSQL_ROW row; + unsigned NumUsrs; + unsigned NumUsr; + struct UsrData UsrDat; + unsigned long NumClicks; + + /***** Get ranking from database *****/ + switch (Gbl.Scope.Current) + { + case Sco_SCOPE_SYS: + sprintf (Query,"SELECT UsrCod,NumClicks" + " FROM usr_figures" + " WHERE NumClicks>='0'" + " ORDER BY NumClicks DESC LIMIT 10"); + break; + case Sco_SCOPE_CTY: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.NumClicks" + " FROM institutions,centres,degrees,courses,crs_usr,usr_figures" + " WHERE institutions.CtyCod='%ld'" + " AND institutions.InsCod=centres.InsCod" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.NumClicks>='0'" + " ORDER BY usr_figures.NumClicks DESC LIMIT 10", + Gbl.CurrentCty.Cty.CtyCod); + break; + case Sco_SCOPE_INS: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.NumClicks" + " FROM centres,degrees,courses,crs_usr,usr_figures" + " WHERE centres.InsCod='%ld'" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.NumClicks>='0'" + " ORDER BY usr_figures.NumClicks DESC LIMIT 10", + Gbl.CurrentIns.Ins.InsCod); + break; + case Sco_SCOPE_CTR: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.NumClicks" + " FROM degrees,courses,crs_usr,usr_figures" + " WHERE degrees.CtrCod='%ld'" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.NumClicks>='0'" + " ORDER BY usr_figures.NumClicks DESC LIMIT 10", + Gbl.CurrentCtr.Ctr.CtrCod); + break; + case Sco_SCOPE_DEG: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.NumClicks" + " FROM courses,crs_usr,usr_figures" + " WHERE courses.DegCod='%ld'" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.NumClicks>='0'" + " ORDER BY usr_figures.NumClicks DESC LIMIT 10", + Gbl.CurrentDeg.Deg.DegCod); + break; + case Sco_SCOPE_CRS: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.NumClicks" + " FROM crs_usr,usr_figures" + " WHERE crs_usr.CrsCod='%ld'" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.NumClicks>='0'" + " ORDER BY usr_figures.NumClicks DESC LIMIT 10", + Gbl.CurrentCrs.Crs.CrsCod); + break; + default: + Lay_ShowErrorAndExit ("Wrong scope."); + break; + } + NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get ranking"); + if (NumUsrs) + { + /***** Initialize structure with user's data *****/ + Usr_UsrDataConstructor (&UsrDat); + + fprintf (Gbl.F.Out,""); + + for (NumUsr = 1; + 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); + + /* Get number of clicks (row[1]) */ + if (sscanf (row[1],"%ld",&NumClicks) != 1) + NumClicks = -1L; + + /***** Show row *****/ + if (UsrDat.Nickname[0]) + fprintf (Gbl.F.Out,"" + "" + "" + "" + "", + NumUsr, + UsrDat.Nickname, + NumClicks); + } + + fprintf (Gbl.F.Out,"
#%u@%s%ld
"); + + /***** Free memory used for user's data *****/ + Usr_UsrDataDestructor (&UsrDat); + } + + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + } + +/*****************************************************************************/ +/**** Get and show ranking of users attending to number of clicks per day ****/ +/*****************************************************************************/ + +void Prf_GetAndShowRankingClicksPerDay (void) + { + char Query[512]; + MYSQL_RES *mysql_res; + MYSQL_ROW row; + unsigned NumUsrs; + unsigned NumUsr; + struct UsrData UsrDat; + float NumClicksPerDay; + + /***** Get ranking from database *****/ + switch (Gbl.Scope.Current) + { + case Sco_SCOPE_SYS: + sprintf (Query,"SELECT UsrCod," + "NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay" + " FROM usr_figures" + " WHERE FirstClickTime>0" + " ORDER BY NumClicksPerDay DESC LIMIT 10"); + break; + case Sco_SCOPE_CTY: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod," + "usr_figures.NumClicks/(DATEDIFF(NOW(),usr_figures.FirstClickTime)+1) AS NumClicksPerDay" + " FROM institutions,centres,degrees,courses,crs_usr,usr_figures" + " WHERE institutions.CtyCod='%ld'" + " AND institutions.InsCod=centres.InsCod" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.FirstClickTime>0" + " ORDER BY NumClicksPerDay DESC LIMIT 10", + Gbl.CurrentCty.Cty.CtyCod); + break; + case Sco_SCOPE_INS: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod," + "usr_figures.NumClicks/(DATEDIFF(NOW(),usr_figures.FirstClickTime)+1) AS NumClicksPerDay" + " FROM centres,degrees,courses,crs_usr,usr_figures" + " WHERE centres.InsCod='%ld'" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.FirstClickTime>0" + " ORDER BY NumClicksPerDay DESC LIMIT 10", + Gbl.CurrentIns.Ins.InsCod); + break; + case Sco_SCOPE_CTR: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod," + "usr_figures.NumClicks/(DATEDIFF(NOW(),usr_figures.FirstClickTime)+1) AS NumClicksPerDay" + " FROM degrees,courses,crs_usr,usr_figures" + " WHERE degrees.CtrCod='%ld'" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.FirstClickTime>0'" + " ORDER BY NumClicksPerDay DESC LIMIT 10", + Gbl.CurrentCtr.Ctr.CtrCod); + break; + case Sco_SCOPE_DEG: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod," + "usr_figures.NumClicks/(DATEDIFF(NOW(),usr_figures.FirstClickTime)+1) AS NumClicksPerDay" + " FROM courses,crs_usr,usr_figures" + " WHERE courses.DegCod='%ld'" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.FirstClickTime>0" + " ORDER BY NumClicksPerDay DESC LIMIT 10", + Gbl.CurrentDeg.Deg.DegCod); + break; + case Sco_SCOPE_CRS: + sprintf (Query,"SELECT DISTINCTROW usr_figures.UsrCod," + "usr_figures.NumClicks/(DATEDIFF(NOW(),usr_figures.FirstClickTime)+1) AS NumClicksPerDay" + " FROM crs_usr,usr_figures" + " WHERE crs_usr.CrsCod='%ld'" + " AND crs_usr.UsrCod=usr_figures.UsrCod" + " AND usr_figures.FirstClickTime>0" + " ORDER BY NumClicksPerDay DESC LIMIT 10", + Gbl.CurrentCrs.Crs.CrsCod); + break; + default: + Lay_ShowErrorAndExit ("Wrong scope."); + break; + } + NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get ranking"); + if (NumUsrs) + { + /***** Initialize structure with user's data *****/ + Usr_UsrDataConstructor (&UsrDat); + + fprintf (Gbl.F.Out,""); + + for (NumUsr = 1; + 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); + + /* Get number of clicks per day (row[1]) */ + NumClicksPerDay = Str_GetFloatNumFromStr (row[1]); + + /***** Show row *****/ + if (UsrDat.Nickname[0]) + { + fprintf (Gbl.F.Out,"" + "" + "" + "" + ""); + } + } + + fprintf (Gbl.F.Out,"
#%u@%s", + NumUsr, + UsrDat.Nickname); + Str_WriteFloatNum (NumClicksPerDay); + fprintf (Gbl.F.Out,"
"); + + /***** Free memory used for user's data *****/ + Usr_UsrDataDestructor (&UsrDat); + } + + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + } diff --git a/swad_profile.h b/swad_profile.h index 63045f56..5dd2cfae 100644 --- a/swad_profile.h +++ b/swad_profile.h @@ -54,4 +54,7 @@ void Prf_IncrementNumFileViewsUsr (long UsrCod); void Prf_IncrementNumForPstUsr (long UsrCod); void Prf_IncrementNumMsgSntUsr (long UsrCod); +void Prf_GetAndShowRankingClicks (void); +void Prf_GetAndShowRankingClicksPerDay (void); + #endif diff --git a/swad_statistic.c b/swad_statistic.c index 15bb8295..7b82f55d 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -132,6 +132,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void); static void Sta_GetAndShowNumCrssInSWAD (void); static void Sta_GetAndShowUsersStats (void); +static void Sta_GetAndShowUsersRanking (void); static void Sta_GetAndShowFileBrowsersStats (void); static void Sta_WriteStatsExpTreesTableHead (void); @@ -3676,6 +3677,10 @@ void Sta_ShowUseOfPlatform (void) /***** Number of users *****/ Sta_GetAndShowUsersStats (); break; + case Sta_USRS_RANKING: + /***** Users ranking *****/ + Sta_GetAndShowUsersRanking (); + break; case Sta_DEGREES_AND_COURSES: /***** Number of degrees and courses *****/ Sta_GetAndShowDegCrsStats (); @@ -3792,6 +3797,45 @@ static void Sta_GetAndShowUsersStats (void) Lay_EndRoundFrameTable10 (); } +/*****************************************************************************/ +/****************************** Show users' ranking **************************/ +/*****************************************************************************/ + +static void Sta_GetAndShowUsersRanking (void) + { + extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS]; + extern const char *Txt_Clicks; + extern const char *Txt_Clicks_per_day; + + Lay_StartRoundFrameTable10 (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_USRS_RANKING]); + + /***** Header *****/ + fprintf (Gbl.F.Out,"" + "" + "%s" + "" + "" + "%s" + "" + "", + Txt_Clicks, + Txt_Clicks_per_day); + + /***** Rankings *****/ + fprintf (Gbl.F.Out,"" + ""); + Prf_GetAndShowRankingClicks (); + fprintf (Gbl.F.Out,"" + ""); + Prf_GetAndShowRankingClicksPerDay (); + fprintf (Gbl.F.Out,"" + ""); + + Lay_EndRoundFrameTable10 (); + } + /*****************************************************************************/ /*************** Get and show stats about degrees and courses ****************/ /*****************************************************************************/ diff --git a/swad_statistic.h b/swad_statistic.h index c8590b72..291a5d95 100644 --- a/swad_statistic.h +++ b/swad_statistic.h @@ -86,10 +86,11 @@ typedef enum Sta_ACC_GBL_PER_COURSE = 20, } Sta_ClicksStatType_t; -#define Sta_NUM_TYPES_USE_STATS 19 +#define Sta_NUM_TYPES_USE_STATS 20 typedef enum { Sta_USERS, // Number of users + Sta_USRS_RANKING, // Users' ranking Sta_DEGREES_AND_COURSES, // Number of degrees and courses Sta_SOCIAL_NETWORKS, // Number of users in social networks Sta_FOLDERS_AND_FILES, // Number of folders and files @@ -101,7 +102,7 @@ typedef enum Sta_MSGS_BETWEEN_USERS, // Number of users' (sent and received) messages Sta_FORUMS, // Number of forums, threads and posts Sta_SURVEYS, // Number of surveys - Sta_PRIVACY, // Number of users per privacity + Sta_PRIVACY, // Number of users per privacity Sta_LANGUAGES, // Number of users per language Sta_LAYOUTS, // Number of users per layout Sta_THEMES, // Number of users per theme diff --git a/swad_text.c b/swad_text.c index 28448d38..e7c427fe 100644 --- a/swad_text.c +++ b/swad_text.c @@ -4563,6 +4563,27 @@ const char *Txt_clicks = "cliques"; #endif +const char *Txt_Clicks_per_day = +#if L==0 + "Clics per dia"; +#elif L==1 + "Klicks pro Tag"; +#elif L==2 + "Clicks per day"; +#elif L==3 + "Clics por día"; +#elif L==4 + "Clics par jour"; +#elif L==5 + "Clics por día"; // Okoteve traducción +#elif L==6 + "Clic al giorno"; +#elif L==7 + "Kliknięć dziennie"; +#elif L==8 + "Cliques por dia"; +#endif + const char *Txt_Clicks_without_degree_selected = #if L==0 "Clics sense seleccionar titulació"; @@ -35932,6 +35953,26 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] = "Utilizadores" #endif , +#if L==0 + "Rànquing" +#elif L==1 + "Rang" +#elif L==2 + "Ranking" +#elif L==3 + "Ranking" +#elif L==4 + "Classement" +#elif L==5 + "Ranking" // Okoteve traducción +#elif L==6 + "Posto" +#elif L==7 + "Ranking" +#elif L==8 + "Posição" +#endif + , #if L==0 "Titulaciones y asignaturas" // Necessita traducció #elif L==1 diff --git a/swad_user.c b/swad_user.c index f6cbb2fb..b8f5b39a 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3393,11 +3393,11 @@ long Usr_GetRamdomStdFromCrs (long CrsCod) /***** Get user code *****/ row = mysql_fetch_row (mysql_res); UsrCod = Str_ConvertStrCodToLongCod (row[0]); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); } + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + return UsrCod; }