From 9accc808f53b8351ca5749512f787b70312c70e2 Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 20 Sep 2023 20:07:04 +0200 Subject: [PATCH] Version 23.11: Sep 20, 2023 Code refactoring in hierarchy. --- swad_center.c | 81 +++++------------------- swad_center.h | 6 +- swad_center_config.c | 6 +- swad_changelog.h | 3 +- swad_country.c | 74 ++++++++++------------ swad_country.h | 2 - swad_country_config.c | 12 ++-- swad_course.c | 109 +++++---------------------------- swad_course.h | 7 +-- swad_degree.c | 87 +++++--------------------- swad_degree.h | 6 +- swad_degree_config.c | 3 +- swad_department.c | 6 +- swad_figure_cache.c | 10 +-- swad_figure_cache.h | 4 +- swad_figure_database.c | 12 ++-- swad_figure_database.h | 6 +- swad_global.h | 32 +++++----- swad_hierarchy.c | 126 ++++++++++++++++++++++++++++---------- swad_hierarchy.h | 5 ++ swad_institution.c | 63 +++++-------------- swad_institution.h | 4 +- swad_institution_config.c | 9 ++- swad_system_config.c | 10 +-- 24 files changed, 261 insertions(+), 422 deletions(-) diff --git a/swad_center.c b/swad_center.c index 286273a2..28441f23 100644 --- a/swad_center.c +++ b/swad_center.c @@ -98,8 +98,6 @@ static void Ctr_PutHeadCentersForSeeing (bool OrderSelectable); static void Ctr_PutHeadCentersForEdition (void); static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status); -static unsigned Ctr_GetNumCtrsInCty (long CtyCod); - static void Ctr_EditingCenterConstructor (void); static void Ctr_EditingCenterDestructor (void); @@ -369,13 +367,15 @@ 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 (Deg_GetCachedNumDegsInCtr (Ctr->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Crs_GetCachedNumCrssInCtr (Ctr->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTR,Ctr->HieCod)); HTM_TD_End (); /***** Number of users in courses of this center *****/ @@ -1554,75 +1554,41 @@ static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status) Ale_CreateAlertYouMustSpecifyTheShortNameAndTheFullName (); } -/*****************************************************************************/ -/************************** Get number of centers ****************************/ -/*****************************************************************************/ - -unsigned Ctr_GetCachedNumCtrsInSys (void) - { - unsigned NumCtrs; - - /***** Get number of centers from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCtrs)) - { - /***** Get current number of centers from database and update cache *****/ - NumCtrs = (unsigned) DB_GetNumRowsTable ("ctr_centers"); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCtrs); - } - - return NumCtrs; - } - /*****************************************************************************/ /******************* Get number of centers in a country **********************/ /*****************************************************************************/ void Ctr_FlushCacheNumCtrsInCty (void) { - Gbl.Cache.NumCtrsInCty.CtyCod = -1L; + Gbl.Cache.NumCtrsInCty.HieCod = -1L; Gbl.Cache.NumCtrsInCty.NumCtrs = 0; } -static unsigned Ctr_GetNumCtrsInCty (long CtyCod) +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.CtyCod) + if (CtyCod == Gbl.Cache.NumCtrsInCty.HieCod) return Gbl.Cache.NumCtrsInCty.NumCtrs; /***** 3. Slow: number of centers in a country from database *****/ - Gbl.Cache.NumCtrsInCty.CtyCod = CtyCod; + Gbl.Cache.NumCtrsInCty.HieCod = CtyCod; Gbl.Cache.NumCtrsInCty.NumCtrs = Ctr_DB_GetNumCtrsInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_CTY,Gbl.Cache.NumCtrsInCty.CtyCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_CTY,Gbl.Cache.NumCtrsInCty.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInCty.NumCtrs); return Gbl.Cache.NumCtrsInCty.NumCtrs; } -unsigned Ctr_GetCachedNumCtrsInCty (long CtyCod) - { - unsigned NumCtrs; - - /***** Get number of centers from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS,HieLvl_CTY,CtyCod, - FigCch_UNSIGNED,&NumCtrs)) - /***** Get current number of centers from database and update cache *****/ - NumCtrs = Ctr_GetNumCtrsInCty (CtyCod); - - return NumCtrs; - } - /*****************************************************************************/ /**************** Get number of centers in an institution ********************/ /*****************************************************************************/ void Ctr_FlushCacheNumCtrsInIns (void) { - Gbl.Cache.NumCtrsInIns.InsCod = -1L; + Gbl.Cache.NumCtrsInIns.HieCod = -1L; Gbl.Cache.NumCtrsInIns.NumCtrs = 0; } @@ -1633,30 +1599,17 @@ unsigned Ctr_GetNumCtrsInIns (long InsCod) return 0; /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumCtrsInIns.InsCod) + if (InsCod == Gbl.Cache.NumCtrsInIns.HieCod) return Gbl.Cache.NumCtrsInIns.NumCtrs; /***** 3. Slow: number of centers in an institution from database *****/ - Gbl.Cache.NumCtrsInIns.InsCod = InsCod; + Gbl.Cache.NumCtrsInIns.HieCod = InsCod; Gbl.Cache.NumCtrsInIns.NumCtrs = Ctr_DB_GetNumCtrsInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Cache.NumCtrsInIns.InsCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,HieLvl_INS,Gbl.Cache.NumCtrsInIns.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInIns.NumCtrs); return Gbl.Cache.NumCtrsInIns.NumCtrs; } -unsigned Ctr_GetCachedNumCtrsInIns (long InsCod) - { - unsigned NumCtrs; - - /***** Get number of centers from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS,HieLvl_INS,InsCod, - FigCch_UNSIGNED,&NumCtrs)) - /***** Get current number of centers from database and update cache *****/ - NumCtrs = Ctr_GetNumCtrsInIns (InsCod); - - return NumCtrs; - } - /*****************************************************************************/ /********************** Get number of centers with map ***********************/ /*****************************************************************************/ @@ -1988,7 +1941,7 @@ bool Ctr_CheckIfIBelongToCtr (long CtrCod) void Ctr_FlushCacheNumUsrsWhoClaimToBelongToCtr (void) { - Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.CtrCod = -1L; + Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.HieCod = -1L; Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.NumUsrs = 0; } @@ -2003,7 +1956,7 @@ unsigned Ctr_GetNumUsrsWhoClaimToBelongToCtr (struct Hie_Node *Ctr) return Ctr->NumUsrsWhoClaimToBelong.NumUsrs; /***** 3. Fast check: If cached... *****/ - if (Ctr->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.CtrCod) + if (Ctr->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.HieCod) { Ctr->NumUsrsWhoClaimToBelong.NumUsrs = Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.NumUsrs; Ctr->NumUsrsWhoClaimToBelong.Valid = true; @@ -2012,10 +1965,10 @@ unsigned Ctr_GetNumUsrsWhoClaimToBelongToCtr (struct Hie_Node *Ctr) /***** 4. Slow: number of users who claim to belong to a center from database *****/ - Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.CtrCod = Ctr->HieCod; + Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.HieCod = Ctr->HieCod; Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.NumUsrs = Ctr->NumUsrsWhoClaimToBelong.NumUsrs = Ctr_DB_GetNumUsrsWhoClaimToBelongToCtr (Ctr->HieCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_CTR,HieLvl_CTR,Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.CtrCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_CTR,HieLvl_CTR,Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumUsrsWhoClaimToBelongToCtr.NumUsrs); return Ctr->NumUsrsWhoClaimToBelong.NumUsrs; } diff --git a/swad_center.h b/swad_center.h index 27256186..994db59b 100644 --- a/swad_center.h +++ b/swad_center.h @@ -32,6 +32,7 @@ #include "swad_action.h" #include "swad_constant.h" #include "swad_degree.h" +#include "swad_figure_cache.h" #include "swad_map.h" #include "swad_role_type.h" @@ -70,14 +71,11 @@ void Ctr_ContEditAfterChgCtr (void); void Ctr_ReceiveFormReqCtr (void); void Ctr_ReceiveFormNewCtr (void); -unsigned Ctr_GetCachedNumCtrsInSys (void); - void Ctr_FlushCacheNumCtrsInCty (void); -unsigned Ctr_GetCachedNumCtrsInCty (long CtyCod); +unsigned Ctr_GetNumCtrsInCty (long CtyCod); void Ctr_FlushCacheNumCtrsInIns (void); unsigned Ctr_GetNumCtrsInIns (long InsCod); -unsigned Ctr_GetCachedNumCtrsInIns (long InsCod); unsigned Ctr_GetCachedNumCtrsWithMapInSys (void); unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod); diff --git a/swad_center_config.c b/swad_center_config.c index 85cd1c4a..d18bc58e 100644 --- a/swad_center_config.c +++ b/swad_center_config.c @@ -775,7 +775,8 @@ static void CtrCfg_NumDegs (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Deg_GetCachedNumDegsInCtr (Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -799,7 +800,8 @@ static void CtrCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Crs_GetCachedNumCrssInCtr (Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_changelog.h b/swad_changelog.h index 52b8b534..dc8b1230 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.10 (2023-09-20)" +#define Log_PLATFORM_VERSION "SWAD 23.11 (2023-09-20)" #define CSS_FILE "swad22.120.4.css" #define JS_FILE "swad22.49.js" /* + 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) Version 23.9.6: Sep 19, 2023 Code refactoring in hierarchy. (337410 lines) diff --git a/swad_country.c b/swad_country.c index 00b16f2e..509499ed 100644 --- a/swad_country.c +++ b/swad_country.c @@ -255,22 +255,26 @@ void Cty_ListCountries2 (void) /* Number of institutions in other countries */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Ins_GetCachedNumInssInCty (0)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Ctr_GetCachedNumCtrsInCty (0)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Deg_GetCachedNumDegsInCty (0)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Crs_GetCachedNumCrssInCty (0)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTY,0)); HTM_TD_End (); /* Number of users in courses of other countries */ @@ -300,22 +304,26 @@ void Cty_ListCountries2 (void) /* Number of institutions with unknown country */ HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Ins_GetCachedNumInssInCty (-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Ctr_GetCachedNumCtrsInCty (-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Deg_GetCachedNumDegsInCty (-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Crs_GetCachedNumCrssInCty (-1L)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTY,-1L)); HTM_TD_End (); HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ()); @@ -434,25 +442,29 @@ 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 (Ins_GetCachedNumInssInCty (Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Ctr_GetCachedNumCtrsInCty (Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Deg_GetCachedNumDegsInCty (Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Crs_GetCachedNumCrssInCty (Cty->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTY,Cty->HieCod)); HTM_TD_End (); /***** Number of users in courses *****/ @@ -623,7 +635,8 @@ void Cty_WriteScriptGoogleGeochart (void) NumUsrsCty = Cty_GetCachedNumUsrsWhoClaimToBelongToCty (&Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]); if (NumUsrsCty) { - NumInss = Ins_GetCachedNumInssInCty (Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty].HieCod); + NumInss = Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + HieLvl_CTY,Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty].HieCod); /* Write data of this country */ HTM_TxtF (" ['%s', %u, %u],\n", @@ -998,7 +1011,7 @@ void Cty_GetNamesAndWWWsByCod (struct Hie_Node *Cty, void Cty_FlushCacheCountryName (void) { - Gbl.Cache.CountryName.CtyCod = -1L; + Gbl.Cache.CountryName.HieCod = -1L; Gbl.Cache.CountryName.Language = Lan_LANGUAGE_UNKNOWN; Gbl.Cache.CountryName.CtyName[0] = '\0'; } @@ -1014,7 +1027,7 @@ void Cty_GetCountryNameInLanguage (long CtyCod,Lan_Language_t Language, } /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.CountryName.CtyCod && + if (CtyCod == Gbl.Cache.CountryName.HieCod && Language == Gbl.Cache.CountryName.Language) { Str_Copy (CtyName,Gbl.Cache.CountryName.CtyName,Cty_MAX_BYTES_NAME); @@ -1023,7 +1036,7 @@ void Cty_GetCountryNameInLanguage (long CtyCod,Lan_Language_t Language, /***** 3. Slow: get country name from database *****/ Cty_DB_GetCountryName (CtyCod,Language,CtyName); - Gbl.Cache.CountryName.CtyCod = CtyCod; + Gbl.Cache.CountryName.HieCod = CtyCod; Gbl.Cache.CountryName.Language = Language; Str_Copy (Gbl.Cache.CountryName.CtyName,CtyName,Cty_MAX_BYTES_NAME); } @@ -1624,27 +1637,6 @@ void Cty_ReceiveFormNewCountry (void) } } -/*****************************************************************************/ -/*********************** Get total number of countries ***********************/ -/*****************************************************************************/ - -unsigned Cty_GetCachedNumCtysInSys (void) - { - unsigned NumCtys; - - /***** Get number of countries from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CTYS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCtys)) - { - /***** Get current number of countries from database and update cache *****/ - NumCtys = (unsigned) DB_GetNumRowsTable ("cty_countrs"); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCtys); - } - - return NumCtys; - } - /*****************************************************************************/ /***************** Get number of countries with institutions *****************/ /*****************************************************************************/ @@ -2017,7 +2009,7 @@ unsigned Cty_GetCachedNumUsrsWhoClaimToBelongToAnotherCty (void) void Cty_FlushCacheNumUsrsWhoClaimToBelongToCty (void) { - Gbl.Cache.NumUsrsWhoClaimToBelongToCty.CtyCod = -1L; + Gbl.Cache.NumUsrsWhoClaimToBelongToCty.HieCod = -1L; Gbl.Cache.NumUsrsWhoClaimToBelongToCty.NumUsrs = 0; } @@ -2032,7 +2024,7 @@ unsigned Cty_GetNumUsrsWhoClaimToBelongToCty (struct Hie_Node *Cty) return Cty->NumUsrsWhoClaimToBelong.NumUsrs; /***** 3. Fast check: If cached... *****/ - if (Cty->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToCty.CtyCod) + if (Cty->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToCty.HieCod) { Cty->NumUsrsWhoClaimToBelong.NumUsrs = Gbl.Cache.NumUsrsWhoClaimToBelongToCty.NumUsrs; Cty->NumUsrsWhoClaimToBelong.Valid = true; @@ -2041,11 +2033,11 @@ unsigned Cty_GetNumUsrsWhoClaimToBelongToCty (struct Hie_Node *Cty) /***** 4. Slow: number of users who claim to belong to an institution from database *****/ - Gbl.Cache.NumUsrsWhoClaimToBelongToCty.CtyCod = Cty->HieCod; + Gbl.Cache.NumUsrsWhoClaimToBelongToCty.HieCod = Cty->HieCod; Gbl.Cache.NumUsrsWhoClaimToBelongToCty.NumUsrs = Cty->NumUsrsWhoClaimToBelong.NumUsrs = Cty_DB_GetNumUsrsWhoClaimToBelongToCty (Cty->HieCod); Cty->NumUsrsWhoClaimToBelong.Valid = true; - FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_CTY,HieLvl_CTY,Gbl.Cache.NumUsrsWhoClaimToBelongToCty.CtyCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_CTY,HieLvl_CTY,Gbl.Cache.NumUsrsWhoClaimToBelongToCty.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumUsrsWhoClaimToBelongToCty.NumUsrs); return Cty->NumUsrsWhoClaimToBelong.NumUsrs; } diff --git a/swad_country.h b/swad_country.h index 333320d7..301e85ee 100644 --- a/swad_country.h +++ b/swad_country.h @@ -82,8 +82,6 @@ void Cty_ChangeCtyWWW (void); void Cty_ContEditAfterChgCty (void); void Cty_ReceiveFormNewCountry (void); -unsigned Cty_GetCachedNumCtysInSys (void); - unsigned Cty_GetCachedNumCtysWithInss (void); unsigned Cty_GetCachedNumCtysWithCtrs (void); unsigned Cty_GetCachedNumCtysWithDegs (void); diff --git a/swad_country_config.c b/swad_country_config.c index 359377cc..c2544227 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -149,7 +149,8 @@ static void CtyCfg_Configuration (bool PrintView) CtyCfg_QR (); else { - NumCtrs = Ctr_GetCachedNumCtrsInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + NumCtrs = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); /* Number of users who claim to belong to this country, number of institutions, @@ -489,7 +490,8 @@ static void CtyCfg_NumInss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK\""); free (Title); - HTM_Unsigned (Ins_GetCachedNumInssInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_INSS, + HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -513,7 +515,8 @@ static void CtyCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Deg_GetCachedNumDegsInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); HTM_TR_End (); @@ -535,7 +538,8 @@ static void CtyCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Crs_GetCachedNumCrssInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_CTY,Gbl.Hierarchy.Node[HieLvl_CTY].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_course.c b/swad_course.c index b0beedf3..bec0d07e 100644 --- a/swad_course.c +++ b/swad_course.c @@ -407,34 +407,13 @@ static void Crs_WriteListMyCoursesToSelectOne (void) Box_BoxEnd (); } -/*****************************************************************************/ -/*********************** Get total number of courses *************************/ -/*****************************************************************************/ - -unsigned Crs_GetCachedNumCrssInSys (void) - { - unsigned NumCrss; - - /***** Get number of courses from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CRSS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCrss)) - { - /***** Get current number of courses from database and update cache *****/ - NumCrss = (unsigned) DB_GetNumRowsTable ("crs_courses"); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumCrss); - } - - return NumCrss; - } - /*****************************************************************************/ /****************** Get number of courses in a country ***********************/ /*****************************************************************************/ void Crs_FlushCacheNumCrssInCty (void) { - Gbl.Cache.NumCrssInCty.CtyCod = -1L; + Gbl.Cache.NumCrssInCty.HieCod = -1L; Gbl.Cache.NumCrssInCty.NumCrss = 0; } @@ -445,37 +424,24 @@ unsigned Crs_GetNumCrssInCty (long CtyCod) return 0; /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.NumCrssInCty.CtyCod) + if (CtyCod == Gbl.Cache.NumCrssInCty.HieCod) return Gbl.Cache.NumCrssInCty.NumCrss; /***** 3. Slow: number of courses in a country from database *****/ - Gbl.Cache.NumCrssInCty.CtyCod = CtyCod; + Gbl.Cache.NumCrssInCty.HieCod = CtyCod; Gbl.Cache.NumCrssInCty.NumCrss = Crs_DB_GetNumCrssInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_CTY,Gbl.Cache.NumCrssInCty.CtyCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_CTY,Gbl.Cache.NumCrssInCty.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumCrssInCty.NumCrss); return Gbl.Cache.NumCrssInCty.NumCrss; } -unsigned Crs_GetCachedNumCrssInCty (long CtyCod) - { - unsigned NumCrss; - - /***** Get number of courses from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CRSS,HieLvl_CTY,CtyCod, - FigCch_UNSIGNED,&NumCrss)) - /***** Get current number of courses from database and update cache *****/ - NumCrss = Crs_GetNumCrssInCty (CtyCod); - - return NumCrss; - } - /*****************************************************************************/ /**************** Get number of courses in an institution ********************/ /*****************************************************************************/ void Crs_FlushCacheNumCrssInIns (void) { - Gbl.Cache.NumCrssInIns.InsCod = -1L; + Gbl.Cache.NumCrssInIns.HieCod = -1L; Gbl.Cache.NumCrssInIns.NumCrss = 0; } @@ -486,37 +452,24 @@ unsigned Crs_GetNumCrssInIns (long InsCod) return 0; /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumCrssInIns.InsCod) + if (InsCod == Gbl.Cache.NumCrssInIns.HieCod) return Gbl.Cache.NumCrssInIns.NumCrss; /***** 3. Slow: number of courses in an institution from database *****/ - Gbl.Cache.NumCrssInIns.InsCod = InsCod; + Gbl.Cache.NumCrssInIns.HieCod = InsCod; Gbl.Cache.NumCrssInIns.NumCrss = Crs_DB_GetNumCrssInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_INS,Gbl.Cache.NumCrssInIns.InsCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_INS,Gbl.Cache.NumCrssInIns.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumCrssInIns.NumCrss); return Gbl.Cache.NumCrssInIns.NumCrss; } -unsigned Crs_GetCachedNumCrssInIns (long InsCod) - { - unsigned NumCrss; - - /***** Get number of courses from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CRSS,HieLvl_INS,InsCod, - FigCch_UNSIGNED,&NumCrss)) - /***** Get current number of courses from database and update cache *****/ - NumCrss = Crs_GetNumCrssInIns (InsCod); - - return NumCrss; - } - /*****************************************************************************/ /******************** Get number of courses in a center **********************/ /*****************************************************************************/ void Crs_FlushCacheNumCrssInCtr (void) { - Gbl.Cache.NumCrssInCtr.CtrCod = -1L; + Gbl.Cache.NumCrssInCtr.HieCod = -1L; Gbl.Cache.NumCrssInCtr.NumCrss = 0; } @@ -527,39 +480,24 @@ unsigned Crs_GetNumCrssInCtr (long CtrCod) return 0; /***** 2. Fast check: If cached... *****/ - if (CtrCod == Gbl.Cache.NumCrssInCtr.CtrCod) + if (CtrCod == Gbl.Cache.NumCrssInCtr.HieCod) return Gbl.Cache.NumCrssInCtr.NumCrss; /***** 3. Slow: number of courses in a center from database *****/ - Gbl.Cache.NumCrssInCtr.CtrCod = CtrCod; + 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; } -unsigned Crs_GetCachedNumCrssInCtr (long CtrCod) - { - unsigned NumCrss; - - /***** Get number of courses from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CRSS,HieLvl_CTR,CtrCod, - FigCch_UNSIGNED,&NumCrss)) - { - /***** Get current number of courses from database and update cache *****/ - NumCrss = Crs_GetNumCrssInCtr (CtrCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_CTR,CtrCod, - FigCch_UNSIGNED,&NumCrss); - } - - return NumCrss; - } - /*****************************************************************************/ /******************** Get number of courses in a degree **********************/ /*****************************************************************************/ void Crs_FlushCacheNumCrssInDeg (void) { - Gbl.Cache.NumCrssInDeg.DegCod = -1L; + Gbl.Cache.NumCrssInDeg.HieCod = -1L; Gbl.Cache.NumCrssInDeg.NumCrss = 0; } @@ -570,30 +508,17 @@ unsigned Crs_GetNumCrssInDeg (long DegCod) return 0; /***** 2. Fast check: If cached... *****/ - if (DegCod == Gbl.Cache.NumCrssInDeg.DegCod) + if (DegCod == Gbl.Cache.NumCrssInDeg.HieCod) return Gbl.Cache.NumCrssInDeg.NumCrss; /***** 3. Slow: number of courses in a degree from database *****/ - Gbl.Cache.NumCrssInDeg.DegCod = DegCod; + Gbl.Cache.NumCrssInDeg.HieCod = DegCod; Gbl.Cache.NumCrssInDeg.NumCrss = Crs_DB_GetNumCrssInDeg (DegCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Cache.NumCrssInDeg.DegCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Cache.NumCrssInDeg.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumCrssInDeg.NumCrss); return Gbl.Cache.NumCrssInDeg.NumCrss; } -unsigned Crs_GetCachedNumCrssInDeg (long DegCod) - { - unsigned NumCrss; - - /***** Get number of courses from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_CRSS,HieLvl_DEG,DegCod, - FigCch_UNSIGNED,&NumCrss)) - /***** Get current number of courses from database and update cache *****/ - NumCrss = Crs_GetNumCrssInDeg (DegCod); - - return NumCrss; - } - /*****************************************************************************/ /********************* Get number of courses with users **********************/ /*****************************************************************************/ diff --git a/swad_course.h b/swad_course.h index 16bf96ef..66660a3c 100644 --- a/swad_course.h +++ b/swad_course.h @@ -32,6 +32,7 @@ #include "swad_constant.h" #include "swad_degree.h" +#include "swad_figure_cache.h" #include "swad_hierarchy_level.h" #include "swad_user.h" @@ -51,23 +52,17 @@ void Crs_ShowIntroduction (void); -unsigned Crs_GetCachedNumCrssInSys (void); - void Crs_FlushCacheNumCrssInCty (void); unsigned Crs_GetNumCrssInCty (long CtyCod); -unsigned Crs_GetCachedNumCrssInCty (long CtyCod); void Crs_FlushCacheNumCrssInIns (void); unsigned Crs_GetNumCrssInIns (long InsCod); -unsigned Crs_GetCachedNumCrssInIns (long InsCod); void Crs_FlushCacheNumCrssInCtr (void); unsigned Crs_GetNumCrssInCtr (long CtrCod); -unsigned Crs_GetCachedNumCrssInCtr (long CtrCod); void Crs_FlushCacheNumCrssInDeg (void); unsigned Crs_GetNumCrssInDeg (long DegCod); -unsigned Crs_GetCachedNumCrssInDeg (long DegCod); unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role); diff --git a/swad_degree.c b/swad_degree.c index 1ecd3fa8..edab4732 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -796,7 +796,8 @@ static void Deg_ListOneDegreeForSeeing (struct Hie_Node *Deg,unsigned NumDeg) const char *TxtClassNormal; const char *TxtClassStrong; const char *BgColor; - unsigned NumCrss = Crs_GetCachedNumCrssInDeg (Deg->HieCod); + unsigned NumCrss = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_DEG,Deg->HieCod); /***** Get data of type of degree of this degree *****/ DegTyp.DegTypCod = Deg->Specific.TypCod; @@ -1523,34 +1524,13 @@ static void Deg_ShowAlertAndButtonToGoToDeg (void) Ale_ShowAlerts (NULL); } -/*****************************************************************************/ -/*********************** Get total number of degrees *************************/ -/*****************************************************************************/ - -unsigned Deg_GetCachedNumDegsInSys (void) - { - unsigned NumDegs; - - /***** Get number of degrees from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumDegs)) - { - /***** Get current number of degrees from database and update cache *****/ - NumDegs = (unsigned) DB_GetNumRowsTable ("deg_degrees"); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumDegs); - } - - return NumDegs; - } - /*****************************************************************************/ /********************* Get number of degrees in a country ********************/ /*****************************************************************************/ void Deg_FlushCacheNumDegsInCty (void) { - Gbl.Cache.NumDegsInCty.CtyCod = -1L; + Gbl.Cache.NumDegsInCty.HieCod = -1L; Gbl.Cache.NumDegsInCty.NumDegs = 0; } @@ -1561,37 +1541,24 @@ unsigned Deg_GetNumDegsInCty (long CtyCod) return 0; /***** 2. Fast check: If cached... *****/ - if (CtyCod == Gbl.Cache.NumDegsInCty.CtyCod) + if (CtyCod == Gbl.Cache.NumDegsInCty.HieCod) return Gbl.Cache.NumDegsInCty.NumDegs; /***** 3. Slow: number of degrees in a country from database *****/ - Gbl.Cache.NumDegsInCty.CtyCod = CtyCod; + Gbl.Cache.NumDegsInCty.HieCod = CtyCod; Gbl.Cache.NumDegsInCty.NumDegs = Deg_DB_GetNumDegsInCty (CtyCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTY,Gbl.Cache.NumDegsInCty.CtyCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTY,Gbl.Cache.NumDegsInCty.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCty.NumDegs); return Gbl.Cache.NumDegsInCty.NumDegs; } -unsigned Deg_GetCachedNumDegsInCty (long CtyCod) - { - unsigned NumDegs; - - /***** Get number of degrees from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS,HieLvl_CTY,CtyCod, - FigCch_UNSIGNED,&NumDegs)) - /***** Get current number of degrees from database and update cache *****/ - NumDegs = Deg_GetNumDegsInCty (CtyCod); - - return NumDegs; - } - /*****************************************************************************/ /****************** Get number of degrees in an institution ******************/ /*****************************************************************************/ void Deg_FlushCacheNumDegsInIns (void) { - Gbl.Cache.NumDegsInIns.InsCod = -1L; + Gbl.Cache.NumDegsInIns.HieCod = -1L; Gbl.Cache.NumDegsInIns.NumDegs = 0; } @@ -1602,37 +1569,24 @@ unsigned Deg_GetNumDegsInIns (long InsCod) return 0; /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumDegsInIns.InsCod) + if (InsCod == Gbl.Cache.NumDegsInIns.HieCod) return Gbl.Cache.NumDegsInIns.NumDegs; /***** 3. Slow: number of degrees in an institution from database *****/ - Gbl.Cache.NumDegsInIns.InsCod = InsCod; + Gbl.Cache.NumDegsInIns.HieCod = InsCod; Gbl.Cache.NumDegsInIns.NumDegs = Deg_DB_GetNumDegsInIns (InsCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_INS,Gbl.Cache.NumDegsInIns.InsCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_INS,Gbl.Cache.NumDegsInIns.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumDegsInIns.NumDegs); return Gbl.Cache.NumDegsInIns.NumDegs; } -unsigned Deg_GetCachedNumDegsInIns (long InsCod) - { - unsigned NumDegs; - - /***** Get number of degrees from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS,HieLvl_INS,InsCod, - FigCch_UNSIGNED,&NumDegs)) - /***** Get current number of degrees from database and update cache *****/ - NumDegs = Deg_GetNumDegsInIns (InsCod); - - return NumDegs; - } - /*****************************************************************************/ /******************** Get number of degrees in a center **********************/ /*****************************************************************************/ void Deg_FlushCacheNumDegsInCtr (void) { - Gbl.Cache.NumDegsInCtr.CtrCod = -1L; + Gbl.Cache.NumDegsInCtr.HieCod = -1L; Gbl.Cache.NumDegsInCtr.NumDegs = 0; } @@ -1643,30 +1597,17 @@ unsigned Deg_GetNumDegsInCtr (long CtrCod) return 0; /***** 2. Fast check: If cached... *****/ - if (CtrCod == Gbl.Cache.NumDegsInCtr.CtrCod) + if (CtrCod == Gbl.Cache.NumDegsInCtr.HieCod) return Gbl.Cache.NumDegsInCtr.NumDegs; /***** 3. Slow: number of degrees in a center from database *****/ - Gbl.Cache.NumDegsInCtr.CtrCod = CtrCod; + Gbl.Cache.NumDegsInCtr.HieCod = CtrCod; Gbl.Cache.NumDegsInCtr.NumDegs = Deg_DB_GetNumDegsInCtr (CtrCod); - FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTR,Gbl.Cache.NumDegsInCtr.CtrCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,HieLvl_CTR,Gbl.Cache.NumDegsInCtr.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCtr.NumDegs); return Gbl.Cache.NumDegsInCtr.NumDegs; } -unsigned Deg_GetCachedNumDegsInCtr (long CtrCod) - { - unsigned NumDegs; - - /***** Get number of degrees from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS,HieLvl_CTR,CtrCod, - FigCch_UNSIGNED,&NumDegs)) - /***** Get current number of degrees from database and update cache *****/ - NumDegs = Deg_GetNumDegsInCtr (CtrCod); - - return NumDegs; - } - /*****************************************************************************/ /********************* Get number of centers with courses ********************/ /*****************************************************************************/ diff --git a/swad_degree.h b/swad_degree.h index c6a1b45e..6e38cbf5 100644 --- a/swad_degree.h +++ b/swad_degree.h @@ -31,6 +31,7 @@ #include "swad_action.h" #include "swad_constant.h" +#include "swad_figure_cache.h" #include "swad_hierarchy_level.h" #include "swad_role_type.h" #include "swad_string.h" @@ -80,19 +81,14 @@ void Deg_ChangeDegWWW (void); void Deg_ChangeDegStatus (void); void Deg_ContEditAfterChgDeg (void); -unsigned Deg_GetCachedNumDegsInSys (void); - void Deg_FlushCacheNumDegsInCty (void); unsigned Deg_GetNumDegsInCty (long CtyCod); -unsigned Deg_GetCachedNumDegsInCty (long CtyCod); void Deg_FlushCacheNumDegsInIns (void); unsigned Deg_GetNumDegsInIns (long InsCod); -unsigned Deg_GetCachedNumDegsInIns (long InsCod); void Deg_FlushCacheNumDegsInCtr (void); unsigned Deg_GetNumDegsInCtr (long CtrCod); -unsigned Deg_GetCachedNumDegsInCtr (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 8d0cce6e..9c26c7e5 100644 --- a/swad_degree_config.c +++ b/swad_degree_config.c @@ -335,7 +335,8 @@ static void DegCfg_NumCrss (void) Err_NotEnoughMemoryExit (); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); free (Title); - HTM_Unsigned (Crs_GetCachedNumCrssInDeg (Gbl.Hierarchy.Node[HieLvl_DEG].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod)); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); diff --git a/swad_department.c b/swad_department.c index e42ed414..556447b0 100644 --- a/swad_department.c +++ b/swad_department.c @@ -990,7 +990,7 @@ unsigned Dpt_GetTotalNumberOfDepartments (void) void Dpt_FlushCacheNumDptsInIns (void) { - Gbl.Cache.NumDptsInIns.InsCod = -1L; + Gbl.Cache.NumDptsInIns.HieCod = -1L; Gbl.Cache.NumDptsInIns.NumDpts = 0; } @@ -1001,11 +1001,11 @@ unsigned Dpt_GetNumDptsInIns (long InsCod) return 0; /***** 2. Fast check: If cached... *****/ - if (InsCod == Gbl.Cache.NumDptsInIns.InsCod) + if (InsCod == Gbl.Cache.NumDptsInIns.HieCod) return Gbl.Cache.NumDptsInIns.NumDpts; /***** 3. Slow: number of departments of an institution from database *****/ - Gbl.Cache.NumDptsInIns.InsCod = InsCod; + Gbl.Cache.NumDptsInIns.HieCod = InsCod; Gbl.Cache.NumDptsInIns.NumDpts = Dpt_DB_GetNumDepartmentsInInstitution (InsCod); return Gbl.Cache.NumDptsInIns.NumDpts; } diff --git a/swad_figure_cache.c b/swad_figure_cache.c index 5eab1a86..c2febfe2 100644 --- a/swad_figure_cache.c +++ b/swad_figure_cache.c @@ -39,7 +39,7 @@ /*****************************************************************************/ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,const void *ValuePtr) { /***** Trivial check *****/ @@ -50,11 +50,11 @@ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, switch (Type) { case FigCch_UNSIGNED: - Fig_DB_UpdateUnsignedFigureIntoCache (Figure,Level,Cod, + Fig_DB_UpdateUnsignedFigureIntoCache (Figure,Level,HieCod, *((unsigned *) ValuePtr)); break; case FigCch_DOUBLE: - Fig_DB_UpdateDoubleFigureIntoCache (Figure,Level,Cod, + Fig_DB_UpdateDoubleFigureIntoCache (Figure,Level,HieCod, *((double *) ValuePtr)); break; } @@ -66,7 +66,7 @@ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, // Return true is figure is found (if figure is cached and recently updated) bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,void *ValuePtr) { /* The higher the level, the longer a value remains cached */ @@ -101,7 +101,7 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure, return false; /***** Get figure's value if cached and recent *****/ - if (Fig_DB_GetFigureFromCache (&mysql_res,Figure,Level,Cod,Type,TimeCached[Level])) + if (Fig_DB_GetFigureFromCache (&mysql_res,Figure,Level,HieCod,Type,TimeCached[Level])) { /* Get row */ row = mysql_fetch_row (mysql_res); diff --git a/swad_figure_cache.h b/swad_figure_cache.h index 9fbd38e2..501dc61f 100644 --- a/swad_figure_cache.h +++ b/swad_figure_cache.h @@ -111,10 +111,10 @@ typedef enum /*****************************************************************************/ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,const void *ValuePtr); bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,void *ValuePtr); #endif diff --git a/swad_figure_database.c b/swad_figure_database.c index 1640bf5a..b4333851 100644 --- a/swad_figure_database.c +++ b/swad_figure_database.c @@ -34,7 +34,7 @@ /*****************************************************************************/ void Fig_DB_UpdateUnsignedFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, unsigned Value) { DB_QueryREPLACE ("can not update cached figure value", @@ -44,7 +44,7 @@ void Fig_DB_UpdateUnsignedFigureIntoCache (FigCch_FigureCached_t Figure, " (%u,'%s',%ld,%u,'0.0')", (unsigned) Figure, Hie_GetDBStrFromLevel (Level), - Cod, + HieCod, Value); } @@ -53,7 +53,7 @@ void Fig_DB_UpdateUnsignedFigureIntoCache (FigCch_FigureCached_t Figure, /*****************************************************************************/ void Fig_DB_UpdateDoubleFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, double Value) { Str_SetDecimalPointToUS (); // To write the decimal point as a dot @@ -64,7 +64,7 @@ void Fig_DB_UpdateDoubleFigureIntoCache (FigCch_FigureCached_t Figure, " (%u,'%s',%ld,0,'%.15lg')", (unsigned) Figure, Hie_GetDBStrFromLevel (Level), - Cod, + HieCod, Value); Str_SetDecimalPointToLocal (); // Return to local system } @@ -75,7 +75,7 @@ void Fig_DB_UpdateDoubleFigureIntoCache (FigCch_FigureCached_t Figure, unsigned Fig_DB_GetFigureFromCache (MYSQL_RES **mysql_res, FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,time_t TimeCached) { static const char *Field[FigCch_NUM_TYPES] = @@ -93,6 +93,6 @@ unsigned Fig_DB_GetFigureFromCache (MYSQL_RES **mysql_res, " AND Cod=%ld" " AND LastUpdate>FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)", Field[Type], - (unsigned) Figure,Hie_GetDBStrFromLevel (Level),Cod, + (unsigned) Figure,Hie_GetDBStrFromLevel (Level),HieCod, TimeCached); } diff --git a/swad_figure_database.h b/swad_figure_database.h index 9b1d8a27..3aaa53cb 100644 --- a/swad_figure_database.h +++ b/swad_figure_database.h @@ -37,15 +37,15 @@ /*****************************************************************************/ void Fig_DB_UpdateUnsignedFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, unsigned Value); void Fig_DB_UpdateDoubleFigureIntoCache (FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, double Value); unsigned Fig_DB_GetFigureFromCache (MYSQL_RES **mysql_res, FigCch_FigureCached_t Figure, - HieLvl_Level_t Level,long Cod, + HieLvl_Level_t Level,long HieCod, FigCch_Type_t Type,time_t TimeCached); #endif diff --git a/swad_global.h b/swad_global.h index 7e63b369..bc0c7d7e 100644 --- a/swad_global.h +++ b/swad_global.h @@ -291,70 +291,70 @@ struct Globals { struct { - long CtyCod; + long HieCod; Lan_Language_t Language; char CtyName[Cty_MAX_BYTES_NAME + 1]; } CountryName; struct { - long InsCod; + long HieCod; char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; char CtyName[Cns_HIERARCHY_MAX_BYTES_FULL_NAME + 1]; } InstitutionShrtNameAndCty; struct { - long InsCod; + long HieCod; unsigned NumDpts; } NumDptsInIns; struct { bool Valid; - long CtyCod; + long HieCod; unsigned NumInss; } NumInssInCty; struct { - long CtyCod; + long HieCod; unsigned NumCtrs; } NumCtrsInCty; struct { - long InsCod; + long HieCod; unsigned NumCtrs; } NumCtrsInIns; struct { - long CtyCod; + long HieCod; unsigned NumDegs; } NumDegsInCty; struct { - long InsCod; + long HieCod; unsigned NumDegs; } NumDegsInIns; struct { - long CtrCod; + long HieCod; unsigned NumDegs; } NumDegsInCtr; struct { - long CtyCod; + long HieCod; unsigned NumCrss; } NumCrssInCty; struct { - long InsCod; + long HieCod; unsigned NumCrss; } NumCrssInIns; struct { - long CtrCod; + long HieCod; unsigned NumCrss; } NumCrssInCtr; struct { - long DegCod; + long HieCod; unsigned NumCrss; } NumCrssInDeg; struct @@ -369,17 +369,17 @@ struct Globals } NumUsrsWhoClaimToBelongToAnotherCty; struct { - long CtyCod; + long HieCod; unsigned NumUsrs; } NumUsrsWhoClaimToBelongToCty; struct { - long InsCod; + long HieCod; unsigned NumUsrs; } NumUsrsWhoClaimToBelongToIns; struct { - long CtrCod; + long HieCod; unsigned NumUsrs; } NumUsrsWhoClaimToBelongToCtr; struct diff --git a/swad_hierarchy.c b/swad_hierarchy.c index 8c538e53..37123dcd 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -405,7 +405,7 @@ void Hie_WriteHierarchyInBreadcrumb (void) HTM_DIV_Begin ("class=\"BC%s BC_%s\"", (Gbl.Hierarchy.Level == HieLvl_CRS) ? "" : ((Gbl.Hierarchy.Node[HieLvl_DEG].HieCod > 0) ? " BC_SEMIOFF" : - " BC_OFF"), + " BC_OFF"), The_GetSuffix ()); /***** Separator *****/ @@ -578,45 +578,45 @@ void Hie_InitHierarchy (void) depending on course code, degree code, etc. *****/ if (Gbl.Hierarchy.Node[HieLvl_CRS].HieCod > 0) // Course selected { - Gbl.Hierarchy.Level = HieLvl_CRS; - Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CRS].HieCod; + Gbl.Hierarchy.Level = HieLvl_CRS; + Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CRS].HieCod; } else if (Gbl.Hierarchy.Node[HieLvl_DEG].HieCod > 0) // Degree selected { - Gbl.Hierarchy.Level = HieLvl_DEG; - Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_DEG].HieCod; + Gbl.Hierarchy.Level = HieLvl_DEG; + Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_DEG].HieCod; } else if (Gbl.Hierarchy.Node[HieLvl_CTR].HieCod > 0) // Center selected { - Gbl.Hierarchy.Level = HieLvl_CTR; - Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CTR].HieCod; + Gbl.Hierarchy.Level = HieLvl_CTR; + Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CTR].HieCod; } else if (Gbl.Hierarchy.Node[HieLvl_INS].HieCod > 0) // Institution selected { - Gbl.Hierarchy.Level = HieLvl_INS; - Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_INS].HieCod; + Gbl.Hierarchy.Level = HieLvl_INS; + Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_INS].HieCod; } else if (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod > 0) // Country selected { - Gbl.Hierarchy.Level = HieLvl_CTY; - Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CTY].HieCod; + Gbl.Hierarchy.Level = HieLvl_CTY; + Gbl.Hierarchy.HieCod = Gbl.Hierarchy.Node[HieLvl_CTY].HieCod; } else { - Gbl.Hierarchy.Level = HieLvl_SYS; - Gbl.Hierarchy.HieCod = -1L; + Gbl.Hierarchy.Level = HieLvl_SYS; + Gbl.Hierarchy.HieCod = -1L; } /***** Initialize paths *****/ if (Gbl.Hierarchy.Level == HieLvl_CRS) // Course selected { /***** Paths of course directories *****/ - snprintf (Gbl.Crs.PathPriv,sizeof (Gbl.Crs.PathPriv),"%s/%ld", + snprintf (Gbl.Crs.PathPriv ,sizeof (Gbl.Crs.PathPriv ),"%s/%ld", Cfg_PATH_CRS_PRIVATE,Gbl.Hierarchy.Node[HieLvl_CRS].HieCod); snprintf (Gbl.Crs.PathRelPubl,sizeof (Gbl.Crs.PathRelPubl),"%s/%ld", - Cfg_PATH_CRS_PUBLIC,Gbl.Hierarchy.Node[HieLvl_CRS].HieCod); + Cfg_PATH_CRS_PUBLIC ,Gbl.Hierarchy.Node[HieLvl_CRS].HieCod); snprintf (Gbl.Crs.PathURLPubl,sizeof (Gbl.Crs.PathURLPubl),"%s/%ld", - Cfg_URL_CRS_PUBLIC,Gbl.Hierarchy.Node[HieLvl_CRS].HieCod); + Cfg_URL_CRS_PUBLIC ,Gbl.Hierarchy.Node[HieLvl_CRS].HieCod); /***** If any of the course directories does not exist, create it *****/ if (!Fil_CheckIfPathExists (Gbl.Crs.PathPriv)) @@ -639,8 +639,8 @@ void Hie_ResetHierarchy (void) HieLvl_Level_t Level; /***** Hierarchy level and code *****/ - Gbl.Hierarchy.Level = HieLvl_UNK; - Gbl.Hierarchy.HieCod = -1L; + Gbl.Hierarchy.Level = HieLvl_UNK; + Gbl.Hierarchy.HieCod = -1L; for (Level = (HieLvl_Level_t) 0; Level <= (HieLvl_Level_t) HieLvl_NUM_LEVELS - 1; @@ -649,7 +649,7 @@ void Hie_ResetHierarchy (void) Gbl.Hierarchy.List[Level].Num = 0; Gbl.Hierarchy.List[Level].Lst = NULL; Gbl.Hierarchy.List[Level].SelectedOrder = Hie_ORDER_DEFAULT; - Gbl.Hierarchy.Node[Level].HieCod = -1L; + Gbl.Hierarchy.Node[Level].HieCod = -1L; Gbl.Hierarchy.Node[Level].PrtCod = -1L; Gbl.Hierarchy.Node[Level].ShrtName[0] = Gbl.Hierarchy.Node[Level].FullName[0] = '\0'; @@ -1296,29 +1296,29 @@ static void Hie_GetAndShowHierarchyTotal (void) switch (Gbl.Scope.Current) { case HieLvl_SYS: - NumCtysTotal = Cty_GetCachedNumCtysInSys (); - NumInssTotal = Ins_GetCachedNumInssInSys (); - NumCtrsTotal = Ctr_GetCachedNumCtrsInSys (); - NumDegsTotal = Deg_GetCachedNumDegsInSys (); - NumCrssTotal = Crs_GetCachedNumCrssInSys (); + NumCtysTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_CTYS,"cty_countrs"); + NumInssTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_INSS,"ins_instits"); + NumCtrsTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_CTRS,"ctr_centers"); + NumDegsTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_DEGS,"deg_degrees"); + NumCrssTotal = Hie_GetCachedNumNodesInSys (FigCch_NUM_CRSS,"crs_courses"); break; case HieLvl_CTY: - NumInssTotal = Ins_GetCachedNumInssInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCtrsTotal = Ctr_GetCachedNumCtrsInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumDegsTotal = Deg_GetCachedNumDegsInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); - NumCrssTotal = Crs_GetCachedNumCrssInCty (Gbl.Hierarchy.Node[HieLvl_CTY].HieCod); + 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); break; case HieLvl_INS: - NumCtrsTotal = Ctr_GetCachedNumCtrsInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumDegsTotal = Deg_GetCachedNumDegsInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod); - NumCrssTotal = Crs_GetCachedNumCrssInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + 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); break; case HieLvl_CTR: - NumDegsTotal = Deg_GetCachedNumDegsInCtr (Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); - NumCrssTotal = Crs_GetCachedNumCrssInCtr (Gbl.Hierarchy.Node[HieLvl_CTR].HieCod); + 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); break; case HieLvl_DEG: - NumCrssTotal = Crs_GetCachedNumCrssInDeg (Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); + NumCrssTotal = Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS,HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].HieCod); break; case HieLvl_CRS: break; @@ -1337,6 +1337,64 @@ static void Hie_GetAndShowHierarchyTotal (void) (int) NumCrssTotal); } +/*****************************************************************************/ +/**** Get total number of courses/degrees/centers/institutions/countries *****/ +/*****************************************************************************/ + +unsigned Hie_GetCachedNumNodesInSys (FigCch_FigureCached_t Figure, + const char *Table) + { + unsigned NumNodes; + + /***** Get number of courses/degrees/centers/institutions/countries from cache *****/ + if (!FigCch_GetFigureFromCache (Figure,HieLvl_SYS,-1L, + FigCch_UNSIGNED,&NumNodes)) + { + /***** Get current number of courses/degrees/centers/institutions/countries + from database and update cache *****/ + NumNodes = (unsigned) DB_GetNumRowsTable (Table); + FigCch_UpdateFigureIntoCache (Figure,HieLvl_SYS,-1L, + FigCch_UNSIGNED,&NumNodes); + } + + return NumNodes; + } + +/*****************************************************************************/ +/**** Get total number of courses/degrees/centers/institutions in country ****/ +/*****************************************************************************/ + +unsigned Hie_GetCachedNumNodesIn (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); + + return NumNodes; + } + /*****************************************************************************/ /************** Show row with number of elements in hierarchy ****************/ /*****************************************************************************/ diff --git a/swad_hierarchy.h b/swad_hierarchy.h index 9f9656fd..8384037d 100644 --- a/swad_hierarchy.h +++ b/swad_hierarchy.h @@ -71,4 +71,9 @@ bool Hie_CheckIfUsrBelongsTo (HieLvl_Level_t Level,long UsrCod,long HieCod, //-------------------------------- Figures ------------------------------------ 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); + #endif diff --git a/swad_institution.c b/swad_institution.c index 7c5f444e..4df7beb5 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -398,19 +398,22 @@ 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 (Ctr_GetCachedNumCtrsInIns (Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Deg_GetCachedNumDegsInIns (Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (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 (Crs_GetCachedNumCrssInIns (Ins->HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_INS,Ins->HieCod)); HTM_TD_End (); /* Number of departments in this institution */ @@ -736,7 +739,7 @@ static void Ins_GetInstitDataFromRow (MYSQL_RES *mysql_res, void Ins_FlushCacheFullNameAndCtyOfInstitution (void) { - Gbl.Cache.InstitutionShrtNameAndCty.InsCod = -1L; + Gbl.Cache.InstitutionShrtNameAndCty.HieCod = -1L; Gbl.Cache.InstitutionShrtNameAndCty.ShrtName[0] = '\0'; Gbl.Cache.InstitutionShrtNameAndCty.CtyName[0] = '\0'; } @@ -756,7 +759,7 @@ void Ins_GetShrtNameAndCtyOfInstitution (struct Hie_Node *Ins, } /***** 2. Fast check: If cached... *****/ - if (Ins->HieCod == Gbl.Cache.InstitutionShrtNameAndCty.InsCod) + if (Ins->HieCod == Gbl.Cache.InstitutionShrtNameAndCty.HieCod) { Str_Copy (Ins->ShrtName,Gbl.Cache.InstitutionShrtNameAndCty.ShrtName, sizeof (Ins->ShrtName) - 1); @@ -766,7 +769,7 @@ void Ins_GetShrtNameAndCtyOfInstitution (struct Hie_Node *Ins, } /***** 3. Slow: get short name and country of institution from database *****/ - Gbl.Cache.InstitutionShrtNameAndCty.InsCod = Ins->HieCod; + Gbl.Cache.InstitutionShrtNameAndCty.HieCod = Ins->HieCod; if (Ins_DB_GetInsShrtNameAndCty (&mysql_res,Ins->HieCod) == 1) { @@ -1548,27 +1551,6 @@ static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status) Ale_CreateAlertYouMustSpecifyTheShortNameAndTheFullName (); } -/*****************************************************************************/ -/********************* Get total number of institutions **********************/ -/*****************************************************************************/ - -unsigned Ins_GetCachedNumInssInSys (void) - { - unsigned NumInss; - - /***** Get number of institutions from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumInss)) - { - /***** Get current number of institutions from database and update cache *****/ - NumInss = (unsigned) DB_GetNumRowsTable ("ins_instits"); - FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS,HieLvl_SYS,-1L, - FigCch_UNSIGNED,&NumInss); - } - - return NumInss; - } - /*****************************************************************************/ /**************** Get number of institutions in a country ********************/ /*****************************************************************************/ @@ -1582,31 +1564,18 @@ unsigned Ins_GetNumInssInCty (long CtyCod) { /***** 1. Fast check: If cached... *****/ if (Gbl.Cache.NumInssInCty.Valid && - CtyCod == Gbl.Cache.NumInssInCty.CtyCod) + CtyCod == Gbl.Cache.NumInssInCty.HieCod) return Gbl.Cache.NumInssInCty.NumInss; /***** 2. Slow: number of institutions in a country from database *****/ - Gbl.Cache.NumInssInCty.CtyCod = CtyCod; + 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.CtyCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS,HieLvl_CTY,Gbl.Cache.NumInssInCty.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumInssInCty.NumInss); return Gbl.Cache.NumInssInCty.NumInss; } -unsigned Ins_GetCachedNumInssInCty (long CtyCod) - { - unsigned NumInss; - - /***** Get number of institutions from cache *****/ - if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS,HieLvl_CTY,CtyCod, - FigCch_UNSIGNED,&NumInss)) - /***** Get current number of institutions from database and update cache *****/ - NumInss = Ins_GetNumInssInCty (CtyCod); - - return NumInss; - } - /*****************************************************************************/ /***************** Get number of institutions with centers *******************/ /*****************************************************************************/ @@ -1886,7 +1855,7 @@ bool Ins_CheckIfIBelongToIns (long InsCod) void Ins_FlushCacheNumUsrsWhoClaimToBelongToIns (void) { - Gbl.Cache.NumUsrsWhoClaimToBelongToIns.InsCod = -1L; + Gbl.Cache.NumUsrsWhoClaimToBelongToIns.HieCod = -1L; Gbl.Cache.NumUsrsWhoClaimToBelongToIns.NumUsrs = 0; } @@ -1901,7 +1870,7 @@ unsigned Ins_GetNumUsrsWhoClaimToBelongToIns (struct Hie_Node *Ins) return Ins->NumUsrsWhoClaimToBelong.NumUsrs; /***** 3. Fast check: If cached... *****/ - if (Ins->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToIns.InsCod) + if (Ins->HieCod == Gbl.Cache.NumUsrsWhoClaimToBelongToIns.HieCod) { Ins->NumUsrsWhoClaimToBelong.NumUsrs = Gbl.Cache.NumUsrsWhoClaimToBelongToIns.NumUsrs; Ins->NumUsrsWhoClaimToBelong.Valid = true; @@ -1910,11 +1879,11 @@ unsigned Ins_GetNumUsrsWhoClaimToBelongToIns (struct Hie_Node *Ins) /***** 4. Slow: number of users who claim to belong to an institution from database *****/ - Gbl.Cache.NumUsrsWhoClaimToBelongToIns.InsCod = Ins->HieCod; + Gbl.Cache.NumUsrsWhoClaimToBelongToIns.HieCod = Ins->HieCod; Gbl.Cache.NumUsrsWhoClaimToBelongToIns.NumUsrs = Ins->NumUsrsWhoClaimToBelong.NumUsrs = Ins_DB_GetNumUsrsWhoClaimToBelongToIns (Ins->HieCod); Ins->NumUsrsWhoClaimToBelong.Valid = true; - FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_INS,HieLvl_INS,Gbl.Cache.NumUsrsWhoClaimToBelongToIns.InsCod, + FigCch_UpdateFigureIntoCache (FigCch_NUM_USRS_BELONG_INS,HieLvl_INS,Gbl.Cache.NumUsrsWhoClaimToBelongToIns.HieCod, FigCch_UNSIGNED,&Gbl.Cache.NumUsrsWhoClaimToBelongToIns.NumUsrs); return Ins->NumUsrsWhoClaimToBelong.NumUsrs; } diff --git a/swad_institution.h b/swad_institution.h index bc83c1de..4fea7213 100644 --- a/swad_institution.h +++ b/swad_institution.h @@ -29,6 +29,7 @@ #include "swad_center.h" #include "swad_constant.h" +#include "swad_figure_cache.h" #include "swad_role_type.h" /*****************************************************************************/ @@ -71,11 +72,8 @@ void Ins_ContEditAfterChgIns (void); void Ins_ReceiveFormReqIns (void); void Ins_ReceiveFormNewIns (void); -unsigned Ins_GetCachedNumInssInSys (void); - void Ins_FlushCacheNumInssInCty (void); unsigned Ins_GetNumInssInCty (long CtyCod); -unsigned Ins_GetCachedNumInssInCty (long CtyCod); unsigned Ins_GetCachedNumInssWithCtrs (void); unsigned Ins_GetCachedNumInssWithDegs (void); diff --git a/swad_institution_config.c b/swad_institution_config.c index de3ca600..950e2b57 100644 --- a/swad_institution_config.c +++ b/swad_institution_config.c @@ -160,7 +160,8 @@ static void InsCfg_Configuration (bool PrintView) InsCfg_QR (); else { - NumCtrs = Ctr_GetCachedNumCtrsInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod); + NumCtrs = Hie_GetCachedNumNodesIn (FigCch_NUM_CTRS, + HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod); /***** Number of users who claim to belong to this institution, number of centers, @@ -448,7 +449,8 @@ static void InsCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Deg_GetCachedNumDegsInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_DEGS, + HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); HTM_TR_End (); @@ -470,7 +472,8 @@ static void InsCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Crs_GetCachedNumCrssInIns (Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); + HTM_Unsigned (Hie_GetCachedNumNodesIn (FigCch_NUM_CRSS, + HieLvl_INS,Gbl.Hierarchy.Node[HieLvl_INS].HieCod)); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_system_config.c b/swad_system_config.c index 95e1e1ac..bcdb0529 100644 --- a/swad_system_config.c +++ b/swad_system_config.c @@ -126,7 +126,7 @@ static void SysCfg_Configuration (bool PrintView) else { /***** Get number of centers *****/ - NumCtrs = Ctr_GetCachedNumCtrsInSys (); + NumCtrs = Hie_GetCachedNumNodesInSys (FigCch_NUM_CTRS,"ctr_centers"); /***** Number of countries, number of institutions, @@ -309,7 +309,7 @@ static void SysCfg_NumCtys (void) HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); Frm_BeginFormGoTo (ActSeeCty); HTM_BUTTON_Submit_Begin (Txt_Countries,"class=\"LB BT_LINK\""); - HTM_Unsigned (Cty_GetCachedNumCtysInSys ()); + HTM_Unsigned (Hie_GetCachedNumNodesInSys (FigCch_NUM_CTYS,"cty_countrs")); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -333,7 +333,7 @@ static void SysCfg_NumInss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Ins_GetCachedNumInssInSys ()); + HTM_Unsigned (Hie_GetCachedNumNodesInSys (FigCch_NUM_INSS,"ins_instits")); HTM_TD_End (); HTM_TR_End (); @@ -355,7 +355,7 @@ static void SysCfg_NumDegs (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Deg_GetCachedNumDegsInSys ()); + HTM_Unsigned (Hie_GetCachedNumNodesInSys (FigCch_NUM_DEGS,"deg_degrees")); HTM_TD_End (); HTM_TR_End (); @@ -377,7 +377,7 @@ static void SysCfg_NumCrss (void) /* Data */ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - HTM_Unsigned (Crs_GetCachedNumCrssInSys ()); + HTM_Unsigned (Hie_GetCachedNumNodesInSys (FigCch_NUM_CRSS,"crs_courses")); HTM_TD_End (); HTM_TR_End ();