mirror of
https://github.com/acanas/swad-core.git
synced 2024-09-22 00:00:40 +02:00
Version19.112.11
This commit is contained in:
parent
1758567767
commit
5274fa7943
|
@ -850,6 +850,7 @@ static void Ctr_ListCentresForEdition (void)
|
||||||
char WWW[Cns_MAX_BYTES_WWW + 1];
|
char WWW[Cns_MAX_BYTES_WWW + 1];
|
||||||
struct UsrData UsrDat;
|
struct UsrData UsrDat;
|
||||||
bool ICanEdit;
|
bool ICanEdit;
|
||||||
|
unsigned NumUsrsInCrssOfCtr;
|
||||||
Ctr_StatusTxt_t StatusTxt;
|
Ctr_StatusTxt_t StatusTxt;
|
||||||
unsigned StatusUnsigned;
|
unsigned StatusUnsigned;
|
||||||
|
|
||||||
|
@ -868,19 +869,18 @@ static void Ctr_ListCentresForEdition (void)
|
||||||
Ctr = &Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr];
|
Ctr = &Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr];
|
||||||
|
|
||||||
ICanEdit = Ctr_CheckIfICanEditACentre (Ctr);
|
ICanEdit = Ctr_CheckIfICanEditACentre (Ctr);
|
||||||
|
NumUsrsInCrssOfCtr = Usr_GetNumUsrsInCrssOfCtr (Rol_UNK,Ctr->CtrCod); // Here Rol_UNK means "all users"
|
||||||
|
|
||||||
/* Put icon to remove centre */
|
/* Put icon to remove centre */
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
HTM_TD_Begin ("class=\"BM\"");
|
HTM_TD_Begin ("class=\"BM\"");
|
||||||
if (!ICanEdit)
|
if (!ICanEdit || // I cannot edit
|
||||||
|
NumUsrsInCrssOfCtr) // Centre has users
|
||||||
Ico_PutIconRemovalNotAllowed ();
|
Ico_PutIconRemovalNotAllowed ();
|
||||||
else if (Deg_GetNumDegsInCtr (Ctr->CtrCod)) // Centre has degrees
|
else if (Deg_GetNumDegsInCtr (Ctr->CtrCod)) // Centre has degrees
|
||||||
Ico_PutIconRemovalNotAllowed ();
|
Ico_PutIconRemovalNotAllowed ();
|
||||||
else if (Usr_GetNumUsrsWhoClaimToBelongToCtr (Ctr->CtrCod)) // Centre has users who claim to belong to it
|
else if (Usr_GetNumUsrsWhoClaimToBelongToCtr (Ctr->CtrCod)) // Centre has users who claim to belong to it
|
||||||
Ico_PutIconRemovalNotAllowed ();
|
Ico_PutIconRemovalNotAllowed ();
|
||||||
else if (Usr_GetNumUsrsInCrssOfCtr (Rol_UNK, // Here Rol_UNK means "all users"
|
|
||||||
Ctr->CtrCod)) // Centre has users
|
|
||||||
Ico_PutIconRemovalNotAllowed ();
|
|
||||||
else // I can remove centre
|
else // I can remove centre
|
||||||
{
|
{
|
||||||
Frm_StartForm (ActRemCtr);
|
Frm_StartForm (ActRemCtr);
|
||||||
|
@ -991,8 +991,7 @@ static void Ctr_ListCentresForEdition (void)
|
||||||
|
|
||||||
/* Number of users in courses of this centre */
|
/* Number of users in courses of this centre */
|
||||||
HTM_TD_Begin ("class=\"DAT RM\"");
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
HTM_Unsigned (Usr_GetNumUsrsInCrssOfCtr (Rol_UNK, // Here Rol_UNK means "all users"
|
HTM_Unsigned (NumUsrsInCrssOfCtr);
|
||||||
Ctr->CtrCod));
|
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Centre requester */
|
/* Centre requester */
|
||||||
|
|
|
@ -492,7 +492,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
||||||
En OpenSWAD:
|
En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 19.112.10 (2020-01-06)"
|
#define Log_PLATFORM_VERSION "SWAD 19.112.11 (2020-01-06)"
|
||||||
#define CSS_FILE "swad19.112.css"
|
#define CSS_FILE "swad19.112.css"
|
||||||
#define JS_FILE "swad19.91.1.js"
|
#define JS_FILE "swad19.91.1.js"
|
||||||
/*
|
/*
|
||||||
|
@ -502,6 +502,7 @@ ps2pdf source.ps destination.pdf
|
||||||
// TODO: Mapas más estrechos en móvil
|
// TODO: Mapas más estrechos en móvil
|
||||||
// TODO: Quitar todos los EXTRA_DATA.
|
// TODO: Quitar todos los EXTRA_DATA.
|
||||||
|
|
||||||
|
Version 19.112.11:Jan 06, 2020 Optimization in number of users in courses of an institution. (278486 lines)
|
||||||
Version 19.112.10:Jan 06, 2020 Optimization in number of users in courses of a degree. (278468 lines)
|
Version 19.112.10:Jan 06, 2020 Optimization in number of users in courses of a degree. (278468 lines)
|
||||||
Version 19.112.9: Jan 05, 2020 Optimization in number of users in a course. (278419 lines)
|
Version 19.112.9: Jan 05, 2020 Optimization in number of users in a course. (278419 lines)
|
||||||
Version 19.112.8: Jan 05, 2020 Optimization in number of courses in a degree. (278396 lines)
|
Version 19.112.8: Jan 05, 2020 Optimization in number of courses in a degree. (278396 lines)
|
||||||
|
|
|
@ -221,7 +221,6 @@ void Gbl_InitializeGlobals (void)
|
||||||
Gbl.Hierarchy.Ins.FullName[0] = '\0';
|
Gbl.Hierarchy.Ins.FullName[0] = '\0';
|
||||||
Gbl.Hierarchy.Ins.WWW[0] = '\0';
|
Gbl.Hierarchy.Ins.WWW[0] = '\0';
|
||||||
Gbl.Hierarchy.Ins.Ctrs.Num = Gbl.Hierarchy.Ins.NumDpts = Gbl.Hierarchy.Ins.NumDegs = 0;
|
Gbl.Hierarchy.Ins.Ctrs.Num = Gbl.Hierarchy.Ins.NumDpts = Gbl.Hierarchy.Ins.NumDegs = 0;
|
||||||
Gbl.Hierarchy.Ins.NumUsrs = 0;
|
|
||||||
|
|
||||||
Gbl.Hierarchy.Ctr.ShrtName[0] = '\0';
|
Gbl.Hierarchy.Ctr.ShrtName[0] = '\0';
|
||||||
Gbl.Hierarchy.Ctr.FullName[0] = '\0';
|
Gbl.Hierarchy.Ctr.FullName[0] = '\0';
|
||||||
|
@ -416,6 +415,7 @@ void Gbl_InitializeGlobals (void)
|
||||||
Crs_FlushCacheNumCrssInCtr ();
|
Crs_FlushCacheNumCrssInCtr ();
|
||||||
Crs_FlushCacheNumCrssInDeg ();
|
Crs_FlushCacheNumCrssInDeg ();
|
||||||
Usr_FlushCacheNumUsrsWhoClaimToBelongToCtr ();
|
Usr_FlushCacheNumUsrsWhoClaimToBelongToCtr ();
|
||||||
|
Usr_FlushCacheNumUsrsInCrssOfIns ();
|
||||||
Usr_FlushCacheNumUsrsInCrssOfCtr ();
|
Usr_FlushCacheNumUsrsInCrssOfCtr ();
|
||||||
Usr_FlushCacheNumUsrsInCrssOfDeg ();
|
Usr_FlushCacheNumUsrsInCrssOfDeg ();
|
||||||
Usr_FlushCacheNumUsrsInCrs ();
|
Usr_FlushCacheNumUsrsInCrs ();
|
||||||
|
|
|
@ -792,6 +792,11 @@ struct Globals
|
||||||
long CtrCod;
|
long CtrCod;
|
||||||
unsigned NumUsrs;
|
unsigned NumUsrs;
|
||||||
} NumUsrsWhoClaimToBelongToCtr;
|
} NumUsrsWhoClaimToBelongToCtr;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
long InsCod;
|
||||||
|
unsigned NumUsrs;
|
||||||
|
} NumUsrsInCrssOfIns[Rol_NUM_ROLES];
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
long CtrCod;
|
long CtrCod;
|
||||||
|
|
|
@ -427,7 +427,7 @@ static void Ins_ListOneInstitutionForSeeing (struct Instit *Ins,unsigned NumIns)
|
||||||
|
|
||||||
/* Number of users in courses of this institution */
|
/* Number of users in courses of this institution */
|
||||||
HTM_TD_Begin ("class=\"%s RM %s\"",TxtClassNormal,BgColor);
|
HTM_TD_Begin ("class=\"%s RM %s\"",TxtClassNormal,BgColor);
|
||||||
HTM_Unsigned (Ins->NumUsrs);
|
HTM_Unsigned (Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins->InsCod)); // Here Rol_UNK means "all users"
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Institution status *****/
|
/***** Institution status *****/
|
||||||
|
@ -688,7 +688,6 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData)
|
||||||
case Ins_GET_BASIC_DATA:
|
case Ins_GET_BASIC_DATA:
|
||||||
Ins->NumUsrsWhoClaimToBelongToIns = 0;
|
Ins->NumUsrsWhoClaimToBelongToIns = 0;
|
||||||
Ins->Ctrs.Num = Ins->NumDegs = Ins->NumCrss = Ins->NumDpts = 0;
|
Ins->Ctrs.Num = Ins->NumDegs = Ins->NumCrss = Ins->NumDpts = 0;
|
||||||
Ins->NumUsrs = 0;
|
|
||||||
break;
|
break;
|
||||||
case Ins_GET_EXTRA_DATA:
|
case Ins_GET_EXTRA_DATA:
|
||||||
/* Get number of users who claim to belong to this institution (row[7]) */
|
/* Get number of users who claim to belong to this institution (row[7]) */
|
||||||
|
@ -706,9 +705,6 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData)
|
||||||
|
|
||||||
/* Get number of departments in this institution */
|
/* Get number of departments in this institution */
|
||||||
Ins->NumDpts = Dpt_GetNumDptsInIns (Ins->InsCod);
|
Ins->NumDpts = Dpt_GetNumDptsInIns (Ins->InsCod);
|
||||||
|
|
||||||
/* Get number of users in courses */
|
|
||||||
Ins->NumUsrs = Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins->InsCod); // Here Rol_UNK means "all users"
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -758,7 +754,6 @@ bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins,
|
||||||
Ins->WWW[0] = '\0';
|
Ins->WWW[0] = '\0';
|
||||||
Ins->NumUsrsWhoClaimToBelongToIns = 0;
|
Ins->NumUsrsWhoClaimToBelongToIns = 0;
|
||||||
Ins->Ctrs.Num = Ins->NumDegs = Ins->NumCrss = Ins->NumDpts = 0;
|
Ins->Ctrs.Num = Ins->NumDegs = Ins->NumCrss = Ins->NumDpts = 0;
|
||||||
Ins->NumUsrs = 0;
|
|
||||||
|
|
||||||
/***** Check if institution code is correct *****/
|
/***** Check if institution code is correct *****/
|
||||||
if (Ins->InsCod > 0)
|
if (Ins->InsCod > 0)
|
||||||
|
@ -805,9 +800,6 @@ bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins,
|
||||||
|
|
||||||
/* Get number of degrees in this institution */
|
/* Get number of degrees in this institution */
|
||||||
Ins->NumDegs = Deg_GetNumDegsInIns (Ins->InsCod);
|
Ins->NumDegs = Deg_GetNumDegsInIns (Ins->InsCod);
|
||||||
|
|
||||||
/* Get number of users in courses of this institution */
|
|
||||||
Ins->NumUsrs = Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins->InsCod); // Here Rol_UNK means "all users"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set return value */
|
/* Set return value */
|
||||||
|
@ -1041,6 +1033,7 @@ static void Ins_ListInstitutionsForEdition (void)
|
||||||
char WWW[Cns_MAX_BYTES_WWW + 1];
|
char WWW[Cns_MAX_BYTES_WWW + 1];
|
||||||
struct UsrData UsrDat;
|
struct UsrData UsrDat;
|
||||||
bool ICanEdit;
|
bool ICanEdit;
|
||||||
|
unsigned NumUsrsInCrssOfIns;
|
||||||
Ins_StatusTxt_t StatusTxt;
|
Ins_StatusTxt_t StatusTxt;
|
||||||
unsigned StatusUnsigned;
|
unsigned StatusUnsigned;
|
||||||
|
|
||||||
|
@ -1059,15 +1052,17 @@ static void Ins_ListInstitutionsForEdition (void)
|
||||||
Ins = &Gbl.Hierarchy.Cty.Inss.Lst[NumIns];
|
Ins = &Gbl.Hierarchy.Cty.Inss.Lst[NumIns];
|
||||||
|
|
||||||
ICanEdit = Ins_CheckIfICanEdit (Ins);
|
ICanEdit = Ins_CheckIfICanEdit (Ins);
|
||||||
|
NumUsrsInCrssOfIns = Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins->InsCod); // Here Rol_UNK means "all users"
|
||||||
|
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
/* Put icon to remove institution */
|
/* Put icon to remove institution */
|
||||||
HTM_TD_Begin ("class=\"BM\"");
|
HTM_TD_Begin ("class=\"BM\"");
|
||||||
if (Ins->Ctrs.Num ||
|
if (!ICanEdit ||
|
||||||
Ins->NumUsrsWhoClaimToBelongToIns ||
|
Ins->Ctrs.Num || // Institution has centres
|
||||||
Ins->NumUsrs || // Institution has centres or users ==> deletion forbidden
|
NumUsrsInCrssOfIns || // Institution has users
|
||||||
!ICanEdit)
|
Ins->NumUsrsWhoClaimToBelongToIns)
|
||||||
|
// Institution has centres or users ==> deletion forbidden
|
||||||
Ico_PutIconRemovalNotAllowed ();
|
Ico_PutIconRemovalNotAllowed ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1152,7 +1147,7 @@ static void Ins_ListInstitutionsForEdition (void)
|
||||||
|
|
||||||
/* Number of users in courses of this institution */
|
/* Number of users in courses of this institution */
|
||||||
HTM_TD_Begin ("class=\"DAT RM\"");
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
HTM_Unsigned (Ins->NumUsrs);
|
HTM_Unsigned (NumUsrsInCrssOfIns);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Institution requester */
|
/* Institution requester */
|
||||||
|
@ -1318,8 +1313,12 @@ void Ins_RemoveInstitution (void)
|
||||||
if (!Ins_CheckIfICanEdit (Ins_EditingIns))
|
if (!Ins_CheckIfICanEdit (Ins_EditingIns))
|
||||||
Lay_NoPermissionExit ();
|
Lay_NoPermissionExit ();
|
||||||
else if (Ins_EditingIns->Ctrs.Num ||
|
else if (Ins_EditingIns->Ctrs.Num ||
|
||||||
Ins_EditingIns->NumUsrsWhoClaimToBelongToIns ||
|
Ins_EditingIns->NumUsrsWhoClaimToBelongToIns)
|
||||||
Ins_EditingIns->NumUsrs) // Institution has centres or users ==> don't remove
|
// Institution has centres or users ==> don't remove
|
||||||
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
|
Txt_To_remove_an_institution_you_must_first_remove_all_centres_and_users_in_the_institution);
|
||||||
|
else if (Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins_EditingIns->InsCod)) // Here Rol_UNK means "all users"
|
||||||
|
// Institution has users ==> don't remove
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_To_remove_an_institution_you_must_first_remove_all_centres_and_users_in_the_institution);
|
Txt_To_remove_an_institution_you_must_first_remove_all_centres_and_users_in_the_institution);
|
||||||
else // Institution has no users ==> remove it
|
else // Institution has no users ==> remove it
|
||||||
|
@ -1349,6 +1348,7 @@ void Ins_RemoveInstitution (void)
|
||||||
/***** Flush caches *****/
|
/***** Flush caches *****/
|
||||||
Ins_FlushCacheShortNameOfInstitution ();
|
Ins_FlushCacheShortNameOfInstitution ();
|
||||||
Ins_FlushCacheFullNameAndCtyOfInstitution ();
|
Ins_FlushCacheFullNameAndCtyOfInstitution ();
|
||||||
|
Usr_FlushCacheNumUsrsInCrssOfIns ();
|
||||||
|
|
||||||
/***** Write message to show the change made *****/
|
/***** Write message to show the change made *****/
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
|
@ -2029,7 +2029,6 @@ static void Ins_EditingInstitutionConstructor (void)
|
||||||
Ins_EditingIns->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
|
Ins_EditingIns->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
|
||||||
Ins_EditingIns->NumDpts = 0;
|
Ins_EditingIns->NumDpts = 0;
|
||||||
Ins_EditingIns->NumDegs = 0;
|
Ins_EditingIns->NumDegs = 0;
|
||||||
Ins_EditingIns->NumUsrs = 0;
|
|
||||||
Ins_EditingIns->NumUsrsWhoClaimToBelongToIns = 0;
|
Ins_EditingIns->NumUsrsWhoClaimToBelongToIns = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,6 @@ struct Instit
|
||||||
unsigned NumDegs;
|
unsigned NumDegs;
|
||||||
unsigned NumCrss;
|
unsigned NumCrss;
|
||||||
unsigned NumDpts;
|
unsigned NumDpts;
|
||||||
unsigned NumUsrs; // Number of users in courses of this institution
|
|
||||||
unsigned NumUsrsWhoClaimToBelongToIns;
|
unsigned NumUsrsWhoClaimToBelongToIns;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
91
swad_user.c
91
swad_user.c
|
@ -4222,6 +4222,7 @@ unsigned Usr_GetNumUsrsInCrs (Rol_Role_t Role,long CrsCod)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********** Count how many users with a role belong to a degree *************/
|
/*********** Count how many users with a role belong to a degree *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
// Here Rol_UNK means any user (students, non-editing teachers or teachers)
|
||||||
|
|
||||||
void Usr_FlushCacheNumUsrsInCrssOfDeg (void)
|
void Usr_FlushCacheNumUsrsInCrssOfDeg (void)
|
||||||
{
|
{
|
||||||
|
@ -4260,7 +4261,7 @@ unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod)
|
||||||
|
|
||||||
/***** 4. Slow: number of users in courses of a degree from database *****/
|
/***** 4. Slow: number of users in courses of a degree from database *****/
|
||||||
Gbl.Cache.NumUsrsInCrssOfDeg[Role].DegCod = DegCod;
|
Gbl.Cache.NumUsrsInCrssOfDeg[Role].DegCod = DegCod;
|
||||||
if (Role == Rol_UNK)
|
if (Role == Rol_UNK) // Any user
|
||||||
Gbl.Cache.NumUsrsInCrssOfDeg[Rol_UNK].NumUsrs =
|
Gbl.Cache.NumUsrsInCrssOfDeg[Rol_UNK].NumUsrs =
|
||||||
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
||||||
" in courses of a degree",
|
" in courses of a degree",
|
||||||
|
@ -4354,15 +4355,48 @@ unsigned Usr_GetNumUsrsInCrssOfCtr (Rol_Role_t Role,long CtrCod)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********* Count how many users with a role belong to an institution *********/
|
/********* Count how many users with a role belong to an institution *********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
// Here Rol_UNK means students or teachers
|
// Here Rol_UNK means any user (students, non-editing teachers or teachers)
|
||||||
|
|
||||||
|
void Usr_FlushCacheNumUsrsInCrssOfIns (void)
|
||||||
|
{
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_UNK].InsCod =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_STD].InsCod =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_NET].InsCod =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_TCH].InsCod = -1L;
|
||||||
|
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_UNK].NumUsrs =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_STD].NumUsrs =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_NET].NumUsrs =
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_TCH].NumUsrs = 0;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod)
|
unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod)
|
||||||
{
|
{
|
||||||
unsigned NumUsrs;
|
/***** 1. Fast check: Trivial case *****/
|
||||||
|
if (InsCod <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
/***** Get the number of users in courses of an institution from database ******/
|
/***** 2. Fast check: Trivial case *****/
|
||||||
|
switch (Role)
|
||||||
|
{
|
||||||
|
case Rol_UNK: // Here Rol_UNK means all
|
||||||
|
case Rol_STD:
|
||||||
|
case Rol_NET:
|
||||||
|
case Rol_TCH:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** 3. Fast check: If cached... *****/
|
||||||
|
if (InsCod == Gbl.Cache.NumUsrsInCrssOfIns[Role].InsCod)
|
||||||
|
return Gbl.Cache.NumUsrsInCrssOfIns[Role].NumUsrs;
|
||||||
|
|
||||||
|
/***** 4. Slow: get number of users in courses of an institution
|
||||||
|
from database *****/
|
||||||
|
Gbl.Cache.NumUsrsInCrssOfIns[Role].InsCod = InsCod;
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
NumUsrs =
|
Gbl.Cache.NumUsrsInCrssOfIns[Rol_UNK].NumUsrs =
|
||||||
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
||||||
" in courses of an institution",
|
" in courses of an institution",
|
||||||
"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
|
"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
|
||||||
|
@ -4375,7 +4409,7 @@ unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod)
|
||||||
else
|
else
|
||||||
// This query is very slow.
|
// This query is very slow.
|
||||||
// It's a bad idea to get number of teachers or students for a big list of institutions
|
// It's a bad idea to get number of teachers or students for a big list of institutions
|
||||||
NumUsrs =
|
Gbl.Cache.NumUsrsInCrssOfIns[Role].NumUsrs =
|
||||||
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
(unsigned) DB_QueryCOUNT ("can not get the number of users"
|
||||||
" in courses of an institution",
|
" in courses of an institution",
|
||||||
"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
|
"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
|
||||||
|
@ -4386,7 +4420,7 @@ unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod)
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
" AND crs_usr.Role=%u",
|
" AND crs_usr.Role=%u",
|
||||||
InsCod,(unsigned) Role);
|
InsCod,(unsigned) Role);
|
||||||
return NumUsrs;
|
return Gbl.Cache.NumUsrsInCrssOfIns[Role].NumUsrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -5492,51 +5526,32 @@ static void Usr_GetGstsLst (Hie_Level_t Scope)
|
||||||
|
|
||||||
void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
|
void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
|
||||||
{
|
{
|
||||||
const char *QueryFields =
|
|
||||||
"DISTINCT usr_data.UsrCod,"
|
|
||||||
"usr_data.EncryptedUsrCod,"
|
|
||||||
"usr_data.Password,"
|
|
||||||
"usr_data.Surname1,"
|
|
||||||
"usr_data.Surname2,"
|
|
||||||
"usr_data.FirstName,"
|
|
||||||
"usr_data.Sex,"
|
|
||||||
"usr_data.Photo,"
|
|
||||||
"usr_data.PhotoVisibility,"
|
|
||||||
"usr_data.CtyCod,"
|
|
||||||
"usr_data.InsCod";
|
|
||||||
/*
|
|
||||||
row[ 0]: usr_data.UsrCod
|
|
||||||
row[ 1]: usr_data.EncryptedUsrCod
|
|
||||||
row[ 2]: usr_data.Password
|
|
||||||
row[ 3]: usr_data.Surname1
|
|
||||||
row[ 4]: usr_data.Surname2
|
|
||||||
row[ 5]: usr_data.FirstName
|
|
||||||
row[ 6]: usr_data.Sex
|
|
||||||
row[ 7]: usr_data.Photo
|
|
||||||
row[ 8]: usr_data.PhotoVisibility
|
|
||||||
row[ 9]: usr_data.CtyCod
|
|
||||||
row[10]: usr_data.InsCod
|
|
||||||
*/
|
|
||||||
char *Query = NULL;
|
char *Query = NULL;
|
||||||
|
|
||||||
Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs = 0;
|
|
||||||
|
|
||||||
if (Usr_GetNumUsrsInCrssOfDeg (Rol_STD,DegCod))
|
if (Usr_GetNumUsrsInCrssOfDeg (Rol_STD,DegCod))
|
||||||
{
|
|
||||||
/***** Get the students in a degree from database *****/
|
/***** Get the students in a degree from database *****/
|
||||||
DB_BuildQuery (&Query,
|
DB_BuildQuery (&Query,
|
||||||
"SELECT %s FROM courses,crs_usr,usr_data"
|
"SELECT DISTINCT usr_data.UsrCod," // row[ 0]
|
||||||
|
"usr_data.EncryptedUsrCod," // row[ 1]
|
||||||
|
"usr_data.Password," // row[ 2]
|
||||||
|
"usr_data.Surname1," // row[ 3]
|
||||||
|
"usr_data.Surname2," // row[ 4]
|
||||||
|
"usr_data.FirstName," // row[ 5]
|
||||||
|
"usr_data.Sex," // row[ 6]
|
||||||
|
"usr_data.Photo," // row[ 7]
|
||||||
|
"usr_data.PhotoVisibility," // row[ 8]
|
||||||
|
"usr_data.CtyCod," // row[ 9]
|
||||||
|
"usr_data.InsCod" // row[10]
|
||||||
|
" FROM courses,crs_usr,usr_data"
|
||||||
" WHERE courses.DegCod=%ld"
|
" WHERE courses.DegCod=%ld"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
" AND crs_usr.Role=%u"
|
" AND crs_usr.Role=%u"
|
||||||
" AND crs_usr.UsrCod=usr_data.UsrCod",
|
" AND crs_usr.UsrCod=usr_data.UsrCod",
|
||||||
QueryFields,
|
|
||||||
DegCod,(unsigned) Rol_STD);
|
DegCod,(unsigned) Rol_STD);
|
||||||
|
|
||||||
/***** Get list of students from database *****/
|
/***** Get list of students from database *****/
|
||||||
Usr_GetListUsrsFromQuery (Query,Rol_STD,Hie_DEG);
|
Usr_GetListUsrsFromQuery (Query,Rol_STD,Hie_DEG);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********************** Get list of users from database **********************/
|
/********************** Get list of users from database **********************/
|
||||||
|
|
|
@ -413,6 +413,7 @@ void Usr_FlushCacheNumUsrsInCrssOfDeg (void);
|
||||||
unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod);
|
unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod);
|
||||||
void Usr_FlushCacheNumUsrsInCrssOfCtr (void);
|
void Usr_FlushCacheNumUsrsInCrssOfCtr (void);
|
||||||
unsigned Usr_GetNumUsrsInCrssOfCtr (Rol_Role_t Role,long CtrCod);
|
unsigned Usr_GetNumUsrsInCrssOfCtr (Rol_Role_t Role,long CtrCod);
|
||||||
|
void Usr_FlushCacheNumUsrsInCrssOfIns (void);
|
||||||
unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod);
|
unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod);
|
||||||
unsigned Usr_GetNumUsrsInCrssOfCty (Rol_Role_t Role,long CtyCod);
|
unsigned Usr_GetNumUsrsInCrssOfCty (Rol_Role_t Role,long CtyCod);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user