From 7045feb55423d8f257965ed8b411acf9f9b3b307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sat, 21 Nov 2015 22:21:41 +0100 Subject: [PATCH] Version 15.43 --- swad_changelog.h | 3 +- swad_statistic.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++ swad_statistic.h | 3 +- swad_text.c | 20 +++++++ 4 files changed, 168 insertions(+), 2 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 61e108d62..77fc5ee2c 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -111,11 +111,12 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.42.4 (2015/11/21)" +#define Log_PLATFORM_VERSION "SWAD 15.43 (2015/11/21)" // 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.43: Nov 21, 2015 New figure (statistic) about first day of week. (187693 lines) Version 15.42.4: Nov 21, 2015 Fixed bug when getting first day of week from IP preferences. (187535 lines) Version 15.42.3: Nov 21, 2015 Stats of hits distributed by week depend on user's preference about first day of the week. (187528 lines) Version 15.42.2: Nov 21, 2015 Fixed bug in JavaScript code to draw months. (187524 lines) diff --git a/swad_statistic.c b/swad_statistic.c index edb65b5a2..0bdeff514 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -240,6 +240,7 @@ 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_GetAndShowNumUsrsPerLayout (void); static void Sta_GetAndShowNumUsrsPerTheme (void); static void Sta_GetAndShowNumUsrsPerIconSet (void); @@ -3930,6 +3931,10 @@ void Sta_ShowUseOfPlatform (void) /***** Number of users who have chosen a language *****/ Sta_GetAndShowNumUsrsPerLanguage (); break; + case Sta_FIRST_DAY_OF_WEEK: + /***** Number of users who have chosen a first day of week *****/ + Sta_GetAndShowNumUsrsPerFirstDayOfWeek (); + break; case Sta_LAYOUTS: /***** Number of users who have chosen a layout *****/ Sta_GetAndShowNumUsrsPerLayout (); @@ -7771,6 +7776,145 @@ 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 *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[Lay_NUM_LAYOUTS]; + unsigned NumUsrsTotal = 0; + + Lay_StartRoundFrameTable (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK]); + + /***** 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); + + Lay_EndRoundFrameTable (); + } + /*****************************************************************************/ /********* Get and show number of users who have chosen a layout *************/ /*****************************************************************************/ diff --git a/swad_statistic.h b/swad_statistic.h index e4a8aaae3..dccf340d6 100644 --- a/swad_statistic.h +++ b/swad_statistic.h @@ -97,7 +97,7 @@ typedef enum Sta_CLICKS_GBL_PER_COURSE = 23, } Sta_ClicksGroupedBy_t; -#define Sta_NUM_FIGURES 21 +#define Sta_NUM_FIGURES 22 typedef enum { Sta_USERS, // Number of users @@ -116,6 +116,7 @@ typedef enum Sta_SURVEYS, // Number of surveys Sta_PRIVACY, // Number of users per privacity Sta_LANGUAGES, // Number of users per language + Sta_FIRST_DAY_OF_WEEK, // Number of users per first day of week Sta_LAYOUTS, // Number of users per layout Sta_THEMES, // Number of users per theme Sta_ICON_SETS, // Number of users per icon set diff --git a/swad_text.c b/swad_text.c index e2b567209..8f4a08c70 100644 --- a/swad_text.c +++ b/swad_text.c @@ -36715,6 +36715,26 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] = "Lingua" #endif , +#if L==0 // Sta_FIRST_DAY_OF_WEEK + "Calendari" +#elif L==1 + "Kalender" +#elif L==2 + "Calendar" +#elif L==3 + "Calendario" +#elif L==4 + "Calendrier" +#elif L==5 + "Arapapaha" +#elif L==6 + "Calendario" +#elif L==7 + "Kalendarz" +#elif L==8 + "Calendário" +#endif + , #if L==0 // Sta_LAYOUTS "Disseny" #elif L==1