Version 20.54: Mar 30, 2021 Statistics about agendas.

This commit is contained in:
acanas 2021-03-30 14:45:37 +02:00
parent ff125a81de
commit fb564b58cf
13 changed files with 238 additions and 137 deletions

View File

@ -1870,7 +1870,7 @@ unsigned Agd_GetNumEventsFromUsr (long UsrCod)
unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
{
/***** Get number of courses with events from database *****/
/***** Get number of users with events from database *****/
switch (Scope)
{
case Hie_Lvl_SYS:
@ -1893,7 +1893,6 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Cty.CtyCod);
@ -1909,7 +1908,6 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Ins.InsCod);
@ -1923,7 +1921,6 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
"agd_agendas"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Ctr.CtrCod);
@ -1935,7 +1932,6 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
"crs_users,"
"agd_agendas"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Deg.DegCod);
@ -1974,57 +1970,61 @@ unsigned Agd_GetNumEvents (Hie_Lvl_Level_t Scope)
return (unsigned)
DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users,"
" FROM (SELECT DISTINCT crs_users.UsrCod"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod) AS users,"
"agd_agendas"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
" WHERE users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS:
return (unsigned)
DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)"
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users,"
" FROM (SELECT DISTINCT crs_users.UsrCod"
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod) AS users,"
"agd_agendas"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
" WHERE users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR:
return (unsigned)
DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)"
" FROM deg_degrees,"
"crs_courses,"
"crs_users,"
" FROM (SELECT DISTINCT crs_users.UsrCod"
" FROM deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod) AS users,"
"agd_agendas"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
" WHERE users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG:
return (unsigned)
DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)"
" FROM crs_courses,"
"crs_users,"
" FROM (SELECT DISTINCT crs_users.UsrCod"
" FROM crs_courses,"
"crs_users"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_users.CrsCod) AS users,"
"agd_agendas"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=agd_agendas.UsrCod",
" WHERE users.UsrCod=agd_agendas.UsrCod",
Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS:
return (unsigned)

View File

@ -1896,7 +1896,6 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS:
@ -1910,7 +1909,6 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR:
@ -1922,7 +1920,6 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
"asg_assignments"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG:
@ -1932,7 +1929,6 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
" FROM crs_courses,"
"asg_assignments"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS:

View File

@ -1743,7 +1743,6 @@ unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope)
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
break;
@ -1755,7 +1754,6 @@ unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope)
"att_events"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
break;
@ -1765,7 +1763,6 @@ unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope)
" FROM crs_courses,"
"att_events"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
break;

View File

@ -600,13 +600,14 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/
#define Log_PLATFORM_VERSION "SWAD 20.53.1 (2021-03-30)"
#define Log_PLATFORM_VERSION "SWAD 20.54 (2021-03-30)"
#define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.54: Mar 30, 2021 Statistics about agendas. (309539 lines)
Version 20.53.1: Mar 30, 2021 Optimizations in database selects. (309459 lines)
Version 20.53: Mar 29, 2021 Code refactoring in database selects. (309473 lines)
Version 20.52: Mar 28, 2021 Code refactoring in database selects. (309103 lines)

View File

@ -31,6 +31,7 @@
#include <string.h> // For string functions
#include "swad_action.h"
#include "swad_agenda.h"
#include "swad_box.h"
#include "swad_database.h"
#include "swad_figure.h"
@ -183,6 +184,8 @@ static void Fig_GetAndShowNumUsrsPerNotifyEvent (void);
static void Fig_GetAndShowNoticesStats (void);
static void Fig_GetAndShowMsgsStats (void);
static void Fig_GetAndShowAgendasStats (void);
static void Fig_GetAndShowSurveysStats (void);
static void Fig_GetAndShowNumUsrsPerPrivacy (void);
static void Fig_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,
@ -347,6 +350,7 @@ void Fig_ShowFigures (void)
[Fig_NOTIFY_EVENTS ] = Fig_GetAndShowNumUsrsPerNotifyEvent,
[Fig_NOTICES ] = Fig_GetAndShowNoticesStats,
[Fig_MESSAGES ] = Fig_GetAndShowMsgsStats,
[Fig_AGENDAS ] = Fig_GetAndShowAgendasStats,
[Fig_SOCIAL_NETWORKS ] = Net_ShowWebAndSocialNetworksStats,
[Fig_LANGUAGES ] = Fig_GetAndShowNumUsrsPerLanguage,
[Fig_FIRST_DAY_OF_WEEK] = Fig_GetAndShowNumUsrsPerFirstDayOfWeek,
@ -431,7 +435,7 @@ static void Fig_GetAndShowNumUsrsInCrss (Rol_Role_t Role)
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == Hie_Lvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L)))));
-1L)))));
char *Class = (Role == Rol_UNK) ? "DAT_N LINE_TOP RB" :
"DAT RB";
unsigned Roles = (Role == Rol_UNK) ? ((1 << Rol_STD) |
@ -3567,18 +3571,7 @@ static void Fig_GetAndShowTimelineActivityStats (void)
HTM_TR_End ();
/***** Get total number of users *****/
NumUsrsTotal =
(Gbl.Scope.Current == Hie_Lvl_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetCachedNumUsrsInCrss (Gbl.Scope.Current,
(Gbl.Scope.Current == Hie_Lvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == Hie_Lvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == Hie_Lvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L))))),
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
NumUsrsTotal = Usr_GetTotalNumberOfUsers ();
/***** Get total number of following/followers from database *****/
for (NoteType = (Tml_Not_NoteType_t) 0;
@ -3921,18 +3914,7 @@ static void Fig_GetAndShowFollowStats (void)
HTM_TR_End ();
/***** Get total number of users *****/
NumUsrsTotal =
(Gbl.Scope.Current == Hie_Lvl_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetCachedNumUsrsInCrss (Gbl.Scope.Current,
(Gbl.Scope.Current == Hie_Lvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == Hie_Lvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == Hie_Lvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L))))),
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
NumUsrsTotal = Usr_GetTotalNumberOfUsers ();
/***** Get total number of following/followers from database *****/
for (Fol = 0;
@ -4553,8 +4535,8 @@ static void Fig_GetAndShowNumUsrsPerNotifyEvent (void)
extern const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS];
extern const char *Txt_Number_of_users;
extern const char *Txt_PERCENT_of_users;
extern const char *Txt_Number_of_BR_events;
extern const char *Txt_Number_of_BR_emails;
extern const char *Txt_Number_of_events;
extern const char *Txt_Number_of_emails;
extern const char *Txt_Total;
Ntf_NotifyEvent_t NotifyEvent;
char *SubQuery;
@ -4579,24 +4561,13 @@ static void Fig_GetAndShowNumUsrsPerNotifyEvent (void)
HTM_TH (1,1,"LM",Txt_Event);
HTM_TH (1,1,"RM",Txt_Number_of_users);
HTM_TH (1,1,"RM",Txt_PERCENT_of_users);
HTM_TH (1,1,"RM",Txt_Number_of_BR_events);
HTM_TH (1,1,"RM",Txt_Number_of_BR_emails);
HTM_TH (1,1,"RM",Txt_Number_of_events);
HTM_TH (1,1,"RM",Txt_Number_of_emails);
HTM_TR_End ();
/***** Get total number of users *****/
NumUsrsTotal =
(Gbl.Scope.Current == Hie_Lvl_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetCachedNumUsrsInCrss (Gbl.Scope.Current,
(Gbl.Scope.Current == Hie_Lvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == Hie_Lvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == Hie_Lvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L))))),
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH);
NumUsrsTotal = Usr_GetTotalNumberOfUsers ();
/***** Get total number of users who want to be
notified by email on some event, from database *****/
@ -4964,6 +4935,76 @@ static void Fig_GetAndShowMsgsStats (void)
Box_BoxTableEnd ();
}
/*****************************************************************************/
/********* Get and show number of users who have chosen a language ***********/
/*****************************************************************************/
static void Fig_GetAndShowAgendasStats (void)
{
extern const char *Hlp_ANALYTICS_Figures_agendas;
extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES];
extern const char *Txt_Number_of_events;
extern const char *Txt_Number_of_users;
extern const char *Txt_PERCENT_of_users;
extern const char *Txt_Number_of_events_per_user;
unsigned NumEvents;
unsigned NumUsrs;
unsigned NumUsrsTotal;
/***** Begin box and table *****/
Box_BoxTableBegin (NULL,Txt_FIGURE_TYPES[Fig_AGENDAS],
NULL,NULL,
Hlp_ANALYTICS_Figures_agendas,Box_NOT_CLOSABLE,2);
/***** Heading row *****/
HTM_TR_Begin (NULL);
HTM_TH (1,1,"RM",Txt_Number_of_events);
HTM_TH (1,1,"RM",Txt_Number_of_users);
HTM_TH (1,1,"RM",Txt_PERCENT_of_users);
HTM_TH (1,1,"RM",Txt_Number_of_events_per_user);
HTM_TR_End ();
/***** Number of agenda events *****/
NumEvents = Agd_GetNumEvents (Gbl.Scope.Current);
/***** Number of users with agenda events *****/
NumUsrs = Agd_GetNumUsrsWithEvents (Gbl.Scope.Current);
/***** Get total number of users in current scope *****/
NumUsrsTotal = Usr_GetTotalNumberOfUsers ();
/***** Write number of users who have chosen each language *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_Unsigned (NumEvents);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_Unsigned (NumUsrs);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_Percentage (NumUsrsTotal ? (double) NumUsrs * 100.0 /
(double) NumUsrsTotal :
0);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_Double2Decimals (NumUsrs ? (double) NumEvents /
(double) NumUsrs :
0);
HTM_TD_End ();
HTM_TR_End ();
/***** End table and box *****/
Box_BoxTableEnd ();
}
/*****************************************************************************/
/***************************** Show stats of surveys *************************/
/*****************************************************************************/

View File

@ -33,7 +33,7 @@
/************************** Public types and constants ***********************/
/*****************************************************************************/
#define Fig_NUM_FIGURES 30
#define Fig_NUM_FIGURES 31
typedef enum
{
Fig_USERS, // Number of users
@ -56,6 +56,7 @@ typedef enum
Fig_NOTIFY_EVENTS, // Number of users per notify event
Fig_NOTICES, // Number of notices
Fig_MESSAGES, // Number of users' (sent and received) messages
Fig_AGENDAS, // Number of agendas
Fig_SOCIAL_NETWORKS, // Number of users in social networks
Fig_LANGUAGES, // Number of users per language
Fig_FIRST_DAY_OF_WEEK, // Number of users per first day of week

View File

@ -3288,6 +3288,27 @@ const char *Hlp_ANALYTICS_Figures_messages =
"ANALYTICS.Figures.en#messages";
#endif
const char *Hlp_ANALYTICS_Figures_agendas =
#if L==1
"ANALYTICS.Figures.es#agendas";
#elif L==2
"ANALYTICS.Figures.en#agendas";
#elif L==3
"ANALYTICS.Figures.en#agendas";
#elif L==4
"ANALYTICS.Figures.es#agendas";
#elif L==5
"ANALYTICS.Figures.en#agendas";
#elif L==6
"ANALYTICS.Figures.es#agendas";
#elif L==7
"ANALYTICS.Figures.en#agendas";
#elif L==8
"ANALYTICS.Figures.en#agendas";
#elif L==9
"ANALYTICS.Figures.en#agendas";
#endif
const char *Hlp_ANALYTICS_Figures_webs_social_networks =
#if L==1
"ANALYTICS.Figures.es#webs--redes-sociales";

View File

@ -442,18 +442,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
unsigned NumUsrs;
/***** Get total number of users in current scope *****/
NumUsrsTotal =
(Gbl.Scope.Current == Hie_Lvl_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () :
Usr_GetCachedNumUsrsInCrss (Gbl.Scope.Current,
(Gbl.Scope.Current == Hie_Lvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == Hie_Lvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == Hie_Lvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L))))),
1 << Rol_STD |
1 << Rol_NET |
1 << Rol_TCH); // Any user
NumUsrsTotal = Usr_GetTotalNumberOfUsers ();
/***** Get number of users with a web / social network *****/
switch (Gbl.Scope.Current)

View File

@ -2205,7 +2205,6 @@ unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS:
@ -2219,7 +2218,6 @@ unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR:
@ -2231,7 +2229,6 @@ unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
"prg_items"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG:
@ -2241,7 +2238,6 @@ unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
" FROM crs_courses,"
"prg_items"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS:

View File

@ -4630,7 +4630,6 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS:
@ -4644,7 +4643,6 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR:
@ -4656,7 +4654,6 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
"prj_projects"
" WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG:
@ -4666,7 +4663,6 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
" FROM crs_courses,"
"prj_projects"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
break;

View File

@ -21319,7 +21319,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#if L==1 // ca
"Agenda"
#elif L==2 // de
"Organizer"
"Agenda"
#elif L==3 // en
"Agenda"
#elif L==4 // es
@ -23246,7 +23246,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#if L==1 // ca
"Agenda"
#elif L==2 // de
"Organizer"
"Agenda"
#elif L==3 // en
"Agenda (personal organizer)"
#elif L==4 // es
@ -29245,46 +29245,67 @@ const char *Txt_Number_of_BR_courses_with_BR_surveys =
"N.&ordm; de<br />disciplinas<br />com inqu&eacute;ritos";
#endif
const char *Txt_Number_of_BR_events =
const char *Txt_Number_of_events =
#if L==1 // ca
"N.&ordm; d'<br />esdeveniments.";
"N.&ordm; d'esdeveniments";
#elif L==2 // de
"Anzahl der<br />Ereignisse";
"Anzahl der Ereignisse";
#elif L==3 // en
"Number of<br />events";
"Number of events";
#elif L==4 // es
"N.&ordm; de<br />eventos";
"N.&ordm; de eventos";
#elif L==5 // fr
"Nombre<br />d'&eacute;v&eacute;nements";
"Nombre d'&eacute;v&eacute;nements";
#elif L==6 // gn
"N.&ordm; de<br />eventos"; // Okoteve traducción
"N.&ordm; de eventos"; // Okoteve traducción
#elif L==7 // it
"Numero di<br />eventi";
"Numero di eventi";
#elif L==8 // pl
"Liczba of<br />zdarzenia";
"Liczba of zdarzenia";
#elif L==9 // pt
"N&uacute;mero de<br />eventos";
"N&uacute;mero de eventos";
#endif
const char *Txt_Number_of_BR_emails =
const char *Txt_Number_of_events_per_user =
#if L==1 // ca
"N.&ordm; de<br />correos"; // Necessita traduccio
"N.&ordm; d'esdeveniments per usuari";
#elif L==2 // de
"Anzahl der<br />E-Mails";
"Anzahl der Ereignisse pro Benutzer";
#elif L==3 // en
"Number of<br />emails";
"Number of events per user";
#elif L==4 // es
"N.&ordm; de<br />correos";
"N.&ordm; de eventos por usuario";
#elif L==5 // fr
"Nombre<br />d'emails";
"Nombre d'&eacute;v&eacute;nements par utilisateur";
#elif L==6 // gn
"N.&ordm; de<br />correos"; // Okoteve traducción
"N.&ordm; de eventos por usuario"; // Okoteve traducción
#elif L==7 // it
"Numero di<br />email";
"Numero di eventi per utente";
#elif L==8 // pl
"Liczba<br />email";
"Liczba zdarze&nacute; na u&zdot;ytkownika";
#elif L==9 // pt
"N&uacute;mero de<br />emails";
"N&uacute;mero de eventos por utilizador";
#endif
const char *Txt_Number_of_emails =
#if L==1 // ca
"N.&ordm; de correos"; // Necessita traduccio
#elif L==2 // de
"Anzahl der E-Mails";
#elif L==3 // en
"Number of emails";
#elif L==4 // es
"N.&ordm; de correos";
#elif L==5 // fr
"Nombre d'emails";
#elif L==6 // gn
"N.&ordm; de correos"; // Okoteve traducción
#elif L==7 // it
"Numero di email";
#elif L==8 // pl
"Liczba email";
#elif L==9 // pt
"N&uacute;mero de emails";
#endif
const char *Txt_Number_of_BR_exams =
@ -32770,7 +32791,7 @@ const char *Txt_Public_agenda_USER = // Warning: it is very important to include
#if L==1 // ca
"Agenda p&uacute;blica de %s";
#elif L==2 // de
"&Ouml;ffentliche Organizer von %s";
"&Ouml;ffentliche Agenda von %s";
#elif L==3 // en
"%s's public agenda";
#elif L==4 // es
@ -44378,6 +44399,27 @@ const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES] =
"Wiadomo&sacute;ci"
#elif L==9 // pt
"Mensagens"
#endif
,
[Fig_AGENDAS] =
#if L==1 // ca
"Agendes"
#elif L==2 // de
"Agenden"
#elif L==3 // en
"Agendas"
#elif L==4 // es
"Agendas"
#elif L==5 // fr
"Agendas"
#elif L==6 // gn
"Aporyr&atilde;"
#elif L==7 // it
"Agende"
#elif L==8 // pl
"Pami&eogon;tnik"
#elif L==9 // pt
"Agendas"
#endif
,
[Fig_SOCIAL_NETWORKS] =

View File

@ -9395,13 +9395,34 @@ void Usr_ShowWarningNoUsersFound (Rol_Role_t Role)
/****************** Get total number of users in platform ********************/
/*****************************************************************************/
unsigned Usr_GetTotalNumberOfUsersInPlatform (void)
unsigned Usr_GetTotalNumberOfUsers (void)
{
/***** Get number of users from database *****/
return
(unsigned) DB_QueryCOUNT ("can not get number of users",
"SELECT COUNT(UsrCod)"
" FROM usr_data");
long Cod;
unsigned Roles;
/***** Get number of users with events from database *****/
switch (Gbl.Scope.Current)
{
case Hie_Lvl_SYS:
return (unsigned) DB_GetNumRowsTable ("usr_data"); // All users in platform
case Hie_Lvl_CTY:
case Hie_Lvl_INS:
case Hie_Lvl_CTR:
case Hie_Lvl_DEG:
case Hie_Lvl_CRS:
Cod = (Gbl.Scope.Current == Hie_Lvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == Hie_Lvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == Hie_Lvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == Hie_Lvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
Gbl.Hierarchy.Crs.CrsCod))));
Roles = (1 << Rol_STD) |
(1 << Rol_NET) |
(1 << Rol_TCH);
return Usr_GetCachedNumUsrsInCrss (Gbl.Scope.Current,Cod,Roles); // All users in courses
default:
Lay_WrongScopeExit ();
return 0; // Not reached
}
}
/*****************************************************************************/

View File

@ -516,7 +516,7 @@ bool Usr_ChkIfUsrCodExists (long UsrCod);
void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);
unsigned Usr_GetTotalNumberOfUsersInPlatform (void);
unsigned Usr_GetTotalNumberOfUsers (void);
unsigned Usr_GetNumUsrsInCrss (Hie_Lvl_Level_t Scope,long Cod,unsigned Roles);
unsigned Usr_GetCachedNumUsrsInCrss (Hie_Lvl_Level_t Scope,long Cod,unsigned Roles);