From 59e359d5fe0b81a4fd99c92160c353e38628114e Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 20 Sep 2023 22:49:32 +0200 Subject: [PATCH] Version 23.13: Sep 20, 2023 Code refactoring in hierarchy and cache. --- swad_center.c | 18 ++++---- swad_center_config.c | 10 +++-- swad_changelog.h | 3 +- swad_country.c | 69 +++++++++++++++-------------- swad_country_config.c | 20 +++++---- swad_degree.c | 11 ++--- swad_degree_config.c | 5 ++- swad_global.c | 22 +++++----- swad_global.h | 2 +- swad_hierarchy.c | 92 ++++++++++++++++++++++----------------- swad_hierarchy.h | 12 ++--- swad_institution.c | 25 ++++++----- swad_institution_config.c | 15 ++++--- swad_place.c | 2 +- swad_record.c | 4 +- 15 files changed, 172 insertions(+), 138 deletions(-) diff --git a/swad_center.c b/swad_center.c index 096f6e83..e137429e 100644 --- a/swad_center.c +++ b/swad_center.c @@ -367,15 +367,17 @@ static void Ctr_ListOneCenterForSeeing (struct Hie_Node *Ctr,unsigned NumCtr) /***** Number of degrees *****/ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTR,Ctr->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTR, // ...in center + Ctr->HieCod)); HTM_TD_End (); /***** Number of courses *****/ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTR,Ctr->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTR, // ...in center + Ctr->HieCod)); HTM_TD_End (); /***** Number of users in courses of this center *****/ @@ -757,7 +759,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places) Ctr = &Gbl.Hierarchy.List[HieLvl_INS].Lst[NumCtr]; ICanEdit = Ctr_CheckIfICanEditACenter (Ctr); - NumDegs = Hie_GetFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR,Ctr->HieCod); + NumDegs = Hie_GetNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTR,Ctr->HieCod); NumUsrsCtr = Ctr_GetNumUsrsWhoClaimToBelongToCtr (Ctr); NumUsrsInCrssOfCtr = Enr_GetNumUsrsInCrss (HieLvl_CTR,Ctr->HieCod, 1 << Rol_STD | @@ -958,7 +960,7 @@ void Ctr_RemoveCenter (void) Ctr_GetCenterDataByCod (Ctr_EditingCtr); /***** Check if this center has teachers *****/ - if (Hie_GetFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR,Ctr_EditingCtr->HieCod)) // Center has degrees + if (Hie_GetNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTR,Ctr_EditingCtr->HieCod)) // Center has degrees Ale_ShowAlert (Ale_WARNING, Txt_To_remove_a_center_you_must_first_remove_all_degrees_and_teachers_in_the_center); else if (Ctr_GetNumUsrsWhoClaimToBelongToCtr (Ctr_EditingCtr)) // Center has users who claim to belong to it @@ -998,8 +1000,8 @@ void Ctr_RemoveCenter (void) Ctr_DB_RemoveCenter (Ctr_EditingCtr->HieCod); /***** Flush caches *****/ - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTR); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTR); // Number of degrees in center + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTR); // Number of courses in center Ctr_FlushCacheNumUsrsWhoClaimToBelongToCtr (); /***** Write message to show the change made *****/ diff --git a/swad_center_config.c b/swad_center_config.c index 460a2600..15140041 100644 --- a/swad_center_config.c +++ b/swad_center_config.c @@ -775,8 +775,9 @@ static void CtrCfg_NumDegs (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTR, // ...in center + Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -800,8 +801,9 @@ static void CtrCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTR, // ...in center + Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_changelog.h b/swad_changelog.h index 74a7ddc4..a047633a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -632,10 +632,11 @@ TODO: Francisco Javier Fern Me sale este error, no sé si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así? "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') */ -#define Log_PLATFORM_VERSION "SWAD 23.12 (2023-09-20)" +#define Log_PLATFORM_VERSION "SWAD 23.13 (2023-09-20)" #define CSS_FILE "swad22.120.4.css" #define JS_FILE "swad22.49.js" /* + Version 23.13: Sep 20, 2023 Code refactoring in hierarchy and cache. (336951 lines) Version 23.12: Sep 20, 2023 Code refactoring in hierarchy and cache. (336919 lines) Version 23.11: Sep 20, 2023 Code refactoring in hierarchy. (337184 lines) Version 23.10: Sep 20, 2023 Code refactoring in hierarchy. (337298 lines) diff --git a/swad_country.c b/swad_country.c index 3a67bd3c..3f621882 100644 --- a/swad_country.c +++ b/swad_country.c @@ -255,26 +255,26 @@ void Cty_ListCountries2 (void) /* Number of institutions in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, - HieLvl_CTY,0)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_INS, // Number of institutions... + HieLvl_CTY,0)); // ...in other countries HTM_TD_End (); /* Number of centers in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_CTY,0)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_CTY,0)); // ...in other countries HTM_TD_End (); /* Number of degrees in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTY,0)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTY,0)); // ...in other countries HTM_TD_End (); /* Number of courses in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTY,0)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTY,0)); // ...in other countries HTM_TD_End (); /* Number of users in courses of other countries */ @@ -304,26 +304,26 @@ void Cty_ListCountries2 (void) /* Number of institutions with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, - HieLvl_CTY,-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_INS, // Number of institutions... + HieLvl_CTY,-1L)); // ...with unknown country HTM_TD_End (); /* Number of centers with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_CTY,-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_CTY,-1L)); // ...with unknown country HTM_TD_End (); /* Number of degrees with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTY,-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTY,-1L)); // ...with unknown country HTM_TD_End (); /* Number of courses with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTY,-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTY,-1L)); // ...with unknown country HTM_TD_End (); HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); @@ -442,29 +442,33 @@ static void Cty_ListOneCountryForSeeing (struct Hie_Node *Cty,unsigned NumCty) /***** Number of institutions *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, - HieLvl_CTY,Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_INS, // Number of institutions... + HieLvl_CTY, // ...in country + Cty->HieCod)); HTM_TD_End (); /***** Number of centers *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_CTY,Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_CTY, // ...in country + Cty->HieCod)); HTM_TD_End (); /***** Number of degrees *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTY,Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTY, // ...in country + Cty->HieCod)); HTM_TD_End (); /***** Number of courses *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTY,Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTY, // ...in country + Cty->HieCod)); HTM_TD_End (); /***** Number of users in courses *****/ @@ -635,8 +639,9 @@ void Cty_WriteScriptGoogleGeochart (void) NumUsrsCty = Cty_GetCachedNumUsrsWhoClaimToBelongToCty (&Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]); if (NumUsrsCty) { - NumInss = Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, - HieLvl_CTY,Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty].HieCod); + NumInss = Hie_GetCachedNumNodesInHieLvl (HieLvl_INS, // Number of institutions... + HieLvl_CTY, // ...in country + Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty].HieCod); /* Write data of this country */ HTM_TxtF (" ['%s', %u, %u],\n", @@ -1068,7 +1073,7 @@ static void Cty_ListCountriesForEdition (void) NumCty++) { Cty = &Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]; - NumInss = Hie_GetFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY,Cty->HieCod); + NumInss = Hie_GetNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY,Cty->HieCod); NumUsrsCty = Cty_GetNumUsrsWhoClaimToBelongToCty (Cty); HTM_TR_Begin (NULL); @@ -1194,7 +1199,7 @@ void Cty_RemoveCountry (void) Cty_GetBasicCountryDataByCod (Cty_EditingCty); /***** Check if this country has users *****/ - if (Hie_GetFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY,Cty_EditingCty->HieCod)) // Country has institutions ==> don't remove + if (Hie_GetNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY,Cty_EditingCty->HieCod)) // Country has institutions ==> don't remove Ale_CreateAlert (Ale_WARNING,NULL, Txt_You_can_not_remove_a_country_with_institutions_or_users); else if (Cty_GetNumUsrsWhoClaimToBelongToCty (Cty_EditingCty)) // Country has users ==> don't remove @@ -1216,10 +1221,10 @@ void Cty_RemoveCountry (void) /***** Flush cache *****/ Cty_FlushCacheCountryName (); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTY); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY); // Number of institutions in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_CTY); // Number of centers in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTY); // Number of degrees in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTY); // Number of courses in country Cty_FlushCacheNumUsrsWhoClaimToBelongToCty (); /***** Write message to show the change made *****/ diff --git a/swad_country_config.c b/swad_country_config.c index 4a94ef59..528cb3db 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -149,8 +149,9 @@ static void CtyCfg_Configuration (bool PrintView) CtyCfg_QR (); else { - NumCtrs = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumCtrs = Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_CTY, // ...in country + Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); /* Number of users who claim to belong to this country, number of institutions, @@ -490,8 +491,9 @@ static void CtyCfg_NumInss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, - HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_INS, // Number of institutions... + HieLvl_CTY, // ...in country + Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -515,8 +517,9 @@ static void CtyCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_CTY, // ...in country + Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); HTM_TR_End (); @@ -538,8 +541,9 @@ static void CtyCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_CTY, // ...in country + Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_degree.c b/swad_degree.c index 77163925..f09948cc 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -344,7 +344,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes) DegInLst = &(Gbl.Hierarchy.List[HieLvl_CTR].Lst[NumDeg]); ICanEdit = Deg_CheckIfICanEditADegree (DegInLst); - NumCrss = Hie_GetFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG,DegInLst->HieCod); + NumCrss = Hie_GetNumNodesInHieLvl (HieLvl_CRS,HieLvl_DEG,DegInLst->HieCod); NumUsrsInCrssOfDeg = Enr_GetNumUsrsInCrss (HieLvl_DEG,DegInLst->HieCod, 1 << Rol_STD | 1 << Rol_NET | @@ -796,8 +796,9 @@ static void Deg_ListOneDegreeForSeeing (struct Hie_Node *Deg,unsigned NumDeg) const char *TxtClassNormal; const char *TxtClassStrong; const char *BgColor; - unsigned NumCrss = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_DEG,Deg->HieCod); + unsigned NumCrss = Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_DEG, // ...in degree + Deg->HieCod); /***** Get data of type of degree of this degree *****/ DegTyp.DegTypCod = Deg->Specific.TypCod; @@ -1137,7 +1138,7 @@ void Deg_RemoveDegree (void) Deg_GetDegreeDataByCod (Deg_EditingDeg); /***** Check if this degree has courses *****/ - if (Hie_GetFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG,Deg_EditingDeg->HieCod)) // Degree has courses ==> don't remove + if (Hie_GetNumNodesInHieLvl (HieLvl_CRS,HieLvl_DEG,Deg_EditingDeg->HieCod)) // Degree has courses ==> don't remove Ale_CreateAlert (Ale_WARNING,NULL, Txt_To_remove_a_degree_you_must_first_remove_all_courses_in_the_degree); else // Degree has no courses ==> remove it @@ -1278,7 +1279,7 @@ void Deg_RemoveDegreeCompletely (long DegCod) Deg_DB_RemoveDeg (DegCod); /***** Flush caches *****/ - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_DEG); // Number of courses in degree /***** Delete all degrees in stats table not present in degrees table *****/ Pho_DB_RemoveObsoleteStatDegrees (); diff --git a/swad_degree_config.c b/swad_degree_config.c index 7496c023..8c86b51d 100644 --- a/swad_degree_config.c +++ b/swad_degree_config.c @@ -335,8 +335,9 @@ static void DegCfg_NumCrss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_DEG, // ...in degree + Gbl.Hierarchy.Node[HieLvl_DEG].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); diff --git a/swad_global.c b/swad_global.c index a556303e..b1ad1182 100644 --- a/swad_global.c +++ b/swad_global.c @@ -220,20 +220,20 @@ void Gbl_InitializeGlobals (void) Cty_FlushCacheCountryName (); Ins_FlushCacheFullNameAndCtyOfInstitution (); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTY); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTY); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY); // Number of institutions in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_CTY); // Number of centers in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTY); // Number of degrees in country + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTY); // Number of courses in country - Dpt_FlushCacheNumDptsInIns (); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_INS); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_INS); + Dpt_FlushCacheNumDptsInIns (); // Number of departments in institution + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS); // Number of centers in institution + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_INS); // Number of degrees in institution + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_INS); // Number of courses in institution - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTR); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTR); // Number of degrees in center + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTR); // Number of courses in center - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_DEG); // Number of courses in degree Cty_FlushCacheNumUsrsWhoDontClaimToBelongToAnyCty (); Cty_FlushCacheNumUsrsWhoClaimToBelongToAnotherCty (); diff --git a/swad_global.h b/swad_global.h index 5d49f820..c5f2403c 100644 --- a/swad_global.h +++ b/swad_global.h @@ -311,7 +311,7 @@ struct Globals bool Valid; long HieCod; unsigned Num; - } FigureInHieLvl[FigCch_NUM_FIGURES][HieLvl_NUM_LEVELS]; + } NumNodesInHieLvl[HieLvl_NUM_LEVELS][HieLvl_NUM_LEVELS]; struct { bool Valid; diff --git a/swad_hierarchy.c b/swad_hierarchy.c index cddb4967..8eb1771b 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -56,6 +56,18 @@ extern struct Globals Gbl; +/*****************************************************************************/ +/**************************** Private constants ******************************/ +/*****************************************************************************/ + +static FigCch_FigureCached_t Hie_FiguresCached[HieLvl_NUM_LEVELS] = + { + [HieLvl_INS] = FigCch_NUM_INSS, + [HieLvl_CTR] = FigCch_NUM_CTRS, + [HieLvl_DEG] = FigCch_NUM_DEGS, + [HieLvl_CRS] = FigCch_NUM_CRSS, + }; + /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ @@ -1304,22 +1316,22 @@ static void Hie_GetAndShowHierarchyTotal (void) NumCrssTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_CRSS,"crs_courses"); break; case HieLvl_CTY: - NumInssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCtrsTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumDegsTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCrssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumInssTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumCtrsTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumDegsTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumCrssTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); break; case HieLvl_INS: - NumCtrsTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumDegsTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumCrssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + NumCtrsTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + NumDegsTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + NumCrssTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); break; case HieLvl_CTR: - NumDegsTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); - NumCrssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); + NumDegsTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); + NumCrssTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); break; case HieLvl_DEG: - NumCrssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); + NumCrssTotal = Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); break; case HieLvl_CRS: break; @@ -1365,60 +1377,60 @@ unsigned Hie_GetCachedNumNodesInSys (FigCch_FigureCached_t Figure, /**** Get total number of courses/degrees/centers/institutions in country ****/ /*****************************************************************************/ -void Hie_FlushCachedFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level) +void Hie_FlushCachedNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent) { - Gbl.Cache.FigureInHieLvl[Figure][Level].Valid = false; + Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Valid = false; } -unsigned Hie_GetCachedFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod) +unsigned Hie_GetCachedNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent,long HieCod) { unsigned NumNodes; /***** Get number of nodes from cache *****/ - if (!FigCch_GetFigureFromCache (Figure,Level,HieCod, + if (!FigCch_GetFigureFromCache (Hie_FiguresCached[LevelChildren],LevelParent,HieCod, FigCch_UNSIGNED,&NumNodes)) /***** Get current number of nodes from database and update cache *****/ - NumNodes = Hie_GetFigureInHieLvl (Figure,Level,HieCod); + NumNodes = Hie_GetNumNodesInHieLvl (LevelChildren,LevelParent,HieCod); return NumNodes; } -unsigned Hie_GetFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod) +unsigned Hie_GetNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent,long HieCod) { - static unsigned (*FunctionGetFigure[][HieLvl_NUM_LEVELS]) (long HieCod) = + static unsigned (*FunctionGetFigure[HieLvl_NUM_LEVELS][HieLvl_NUM_LEVELS]) (long HieCod) = { /* Number of nodes in country */ - [FigCch_NUM_INSS][HieLvl_CTY] = Ins_DB_GetNumInssInCty, - [FigCch_NUM_CTRS][HieLvl_CTY] = Ctr_DB_GetNumCtrsInCty, - [FigCch_NUM_DEGS][HieLvl_CTY] = Deg_DB_GetNumDegsInCty, - [FigCch_NUM_CRSS][HieLvl_CTY] = Crs_DB_GetNumCrssInCty, + [HieLvl_INS][HieLvl_CTY] = Ins_DB_GetNumInssInCty, + [HieLvl_CTR][HieLvl_CTY] = Ctr_DB_GetNumCtrsInCty, + [HieLvl_DEG][HieLvl_CTY] = Deg_DB_GetNumDegsInCty, + [HieLvl_CRS][HieLvl_CTY] = Crs_DB_GetNumCrssInCty, /* Number of nodes in institution */ - [FigCch_NUM_CTRS][HieLvl_INS] = Ctr_DB_GetNumCtrsInIns, - [FigCch_NUM_DEGS][HieLvl_INS] = Deg_DB_GetNumDegsInIns, - [FigCch_NUM_CRSS][HieLvl_INS] = Crs_DB_GetNumCrssInIns, + [HieLvl_CTR][HieLvl_INS] = Ctr_DB_GetNumCtrsInIns, + [HieLvl_DEG][HieLvl_INS] = Deg_DB_GetNumDegsInIns, + [HieLvl_CRS][HieLvl_INS] = Crs_DB_GetNumCrssInIns, /* Number of nodes in center */ - [FigCch_NUM_DEGS][HieLvl_CTR] = Deg_DB_GetNumDegsInCtr, - [FigCch_NUM_CRSS][HieLvl_CTR] = Crs_DB_GetNumCrssInCtr, + [HieLvl_DEG][HieLvl_CTR] = Deg_DB_GetNumDegsInCtr, + [HieLvl_CRS][HieLvl_CTR] = Crs_DB_GetNumCrssInCtr, /* Number of nodes in degree */ - [FigCch_NUM_CRSS][HieLvl_DEG] = Crs_DB_GetNumCrssInDeg, + [HieLvl_CRS][HieLvl_DEG] = Crs_DB_GetNumCrssInDeg, }; /***** 1. Fast check: If cached... *****/ - if (Gbl.Cache.FigureInHieLvl[Figure][Level].Valid && - HieCod == Gbl.Cache.FigureInHieLvl[Figure][Level].HieCod) - return Gbl.Cache.FigureInHieLvl[Figure][Level].Num; + if (Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Valid && + HieCod == Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].HieCod) + return Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Num; /***** 2. Slow: number of institutions in a country from database *****/ - Gbl.Cache.FigureInHieLvl[Figure][Level].HieCod = HieCod; - Gbl.Cache.FigureInHieLvl[Figure][Level].Num = FunctionGetFigure[Figure][Level] (HieCod); - Gbl.Cache.FigureInHieLvl[Figure][Level].Valid = true; - FigCch_UpdateFigureIntoCache (Figure,Level, - Gbl.Cache.FigureInHieLvl[Figure][Level].HieCod, - FigCch_UNSIGNED,&Gbl.Cache.FigureInHieLvl[Figure][Level].Num); - return Gbl.Cache.FigureInHieLvl[Figure][Level].Num; + Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].HieCod = HieCod; + Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Num = FunctionGetFigure[LevelChildren][LevelParent] (HieCod); + Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Valid = true; + FigCch_UpdateFigureIntoCache (Hie_FiguresCached[LevelChildren],LevelParent, + Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].HieCod, + FigCch_UNSIGNED,&Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Num); + return Gbl.Cache.NumNodesInHieLvl[LevelChildren][LevelParent].Num; } /*****************************************************************************/ diff --git a/swad_hierarchy.h b/swad_hierarchy.h index 1d292faa..d5fc33b0 100644 --- a/swad_hierarchy.h +++ b/swad_hierarchy.h @@ -74,11 +74,11 @@ void Hie_GetAndShowHierarchyStats (void); unsigned Hie_GetCachedNumNodesInSys (FigCch_FigureCached_t Figure, const char *Table); -void Hie_FlushCachedFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level); -unsigned Hie_GetCachedFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod); -unsigned Hie_GetFigureInHieLvl (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod); +void Hie_FlushCachedNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent); +unsigned Hie_GetCachedNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent,long HieCod); +unsigned Hie_GetNumNodesInHieLvl (HieLvl_Level_t LevelChildren, + HieLvl_Level_t LevelParent,long HieCod); #endif diff --git a/swad_institution.c b/swad_institution.c index 14ca2438..d987ed36 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -398,22 +398,25 @@ static void Ins_ListOneInstitutionForSeeing (struct Hie_Node *Ins,unsigned NumIn /* Number of centers in this institution */ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_INS,Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_INS, // ...in institution + Ins->HieCod)); HTM_TD_End (); /* Number of degrees in this institution */ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_INS,Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_INS, // ...in institution + Ins->HieCod)); HTM_TD_End (); /* Number of courses in this institution */ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_INS,Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_INS, // ...in institution + Ins->HieCod)); HTM_TD_End (); /* Number of departments in this institution */ @@ -900,7 +903,7 @@ static void Ins_ListInstitutionsForEdition (void) Ins = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns]; ICanEdit = Ins_CheckIfICanEdit (Ins); - NumCtrs = Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Ins->HieCod); + NumCtrs = Hie_GetNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS,Ins->HieCod); NumUsrsIns = Ins_GetNumUsrsWhoClaimToBelongToIns (Ins); NumUsrsInCrssOfIns = Enr_GetNumUsrsInCrss (HieLvl_INS,Ins->HieCod, 1 << Rol_STD | @@ -1067,7 +1070,7 @@ void Ins_RemoveInstitution (void) /***** Check if this institution has users *****/ if (!Ins_CheckIfICanEdit (Ins_EditingIns)) Err_NoPermissionExit (); - else if (Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Ins_EditingIns->HieCod)) + else if (Hie_GetNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS,Ins_EditingIns->HieCod)) // Institution has centers ==> don't remove Ale_CreateAlert (Ale_WARNING,NULL, Txt_To_remove_an_institution_you_must_first_remove_all_centers_and_users_in_the_institution); @@ -1109,9 +1112,9 @@ void Ins_RemoveInstitution (void) /***** Flush caches *****/ Ins_FlushCacheFullNameAndCtyOfInstitution (); Dpt_FlushCacheNumDptsInIns (); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_INS); - Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_INS); + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS); // Number of centers in institution + Hie_FlushCachedNumNodesInHieLvl (HieLvl_DEG,HieLvl_INS); // Number of degrees in institution + Hie_FlushCachedNumNodesInHieLvl (HieLvl_CRS,HieLvl_INS); // Number of courses in institution Ins_FlushCacheNumUsrsWhoClaimToBelongToIns (); /***** Write message to show the change made *****/ diff --git a/swad_institution_config.c b/swad_institution_config.c index 05134ae6..0167ad29 100644 --- a/swad_institution_config.c +++ b/swad_institution_config.c @@ -160,8 +160,9 @@ static void InsCfg_Configuration (bool PrintView) InsCfg_QR (); else { - NumCtrs = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, - HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + NumCtrs = Hie_GetCachedNumNodesInHieLvl (HieLvl_CTR, // Number of centers... + HieLvl_INS, // ...in institution + Gbl.Hierarchy.Node[HieLvl_INS].HieCod); /***** Number of users who claim to belong to this institution, number of centers, @@ -449,8 +450,9 @@ static void InsCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, - HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_DEG, // Number of degrees... + HieLvl_INS, // ...in institution + Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); HTM_TR_End (); @@ -472,8 +474,9 @@ static void InsCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, - HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesInHieLvl (HieLvl_CRS, // Number of courses... + HieLvl_INS, // ...in institution + Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_place.c b/swad_place.c index bb451d1a..57c1d3c0 100644 --- a/swad_place.c +++ b/swad_place.c @@ -214,7 +214,7 @@ void Plc_SeeAllPlaces (void) HTM_TD_End (); HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod) - + HTM_Unsigned (Hie_GetNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod) - NumCtrsWithPlc); HTM_TD_End (); diff --git a/swad_record.c b/swad_record.c index 25ffac08..e7860fa1 100644 --- a/swad_record.c +++ b/swad_record.c @@ -4036,7 +4036,7 @@ void Rec_ChgCountryOfMyInstitution (void) Gbl.Usrs.Me.UsrDat.InsCtyCod = ParCod_GetAndCheckPar (ParCod_OthCty); /***** When country changes, the institution, center and department must be reset *****/ - NumInss = Hie_GetFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY,Gbl.Usrs.Me.UsrDat.InsCtyCod); + NumInss = Hie_GetNumNodesInHieLvl (HieLvl_INS,HieLvl_CTY,Gbl.Usrs.Me.UsrDat.InsCtyCod); if (NumInss) { Gbl.Usrs.Me.UsrDat.InsCod = -1L; @@ -4083,7 +4083,7 @@ void Rec_UpdateMyInstitution (void) Gbl.Usrs.Me.UsrDat.InsCod = Ins.HieCod; /***** When institution changes, the center and department must be reset *****/ - NumCtrs = Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Usrs.Me.UsrDat.InsCod); + NumCtrs = Hie_GetNumNodesInHieLvl (HieLvl_CTR,HieLvl_INS,Gbl.Usrs.Me.UsrDat.InsCod); NumDpts = Dpt_GetNumDptsInIns (Gbl.Usrs.Me.UsrDat.InsCod); Gbl.Usrs.Me.UsrDat.Tch.CtrCod = (NumCtrs ? -1L : 0); Gbl.Usrs.Me.UsrDat.Tch.DptCod = (NumDpts ? -1L : 0);