From eb174fc852775ccdb9a33e8a6ee747d61058e250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sat, 24 Dec 2016 00:55:02 +0100 Subject: [PATCH] Version 16.106.1 --- swad_changelog.h | 3 +- swad_help.c | 4 +- swad_statistic.c | 574 +++++++++++++++++++++++------------------------ swad_statistic.h | 4 +- swad_text.c | 80 +++---- 5 files changed, 333 insertions(+), 332 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 5486a929d..5e87cce2f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -188,13 +188,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.106 (2016-12-23)" +#define Log_PLATFORM_VERSION "SWAD 16.106.1 (2016-12-24)" #define CSS_FILE "swad16.106.css" #define JS_FILE "swad16.101.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 16.106.1: Dec 24, 2016 Changes in stats about preferences. (211408 lines) Version 16.106: Dec 23, 2016 Changes in preferences. (211407 lines) Version 16.105.13:Dec 23, 2016 Changes in behaviour of labels in forms. (211411 lines) Version 16.105.12:Dec 21, 2016 Changes in behaviour of labels in forms. (211408 lines) diff --git a/swad_help.c b/swad_help.c index 2b9623721..f7a4aeec1 100644 --- a/swad_help.c +++ b/swad_help.c @@ -230,10 +230,10 @@ const char *Hlp_STATS_Figures_messages = WIKI "STATS.Figur const char *Hlp_STATS_Figures_surveys = WIKI "STATS.Figures#surveys"; const char *Hlp_STATS_Figures_webs_social_networks = WIKI "STATS.Figures#webs--social-networks"; const char *Hlp_STATS_Figures_language = WIKI "STATS.Figures#language"; -const char *Hlp_STATS_Figures_calendar = WIKI "STATS.Figures#calendar"; const char *Hlp_STATS_Figures_icons = WIKI "STATS.Figures#icons"; -const char *Hlp_STATS_Figures_theme = WIKI "STATS.Figures#theme"; const char *Hlp_STATS_Figures_menu = WIKI "STATS.Figures#menu"; +const char *Hlp_STATS_Figures_calendar = WIKI "STATS.Figures#calendar"; +const char *Hlp_STATS_Figures_theme = WIKI "STATS.Figures#theme"; const char *Hlp_STATS_Figures_columns = WIKI "STATS.Figures#columns"; const char *Hlp_STATS_Figures_privacy = WIKI "STATS.Figures#privacy"; diff --git a/swad_statistic.c b/swad_statistic.c index 37a0efa4f..63f856b26 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -238,10 +238,10 @@ static void Sta_GetAndShowSurveysStats (void); static void Sta_GetAndShowNumUsrsPerPrivacy (void); static void Sta_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,const char *FieldName); static void Sta_GetAndShowNumUsrsPerLanguage (void); -static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void); -static void Sta_GetAndShowNumUsrsPerTheme (void); static void Sta_GetAndShowNumUsrsPerIconSet (void); static void Sta_GetAndShowNumUsrsPerMenu (void); +static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void); +static void Sta_GetAndShowNumUsrsPerTheme (void); static void Sta_GetAndShowNumUsrsPerSideColumns (void); /*****************************************************************************/ @@ -3926,10 +3926,10 @@ void Sta_ShowFigures (void) Sta_GetAndShowSurveysStats, // Sta_SURVEYS Net_ShowWebAndSocialNetworksStats, // Sta_SOCIAL_NETWORKS Sta_GetAndShowNumUsrsPerLanguage, // Sta_LANGUAGES - Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK Sta_GetAndShowNumUsrsPerIconSet, // Sta_ICON_SETS - Sta_GetAndShowNumUsrsPerTheme, // Sta_THEMES Sta_GetAndShowNumUsrsPerMenu, // Sta_MENUS + Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK + Sta_GetAndShowNumUsrsPerTheme, // Sta_THEMES Sta_GetAndShowNumUsrsPerSideColumns, // Sta_SIDE_COLUMNS Sta_GetAndShowNumUsrsPerPrivacy, // Sta_PRIVACY }; @@ -8593,289 +8593,6 @@ static void Sta_GetAndShowNumUsrsPerLanguage (void) Lay_EndRoundFrameTable (); } -/*****************************************************************************/ -/***** Get and show number of users who have chosen a first day of week ******/ -/*****************************************************************************/ - -static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void) - { - extern const bool Cal_DayIsValidAsFirstDayOfWeek[7]; - extern const char *Hlp_STATS_Figures_calendar; - extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES]; - extern const char *Txt_Calendar; - extern const char *Txt_First_day_of_the_week; - extern const char *Txt_DAYS_SMALL[7]; - extern const char *Txt_No_of_users; - extern const char *Txt_PERCENT_of_users; - unsigned FirstDayOfWeek; - char Query[1024]; - unsigned NumUsrs[7]; // 7: seven days in a week - unsigned NumUsrsTotal = 0; - - /***** Start table *****/ - Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK], - NULL,Hlp_STATS_Figures_calendar,2); - - /***** Heading row *****/ - fprintf (Gbl.F.Out,"" - "" - "%s" - "" - "" - "%s" - "" - "" - "%s" - "" - "", - Txt_Calendar, - Txt_No_of_users, - Txt_PERCENT_of_users); - - /***** For each day... *****/ - for (FirstDayOfWeek = 0; // Monday - FirstDayOfWeek <= 6; // Sunday - FirstDayOfWeek++) - if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek]) - { - /***** Get number of users who have chosen this first day of week from database *****/ - switch (Gbl.Scope.Current) - { - case Sco_SCOPE_SYS: - sprintf (Query,"SELECT COUNT(*) FROM usr_data" - " WHERE FirstDayOfWeek='%u'", - (unsigned) FirstDayOfWeek); - break; - case Sco_SCOPE_CTY: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM institutions,centres,degrees,courses,crs_usr,usr_data" - " 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_data.UsrCod" - " AND usr_data.FirstDayOfWeek='%u'", - Gbl.CurrentCty.Cty.CtyCod,(unsigned) FirstDayOfWeek); - break; - case Sco_SCOPE_INS: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM centres,degrees,courses,crs_usr,usr_data" - " 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_data.UsrCod" - " AND usr_data.FirstDayOfWeek='%u'", - Gbl.CurrentIns.Ins.InsCod,(unsigned) FirstDayOfWeek); - break; - case Sco_SCOPE_CTR: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM degrees,courses,crs_usr,usr_data" - " WHERE degrees.CtrCod='%ld'" - " AND degrees.DegCod=courses.DegCod" - " AND courses.CrsCod=crs_usr.CrsCod" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.FirstDayOfWeek='%u'", - Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) FirstDayOfWeek); - break; - case Sco_SCOPE_DEG: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM courses,crs_usr,usr_data" - " WHERE courses.DegCod='%ld'" - " AND courses.CrsCod=crs_usr.CrsCod" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.FirstDayOfWeek='%u'", - Gbl.CurrentDeg.Deg.DegCod,(unsigned) FirstDayOfWeek); - break; - case Sco_SCOPE_CRS: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM crs_usr,usr_data" - " WHERE crs_usr.CrsCod='%ld'" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.FirstDayOfWeek='%u'", - Gbl.CurrentCrs.Crs.CrsCod,(unsigned) FirstDayOfWeek); - break; - default: - Lay_ShowErrorAndExit ("Wrong scope."); - break; - } - NumUsrs[FirstDayOfWeek] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a layout"); - - /* Update total number of users */ - NumUsrsTotal += NumUsrs[FirstDayOfWeek]; - } - - /***** Write number of users who have chosen each layout *****/ - for (FirstDayOfWeek = 0; // Monday - FirstDayOfWeek <= 6; // Sunday - FirstDayOfWeek++) - if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek]) - fprintf (Gbl.F.Out,"" - "" - "\"%s\"" - "" - "" - "%u" - "" - "" - "%5.2f%%" - "" - "", - Gbl.Prefs.IconsURL,FirstDayOfWeek, - Txt_DAYS_SMALL[FirstDayOfWeek], - Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek], - NumUsrs[FirstDayOfWeek], - NumUsrsTotal ? (float) NumUsrs[FirstDayOfWeek] * 100.0 / - (float) NumUsrsTotal : - 0); - - /***** End table *****/ - Lay_EndRoundFrameTable (); - } - -/*****************************************************************************/ -/********** Get and show number of users who have chosen a theme *************/ -/*****************************************************************************/ - -static void Sta_GetAndShowNumUsrsPerTheme (void) - { - extern const char *Hlp_STATS_Figures_theme; - extern const char *The_ThemeId[The_NUM_THEMES]; - extern const char *The_ThemeNames[The_NUM_THEMES]; - extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES]; - extern const char *Txt_Theme_SKIN; - extern const char *Txt_No_of_users; - extern const char *Txt_PERCENT_of_users; - The_Theme_t Theme; - char Query[1024]; - unsigned NumUsrs[The_NUM_THEMES]; - unsigned NumUsrsTotal = 0; - - /***** Start table *****/ - Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_THEMES], - NULL,Hlp_STATS_Figures_theme,2); - - /***** Heading row *****/ - fprintf (Gbl.F.Out,"" - "" - "%s" - "" - "" - "%s" - "" - "" - "%s" - "" - "", - Txt_Theme_SKIN, - Txt_No_of_users, - Txt_PERCENT_of_users); - - /***** For each theme... *****/ - for (Theme = (The_Theme_t) 0; - Theme < The_NUM_THEMES; - Theme++) - { - /***** Get number of users who have chosen this theme from database *****/ - switch (Gbl.Scope.Current) - { - case Sco_SCOPE_SYS: - sprintf (Query,"SELECT COUNT(*) FROM usr_data" - " WHERE Theme='%s'", - The_ThemeId[Theme]); - break; - case Sco_SCOPE_CTY: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM institutions,centres,degrees,courses,crs_usr,usr_data" - " 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_data.UsrCod" - " AND usr_data.Theme='%s'", - Gbl.CurrentCty.Cty.CtyCod,The_ThemeId[Theme]); - break; - case Sco_SCOPE_INS: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM centres,degrees,courses,crs_usr,usr_data" - " 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_data.UsrCod" - " AND usr_data.Theme='%s'", - Gbl.CurrentIns.Ins.InsCod,The_ThemeId[Theme]); - break; - case Sco_SCOPE_CTR: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM degrees,courses,crs_usr,usr_data" - " WHERE degrees.CtrCod='%ld'" - " AND degrees.DegCod=courses.DegCod" - " AND courses.CrsCod=crs_usr.CrsCod" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.Theme='%s'", - Gbl.CurrentCtr.Ctr.CtrCod,The_ThemeId[Theme]); - break; - case Sco_SCOPE_DEG: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM courses,crs_usr,usr_data" - " WHERE courses.DegCod='%ld'" - " AND courses.CrsCod=crs_usr.CrsCod" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.Theme='%s'", - Gbl.CurrentDeg.Deg.DegCod,The_ThemeId[Theme]); - break; - case Sco_SCOPE_CRS: - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM crs_usr,usr_data" - " WHERE crs_usr.CrsCod='%ld'" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND usr_data.Theme='%s'", - Gbl.CurrentCrs.Crs.CrsCod,The_ThemeId[Theme]); - break; - default: - Lay_ShowErrorAndExit ("Wrong scope."); - break; - } - NumUsrs[Theme] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a theme"); - - /* Update total number of users */ - NumUsrsTotal += NumUsrs[Theme]; - } - - /***** Write number of users who have chosen each theme *****/ - for (Theme = (The_Theme_t) 0; - Theme < The_NUM_THEMES; - Theme++) - fprintf (Gbl.F.Out,"" - "" - "\"%s\"" - "" - "" - "%u" - "" - "" - "%5.2f%%" - "" - "", - Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_THEMES,The_ThemeId[Theme], - The_ThemeNames[Theme], - The_ThemeNames[Theme], - NumUsrs[Theme], - NumUsrsTotal ? (float) NumUsrs[Theme] * 100.0 / - (float) NumUsrsTotal : - 0); - - /***** End table *****/ - Lay_EndRoundFrameTable (); - } - /*****************************************************************************/ /********* Get and show number of users who have chosen an icon set **********/ /*****************************************************************************/ @@ -9159,6 +8876,289 @@ static void Sta_GetAndShowNumUsrsPerMenu (void) Lay_EndRoundFrameTable (); } +/*****************************************************************************/ +/***** Get and show number of users who have chosen a first day of week ******/ +/*****************************************************************************/ + +static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void) + { + extern const bool Cal_DayIsValidAsFirstDayOfWeek[7]; + extern const char *Hlp_STATS_Figures_calendar; + extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES]; + extern const char *Txt_Calendar; + extern const char *Txt_First_day_of_the_week; + extern const char *Txt_DAYS_SMALL[7]; + extern const char *Txt_No_of_users; + extern const char *Txt_PERCENT_of_users; + unsigned FirstDayOfWeek; + char Query[1024]; + unsigned NumUsrs[7]; // 7: seven days in a week + unsigned NumUsrsTotal = 0; + + /***** Start table *****/ + Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK], + NULL,Hlp_STATS_Figures_calendar,2); + + /***** Heading row *****/ + fprintf (Gbl.F.Out,"" + "" + "%s" + "" + "" + "%s" + "" + "" + "%s" + "" + "", + Txt_Calendar, + Txt_No_of_users, + Txt_PERCENT_of_users); + + /***** For each day... *****/ + for (FirstDayOfWeek = 0; // Monday + FirstDayOfWeek <= 6; // Sunday + FirstDayOfWeek++) + if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek]) + { + /***** Get number of users who have chosen this first day of week from database *****/ + switch (Gbl.Scope.Current) + { + case Sco_SCOPE_SYS: + sprintf (Query,"SELECT COUNT(*) FROM usr_data" + " WHERE FirstDayOfWeek='%u'", + (unsigned) FirstDayOfWeek); + break; + case Sco_SCOPE_CTY: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM institutions,centres,degrees,courses,crs_usr,usr_data" + " 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_data.UsrCod" + " AND usr_data.FirstDayOfWeek='%u'", + Gbl.CurrentCty.Cty.CtyCod,(unsigned) FirstDayOfWeek); + break; + case Sco_SCOPE_INS: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM centres,degrees,courses,crs_usr,usr_data" + " 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_data.UsrCod" + " AND usr_data.FirstDayOfWeek='%u'", + Gbl.CurrentIns.Ins.InsCod,(unsigned) FirstDayOfWeek); + break; + case Sco_SCOPE_CTR: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM degrees,courses,crs_usr,usr_data" + " WHERE degrees.CtrCod='%ld'" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.FirstDayOfWeek='%u'", + Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) FirstDayOfWeek); + break; + case Sco_SCOPE_DEG: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM courses,crs_usr,usr_data" + " WHERE courses.DegCod='%ld'" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.FirstDayOfWeek='%u'", + Gbl.CurrentDeg.Deg.DegCod,(unsigned) FirstDayOfWeek); + break; + case Sco_SCOPE_CRS: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM crs_usr,usr_data" + " WHERE crs_usr.CrsCod='%ld'" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.FirstDayOfWeek='%u'", + Gbl.CurrentCrs.Crs.CrsCod,(unsigned) FirstDayOfWeek); + break; + default: + Lay_ShowErrorAndExit ("Wrong scope."); + break; + } + NumUsrs[FirstDayOfWeek] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a layout"); + + /* Update total number of users */ + NumUsrsTotal += NumUsrs[FirstDayOfWeek]; + } + + /***** Write number of users who have chosen each layout *****/ + for (FirstDayOfWeek = 0; // Monday + FirstDayOfWeek <= 6; // Sunday + FirstDayOfWeek++) + if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek]) + fprintf (Gbl.F.Out,"" + "" + "\"%s\"" + "" + "" + "%u" + "" + "" + "%5.2f%%" + "" + "", + Gbl.Prefs.IconsURL,FirstDayOfWeek, + Txt_DAYS_SMALL[FirstDayOfWeek], + Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek], + NumUsrs[FirstDayOfWeek], + NumUsrsTotal ? (float) NumUsrs[FirstDayOfWeek] * 100.0 / + (float) NumUsrsTotal : + 0); + + /***** End table *****/ + Lay_EndRoundFrameTable (); + } + +/*****************************************************************************/ +/********** Get and show number of users who have chosen a theme *************/ +/*****************************************************************************/ + +static void Sta_GetAndShowNumUsrsPerTheme (void) + { + extern const char *Hlp_STATS_Figures_theme; + extern const char *The_ThemeId[The_NUM_THEMES]; + extern const char *The_ThemeNames[The_NUM_THEMES]; + extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES]; + extern const char *Txt_Theme_SKIN; + extern const char *Txt_No_of_users; + extern const char *Txt_PERCENT_of_users; + The_Theme_t Theme; + char Query[1024]; + unsigned NumUsrs[The_NUM_THEMES]; + unsigned NumUsrsTotal = 0; + + /***** Start table *****/ + Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_THEMES], + NULL,Hlp_STATS_Figures_theme,2); + + /***** Heading row *****/ + fprintf (Gbl.F.Out,"" + "" + "%s" + "" + "" + "%s" + "" + "" + "%s" + "" + "", + Txt_Theme_SKIN, + Txt_No_of_users, + Txt_PERCENT_of_users); + + /***** For each theme... *****/ + for (Theme = (The_Theme_t) 0; + Theme < The_NUM_THEMES; + Theme++) + { + /***** Get number of users who have chosen this theme from database *****/ + switch (Gbl.Scope.Current) + { + case Sco_SCOPE_SYS: + sprintf (Query,"SELECT COUNT(*) FROM usr_data" + " WHERE Theme='%s'", + The_ThemeId[Theme]); + break; + case Sco_SCOPE_CTY: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM institutions,centres,degrees,courses,crs_usr,usr_data" + " 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_data.UsrCod" + " AND usr_data.Theme='%s'", + Gbl.CurrentCty.Cty.CtyCod,The_ThemeId[Theme]); + break; + case Sco_SCOPE_INS: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM centres,degrees,courses,crs_usr,usr_data" + " 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_data.UsrCod" + " AND usr_data.Theme='%s'", + Gbl.CurrentIns.Ins.InsCod,The_ThemeId[Theme]); + break; + case Sco_SCOPE_CTR: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM degrees,courses,crs_usr,usr_data" + " WHERE degrees.CtrCod='%ld'" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.Theme='%s'", + Gbl.CurrentCtr.Ctr.CtrCod,The_ThemeId[Theme]); + break; + case Sco_SCOPE_DEG: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM courses,crs_usr,usr_data" + " WHERE courses.DegCod='%ld'" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.Theme='%s'", + Gbl.CurrentDeg.Deg.DegCod,The_ThemeId[Theme]); + break; + case Sco_SCOPE_CRS: + sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" + " FROM crs_usr,usr_data" + " WHERE crs_usr.CrsCod='%ld'" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.Theme='%s'", + Gbl.CurrentCrs.Crs.CrsCod,The_ThemeId[Theme]); + break; + default: + Lay_ShowErrorAndExit ("Wrong scope."); + break; + } + NumUsrs[Theme] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a theme"); + + /* Update total number of users */ + NumUsrsTotal += NumUsrs[Theme]; + } + + /***** Write number of users who have chosen each theme *****/ + for (Theme = (The_Theme_t) 0; + Theme < The_NUM_THEMES; + Theme++) + fprintf (Gbl.F.Out,"" + "" + "\"%s\"" + "" + "" + "%u" + "" + "" + "%5.2f%%" + "" + "", + Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_THEMES,The_ThemeId[Theme], + The_ThemeNames[Theme], + The_ThemeNames[Theme], + NumUsrs[Theme], + NumUsrsTotal ? (float) NumUsrs[Theme] * 100.0 / + (float) NumUsrsTotal : + 0); + + /***** End table *****/ + Lay_EndRoundFrameTable (); + } + /*****************************************************************************/ /***** Get and show number of users who have chosen a layout of columns ******/ /*****************************************************************************/ diff --git a/swad_statistic.h b/swad_statistic.h index 84f7035e0..024cc9f7e 100644 --- a/swad_statistic.h +++ b/swad_statistic.h @@ -117,10 +117,10 @@ typedef enum Sta_SURVEYS, // Number of surveys Sta_SOCIAL_NETWORKS, // Number of users in social networks Sta_LANGUAGES, // Number of users per language - Sta_FIRST_DAY_OF_WEEK, // Number of users per first day of week Sta_ICON_SETS, // Number of users per icon set - Sta_THEMES, // Number of users per theme Sta_MENUS, // Number of users per menu + Sta_FIRST_DAY_OF_WEEK, // Number of users per first day of week + Sta_THEMES, // Number of users per theme Sta_SIDE_COLUMNS, // Number of users per layout of columns Sta_PRIVACY, // Number of users per privacity } Sta_FigureType_t; diff --git a/swad_text.c b/swad_text.c index 88769126d..a3292a114 100644 --- a/swad_text.c +++ b/swad_text.c @@ -39393,26 +39393,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] = "Lingua" #endif , -#if L==1 // Sta_FIRST_DAY_OF_WEEK - "Calendari" -#elif L==2 - "Kalender" -#elif L==3 - "Calendar" -#elif L==4 - "Calendario" -#elif L==5 - "Calendrier" -#elif L==6 - "Arapapaha" -#elif L==7 - "Calendario" -#elif L==8 - "Kalendarz" -#elif L==9 - "Calendário" -#endif - , #if L==1 // Sta_ICON_SETS "Icones" #elif L==2 @@ -39433,26 +39413,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] = "Ícones" #endif , -#if L==1 // Sta_THEMES - "Tema (colors)" -#elif L==2 - "Skin" -#elif L==3 - "Theme" -#elif L==4 - "Tema (colores)" -#elif L==5 - "Thème" -#elif L==6 - "Tema (colores)" // Okoteve traducción -#elif L==7 - "Tema" -#elif L==8 - "Temat" -#elif L==9 - "Skin" -#endif - , #if L==1 // Sta_MENUS "Menú" #elif L==2 @@ -39473,6 +39433,46 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] = "Menu" #endif , +#if L==1 // Sta_FIRST_DAY_OF_WEEK + "Calendari" +#elif L==2 + "Kalender" +#elif L==3 + "Calendar" +#elif L==4 + "Calendario" +#elif L==5 + "Calendrier" +#elif L==6 + "Arapapaha" +#elif L==7 + "Calendario" +#elif L==8 + "Kalendarz" +#elif L==9 + "Calendário" +#endif + , +#if L==1 // Sta_THEMES + "Tema (colors)" +#elif L==2 + "Skin" +#elif L==3 + "Theme" +#elif L==4 + "Tema (colores)" +#elif L==5 + "Thème" +#elif L==6 + "Tema (colores)" // Okoteve traducción +#elif L==7 + "Tema" +#elif L==8 + "Temat" +#elif L==9 + "Skin" +#endif + , #if L==1 // Sta_SIDE_COLUMNS "Columnes" #elif L==2