diff --git a/swad_centre_config.c b/swad_centre_config.c index 31197354..8df92bf2 100644 --- a/swad_centre_config.c +++ b/swad_centre_config.c @@ -96,7 +96,6 @@ static void CtrCfg_QR (void); static void CtrCfg_NumUsrs (void); static void CtrCfg_NumDegs (void); static void CtrCfg_NumCrss (void); -static void CtrCfg_NumUsrsInCrssOfCtr (Rol_Role_t Role); static void CtrCfg_UpdateCtrInsDB (long CtrCod,long InsCod); static void CtrCfg_UpdateCtrCoordinateDB (long CtrCod, @@ -210,10 +209,10 @@ static void CtrCfg_Configuration (bool PrintView) CtrCfg_NumCrss (); /***** Number of users in courses of this centre *****/ - CtrCfg_NumUsrsInCrssOfCtr (Rol_TCH); - CtrCfg_NumUsrsInCrssOfCtr (Rol_NET); - CtrCfg_NumUsrsInCrssOfCtr (Rol_STD); - CtrCfg_NumUsrsInCrssOfCtr (Rol_UNK); + HieCfg_NumUsrsInCrss (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod,Rol_UNK); } /***** End table *****/ @@ -804,35 +803,6 @@ static void CtrCfg_NumCrss (void) HTM_TR_End (); } -/*****************************************************************************/ -/**************** Number of users in courses of this centre ******************/ -/*****************************************************************************/ - -static void CtrCfg_NumUsrsInCrssOfCtr (Rol_Role_t Role) - { - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - - /***** Number of users in courses *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL, - Role == Rol_UNK ? Txt_Users_in_courses : - Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - HTM_Unsigned (Usr_GetNumUsrsInCrss (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod, - Role == Rol_UNK ? 1 << Rol_STD | - 1 << Rol_NET | - 1 << Rol_TCH : // Any user - 1 << Role)); - HTM_TD_End (); - - HTM_TR_End (); - } - /*****************************************************************************/ /*********** Show a form for sending a logo of the current centre ************/ /*****************************************************************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 328546f2..87b2307b 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -544,10 +544,12 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.209.3 (2020-05-01)" +#define Log_PLATFORM_VERSION "SWAD 19.209.4 (2020-05-02)" #define CSS_FILE "swad19.193.1.css" #define JS_FILE "swad19.193.1.js" /* + Version 19.209.4: May 02, 2020 More figures cached. + Code refactoring in hierarchy configuration. (300637 lines) Version 19.209.3: May 01, 2020 More figures cached. (300750 lines) 1 change necessary in database: DELETE FROM figures; diff --git a/swad_country_config.c b/swad_country_config.c index 8ff5cc6f..49c96011 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -75,7 +75,6 @@ static void CtyCfg_NumUsrs (void); static void CtyCfg_NumInss (void); static void CtyCfg_NumDegs (void); static void CtyCfg_NumCrss (void); -static void CtyCfg_NumUsrsInCrssOfCty (Rol_Role_t Role); static void CtyCfg_GetMapAttr (long CtyCod,char **MapAttribution); static void CtyCfg_FreeMapAttr (char **MapAttribution); @@ -170,10 +169,10 @@ static void CtyCfg_Configuration (bool PrintView) CtyCfg_NumCrss (); /***** Number of users in courses of this country *****/ - CtyCfg_NumUsrsInCrssOfCty (Rol_TCH); - CtyCfg_NumUsrsInCrssOfCty (Rol_NET); - CtyCfg_NumUsrsInCrssOfCty (Rol_STD); - CtyCfg_NumUsrsInCrssOfCty (Rol_UNK); + HieCfg_NumUsrsInCrss (Hie_CTY,Gbl.Hierarchy.Cty.CtyCod,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_CTY,Gbl.Hierarchy.Cty.CtyCod,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_CTY,Gbl.Hierarchy.Cty.CtyCod,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_CTY,Gbl.Hierarchy.Cty.CtyCod,Rol_UNK); } /***** End table *****/ @@ -565,35 +564,6 @@ static void CtyCfg_NumCrss (void) HTM_TR_End (); } -/*****************************************************************************/ -/**************** Number of users in courses of this country *****************/ -/*****************************************************************************/ - -static void CtyCfg_NumUsrsInCrssOfCty (Rol_Role_t Role) - { - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - - /***** Number of users in courses *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL, - Role == Rol_UNK ? Txt_Users_in_courses : - Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - HTM_Unsigned (Usr_GetNumUsrsInCrss (Hie_CTY,Gbl.Hierarchy.Cty.CtyCod, - Role == Rol_UNK ? 1 << Rol_STD | - 1 << Rol_NET | - 1 << Rol_TCH : // Any user - 1 << Role)); - HTM_TD_End (); - - HTM_TR_End (); - } - /*****************************************************************************/ /******************** Get map attribution from database **********************/ /*****************************************************************************/ diff --git a/swad_course_config.c b/swad_course_config.c index e70154f8..98f5b7ec 100644 --- a/swad_course_config.c +++ b/swad_course_config.c @@ -73,7 +73,6 @@ static void CrsCfg_InstitutionalCode (bool PutForm); static void CrsCfg_InternalCode (void); static void CrsCfg_Shortcut (bool PrintView); static void CrsCfg_QR (void); -static void CrsCfg_NumUsrsInCrs (Rol_Role_t Role); static void CrsCfg_Indicators (void); static void CrsCfg_UpdateCrsDegDB (long CrsCod,long DegCod); @@ -159,9 +158,10 @@ void CrsCfg_Configuration (bool PrintView) else { /***** Number of users *****/ - CrsCfg_NumUsrsInCrs (Rol_TCH); - CrsCfg_NumUsrsInCrs (Rol_NET); - CrsCfg_NumUsrsInCrs (Rol_STD); + HieCfg_NumUsrsInCrss (Hie_CRS,Gbl.Hierarchy.Crs.CrsCod,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_CRS,Gbl.Hierarchy.Crs.CrsCod,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_CRS,Gbl.Hierarchy.Crs.CrsCod,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_CRS,Gbl.Hierarchy.Crs.CrsCod,Rol_UNK); /***** Indicators *****/ CrsCfg_Indicators (); @@ -416,32 +416,6 @@ static void CrsCfg_QR (void) HieCfg_QR ("crs",Gbl.Hierarchy.Crs.CrsCod); } -/*****************************************************************************/ -/*********************** Number of users in this course **********************/ -/*****************************************************************************/ - -static void CrsCfg_NumUsrsInCrs (Rol_Role_t Role) - { - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - - /***** Number of users in course *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL,Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - HTM_Unsigned (Usr_GetNumUsrsInCrss (Hie_CRS,Gbl.Hierarchy.Crs.CrsCod, - Role == Rol_UNK ? 1 << Rol_STD | - 1 << Rol_NET | - 1 << Rol_TCH : // Any user - 1 << Role)); - HTM_TD_End (); - - HTM_TR_End (); - } - /*****************************************************************************/ /****************** Show indicators in course configuration ******************/ /*****************************************************************************/ diff --git a/swad_degree_config.c b/swad_degree_config.c index 554a6937..ce9485c7 100644 --- a/swad_degree_config.c +++ b/swad_degree_config.c @@ -68,7 +68,6 @@ static void DegCfg_WWW (bool PrintView,bool PutForm); static void DegCfg_Shortcut (bool PrintView); static void DegCfg_QR (void); static void DegCfg_NumCrss (void); -static void DegCfg_NumUsrsInCrssOfDeg (Rol_Role_t Role); static void DegCfg_UpdateDegCtrDB (long DegCod,long CtrCod); @@ -156,10 +155,10 @@ static void DegCfg_Configuration (bool PrintView) DegCfg_NumCrss (); /***** Number of users *****/ - DegCfg_NumUsrsInCrssOfDeg (Rol_TCH); - DegCfg_NumUsrsInCrssOfDeg (Rol_NET); - DegCfg_NumUsrsInCrssOfDeg (Rol_STD); - DegCfg_NumUsrsInCrssOfDeg (Rol_UNK); + HieCfg_NumUsrsInCrss (Hie_DEG,Gbl.Hierarchy.Deg.DegCod,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_DEG,Gbl.Hierarchy.Deg.DegCod,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_DEG,Gbl.Hierarchy.Deg.DegCod,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_DEG,Gbl.Hierarchy.Deg.DegCod,Rol_UNK); } /***** End table *****/ @@ -349,35 +348,6 @@ static void DegCfg_NumCrss (void) HTM_TR_End (); } -/*****************************************************************************/ -/***************** Number of users in courses of this degree *****************/ -/*****************************************************************************/ - -static void DegCfg_NumUsrsInCrssOfDeg (Rol_Role_t Role) - { - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - - /***** Number of users in courses *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL, - Role == Rol_UNK ? Txt_Users_in_courses : - Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - HTM_Unsigned (Usr_GetNumUsrsInCrss (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, - Role == Rol_UNK ? 1 << Rol_STD | - 1 << Rol_NET | - 1 << Rol_TCH : // Any user - 1 << Role)); - HTM_TD_End (); - - HTM_TR_End (); - } - /*****************************************************************************/ /************************ Change the centre of a degree **********************/ /*****************************************************************************/ diff --git a/swad_hierarchy_config.c b/swad_hierarchy_config.c index 0f4635a0..45695c8d 100644 --- a/swad_hierarchy_config.c +++ b/swad_hierarchy_config.c @@ -25,6 +25,7 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#include "swad_figure_cache.h" #include "swad_form.h" #include "swad_global.h" #include "swad_HTML.h" @@ -314,3 +315,54 @@ void HieCfg_QR (const char *ParamName,long HieCod) HTM_TR_End (); } + +/*****************************************************************************/ +/************************ Number of users in courses *************************/ +/*****************************************************************************/ + +void HieCfg_NumUsrsInCrss (Hie_Level_t Scope,long Cod,Rol_Role_t Role) + { + extern const char *Txt_Users_in_courses; + extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; + unsigned NumUsrsInCrss; + static FigCch_FigureCached_t Figure[Rol_NUM_ROLES] = + { + [Rol_UNK ] = FigCch_NUM_USRS_IN_CRSS, // Any users in courses + [Rol_GST ] = FigCch_UNKNOWN, // Not applicable + [Rol_USR ] = FigCch_UNKNOWN, // Not applicable + [Rol_STD ] = FigCch_NUM_STDS_IN_CRSS, // Students + [Rol_NET ] = FigCch_NUM_NETS_IN_CRSS, // Non-editing teachers + [Rol_TCH ] = FigCch_NUM_TCHS_IN_CRSS, // Teachers + [Rol_DEG_ADM] = FigCch_UNKNOWN, // Not applicable + [Rol_CTR_ADM] = FigCch_UNKNOWN, // Not applicable + [Rol_INS_ADM] = FigCch_UNKNOWN, // Not applicable + [Rol_SYS_ADM] = FigCch_UNKNOWN, // Not applicable + }; + + /***** Number of users in courses *****/ + HTM_TR_Begin (NULL); + + /* Label */ + Frm_LabelColumn ("RT",NULL, + Role == Rol_UNK ? Txt_Users_in_courses : + Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); + + /* Data */ + HTM_TD_Begin ("class=\"DAT LB\""); + if (!FigCch_GetFigureFromCache (Figure[Role],Scope,Cod, + FigCch_Type_UNSIGNED,&NumUsrsInCrss)) + { + // Not updated recently in cache ==> compute and update it in cache + NumUsrsInCrss = Usr_GetNumUsrsInCrss (Scope,Cod, + Role == Rol_UNK ? (1 << Rol_STD) | + (1 << Rol_NET) | + (1 << Rol_TCH) : // Any user + (1 << Role)); + FigCch_UpdateFigureIntoCache (Figure[Role],Scope,Cod, + FigCch_Type_UNSIGNED,&NumUsrsInCrss); + } + HTM_Unsigned (NumUsrsInCrss); + HTM_TD_End (); + + HTM_TR_End (); + } diff --git a/swad_hierarchy_config.h b/swad_hierarchy_config.h index 3144ded7..93d5385a 100644 --- a/swad_hierarchy_config.h +++ b/swad_hierarchy_config.h @@ -56,5 +56,6 @@ void HieCfg_Shortcut (bool PrintView,const char *ParamName,long HieCod); void HieCfg_NumCtrs (unsigned NumCtrs,bool PutForm); void HieCfg_NumCtrsWithMap (unsigned NumCtrs,unsigned NumCtrsWithMap); void HieCfg_QR (const char *ParamName,long HieCod); +void HieCfg_NumUsrsInCrss (Hie_Level_t Scope,long Cod,Rol_Role_t Role); #endif diff --git a/swad_institution_config.c b/swad_institution_config.c index 7d96eff4..bcf9ef70 100644 --- a/swad_institution_config.c +++ b/swad_institution_config.c @@ -79,7 +79,6 @@ static void InsCfg_NumUsrs (void); static void InsCfg_NumDegs (void); static void InsCfg_NumCrss (void); static void InsCfg_NumDpts (void); -static void InsCfg_NumUsrsInCrssOfIns (Rol_Role_t Role); static void InsCfg_UpdateInsCtyDB (long InsCod,long CtyCod); /*****************************************************************************/ @@ -182,10 +181,10 @@ static void InsCfg_Configuration (bool PrintView) InsCfg_NumDpts (); /***** Number of users in courses of this institution *****/ - InsCfg_NumUsrsInCrssOfIns (Rol_TCH); - InsCfg_NumUsrsInCrssOfIns (Rol_NET); - InsCfg_NumUsrsInCrssOfIns (Rol_STD); - InsCfg_NumUsrsInCrssOfIns (Rol_UNK); + HieCfg_NumUsrsInCrss (Hie_INS,Gbl.Hierarchy.Ins.InsCod,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_INS,Gbl.Hierarchy.Ins.InsCod,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_INS,Gbl.Hierarchy.Ins.InsCod,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_INS,Gbl.Hierarchy.Ins.InsCod,Rol_UNK); } /***** End table *****/ @@ -543,35 +542,6 @@ static void InsCfg_NumDpts (void) HTM_TR_End (); } -/*****************************************************************************/ -/************** Number of users in courses of this institution ***************/ -/*****************************************************************************/ - -static void InsCfg_NumUsrsInCrssOfIns (Rol_Role_t Role) - { - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - - /***** Number of users in courses *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL, - Role == Rol_UNK ? Txt_Users_in_courses : - Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - HTM_Unsigned (Usr_GetNumUsrsInCrss (Hie_INS,Gbl.Hierarchy.Ins.InsCod, - Role == Rol_UNK ? 1 << Rol_STD | - 1 << Rol_NET | - 1 << Rol_TCH : // Any user - 1 << Role)); - HTM_TD_End (); - - HTM_TR_End (); - } - /*****************************************************************************/ /******** Show a form for sending a logo of the current institution **********/ /*****************************************************************************/ diff --git a/swad_system_config.c b/swad_system_config.c index a466c3d1..536426d0 100644 --- a/swad_system_config.c +++ b/swad_system_config.c @@ -76,7 +76,6 @@ static void SysCfg_NumCtys (void); static void SysCfg_NumInss (void); static void SysCfg_NumDegs (void); static void SysCfg_NumCrss (void); -static void SysCfg_NumUsrsInCrss (Rol_Role_t Role); /*****************************************************************************/ /***************** Show information of the current country *******************/ @@ -170,10 +169,10 @@ static void SysCfg_Configuration (bool PrintView) SysCfg_NumCrss (); /***** Number of users in courses of this country *****/ - SysCfg_NumUsrsInCrss (Rol_TCH); - SysCfg_NumUsrsInCrss (Rol_NET); - SysCfg_NumUsrsInCrss (Rol_STD); - SysCfg_NumUsrsInCrss (Rol_UNK); + HieCfg_NumUsrsInCrss (Hie_SYS,-1L,Rol_TCH); + HieCfg_NumUsrsInCrss (Hie_SYS,-1L,Rol_NET); + HieCfg_NumUsrsInCrss (Hie_SYS,-1L,Rol_STD); + HieCfg_NumUsrsInCrss (Hie_SYS,-1L,Rol_UNK); } /***** End table *****/ @@ -474,54 +473,3 @@ static void SysCfg_NumCrss (void) HTM_TR_End (); } - -/*****************************************************************************/ -/***************** Number of users in courses of the system ******************/ -/*****************************************************************************/ - -static void SysCfg_NumUsrsInCrss (Rol_Role_t Role) - { - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - unsigned NumUsrsInCrss; - static FigCch_FigureCached_t Figure[Rol_NUM_ROLES] = - { - [Rol_UNK ] = FigCch_NUM_USRS_IN_CRSS, // Any users in courses - [Rol_GST ] = FigCch_UNKNOWN, // Not applicable - [Rol_USR ] = FigCch_UNKNOWN, // Not applicable - [Rol_STD ] = FigCch_NUM_STDS_IN_CRSS, // Students - [Rol_NET ] = FigCch_NUM_NETS_IN_CRSS, // Non-editing teachers - [Rol_TCH ] = FigCch_NUM_TCHS_IN_CRSS, // Teachers - [Rol_DEG_ADM] = FigCch_UNKNOWN, // Not applicable - [Rol_CTR_ADM] = FigCch_UNKNOWN, // Not applicable - [Rol_INS_ADM] = FigCch_UNKNOWN, // Not applicable - [Rol_SYS_ADM] = FigCch_UNKNOWN, // Not applicable - }; - - /***** Number of users in courses *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",NULL, - Role == Rol_UNK ? Txt_Users_in_courses : - Txt_ROLES_PLURAL_Abc[Role][Usr_SEX_UNKNOWN]); - - /* Data */ - HTM_TD_Begin ("class=\"DAT LB\""); - if (!FigCch_GetFigureFromCache (Figure[Role],Hie_SYS,-1L, - FigCch_Type_UNSIGNED,&NumUsrsInCrss)) - { - // Not updated recently in cache ==> compute and update it in cache - NumUsrsInCrss = Usr_GetNumUsrsInCrss (Hie_SYS,-1L, - Role == Rol_UNK ? (1 << Rol_STD) | - (1 << Rol_NET) | - (1 << Rol_TCH) : // Any user - (1 << Role)); - FigCch_UpdateFigureIntoCache (Figure[Role],Hie_SYS,-1L, - FigCch_Type_UNSIGNED,&NumUsrsInCrss); - } - HTM_Unsigned (NumUsrsInCrss); - HTM_TD_End (); - - HTM_TR_End (); - }