Version 20.97: Sep 10, 2021 Code refactoring related to scope.

This commit is contained in:
acanas 2021-09-10 10:19:46 +02:00
parent 1f178d96cb
commit f7d2334077
24 changed files with 302 additions and 226 deletions

View File

@ -1833,18 +1833,18 @@ unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod)
/********************* Get number of centers with degrees ********************/
/*****************************************************************************/
unsigned Ctr_GetCachedNumCtrsWithDegs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ctr_GetCachedNumCtrsWithDegs (void)
{
unsigned NumCtrsWithDegs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of centers with degrees from cache *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS_WITH_DEGS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS_WITH_DEGS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithDegs))
{
/***** Get current number of centers with degrees from database and update cache *****/
NumCtrsWithDegs = Ctr_DB_GetNumCtrsWithDegs (SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_DEGS,Scope,Cod,
NumCtrsWithDegs = Ctr_DB_GetNumCtrsWithDegs (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_DEGS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithDegs);
}
@ -1855,18 +1855,18 @@ unsigned Ctr_GetCachedNumCtrsWithDegs (const char *SubQuery,
/********************* Get number of centers with courses ********************/
/*****************************************************************************/
unsigned Ctr_GetCachedNumCtrsWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ctr_GetCachedNumCtrsWithCrss (void)
{
unsigned NumCtrsWithCrss;
long Cod = Sco_GetCurrentCod ();
/***** Get number of centers with courses *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS_WITH_CRSS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_CTRS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithCrss))
{
/***** Get number of centers with courses *****/
NumCtrsWithCrss = Ctr_DB_GetNumCtrsWithCrss (SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_CRSS,Scope,Cod,
NumCtrsWithCrss = Ctr_DB_GetNumCtrsWithCrss (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithCrss);
}
@ -1877,8 +1877,7 @@ unsigned Ctr_GetCachedNumCtrsWithCrss (const char *SubQuery,
/********************* Get number of centers with users **********************/
/*****************************************************************************/
unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role)
{
static const FigCch_FigureCached_t FigureCtrs[Rol_NUM_ROLES] =
{
@ -1887,14 +1886,15 @@ unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery,
[Rol_TCH] = FigCch_NUM_CTRS_WITH_TCHS, // Teachers
};
unsigned NumCtrsWithUsrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of centers with users from cache *****/
if (!FigCch_GetFigureFromCache (FigureCtrs[Role],Scope,Cod,
if (!FigCch_GetFigureFromCache (FigureCtrs[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithUsrs))
{
/***** Get current number of centers with users from database and update cache *****/
NumCtrsWithUsrs = Ctr_DB_GetNumCtrsWithUsrs (Role,SubQuery);
FigCch_UpdateFigureIntoCache (FigureCtrs[Role],Scope,Cod,
NumCtrsWithUsrs = Ctr_DB_GetNumCtrsWithUsrs (Role,Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigureCtrs[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtrsWithUsrs);
}

View File

@ -139,12 +139,9 @@ unsigned Ctr_GetCachedNumCtrsWithMapInSys (void);
unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod);
unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod);
unsigned Ctr_GetCachedNumCtrsWithDegs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ctr_GetCachedNumCtrsWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ctr_GetCachedNumCtrsWithDegs (void);
unsigned Ctr_GetCachedNumCtrsWithCrss (void);
unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role);
void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs);

View File

@ -30,6 +30,7 @@
#include "swad_database.h"
#include "swad_error.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -413,8 +414,12 @@ unsigned Ctr_DB_GetNumCtrsWithMapInIns (long InsCod)
/********************* Get number of centers with degrees ********************/
/*****************************************************************************/
unsigned Ctr_DB_GetNumCtrsWithDegs (const char *SubQuery)
unsigned Ctr_DB_GetNumCtrsWithDegs (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of centers with degrees",
"SELECT COUNT(DISTINCT ctr_centers.CtrCod)"
@ -430,8 +435,12 @@ unsigned Ctr_DB_GetNumCtrsWithDegs (const char *SubQuery)
/********************* Get number of centers with courses ********************/
/*****************************************************************************/
unsigned Ctr_DB_GetNumCtrsWithCrss (const char *SubQuery)
unsigned Ctr_DB_GetNumCtrsWithCrss (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of centers with courses",
"SELECT COUNT(DISTINCT ctr_centers.CtrCod)"
@ -449,8 +458,13 @@ unsigned Ctr_DB_GetNumCtrsWithCrss (const char *SubQuery)
/********************* Get number of centers with users **********************/
/*****************************************************************************/
unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery)
unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of centers with users",
"SELECT COUNT(DISTINCT ctr_centers.CtrCod)"

View File

@ -60,9 +60,10 @@ unsigned Ctr_DB_GetNumCtrsInPlc (long PlcCod);
unsigned Ctr_DB_GetNumCtrsWithMap (void);
unsigned Ctr_DB_GetNumCtrsWithMapInCty (long CtyCod);
unsigned Ctr_DB_GetNumCtrsWithMapInIns (long InsCod);
unsigned Ctr_DB_GetNumCtrsWithDegs (const char *SubQuery);
unsigned Ctr_DB_GetNumCtrsWithCrss (const char *SubQuery);
unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Ctr_DB_GetNumCtrsWithDegs (HieLvl_Level_t Scope,long Cod);
unsigned Ctr_DB_GetNumCtrsWithCrss (HieLvl_Level_t Scope,long Cod);
unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod);
void Ctr_DB_UpdateCtrIns (long CtrCod,long NewInsCod);
void Ctr_DB_UpdateCtrPlc (long CtrCod,long NewPlcCod);

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/
#define Log_PLATFORM_VERSION "SWAD 20.96.7 (2021-09-09)"
#define Log_PLATFORM_VERSION "SWAD 20.97 (2021-09-10)"
#define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.97: Sep 10, 2021 Code refactoring related to scope. (314566 lines)
Version 20.96.7: Sep 09, 2021 Queries moved to module swad_exam_database. (314527 lines)
Version 20.96.6: Sep 09, 2021 Queries moved to module swad_exam_database. (314471 lines)
Version 20.96.5: Sep 09, 2021 Queries moved to module swad_exam_database. (314448 lines)

View File

@ -1759,8 +1759,7 @@ unsigned Cty_GetCachedNumCtysWithCrss (void)
/******************* Get number of countries with users **********************/
/*****************************************************************************/
unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role)
{
static const FigCch_FigureCached_t FigureCtys[Rol_NUM_ROLES] =
{
@ -1769,14 +1768,15 @@ unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery,
[Rol_TCH] = FigCch_NUM_CTYS_WITH_TCHS, // Teachers
};
unsigned NumCtysWithUsrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of countries with users from cache *****/
if (!FigCch_GetFigureFromCache (FigureCtys[Role],Scope,Cod,
if (!FigCch_GetFigureFromCache (FigureCtys[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtysWithUsrs))
{
/***** Get current number of countries with users from database and update cache *****/
NumCtysWithUsrs = Cty_DB_GetNumCtysWithUsrs (Role,SubQuery);
FigCch_UpdateFigureIntoCache (FigureCtys[Role],Scope,Cod,
NumCtysWithUsrs = Cty_DB_GetNumCtysWithUsrs (Role,Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigureCtys[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCtysWithUsrs);
}

View File

@ -119,8 +119,7 @@ unsigned Cty_GetCachedNumCtysWithCtrs (void);
unsigned Cty_GetCachedNumCtysWithDegs (void);
unsigned Cty_GetCachedNumCtysWithCrss (void);
unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role);
void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys);

View File

@ -33,6 +33,7 @@
#include "swad_database.h"
#include "swad_error.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -340,8 +341,13 @@ unsigned Cty_DB_GetNumCtysWithCrss (void)
/******************* Get number of countries with users **********************/
/*****************************************************************************/
unsigned Cty_DB_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery)
unsigned Cty_DB_GetNumCtysWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of countries with users",
"SELECT COUNT(DISTINCT cty_countrs.CtyCod)"

View File

@ -54,7 +54,8 @@ unsigned Cty_DB_GetNumCtysWithInss (void);
unsigned Cty_DB_GetNumCtysWithCtrs (void);
unsigned Cty_DB_GetNumCtysWithDegs (void);
unsigned Cty_DB_GetNumCtysWithCrss (void);
unsigned Cty_DB_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Cty_DB_GetNumCtysWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod);
bool Cty_DB_CheckIfNumericCountryCodeExists (long CtyCod);
bool Cty_DB_CheckIfAlpha2CountryCodeExists (const char Alpha2[2 + 1]);

View File

@ -598,8 +598,7 @@ unsigned Crs_GetCachedNumCrssInDeg (long DegCod)
/********************* Get number of courses with users **********************/
/*****************************************************************************/
unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role)
{
static const FigCch_FigureCached_t FigureCrss[Rol_NUM_ROLES] =
{
@ -608,14 +607,15 @@ unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery,
[Rol_TCH] = FigCch_NUM_CRSS_WITH_TCHS, // Teachers
};
unsigned NumCrssWithUsrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of courses with users from cache *****/
if (!FigCch_GetFigureFromCache (FigureCrss[Role],Scope,Cod,
if (!FigCch_GetFigureFromCache (FigureCrss[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCrssWithUsrs))
{
/***** Get current number of courses with users from database and update cache *****/
NumCrssWithUsrs = Crs_DB_GetNumCrssWithUsrs (Role,SubQuery);
FigCch_UpdateFigureIntoCache (FigureCrss[Role],Scope,Cod,
NumCrssWithUsrs = Crs_DB_GetNumCrssWithUsrs (Role,Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigureCrss[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumCrssWithUsrs);
}

View File

@ -113,8 +113,7 @@ void Crs_FlushCacheNumCrssInDeg (void);
unsigned Crs_GetNumCrssInDeg (long DegCod);
unsigned Crs_GetCachedNumCrssInDeg (long DegCod);
unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role);
void Crs_WriteSelectorOfCourse (void);
void Crs_ShowCrssOfCurrentDeg (void);

View File

@ -34,6 +34,7 @@
#include "swad_database.h"
#include "swad_error.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -355,8 +356,13 @@ unsigned Crs_DB_GetNumCrssInDeg (long DegCod)
/******************** Get number of courses with users ***********************/
/*****************************************************************************/
unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery)
unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of courses with users",
"SELECT COUNT(DISTINCT crs_courses.CrsCod)"

View File

@ -61,7 +61,8 @@ unsigned Crs_DB_GetNumCrssInCty (long CtyCod);
unsigned Crs_DB_GetNumCrssInIns (long InsCod);
unsigned Crs_DB_GetNumCrssInCtr (long CtrCod);
unsigned Crs_DB_GetNumCrssInDeg (long DegCod);
unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod);
void Crs_DB_UpdateInstitutionalCrsCod (long CrsCod,const char *NewInstitutionalCrsCod);
void Crs_DB_UpdateCrsStatus (long CrsCod,Crs_Status_t Status);

View File

@ -1808,18 +1808,18 @@ unsigned Deg_GetCachedNumDegsInCtr (long CtrCod)
/********************* Get number of centers with courses ********************/
/*****************************************************************************/
unsigned Deg_GetCachedNumDegsWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Deg_GetCachedNumDegsWithCrss (void)
{
unsigned NumDegsWithCrss;
long Cod = Sco_GetCurrentCod ();
/***** Get number of degrees with courses from cache *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS_WITH_CRSS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_DEGS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumDegsWithCrss))
{
/***** Get current number of degrees with courses from database and update cache *****/
NumDegsWithCrss = Deg_DB_GetNumDegsWithCrss (SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS_WITH_CRSS,Scope,Cod,
NumDegsWithCrss = Deg_DB_GetNumDegsWithCrss (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumDegsWithCrss);
}
@ -1830,8 +1830,7 @@ unsigned Deg_GetCachedNumDegsWithCrss (const char *SubQuery,
/********************* Get number of degrees with users **********************/
/*****************************************************************************/
unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role)
{
static const FigCch_FigureCached_t FigureDegs[Rol_NUM_ROLES] =
{
@ -1840,14 +1839,15 @@ unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery,
[Rol_TCH] = FigCch_NUM_DEGS_WITH_TCHS, // Teachers
};
unsigned NumDegsWithUsrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of degrees with users from cache *****/
if (!FigCch_GetFigureFromCache (FigureDegs[Role],Scope,Cod,
if (!FigCch_GetFigureFromCache (FigureDegs[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumDegsWithUsrs))
{
/***** Get current number of degrees with users from database and update cache *****/
NumDegsWithUsrs = Deg_DB_GetNumDegsWithUsrs (Role,SubQuery);
FigCch_UpdateFigureIntoCache (FigureDegs[Role],Scope,Cod,
NumDegsWithUsrs = Deg_DB_GetNumDegsWithUsrs (Role,Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigureDegs[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumDegsWithUsrs);
}

View File

@ -142,10 +142,8 @@ void Deg_FlushCacheNumDegsInCtr (void);
unsigned Deg_GetNumDegsInCtr (long CtrCod);
unsigned Deg_GetCachedNumDegsInCtr (long CtrCod);
unsigned Deg_GetCachedNumDegsWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Deg_GetCachedNumDegsWithCrss (void);
unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role);
void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumCrss);

View File

@ -29,6 +29,7 @@
#include "swad_degree_database.h"
#include "swad_error.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -476,8 +477,12 @@ bool Deg_DB_CheckIfDegNameExistsInCtr (const char *FieldName,const char *Name,
/***************** Get current number of degrees with courses ****************/
/*****************************************************************************/
unsigned Deg_DB_GetNumDegsWithCrss (const char *SubQuery)
unsigned Deg_DB_GetNumDegsWithCrss (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of degrees with courses",
"SELECT COUNT(DISTINCT deg_degrees.DegCod)"
@ -495,8 +500,13 @@ unsigned Deg_DB_GetNumDegsWithCrss (const char *SubQuery)
/**************** Get current number of degrees with users *******************/
/*****************************************************************************/
unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery)
unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of degrees with users",
"SELECT COUNT(DISTINCT deg_degrees.DegCod)"

View File

@ -64,8 +64,9 @@ unsigned Deg_DB_GetDegsWithStds (MYSQL_RES **mysql_res);
bool Deg_DB_CheckIfDegNameExistsInCtr (const char *FieldName,const char *Name,
long DegCod,long CtrCod);
unsigned Deg_DB_GetNumDegsWithCrss (const char *SubQuery);
unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Deg_DB_GetNumDegsWithCrss (HieLvl_Level_t Scope,long Cod);
unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod);
unsigned Deg_DB_GetNumDegsInCty (long CtyCod);
unsigned Deg_DB_GetNumDegsInIns (long InsCod);
unsigned Deg_DB_GetNumDegsInCtr (long CtrCod);

View File

@ -36,6 +36,7 @@
#include "swad_box.h"
#include "swad_database.h"
#include "swad_error.h"
#include "swad_exam_database.h"
#include "swad_figure.h"
#include "swad_figure_cache.h"
#include "swad_file_browser.h"
@ -43,6 +44,7 @@
#include "swad_form.h"
#include "swad_forum.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
#include "swad_hierarchy_level.h"
#include "swad_HTML.h"
#include "swad_institution.h"
@ -434,12 +436,7 @@ static void Fig_GetAndShowNumUsrsInCrss (Rol_Role_t Role)
{
extern const char *Txt_Total;
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
long Cod = (Gbl.Scope.Current == HieLvl_CTY ? Gbl.Hierarchy.Cty.CtyCod :
(Gbl.Scope.Current == HieLvl_INS ? Gbl.Hierarchy.Ins.InsCod :
(Gbl.Scope.Current == HieLvl_CTR ? Gbl.Hierarchy.Ctr.CtrCod :
(Gbl.Scope.Current == HieLvl_DEG ? Gbl.Hierarchy.Deg.DegCod :
(Gbl.Scope.Current == HieLvl_CRS ? Gbl.Hierarchy.Crs.CrsCod :
-1L)))));
long Cod = Sco_GetCurrentCod ();
char *Class = (Role == Rol_UNK) ? "DAT_N LINE_TOP RB" :
"DAT RB";
unsigned Roles = (Role == Rol_UNK) ? ((1 << Rol_STD) |
@ -696,7 +693,6 @@ static void Fig_GetAndShowHierarchyWithCtrs (void)
{
extern const char *Txt_With_;
extern const char *Txt_centers;
char SubQuery[128];
unsigned NumCtysWithCtrs = 1;
unsigned NumInssWithCtrs = 1;
@ -705,11 +701,10 @@ static void Fig_GetAndShowHierarchyWithCtrs (void)
{
case HieLvl_SYS:
NumCtysWithCtrs = Cty_GetCachedNumCtysWithCtrs ();
NumInssWithCtrs = Ins_GetCachedNumInssWithCtrs ("",HieLvl_SYS,-1L);
break;
/* falls through */
/* no break */
case HieLvl_CTY:
sprintf (SubQuery,"ins_instits.CtyCod=%ld AND ",Gbl.Hierarchy.Cty.CtyCod);
NumInssWithCtrs = Ins_GetCachedNumInssWithCtrs (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumInssWithCtrs = Ins_GetCachedNumInssWithCtrs ();
break;
case HieLvl_INS:
case HieLvl_CTR:
@ -739,7 +734,6 @@ static void Fig_GetAndShowHierarchyWithDegs (void)
{
extern const char *Txt_With_;
extern const char *Txt_degrees;
char SubQuery[128];
unsigned NumCtysWithDegs = 1;
unsigned NumInssWithDegs = 1;
unsigned NumCtrsWithDegs = 1;
@ -749,17 +743,15 @@ static void Fig_GetAndShowHierarchyWithDegs (void)
{
case HieLvl_SYS:
NumCtysWithDegs = Cty_GetCachedNumCtysWithDegs ();
NumInssWithDegs = Ins_GetCachedNumInssWithDegs ("",HieLvl_SYS,-1L);
NumCtrsWithDegs = Ctr_GetCachedNumCtrsWithDegs ("",HieLvl_SYS,-1L);
/* falls through */
/* no break */
break;
case HieLvl_CTY:
sprintf (SubQuery,"ins_instits.CtyCod=%ld AND ",Gbl.Hierarchy.Cty.CtyCod);
NumInssWithDegs = Ins_GetCachedNumInssWithDegs (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumCtrsWithDegs = Ctr_GetCachedNumCtrsWithDegs (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
break;
NumInssWithDegs = Ins_GetCachedNumInssWithDegs ();
/* falls through */
/* no break */
case HieLvl_INS:
sprintf (SubQuery,"ctr_centers.InsCod=%ld AND ",Gbl.Hierarchy.Ins.InsCod);
NumCtrsWithDegs = Ctr_GetCachedNumCtrsWithDegs (SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumCtrsWithDegs = Ctr_GetCachedNumCtrsWithDegs ();
break;
case HieLvl_CTR:
case HieLvl_DEG:
@ -788,7 +780,6 @@ static void Fig_GetAndShowHierarchyWithCrss (void)
{
extern const char *Txt_With_;
extern const char *Txt_courses;
char SubQuery[128];
unsigned NumCtysWithCrss = 1;
unsigned NumInssWithCrss = 1;
unsigned NumCtrsWithCrss = 1;
@ -799,25 +790,18 @@ static void Fig_GetAndShowHierarchyWithCrss (void)
{
case HieLvl_SYS:
NumCtysWithCrss = Cty_GetCachedNumCtysWithCrss ();
NumInssWithCrss = Ins_GetCachedNumInssWithCrss ("",HieLvl_SYS,-1L);
NumCtrsWithCrss = Ctr_GetCachedNumCtrsWithCrss ("",HieLvl_SYS,-1L);
NumDegsWithCrss = Deg_GetCachedNumDegsWithCrss ("",HieLvl_SYS,-1L);
break;
/* falls through */
/* no break */
case HieLvl_CTY:
sprintf (SubQuery,"ins_instits.CtyCod=%ld AND ",Gbl.Hierarchy.Cty.CtyCod);
NumInssWithCrss = Ins_GetCachedNumInssWithCrss (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumCtrsWithCrss = Ctr_GetCachedNumCtrsWithCrss (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumDegsWithCrss = Deg_GetCachedNumDegsWithCrss (SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
break;
NumInssWithCrss = Ins_GetCachedNumInssWithCrss ();
/* falls through */
/* no break */
case HieLvl_INS:
sprintf (SubQuery,"ctr_centers.InsCod=%ld AND ",Gbl.Hierarchy.Ins.InsCod);
NumCtrsWithCrss = Ctr_GetCachedNumCtrsWithCrss (SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumDegsWithCrss = Deg_GetCachedNumDegsWithCrss (SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
break;
NumCtrsWithCrss = Ctr_GetCachedNumCtrsWithCrss ();
/* falls through */
/* no break */
case HieLvl_CTR:
sprintf (SubQuery,"deg_degrees.CtrCod=%ld AND ",
Gbl.Hierarchy.Ctr.CtrCod);
NumDegsWithCrss = Deg_GetCachedNumDegsWithCrss (SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
NumDegsWithCrss = Deg_GetCachedNumDegsWithCrss ();
break;
case HieLvl_DEG:
case HieLvl_CRS:
@ -845,68 +829,18 @@ static void Fig_GetAndShowHierarchyWithUsrs (Rol_Role_t Role)
{
extern const char *Txt_With_;
extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
char SubQuery[128];
unsigned NumCtysWithUsrs = 0;
unsigned NumInssWithUsrs = 0;
unsigned NumCtrsWithUsrs = 0;
unsigned NumDegsWithUsrs = 0;
unsigned NumCrssWithUsrs = 0;
unsigned NumCtysWithUsrs;
unsigned NumInssWithUsrs;
unsigned NumCtrsWithUsrs;
unsigned NumDegsWithUsrs;
unsigned NumCrssWithUsrs;
/***** Get number of elements with students *****/
switch (Gbl.Scope.Current)
{
case HieLvl_SYS:
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,"",HieLvl_SYS,-1L);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,"",HieLvl_SYS,-1L);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,"",HieLvl_SYS,-1L);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,"",HieLvl_SYS,-1L);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,"",HieLvl_SYS,-1L);
break;
case HieLvl_CTY:
sprintf (SubQuery,"ins_instits.CtyCod=%ld AND ",Gbl.Hierarchy.Cty.CtyCod);
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,SubQuery,HieLvl_CTY,Gbl.Hierarchy.Cty.CtyCod);
break;
case HieLvl_INS:
sprintf (SubQuery,"ctr_centers.InsCod=%ld AND ",Gbl.Hierarchy.Ins.InsCod);
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,SubQuery,HieLvl_INS,Gbl.Hierarchy.Ins.InsCod);
break;
case HieLvl_CTR:
sprintf (SubQuery,"deg_degrees.CtrCod=%ld AND ",
Gbl.Hierarchy.Ctr.CtrCod);
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,SubQuery,HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod);
break;
case HieLvl_DEG:
sprintf (SubQuery,"crs_courses.DegCod=%ld AND ",Gbl.Hierarchy.Deg.DegCod);
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,SubQuery,HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,SubQuery,HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,SubQuery,HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,SubQuery,HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,SubQuery,HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod);
break;
case HieLvl_CRS:
sprintf (SubQuery,"crs_users.CrsCod=%ld AND ",Gbl.Hierarchy.Crs.CrsCod);
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role,SubQuery,HieLvl_CRS,Gbl.Hierarchy.Crs.CrsCod);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role,SubQuery,HieLvl_CRS,Gbl.Hierarchy.Crs.CrsCod);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role,SubQuery,HieLvl_CRS,Gbl.Hierarchy.Crs.CrsCod);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role,SubQuery,HieLvl_CRS,Gbl.Hierarchy.Crs.CrsCod);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role,SubQuery,HieLvl_CRS,Gbl.Hierarchy.Crs.CrsCod);
break;
default:
Err_WrongScopeExit ();
break;
}
NumCtysWithUsrs = Cty_GetCachedNumCtysWithUsrs (Role);
NumInssWithUsrs = Ins_GetCachedNumInssWithUsrs (Role);
NumCtrsWithUsrs = Ctr_GetCachedNumCtrsWithUsrs (Role);
NumDegsWithUsrs = Deg_GetCachedNumDegsWithUsrs (Role);
NumCrssWithUsrs = Crs_GetCachedNumCrssWithUsrs (Role);
/***** Write number of elements with students *****/
Fig_ShowHierarchyRow (Txt_With_,Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN],

View File

@ -802,3 +802,26 @@ void Hie_FreeGoToMsg (void)
{
Str_FreeString ();
}
/*****************************************************************************/
/******************* Get number of countries with users **********************/
/*****************************************************************************/
void Hie_DB_BuildSubquery (char SubQuery[128],HieLvl_Level_t Scope,long Cod)
{
static const char *Format[HieLvl_NUM_LEVELS] =
{
[HieLvl_UNK] = "", // Unknown
[HieLvl_SYS] = "", // System
[HieLvl_CTY] = "ins_instits.CtyCod=%ld AND ", // Country
[HieLvl_INS] = "ctr_centers.InsCod=%ld AND ", // Institution
[HieLvl_CTR] = "deg_degrees.CtrCod=%ld AND ", // Center
[HieLvl_DEG] = "crs_courses.DegCod=%ld AND ", // Degree
[HieLvl_CRS] = "crs_users.CrsCod=%ld AND ", // Course
};
if (Cod > 0)
sprintf (SubQuery,Format[Scope],Cod);
else
SubQuery[0] = '\0';
}

View File

@ -69,4 +69,6 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan);
char *Hie_BuildGoToMsg (const char *Where);
void Hie_FreeGoToMsg (void);
void Hie_DB_BuildSubquery (char SubQuery[128],HieLvl_Level_t Scope,long Cod);
#endif

View File

@ -1983,98 +1983,136 @@ unsigned Ins_GetCachedNumInssInCty (long CtyCod)
/***************** Get number of institutions with centers *******************/
/*****************************************************************************/
unsigned Ins_GetCachedNumInssWithCtrs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ins_GetCachedNumInssWithCtrs (void)
{
unsigned NumInssWithCtrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of institutions with centers from cache *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_CTRS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_CTRS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithCtrs))
{
/***** Get current number of institutions with centers from database and update cache *****/
NumInssWithCtrs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with centers",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CTRS,Scope,Cod,
NumInssWithCtrs = Ins_DB_GetNumInssWithCtrs (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CTRS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithCtrs);
}
return NumInssWithCtrs;
}
/*****************************************************************************/
/****************** Get number of institutions with centres ******************/
/*****************************************************************************/
unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of institutions with centers",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod",
SubQuery);
}
/*****************************************************************************/
/****************** Get number of institutions with degrees ******************/
/*****************************************************************************/
unsigned Ins_GetCachedNumInssWithDegs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ins_GetCachedNumInssWithDegs (void)
{
unsigned NumInssWithDegs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of institutions with degrees from cache *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_DEGS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_DEGS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithDegs))
{
/***** Get current number of institutions with degrees from database and update cache *****/
NumInssWithDegs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with degrees",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_DEGS,Scope,Cod,
NumInssWithDegs = Ins_DB_GetNumInssWithDegs (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_DEGS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithDegs);
}
return NumInssWithDegs;
}
/*****************************************************************************/
/****************** Get number of institutions with degrees ******************/
/*****************************************************************************/
unsigned Ins_DB_GetNumInssWithDegs (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of institutions with degrees",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod",
SubQuery);
}
/*****************************************************************************/
/****************** Get number of institutions with courses ******************/
/*****************************************************************************/
unsigned Ins_GetCachedNumInssWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ins_GetCachedNumInssWithCrss (void)
{
unsigned NumInssWithCrss;
long Cod = Sco_GetCurrentCod ();
/***** Get number of institutions with courses from cache *****/
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_CRSS,Scope,Cod,
if (!FigCch_GetFigureFromCache (FigCch_NUM_INSS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithCrss))
{
/***** Get current number of institutions with courses from database and update cache *****/
NumInssWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with courses",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CRSS,Scope,Cod,
NumInssWithCrss = Ins_DB_GetNumInssWithCrss (Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CRSS,Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithCrss);
}
return NumInssWithCrss;
}
/*****************************************************************************/
/****************** Get number of institutions with courses ******************/
/*****************************************************************************/
unsigned Ins_DB_GetNumInssWithCrss (HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of institutions with courses",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
}
/*****************************************************************************/
/****************** Get number of institutions with users ********************/
/*****************************************************************************/
unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod)
unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role)
{
static const FigCch_FigureCached_t FigureInss[Rol_NUM_ROLES] =
{
@ -2083,33 +2121,49 @@ unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role,const char *SubQuery,
[Rol_TCH] = FigCch_NUM_INSS_WITH_TCHS, // Teachers
};
unsigned NumInssWithUsrs;
long Cod = Sco_GetCurrentCod ();
/***** Get number of institutions with users from cache *****/
if (!FigCch_GetFigureFromCache (FigureInss[Role],Scope,Cod,
if (!FigCch_GetFigureFromCache (FigureInss[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithUsrs))
{
/***** Get current number of institutions with users from database and update cache *****/
NumInssWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with users",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureInss[Role],Scope,Cod,
NumInssWithUsrs = Ins_DB_GetNumInnsWithUsrs (Role,Gbl.Scope.Current,Cod);
FigCch_UpdateFigureIntoCache (FigureInss[Role],Gbl.Scope.Current,Cod,
FigCch_UNSIGNED,&NumInssWithUsrs);
}
return NumInssWithUsrs;
}
/*****************************************************************************/
/************* Get current number of institutions with users *****************/
/*****************************************************************************/
unsigned Ins_DB_GetNumInnsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod)
{
char SubQuery[128];
Hie_DB_BuildSubquery (SubQuery,Scope,Cod);
return (unsigned)
DB_QueryCOUNT ("can not get number of institutions with users",
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u",
SubQuery,(unsigned) Role);
}
/*****************************************************************************/
/*************************** List institutions found *************************/
/*****************************************************************************/

View File

@ -134,14 +134,15 @@ void Ins_FlushCacheNumInssInCty (void);
unsigned Ins_GetNumInssInCty (long CtyCod);
unsigned Ins_GetCachedNumInssInCty (long CtyCod);
unsigned Ins_GetCachedNumInssWithCtrs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithDegs (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithCrss (const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role,const char *SubQuery,
HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithCtrs (void);
unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithDegs (void);
unsigned Ins_DB_GetNumInssWithDegs (HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithCrss (void);
unsigned Ins_DB_GetNumInssWithCrss (HieLvl_Level_t Scope,long Cod);
unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role);
unsigned Ins_DB_GetNumInnsWithUsrs (Rol_Role_t Role,
HieLvl_Level_t Scope,long Cod);
void Ins_ListInssFound (MYSQL_RES **mysql_res,unsigned NumInss);

View File

@ -366,3 +366,29 @@ const char *Sco_GetDBStrFromScope (HieLvl_Level_t Scope)
return Sco_ScopeDB[Scope];
}
/*****************************************************************************/
/**************************** Get current scope code *************************/
/*****************************************************************************/
long Sco_GetCurrentCod (void)
{
switch (Gbl.Scope.Current)
{
case HieLvl_SYS:
return -1L;
case HieLvl_CTY:
return Gbl.Hierarchy.Cty.CtyCod;
case HieLvl_INS:
return Gbl.Hierarchy.Ins.InsCod;
case HieLvl_CTR:
return Gbl.Hierarchy.Ctr.CtrCod;
case HieLvl_DEG:
return Gbl.Hierarchy.Deg.DegCod;
case HieLvl_CRS:
return Gbl.Hierarchy.Crs.CrsCod;
default:
Err_WrongScopeExit ();
return -1L; // Not reached
}
}

View File

@ -57,4 +57,6 @@ HieLvl_Level_t Sco_GetScopeFromUnsignedStr (const char *UnsignedStr);
HieLvl_Level_t Sco_GetScopeFromDBStr (const char *ScopeDBStr);
const char *Sco_GetDBStrFromScope (HieLvl_Level_t Scope);
long Sco_GetCurrentCod (void);
#endif