From 39477a6e4818c18684c05436fbb97034afab2f3e Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 20 Sep 2023 21:55:11 +0200 Subject: [PATCH] Version 23.12: Sep 20, 2023 Code refactoring in hierarchy and cache. --- swad_center.c | 68 ++--------------------- swad_center.h | 6 -- swad_center_config.c | 4 +- swad_changelog.h | 3 +- swad_country.c | 38 ++++++------- swad_country_config.c | 8 +-- swad_course.c | 112 -------------------------------------- swad_course.h | 12 ---- swad_degree.c | 92 ++----------------------------- swad_degree.h | 9 --- swad_degree_config.c | 2 +- swad_figure_cache.h | 1 + swad_global.c | 20 +++---- swad_global.h | 49 +---------------- swad_hierarchy.c | 86 +++++++++++++++++++---------- swad_hierarchy.h | 9 ++- swad_institution.c | 41 +++----------- swad_institution.h | 3 - swad_institution_config.c | 6 +- swad_place.c | 2 +- swad_record.c | 4 +- 21 files changed, 128 insertions(+), 447 deletions(-) diff --git a/swad_center.c b/swad_center.c index 28441f233..096f6e83a 100644 --- a/swad_center.c +++ b/swad_center.c @@ -367,14 +367,14 @@ 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_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTR,Ctr->HieCod)); HTM_TD_End (); /***** Number of courses *****/ HTM_TD_Begin ("class=\"RM %s_%s %s\"", TxtClassNormal,The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTR,Ctr->HieCod)); HTM_TD_End (); @@ -757,7 +757,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places) Ctr = &Gbl.Hierarchy.List[HieLvl_INS].Lst[NumCtr]; ICanEdit = Ctr_CheckIfICanEditACenter (Ctr); - NumDegs = Deg_GetNumDegsInCtr (Ctr->HieCod); + NumDegs = Hie_GetFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR,Ctr->HieCod); NumUsrsCtr = Ctr_GetNumUsrsWhoClaimToBelongToCtr (Ctr); NumUsrsInCrssOfCtr = Enr_GetNumUsrsInCrss (HieLvl_CTR,Ctr->HieCod, 1 << Rol_STD | @@ -958,7 +958,7 @@ void Ctr_RemoveCenter (void) Ctr_GetCenterDataByCod (Ctr_EditingCtr); /***** Check if this center has teachers *****/ - if (Deg_GetNumDegsInCtr (Ctr_EditingCtr->HieCod)) // Center has degrees + if (Hie_GetFigureInHieLvl (FigCch_NUM_DEGS,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 +998,8 @@ void Ctr_RemoveCenter (void) Ctr_DB_RemoveCenter (Ctr_EditingCtr->HieCod); /***** Flush caches *****/ - Deg_FlushCacheNumDegsInCtr (); - Crs_FlushCacheNumCrssInCtr (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTR); Ctr_FlushCacheNumUsrsWhoClaimToBelongToCtr (); /***** Write message to show the change made *****/ @@ -1554,62 +1554,6 @@ static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status) Ale_CreateAlertYouMustSpecifyTheShortNameAndTheFullName (); } -/*****************************************************************************/ -/******************* Get number of centers in a country **********************/ -/*****************************************************************************/ - -void Ctr_FlushCacheNumCtrsInCty (void) - { - Gbl.Cache.NumCtrsInCty.HieCod = -1L; - Gbl.Cache.NumCtrsInCty.NumCtrs = 0; - } - -unsigned Ctr_GetNumCtrsInCty (long CtyCod) - { - /***** 1. Fast check: Trivial case *****/ - if (CtyCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.NumCtrsInCty.HieCod) - return Gbl.Cache.NumCtrsInCty.NumCtrs; - - /***** 3. Slow: number of centers in a country from database *****/ - Gbl.Cache.NumCtrsInCty.HieCod = CtyCod; - Gbl.Cache.NumCtrsInCty.NumCtrs = Ctr_DB_GetNumCtrsInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_CTY,Gbl.Cache.NumCtrsInCty.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInCty.NumCtrs); - return Gbl.Cache.NumCtrsInCty.NumCtrs; - } - -/*****************************************************************************/ -/**************** Get number of centers in an institution ********************/ -/*****************************************************************************/ - -void Ctr_FlushCacheNumCtrsInIns (void) - { - Gbl.Cache.NumCtrsInIns.HieCod = -1L; - Gbl.Cache.NumCtrsInIns.NumCtrs = 0; - } - -unsigned Ctr_GetNumCtrsInIns (long InsCod) - { - /***** 1. Fast check: Trivial case *****/ - if (InsCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumCtrsInIns.HieCod) - return Gbl.Cache.NumCtrsInIns.NumCtrs; - - /***** 3. Slow: number of centers in an institution from database *****/ - Gbl.Cache.NumCtrsInIns.HieCod = InsCod; - Gbl.Cache.NumCtrsInIns.NumCtrs = Ctr_DB_GetNumCtrsInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Cache.NumCtrsInIns.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInIns.NumCtrs); - return Gbl.Cache.NumCtrsInIns.NumCtrs; - } - /*****************************************************************************/ /********************** Get number of centers with map ***********************/ /*****************************************************************************/ diff --git a/swad_center.h b/swad_center.h index 994db59b2..3aaa20af2 100644 --- a/swad_center.h +++ b/swad_center.h @@ -71,12 +71,6 @@ void Ctr_ContEditAfterChgCtr (void); void Ctr_ReceiveFormReqCtr (void); void Ctr_ReceiveFormNewCtr (void); -void Ctr_FlushCacheNumCtrsInCty (void); -unsigned Ctr_GetNumCtrsInCty (long CtyCod); - -void Ctr_FlushCacheNumCtrsInIns (void); -unsigned Ctr_GetNumCtrsInIns (long InsCod); - unsigned Ctr_GetCachedNumCtrsWithMapInSys (void); unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod); unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod); diff --git a/swad_center_config.c b/swad_center_config.c index d18bc58e5..460a26008 100644 --- a/swad_center_config.c +++ b/swad_center_config.c @@ -775,7 +775,7 @@ static void CtrCfg_NumDegs (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); @@ -800,7 +800,7 @@ static void CtrCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_TD_End (); diff --git a/swad_changelog.h b/swad_changelog.h index dc8b12308..74a7ddc4f 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.11 (2023-09-20)" +#define Log_PLATFORM_VERSION "SWAD 23.12 (2023-09-20)" #define CSS_FILE "swad22.120.4.css" #define JS_FILE "swad22.49.js" /* + 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) Version 23.9.7: Sep 19, 2023 Code refactoring in hierarchy. (337352 lines) diff --git a/swad_country.c b/swad_country.c index 509499ed2..3a67bd3c0 100644 --- a/swad_country.c +++ b/swad_country.c @@ -255,25 +255,25 @@ void Cty_ListCountries2 (void) /* Number of institutions in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, HieLvl_CTY,0)); HTM_TD_End (); /* Number of centers in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_CTY,0)); HTM_TD_End (); /* Number of degrees in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTY,0)); HTM_TD_End (); /* Number of courses in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTY,0)); HTM_TD_End (); @@ -304,25 +304,25 @@ void Cty_ListCountries2 (void) /* Number of institutions with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, HieLvl_CTY,-1L)); HTM_TD_End (); /* Number of centers with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_CTY,-1L)); HTM_TD_End (); /* Number of degrees with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTY,-1L)); HTM_TD_End (); /* Number of courses with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTY,-1L)); HTM_TD_End (); @@ -442,28 +442,28 @@ 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_GetCachedNumNodesIn (FigCch_NUM_INSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, HieLvl_CTY,Cty->HieCod)); HTM_TD_End (); /***** Number of centers *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_CTY,Cty->HieCod)); HTM_TD_End (); /***** Number of degrees *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTY,Cty->HieCod)); HTM_TD_End (); /***** Number of courses *****/ HTM_TD_Begin ("class=\"RM DAT_%s %s\"", The_GetSuffix (),BgColor); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTY,Cty->HieCod)); HTM_TD_End (); @@ -635,7 +635,7 @@ void Cty_WriteScriptGoogleGeochart (void) NumUsrsCty = Cty_GetCachedNumUsrsWhoClaimToBelongToCty (&Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]); if (NumUsrsCty) { - NumInss = Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + NumInss = Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, HieLvl_CTY,Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty].HieCod); /* Write data of this country */ @@ -1068,7 +1068,7 @@ static void Cty_ListCountriesForEdition (void) NumCty++) { Cty = &Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]; - NumInss = Ins_GetNumInssInCty (Cty->HieCod); + NumInss = Hie_GetFigureInHieLvl (FigCch_NUM_INSS,HieLvl_CTY,Cty->HieCod); NumUsrsCty = Cty_GetNumUsrsWhoClaimToBelongToCty (Cty); HTM_TR_Begin (NULL); @@ -1194,7 +1194,7 @@ void Cty_RemoveCountry (void) Cty_GetBasicCountryDataByCod (Cty_EditingCty); /***** Check if this country has users *****/ - if (Ins_GetNumInssInCty (Cty_EditingCty->HieCod)) // Country has institutions ==> don't remove + if (Hie_GetFigureInHieLvl (FigCch_NUM_INSS,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 +1216,10 @@ void Cty_RemoveCountry (void) /***** Flush cache *****/ Cty_FlushCacheCountryName (); - Ins_FlushCacheNumInssInCty (); - Ctr_FlushCacheNumCtrsInCty (); - Deg_FlushCacheNumDegsInCty (); - Crs_FlushCacheNumCrssInCty (); + 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); Cty_FlushCacheNumUsrsWhoClaimToBelongToCty (); /***** Write message to show the change made *****/ diff --git a/swad_country_config.c b/swad_country_config.c index c25442270..4a94ef59f 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -149,7 +149,7 @@ static void CtyCfg_Configuration (bool PrintView) CtyCfg_QR (); else { - NumCtrs = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + NumCtrs = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); /* Number of users who claim to belong to this country, @@ -490,7 +490,7 @@ static void CtyCfg_NumInss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_INSS, HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); @@ -515,7 +515,7 @@ static void CtyCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); @@ -538,7 +538,7 @@ static void CtyCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); diff --git a/swad_course.c b/swad_course.c index bec0d07e4..f795ddd11 100644 --- a/swad_course.c +++ b/swad_course.c @@ -407,118 +407,6 @@ static void Crs_WriteListMyCoursesToSelectOne (void) Box_BoxEnd (); } -/*****************************************************************************/ -/****************** Get number of courses in a country ***********************/ -/*****************************************************************************/ - -void Crs_FlushCacheNumCrssInCty (void) - { - Gbl.Cache.NumCrssInCty.HieCod = -1L; - Gbl.Cache.NumCrssInCty.NumCrss = 0; - } - -unsigned Crs_GetNumCrssInCty (long CtyCod) - { - /***** 1. Fast check: Trivial case *****/ - if (CtyCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.NumCrssInCty.HieCod) - return Gbl.Cache.NumCrssInCty.NumCrss; - - /***** 3. Slow: number of courses in a country from database *****/ - Gbl.Cache.NumCrssInCty.HieCod = CtyCod; - Gbl.Cache.NumCrssInCty.NumCrss = Crs_DB_GetNumCrssInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_CTY,Gbl.Cache.NumCrssInCty.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCrssInCty.NumCrss); - return Gbl.Cache.NumCrssInCty.NumCrss; - } - -/*****************************************************************************/ -/**************** Get number of courses in an institution ********************/ -/*****************************************************************************/ - -void Crs_FlushCacheNumCrssInIns (void) - { - Gbl.Cache.NumCrssInIns.HieCod = -1L; - Gbl.Cache.NumCrssInIns.NumCrss = 0; - } - -unsigned Crs_GetNumCrssInIns (long InsCod) - { - /***** 1. Fast check: Trivial case *****/ - if (InsCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumCrssInIns.HieCod) - return Gbl.Cache.NumCrssInIns.NumCrss; - - /***** 3. Slow: number of courses in an institution from database *****/ - Gbl.Cache.NumCrssInIns.HieCod = InsCod; - Gbl.Cache.NumCrssInIns.NumCrss = Crs_DB_GetNumCrssInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_INS,Gbl.Cache.NumCrssInIns.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCrssInIns.NumCrss); - return Gbl.Cache.NumCrssInIns.NumCrss; - } - -/*****************************************************************************/ -/******************** Get number of courses in a center **********************/ -/*****************************************************************************/ - -void Crs_FlushCacheNumCrssInCtr (void) - { - Gbl.Cache.NumCrssInCtr.HieCod = -1L; - Gbl.Cache.NumCrssInCtr.NumCrss = 0; - } - -unsigned Crs_GetNumCrssInCtr (long CtrCod) - { - /***** 1. Fast check: Trivial case *****/ - if (CtrCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (CtrCod == Gbl.Cache.NumCrssInCtr.HieCod) - return Gbl.Cache.NumCrssInCtr.NumCrss; - - /***** 3. Slow: number of courses in a center from database *****/ - Gbl.Cache.NumCrssInCtr.HieCod = CtrCod; - Gbl.Cache.NumCrssInCtr.NumCrss = Crs_DB_GetNumCrssInCtr (CtrCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_CTR,Gbl.Cache.NumCrssInCtr.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCrssInCtr.NumCrss); - return Gbl.Cache.NumCrssInCtr.NumCrss; - } - -/*****************************************************************************/ -/******************** Get number of courses in a degree **********************/ -/*****************************************************************************/ - -void Crs_FlushCacheNumCrssInDeg (void) - { - Gbl.Cache.NumCrssInDeg.HieCod = -1L; - Gbl.Cache.NumCrssInDeg.NumCrss = 0; - } - -unsigned Crs_GetNumCrssInDeg (long DegCod) - { - /***** 1. Fast check: Trivial case *****/ - if (DegCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (DegCod == Gbl.Cache.NumCrssInDeg.HieCod) - return Gbl.Cache.NumCrssInDeg.NumCrss; - - /***** 3. Slow: number of courses in a degree from database *****/ - Gbl.Cache.NumCrssInDeg.HieCod = DegCod; - Gbl.Cache.NumCrssInDeg.NumCrss = Crs_DB_GetNumCrssInDeg (DegCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Cache.NumCrssInDeg.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumCrssInDeg.NumCrss); - return Gbl.Cache.NumCrssInDeg.NumCrss; - } - /*****************************************************************************/ /********************* Get number of courses with users **********************/ /*****************************************************************************/ diff --git a/swad_course.h b/swad_course.h index 66660a3cb..24c62c3bd 100644 --- a/swad_course.h +++ b/swad_course.h @@ -52,18 +52,6 @@ void Crs_ShowIntroduction (void); -void Crs_FlushCacheNumCrssInCty (void); -unsigned Crs_GetNumCrssInCty (long CtyCod); - -void Crs_FlushCacheNumCrssInIns (void); -unsigned Crs_GetNumCrssInIns (long InsCod); - -void Crs_FlushCacheNumCrssInCtr (void); -unsigned Crs_GetNumCrssInCtr (long CtrCod); - -void Crs_FlushCacheNumCrssInDeg (void); -unsigned Crs_GetNumCrssInDeg (long DegCod); - unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role); void Crs_WriteSelectorOfCourse (void); diff --git a/swad_degree.c b/swad_degree.c index edab4732c..77163925b 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 = Crs_GetNumCrssInDeg (DegInLst->HieCod); + NumCrss = Hie_GetFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG,DegInLst->HieCod); NumUsrsInCrssOfDeg = Enr_GetNumUsrsInCrss (HieLvl_DEG,DegInLst->HieCod, 1 << Rol_STD | 1 << Rol_NET | @@ -796,7 +796,7 @@ static void Deg_ListOneDegreeForSeeing (struct Hie_Node *Deg,unsigned NumDeg) const char *TxtClassNormal; const char *TxtClassStrong; const char *BgColor; - unsigned NumCrss = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + unsigned NumCrss = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_DEG,Deg->HieCod); /***** Get data of type of degree of this degree *****/ @@ -1137,7 +1137,7 @@ void Deg_RemoveDegree (void) Deg_GetDegreeDataByCod (Deg_EditingDeg); /***** Check if this degree has courses *****/ - if (Crs_GetNumCrssInDeg (Deg_EditingDeg->HieCod)) // Degree has courses ==> don't remove + if (Hie_GetFigureInHieLvl (FigCch_NUM_CRSS,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 +1278,7 @@ void Deg_RemoveDegreeCompletely (long DegCod) Deg_DB_RemoveDeg (DegCod); /***** Flush caches *****/ - Crs_FlushCacheNumCrssInDeg (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG); /***** Delete all degrees in stats table not present in degrees table *****/ Pho_DB_RemoveObsoleteStatDegrees (); @@ -1524,90 +1524,6 @@ static void Deg_ShowAlertAndButtonToGoToDeg (void) Ale_ShowAlerts (NULL); } -/*****************************************************************************/ -/********************* Get number of degrees in a country ********************/ -/*****************************************************************************/ - -void Deg_FlushCacheNumDegsInCty (void) - { - Gbl.Cache.NumDegsInCty.HieCod = -1L; - Gbl.Cache.NumDegsInCty.NumDegs = 0; - } - -unsigned Deg_GetNumDegsInCty (long CtyCod) - { - /***** 1. Fast check: Trivial case *****/ - if (CtyCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.NumDegsInCty.HieCod) - return Gbl.Cache.NumDegsInCty.NumDegs; - - /***** 3. Slow: number of degrees in a country from database *****/ - Gbl.Cache.NumDegsInCty.HieCod = CtyCod; - Gbl.Cache.NumDegsInCty.NumDegs = Deg_DB_GetNumDegsInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTY,Gbl.Cache.NumDegsInCty.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCty.NumDegs); - return Gbl.Cache.NumDegsInCty.NumDegs; - } - -/*****************************************************************************/ -/****************** Get number of degrees in an institution ******************/ -/*****************************************************************************/ - -void Deg_FlushCacheNumDegsInIns (void) - { - Gbl.Cache.NumDegsInIns.HieCod = -1L; - Gbl.Cache.NumDegsInIns.NumDegs = 0; - } - -unsigned Deg_GetNumDegsInIns (long InsCod) - { - /***** 1. Fast check: Trivial case *****/ - if (InsCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumDegsInIns.HieCod) - return Gbl.Cache.NumDegsInIns.NumDegs; - - /***** 3. Slow: number of degrees in an institution from database *****/ - Gbl.Cache.NumDegsInIns.HieCod = InsCod; - Gbl.Cache.NumDegsInIns.NumDegs = Deg_DB_GetNumDegsInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_INS,Gbl.Cache.NumDegsInIns.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumDegsInIns.NumDegs); - return Gbl.Cache.NumDegsInIns.NumDegs; - } - -/*****************************************************************************/ -/******************** Get number of degrees in a center **********************/ -/*****************************************************************************/ - -void Deg_FlushCacheNumDegsInCtr (void) - { - Gbl.Cache.NumDegsInCtr.HieCod = -1L; - Gbl.Cache.NumDegsInCtr.NumDegs = 0; - } - -unsigned Deg_GetNumDegsInCtr (long CtrCod) - { - /***** 1. Fast check: Trivial case *****/ - if (CtrCod <= 0) - return 0; - - /***** 2. Fast check: If cached... *****/ - if (CtrCod == Gbl.Cache.NumDegsInCtr.HieCod) - return Gbl.Cache.NumDegsInCtr.NumDegs; - - /***** 3. Slow: number of degrees in a center from database *****/ - Gbl.Cache.NumDegsInCtr.HieCod = CtrCod; - Gbl.Cache.NumDegsInCtr.NumDegs = Deg_DB_GetNumDegsInCtr (CtrCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTR,Gbl.Cache.NumDegsInCtr.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCtr.NumDegs); - return Gbl.Cache.NumDegsInCtr.NumDegs; - } - /*****************************************************************************/ /********************* Get number of centers with courses ********************/ /*****************************************************************************/ diff --git a/swad_degree.h b/swad_degree.h index 6e38cbf58..b705eafb2 100644 --- a/swad_degree.h +++ b/swad_degree.h @@ -81,15 +81,6 @@ void Deg_ChangeDegWWW (void); void Deg_ChangeDegStatus (void); void Deg_ContEditAfterChgDeg (void); -void Deg_FlushCacheNumDegsInCty (void); -unsigned Deg_GetNumDegsInCty (long CtyCod); - -void Deg_FlushCacheNumDegsInIns (void); -unsigned Deg_GetNumDegsInIns (long InsCod); - -void Deg_FlushCacheNumDegsInCtr (void); -unsigned Deg_GetNumDegsInCtr (long CtrCod); - unsigned Deg_GetCachedNumDegsWithCrss (void); unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role); diff --git a/swad_degree_config.c b/swad_degree_config.c index 9c26c7e57..7496c023e 100644 --- a/swad_degree_config.c +++ b/swad_degree_config.c @@ -335,7 +335,7 @@ static void DegCfg_NumCrss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); diff --git a/swad_figure_cache.h b/swad_figure_cache.h index 501dc61f1..eea57bea2 100644 --- a/swad_figure_cache.h +++ b/swad_figure_cache.h @@ -36,6 +36,7 @@ /*****************************************************************************/ // If numbers change, clean database table figures: "DELETE FROM figures;" +#define FigCch_NUM_FIGURES 2 typedef enum { FigCch_UNKNOWN = 0, // Unknown figure (do not change this constant to any value other than 0) diff --git a/swad_global.c b/swad_global.c index 15b4dcfff..a556303e9 100644 --- a/swad_global.c +++ b/swad_global.c @@ -220,20 +220,20 @@ void Gbl_InitializeGlobals (void) Cty_FlushCacheCountryName (); Ins_FlushCacheFullNameAndCtyOfInstitution (); - Ins_FlushCacheNumInssInCty (); - Ctr_FlushCacheNumCtrsInCty (); - Deg_FlushCacheNumDegsInCty (); - Crs_FlushCacheNumCrssInCty (); + 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); Dpt_FlushCacheNumDptsInIns (); - Ctr_FlushCacheNumCtrsInIns (); - Deg_FlushCacheNumDegsInIns (); - Crs_FlushCacheNumCrssInIns (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_INS); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_INS); - Deg_FlushCacheNumDegsInCtr (); - Crs_FlushCacheNumCrssInCtr (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_CTR); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_CTR); - Crs_FlushCacheNumCrssInDeg (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG); Cty_FlushCacheNumUsrsWhoDontClaimToBelongToAnyCty (); Cty_FlushCacheNumUsrsWhoClaimToBelongToAnotherCty (); diff --git a/swad_global.h b/swad_global.h index bc0c7d7e0..5d49f8203 100644 --- a/swad_global.h +++ b/swad_global.h @@ -310,53 +310,8 @@ struct Globals { bool Valid; long HieCod; - unsigned NumInss; - } NumInssInCty; - struct - { - long HieCod; - unsigned NumCtrs; - } NumCtrsInCty; - struct - { - long HieCod; - unsigned NumCtrs; - } NumCtrsInIns; - struct - { - long HieCod; - unsigned NumDegs; - } NumDegsInCty; - struct - { - long HieCod; - unsigned NumDegs; - } NumDegsInIns; - struct - { - long HieCod; - unsigned NumDegs; - } NumDegsInCtr; - struct - { - long HieCod; - unsigned NumCrss; - } NumCrssInCty; - struct - { - long HieCod; - unsigned NumCrss; - } NumCrssInIns; - struct - { - long HieCod; - unsigned NumCrss; - } NumCrssInCtr; - struct - { - long HieCod; - unsigned NumCrss; - } NumCrssInDeg; + unsigned Num; + } FigureInHieLvl[FigCch_NUM_FIGURES][HieLvl_NUM_LEVELS]; struct { bool Valid; diff --git a/swad_hierarchy.c b/swad_hierarchy.c index 37123dcd0..cddb4967a 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -33,6 +33,7 @@ #include "swad_alert.h" #include "swad_box.h" #include "swad_center_database.h" +#include "swad_course_database.h" #include "swad_database.h" #include "swad_degree_database.h" #include "swad_enrolment_database.h" @@ -1303,22 +1304,22 @@ static void Hie_GetAndShowHierarchyTotal (void) NumCrssTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_CRSS,"crs_courses"); break; case HieLvl_CTY: - NumInssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_INSS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCtrsTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumDegsTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCrssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS,HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + 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); break; case HieLvl_INS: - NumCtrsTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumDegsTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumCrssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + 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); break; case HieLvl_CTR: - NumDegsTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); - NumCrssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS,HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); + 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); break; case HieLvl_DEG: - NumCrssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); + NumCrssTotal = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); break; case HieLvl_CRS: break; @@ -1364,37 +1365,62 @@ unsigned Hie_GetCachedNumNodesInSys (FigCch_FigureCached_t Figure, /**** Get total number of courses/degrees/centers/institutions in country ****/ /*****************************************************************************/ -unsigned Hie_GetCachedNumNodesIn (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod) +void Hie_FlushCachedFigureInHieLvl (FigCch_FigureCached_t Figure, + HieLvl_Level_t Level) + { + Gbl.Cache.FigureInHieLvl[Figure][Level].Valid = false; + } + +unsigned Hie_GetCachedFigureInHieLvl (FigCch_FigureCached_t Figure, + HieLvl_Level_t Level,long HieCod) { - static unsigned (*FunctionGetNumNodes[][HieLvl_NUM_LEVELS]) (long HieCod) = - { - /* Number of nodes in country */ - [FigCch_NUM_INSS][HieLvl_CTY] = Ins_GetNumInssInCty, - [FigCch_NUM_CTRS][HieLvl_CTY] = Ctr_GetNumCtrsInCty, - [FigCch_NUM_DEGS][HieLvl_CTY] = Deg_GetNumDegsInCty, - [FigCch_NUM_CRSS][HieLvl_CTY] = Crs_GetNumCrssInCty, - /* Number of nodes in institution */ - [FigCch_NUM_CTRS][HieLvl_INS] = Ctr_GetNumCtrsInIns, - [FigCch_NUM_DEGS][HieLvl_INS] = Deg_GetNumDegsInIns, - [FigCch_NUM_CRSS][HieLvl_INS] = Crs_GetNumCrssInIns, - /* Number of nodes in center */ - [FigCch_NUM_DEGS][HieLvl_CTR] = Deg_GetNumDegsInCtr, - [FigCch_NUM_CRSS][HieLvl_CTR] = Crs_GetNumCrssInCtr, - /* Number of nodes in degree */ - [FigCch_NUM_CRSS][HieLvl_DEG] = Crs_GetNumCrssInDeg, - }; unsigned NumNodes; /***** Get number of nodes from cache *****/ if (!FigCch_GetFigureFromCache (Figure,Level,HieCod, FigCch_UNSIGNED,&NumNodes)) /***** Get current number of nodes from database and update cache *****/ - NumNodes = FunctionGetNumNodes[Figure][Level] (HieCod); + NumNodes = Hie_GetFigureInHieLvl (Figure,Level,HieCod); return NumNodes; } +unsigned Hie_GetFigureInHieLvl (FigCch_FigureCached_t Figure, + HieLvl_Level_t Level,long HieCod) + { + static unsigned (*FunctionGetFigure[][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, + /* 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, + /* Number of nodes in center */ + [FigCch_NUM_DEGS][HieLvl_CTR] = Deg_DB_GetNumDegsInCtr, + [FigCch_NUM_CRSS][HieLvl_CTR] = Crs_DB_GetNumCrssInCtr, + /* Number of nodes in degree */ + [FigCch_NUM_CRSS][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; + + /***** 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; + } + /*****************************************************************************/ /************** Show row with number of elements in hierarchy ****************/ /*****************************************************************************/ diff --git a/swad_hierarchy.h b/swad_hierarchy.h index 8384037d6..1d292faa2 100644 --- a/swad_hierarchy.h +++ b/swad_hierarchy.h @@ -73,7 +73,12 @@ void Hie_GetAndShowHierarchyStats (void); unsigned Hie_GetCachedNumNodesInSys (FigCch_FigureCached_t Figure, const char *Table); -unsigned Hie_GetCachedNumNodesIn (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long HieCod); + +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); #endif diff --git a/swad_institution.c b/swad_institution.c index 4df7beb55..14ca24383 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -398,21 +398,21 @@ 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_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_INS,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_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_INS,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_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_INS,Ins->HieCod)); HTM_TD_End (); @@ -900,7 +900,7 @@ static void Ins_ListInstitutionsForEdition (void) Ins = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns]; ICanEdit = Ins_CheckIfICanEdit (Ins); - NumCtrs = Ctr_GetNumCtrsInIns (Ins->HieCod); + NumCtrs = Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Ins->HieCod); NumUsrsIns = Ins_GetNumUsrsWhoClaimToBelongToIns (Ins); NumUsrsInCrssOfIns = Enr_GetNumUsrsInCrss (HieLvl_INS,Ins->HieCod, 1 << Rol_STD | @@ -1067,7 +1067,7 @@ void Ins_RemoveInstitution (void) /***** Check if this institution has users *****/ if (!Ins_CheckIfICanEdit (Ins_EditingIns)) Err_NoPermissionExit (); - else if (Ctr_GetNumCtrsInIns (Ins_EditingIns->HieCod)) + else if (Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,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 +1109,9 @@ void Ins_RemoveInstitution (void) /***** Flush caches *****/ Ins_FlushCacheFullNameAndCtyOfInstitution (); Dpt_FlushCacheNumDptsInIns (); - Ctr_FlushCacheNumCtrsInIns (); - Deg_FlushCacheNumDegsInIns (); - Crs_FlushCacheNumCrssInIns (); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_DEGS,HieLvl_INS); + Hie_FlushCachedFigureInHieLvl (FigCch_NUM_CRSS,HieLvl_INS); Ins_FlushCacheNumUsrsWhoClaimToBelongToIns (); /***** Write message to show the change made *****/ @@ -1551,31 +1551,6 @@ static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status) Ale_CreateAlertYouMustSpecifyTheShortNameAndTheFullName (); } -/*****************************************************************************/ -/**************** Get number of institutions in a country ********************/ -/*****************************************************************************/ - -void Ins_FlushCacheNumInssInCty (void) - { - Gbl.Cache.NumInssInCty.Valid = false; - } - -unsigned Ins_GetNumInssInCty (long CtyCod) - { - /***** 1. Fast check: If cached... *****/ - if (Gbl.Cache.NumInssInCty.Valid && - CtyCod == Gbl.Cache.NumInssInCty.HieCod) - return Gbl.Cache.NumInssInCty.NumInss; - - /***** 2. Slow: number of institutions in a country from database *****/ - Gbl.Cache.NumInssInCty.HieCod = CtyCod; - Gbl.Cache.NumInssInCty.NumInss = Ins_DB_GetNumInssInCty (CtyCod); - Gbl.Cache.NumInssInCty.Valid = true; - FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS,HieLvl_CTY,Gbl.Cache.NumInssInCty.HieCod, - FigCch_UNSIGNED,&Gbl.Cache.NumInssInCty.NumInss); - return Gbl.Cache.NumInssInCty.NumInss; - } - /*****************************************************************************/ /***************** Get number of institutions with centers *******************/ /*****************************************************************************/ diff --git a/swad_institution.h b/swad_institution.h index 4fea72133..6e3192875 100644 --- a/swad_institution.h +++ b/swad_institution.h @@ -72,9 +72,6 @@ void Ins_ContEditAfterChgIns (void); void Ins_ReceiveFormReqIns (void); void Ins_ReceiveFormNewIns (void); -void Ins_FlushCacheNumInssInCty (void); -unsigned Ins_GetNumInssInCty (long CtyCod); - unsigned Ins_GetCachedNumInssWithCtrs (void); unsigned Ins_GetCachedNumInssWithDegs (void); unsigned Ins_GetCachedNumInssWithCrss (void); diff --git a/swad_institution_config.c b/swad_institution_config.c index 950e2b57c..05134ae6b 100644 --- a/swad_institution_config.c +++ b/swad_institution_config.c @@ -160,7 +160,7 @@ static void InsCfg_Configuration (bool PrintView) InsCfg_QR (); else { - NumCtrs = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + NumCtrs = Hie_GetCachedFigureInHieLvl (FigCch_NUM_CTRS, HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); /***** Number of users who claim to belong to this institution, @@ -449,7 +449,7 @@ static void InsCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_DEGS, HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); @@ -472,7 +472,7 @@ static void InsCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HTM_Unsigned (Hie_GetCachedFigureInHieLvl (FigCch_NUM_CRSS, HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); diff --git a/swad_place.c b/swad_place.c index 4a0f87d26..bb451d1a2 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 (Ctr_GetNumCtrsInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod) - + HTM_Unsigned (Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod) - NumCtrsWithPlc); HTM_TD_End (); diff --git a/swad_record.c b/swad_record.c index 56fa71762..25ffac08e 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 = Ins_GetNumInssInCty (Gbl.Usrs.Me.UsrDat.InsCtyCod); + NumInss = Hie_GetFigureInHieLvl (FigCch_NUM_INSS,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 = Ctr_GetNumCtrsInIns (Gbl.Usrs.Me.UsrDat.InsCod); + NumCtrs = Hie_GetFigureInHieLvl (FigCch_NUM_CTRS,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);