Version 23.11: Sep 20, 2023 Code refactoring in hierarchy.

This commit is contained in:
acanas 2023-09-20 20:07:04 +02:00
parent eb837d80a0
commit 9accc808f5
24 changed files with 261 additions and 422 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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 ();

View File

@ -632,10 +632,11 @@ TODO: Francisco Javier Fern
Me sale este error, no 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)

View File

@ -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;
}

View File

@ -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);

View File

@ -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 ();

View File

@ -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 **********************/
/*****************************************************************************/

View File

@ -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);

View File

@ -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 ********************/
/*****************************************************************************/

View File

@ -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);

View File

@ -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 ();

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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 ****************/
/*****************************************************************************/

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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 ();

View File

@ -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 ();