Version 23.9.1: Sep 19, 2023 Code refactoring in hierarchy and admins.

This commit is contained in:
acanas 2023-09-19 08:56:19 +02:00
parent dcb020c9af
commit 95df356512
33 changed files with 268 additions and 389 deletions

View File

@ -58,62 +58,19 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod, static void Adm_AddAdm (HieLvl_Level_t Level);
const char *InsCtrDegName); static void Adm_RegisterAdmin (struct Usr_Data *UsrDat,HieLvl_Level_t Level);
static void Adm_AddAdm (HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName);
static void Adm_RegisterAdmin (struct Usr_Data *UsrDat,
HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName);
static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr, static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
HieLvl_Level_t Level,long Cod, HieLvl_Level_t Level);
const char *InsCtrDegName); static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level);
static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level, static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat,HieLvl_Level_t Level);
const char *InsCtrDegName);
static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat,
HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName);
/*****************************************************************************/ /*****************************************************************************/
/**** Ask if really wanted to add an administrator to current institution ****/ /**** Ask if really wanted to add an administrator to current institution ****/
/*****************************************************************************/ /*****************************************************************************/
void Adm_ReqAddAdmOfIns (void) void Adm_ReqAddAdm (HieLvl_Level_t Level)
{
Adm_ReqAddAdm (HieLvl_INS,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_INS].FullName);
}
/*****************************************************************************/
/****** Ask if really wanted to add an administrator to current center *******/
/*****************************************************************************/
void Adm_ReqAddAdmOfCtr (void)
{
Adm_ReqAddAdm (HieLvl_CTR,
Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
Gbl.Hierarchy.Node[HieLvl_CTR].FullName);
}
/*****************************************************************************/
/****** Ask if really wanted to add an administrator to current degree *******/
/*****************************************************************************/
void Adm_ReqAddAdmOfDeg (void)
{
Adm_ReqAddAdm (HieLvl_DEG,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
}
/*****************************************************************************/
/**** Ask if really wanted to add an administrator to current institution ****/
/*****************************************************************************/
static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName)
{ {
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X; extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X;
@ -130,7 +87,7 @@ static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod,
}; };
bool ICanRegister; bool ICanRegister;
if (Cod > 0) if (Gbl.Hierarchy.Node[Level].Cod > 0)
{ {
/***** Get user's identificator of the user to register as admin *****/ /***** Get user's identificator of the user to register as admin *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
@ -141,10 +98,11 @@ static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod,
(Level == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)); (Level == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
if (ICanRegister) if (ICanRegister)
{ {
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level,Cod)) // User is already an administrator of current institution/center/degree if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree
{ {
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y, Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y,
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName); Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[Level].FullName);
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
} }
else else
@ -152,7 +110,7 @@ static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod,
/***** Show question and button to register user as administrator *****/ /***** Show question and button to register user as administrator *****/
/* Begin alert */ /* Begin alert */
Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X, Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X,
InsCtrDegName); Gbl.Hierarchy.Node[Level].FullName);
/* Show user's record */ /* Show user's record */
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
@ -177,9 +135,7 @@ static void Adm_ReqAddAdm (HieLvl_Level_t Level,long Cod,
void Adm_AddAdmToIns (void) void Adm_AddAdmToIns (void)
{ {
Adm_AddAdm (HieLvl_INS, Adm_AddAdm (HieLvl_INS);
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_INS].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -188,9 +144,7 @@ void Adm_AddAdmToIns (void)
void Adm_AddAdmToCtr (void) void Adm_AddAdmToCtr (void)
{ {
Adm_AddAdm (HieLvl_CTR, Adm_AddAdm (HieLvl_CTR);
Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
Gbl.Hierarchy.Node[HieLvl_CTR].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -199,9 +153,7 @@ void Adm_AddAdmToCtr (void)
void Adm_AddAdmToDeg (void) void Adm_AddAdmToDeg (void)
{ {
Adm_AddAdm (HieLvl_DEG, Adm_AddAdm (HieLvl_DEG);
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -226,12 +178,11 @@ void Adm_GetAdmsLst (HieLvl_Level_t Level)
/******************* Add an administrator in a given level *******************/ /******************* Add an administrator in a given level *******************/
/*****************************************************************************/ /*****************************************************************************/
static void Adm_AddAdm (HieLvl_Level_t Level,long Cod, static void Adm_AddAdm (HieLvl_Level_t Level)
const char *InsCtrDegName)
{ {
bool ICanRegister; bool ICanRegister;
if (Cod > 0) if (Gbl.Hierarchy.Node[Level].Cod > 0)
{ {
/***** Get plain user's ID of the user to add/modify *****/ /***** Get plain user's ID of the user to add/modify *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
@ -243,8 +194,7 @@ static void Adm_AddAdm (HieLvl_Level_t Level,long Cod,
if (ICanRegister) if (ICanRegister)
{ {
/***** Register administrator in current institution/center/degree in database *****/ /***** Register administrator in current institution/center/degree in database *****/
Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level, Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level);
Cod,InsCtrDegName);
/***** Show user's record *****/ /***** Show user's record *****/
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
@ -261,24 +211,22 @@ static void Adm_AddAdm (HieLvl_Level_t Level,long Cod,
/**************** Register administrator in current institution **************/ /**************** Register administrator in current institution **************/
/*****************************************************************************/ /*****************************************************************************/
static void Adm_RegisterAdmin (struct Usr_Data *UsrDat, static void Adm_RegisterAdmin (struct Usr_Data *UsrDat,HieLvl_Level_t Level)
HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName)
{ {
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
extern const char *Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y; extern const char *Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y;
/***** Check if user was and administrator of current institution/center/degree *****/ /***** Check if user was and administrator of current institution/center/degree *****/
if (Adm_DB_CheckIfUsrIsAdm (UsrDat->UsrCod,Level,Cod)) if (Adm_DB_CheckIfUsrIsAdm (UsrDat->UsrCod,Level))
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_is_already_an_administrator_of_Y, Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_is_already_an_administrator_of_Y,
UsrDat->FullName,InsCtrDegName); UsrDat->FullName,Gbl.Hierarchy.Node[Level].FullName);
else // User was not administrator of current institution/center/degree else // User was not administrator of current institution/center/degree
{ {
/***** Insert or replace administrator in current institution/center/degree *****/ /***** Insert or replace administrator in current institution/center/degree *****/
Adm_DB_InsertAdmin (UsrDat->UsrCod,Level,Cod); Adm_DB_InsertAdmin (UsrDat->UsrCod,Level);
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y, Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y,
UsrDat->FullName,InsCtrDegName); UsrDat->FullName,Gbl.Hierarchy.Node[Level].FullName);
} }
} }
@ -288,9 +236,7 @@ static void Adm_RegisterAdmin (struct Usr_Data *UsrDat,
void Adm_ReqRemAdmOfIns (void) void Adm_ReqRemAdmOfIns (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_INS, Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_INS);
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_INS].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -299,9 +245,7 @@ void Adm_ReqRemAdmOfIns (void)
void Adm_ReqRemAdmOfCtr (void) void Adm_ReqRemAdmOfCtr (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_CTR, Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_CTR);
Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
Gbl.Hierarchy.Node[HieLvl_CTR].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -310,9 +254,7 @@ void Adm_ReqRemAdmOfCtr (void)
void Adm_ReqRemAdmOfDeg (void) void Adm_ReqRemAdmOfDeg (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_DEG, Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_DEG);
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -321,9 +263,7 @@ void Adm_ReqRemAdmOfDeg (void)
void Adm_RemAdmIns (void) void Adm_RemAdmIns (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_INS, Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_INS);
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_INS].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -332,9 +272,7 @@ void Adm_RemAdmIns (void)
void Adm_RemAdmCtr (void) void Adm_RemAdmCtr (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_CTR, Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_CTR);
Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
Gbl.Hierarchy.Node[HieLvl_CTR].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -343,9 +281,7 @@ void Adm_RemAdmCtr (void)
void Adm_RemAdmDeg (void) void Adm_RemAdmDeg (void)
{ {
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_DEG, Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_DEG);
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -353,14 +289,13 @@ void Adm_RemAdmDeg (void)
/*****************************************************************************/ /*****************************************************************************/
static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr, static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
HieLvl_Level_t Level,long Cod, HieLvl_Level_t Level)
const char *InsCtrDegName)
{ {
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
bool ICanRemove; bool ICanRemove;
if (Cod > 0) if (Gbl.Hierarchy.Node[Level].Cod > 0)
{ {
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
@ -374,22 +309,22 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
if (ICanRemove) if (ICanRemove)
{ {
/* Check if the other user is an admin of the current institution/center/degree */ /* Check if the other user is an admin of the current institution/center/degree */
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level,Cod)) if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level))
{ // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him { // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him
switch (ReqDelOrDelUsr) switch (ReqDelOrDelUsr)
{ {
case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution
Adm_AskIfRemAdm (MeOrOther,Level,InsCtrDegName); Adm_AskIfRemAdm (MeOrOther,Level);
break; break;
case Enr_REMOVE_USR: // Remove administrator from current institution case Enr_REMOVE_USR: // Remove administrator from current institution
Adm_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Level, Adm_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Level);
Cod,InsCtrDegName);
break; break;
} }
} }
else // The other user is not an administrator of current institution else // The other user is not an administrator of current institution
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y, Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y,
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName); Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[Level].FullName);
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -403,8 +338,7 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
/** Ask if really wanted to remove an administrator from current institution */ /** Ask if really wanted to remove an administrator from current institution */
/*****************************************************************************/ /*****************************************************************************/
static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level, static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level)
const char *InsCtrDegName)
{ {
extern const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X; extern const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X;
extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X; extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X;
@ -435,7 +369,8 @@ static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level,
{ {
/***** Show question and button to remove user as administrator *****/ /***** Show question and button to remove user as administrator *****/
/* Begin alert */ /* Begin alert */
Ale_ShowAlertAndButton1 (Ale_QUESTION,Question[MeOrOther],InsCtrDegName); Ale_ShowAlertAndButton1 (Ale_QUESTION,Question[MeOrOther],
Gbl.Hierarchy.Node[Level].FullName);
/* Show user's record */ /* Show user's record */
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
@ -453,22 +388,20 @@ static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,HieLvl_Level_t Level,
/**** Remove an administrator from current institution, center or degree *****/ /**** Remove an administrator from current institution, center or degree *****/
/*****************************************************************************/ /*****************************************************************************/
static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat, static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat,HieLvl_Level_t Level)
HieLvl_Level_t Level,long Cod,
const char *InsCtrDegName)
{ {
extern const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_Y; extern const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_Y;
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
if (Adm_DB_CheckIfUsrIsAdm (UsrDat->UsrCod,Level,Cod)) // User is administrator of current institution/center/degree if (Adm_DB_CheckIfUsrIsAdm (UsrDat->UsrCod,Level)) // User is administrator of current institution/center/degree
{ {
/***** Remove user as administrator of institution, center or degree *****/ /***** Remove user as administrator of institution, center or degree *****/
Adm_DB_RemAdmin (UsrDat->UsrCod,Level,Cod); Adm_DB_RemAdmin (UsrDat->UsrCod,Level);
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator_of_Y, Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator_of_Y,
UsrDat->FullName,InsCtrDegName); UsrDat->FullName,Gbl.Hierarchy.Node[Level].FullName);
} }
else // User is not an administrator of the current institution/center/degree else // User is not an administrator of the current institution/center/degree
Ale_ShowAlert (Ale_ERROR,Txt_THE_USER_X_is_not_an_administrator_of_Y, Ale_ShowAlert (Ale_ERROR,Txt_THE_USER_X_is_not_an_administrator_of_Y,
UsrDat->FullName,InsCtrDegName); UsrDat->FullName,Gbl.Hierarchy.Node[Level].FullName);
} }

View File

@ -35,9 +35,7 @@
/****************************** Public prototypes ****************************/ /****************************** Public prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
void Adm_ReqAddAdmOfIns (void); void Adm_ReqAddAdm (HieLvl_Level_t Level);
void Adm_ReqAddAdmOfCtr (void);
void Adm_ReqAddAdmOfDeg (void);
void Adm_AddAdmToIns (void); void Adm_AddAdmToIns (void);
void Adm_AddAdmToCtr (void); void Adm_AddAdmToCtr (void);

View File

@ -41,7 +41,7 @@ extern struct Globals Gbl;
/** Insert/replace user as administrator of an institution, center or degree */ /** Insert/replace user as administrator of an institution, center or degree */
/*****************************************************************************/ /*****************************************************************************/
void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Level,long Cod) void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Level)
{ {
DB_QueryREPLACE ("can not create administrator", DB_QueryREPLACE ("can not create administrator",
"REPLACE INTO usr_admins" "REPLACE INTO usr_admins"
@ -50,7 +50,7 @@ void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Level,long Cod)
" (%ld,'%s',%ld)", " (%ld,'%s',%ld)",
UsrCod, UsrCod,
Hie_GetDBStrFromLevel (Level), Hie_GetDBStrFromLevel (Level),
Cod); Gbl.Hierarchy.Node[Level].Cod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -79,7 +79,7 @@ unsigned Adm_DB_GetAdmsCurrentScopeExceptMe (MYSQL_RES **mysql_res)
/***** Check if a user is an administrator of a degree/center/institution ****/ /***** Check if a user is an administrator of a degree/center/institution ****/
/*****************************************************************************/ /*****************************************************************************/
bool Adm_DB_CheckIfUsrIsAdm (long UsrCod,HieLvl_Level_t Level,long Cod) bool Adm_DB_CheckIfUsrIsAdm (long UsrCod,HieLvl_Level_t Level)
{ {
return return
DB_QueryEXISTS ("can not check if a user is administrator", DB_QueryEXISTS ("can not check if a user is administrator",
@ -91,7 +91,7 @@ bool Adm_DB_CheckIfUsrIsAdm (long UsrCod,HieLvl_Level_t Level,long Cod)
" AND Cod=%ld)", " AND Cod=%ld)",
UsrCod, UsrCod,
Hie_GetDBStrFromLevel (Level), Hie_GetDBStrFromLevel (Level),
Cod); Gbl.Hierarchy.Node[Level].Cod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -115,7 +115,7 @@ bool Adm_DB_CheckIfUsrIsSuperuser (long UsrCod)
/***** Remove user as administrator of an institution, center or degree ******/ /***** Remove user as administrator of an institution, center or degree ******/
/*****************************************************************************/ /*****************************************************************************/
void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Level,long Cod) void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Level)
{ {
DB_QueryDELETE ("can not remove an administrator", DB_QueryDELETE ("can not remove an administrator",
"DELETE FROM usr_admins" "DELETE FROM usr_admins"
@ -124,7 +124,7 @@ void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Level,long Cod)
" AND Cod=%ld", " AND Cod=%ld",
UsrCod, UsrCod,
Hie_GetDBStrFromLevel (Level), Hie_GetDBStrFromLevel (Level),
Cod); Gbl.Hierarchy.Node[Level].Cod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -143,12 +143,12 @@ void Adm_DB_RemUsrAsAdmin (long UsrCod)
/********* Remove administrators of an institution, center or degree *********/ /********* Remove administrators of an institution, center or degree *********/
/*****************************************************************************/ /*****************************************************************************/
void Adm_DB_RemAdmins (HieLvl_Level_t Level,long Cod) void Adm_DB_RemAdmins (HieLvl_Level_t Level)
{ {
DB_QueryDELETE ("can not remove administrators", DB_QueryDELETE ("can not remove administrators",
"DELETE FROM usr_admins" "DELETE FROM usr_admins"
" WHERE Scope='%s'" " WHERE Scope='%s'"
" AND Cod=%ld", " AND Cod=%ld",
Hie_GetDBStrFromLevel (Level), Hie_GetDBStrFromLevel (Level),
Cod); Gbl.Hierarchy.Node[Level].Cod);
} }

View File

@ -33,14 +33,14 @@
/****************************** Public prototypes ****************************/ /****************************** Public prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Level,long Cod); void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Level);
unsigned Adm_DB_GetAdmsCurrentScopeExceptMe (MYSQL_RES **mysql_res); unsigned Adm_DB_GetAdmsCurrentScopeExceptMe (MYSQL_RES **mysql_res);
bool Adm_DB_CheckIfUsrIsAdm (long UsrCod,HieLvl_Level_t Level,long Cod); bool Adm_DB_CheckIfUsrIsAdm (long UsrCod,HieLvl_Level_t Level);
bool Adm_DB_CheckIfUsrIsSuperuser (long UsrCod); bool Adm_DB_CheckIfUsrIsSuperuser (long UsrCod);
void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Level,long Cod); void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Level);
void Adm_DB_RemUsrAsAdmin (long UsrCod); void Adm_DB_RemUsrAsAdmin (long UsrCod);
void Adm_DB_RemAdmins (HieLvl_Level_t Level,long Cod); void Adm_DB_RemAdmins (HieLvl_Level_t Level);
#endif #endif

View File

@ -632,10 +632,12 @@ 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í? 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') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.8 (2023-09-18)" #define Log_PLATFORM_VERSION "SWAD 23.9.1 (2023-09-19)"
#define CSS_FILE "swad22.120.4.css" #define CSS_FILE "swad22.120.4.css"
#define JS_FILE "swad22.49.js" #define JS_FILE "swad22.49.js"
/* /*
Version 23.9.1: Sep 19, 2023 Code refactoring in hierarchy and admins. (337521 lines)
Version 23.9: Sep 19, 2023 Code refactoring in hierarchy. (337589 lines)
Version 23.8: Sep 18, 2023 Code refactoring in hierarchy. (337625 lines) Version 23.8: Sep 18, 2023 Code refactoring in hierarchy. (337625 lines)
Version 23.7: Sep 18, 2023 Code refactoring in hierarchy. (337610 lines) Version 23.7: Sep 18, 2023 Code refactoring in hierarchy. (337610 lines)
Version 23.6.1: Sep 18, 2023 Code refactoring in hierarchy. (337727 lines) Version 23.6.1: Sep 18, 2023 Code refactoring in hierarchy. (337727 lines)

View File

@ -1043,7 +1043,8 @@ static void Crs_EditCoursesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName) < 0) if (asprintf (&Title,Txt_Courses_of_DEGREE_X,
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Box_BoxBegin (NULL,Title,Crs_PutIconsEditingCourses,NULL, Box_BoxBegin (NULL,Title,Crs_PutIconsEditingCourses,NULL,
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);

View File

@ -264,7 +264,9 @@ static void CrsCfg_Degree (bool PrintView,bool PutForm)
"class=\"LT BT_LINK\""); "class=\"LT BT_LINK\"");
Str_FreeGoToTitle (); Str_FreeGoToTitle ();
} }
Lgo_DrawLogo (HieLvl_DEG,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName, Lgo_DrawLogo (HieLvl_DEG,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName,
20,"LM"); 20,"LM");
HTM_NBSP (); HTM_NBSP ();
HTM_Txt (Gbl.Hierarchy.Node[HieLvl_DEG].FullName); HTM_Txt (Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
@ -297,7 +299,8 @@ static void CrsCfg_FullName (bool PutForm)
static void CrsCfg_ShrtName (bool PutForm) static void CrsCfg_ShrtName (bool PutForm)
{ {
HieCfg_ShrtName (PutForm,ActRenCrsShoCfg,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName); HieCfg_ShrtName (PutForm,ActRenCrsShoCfg,
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -715,7 +715,8 @@ static void Deg_ListDegrees (void)
unsigned NumDeg; unsigned NumDeg;
/***** Begin box *****/ /***** Begin box *****/
if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0) if (asprintf (&Title,Txt_Degrees_of_CENTER_X,
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Box_BoxBegin (NULL,Title,Deg_PutIconsListingDegrees,NULL, Box_BoxBegin (NULL,Title,Deg_PutIconsListingDegrees,NULL,
Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); Hlp_CENTER_Degrees,Box_NOT_CLOSABLE);
@ -892,7 +893,8 @@ static void Deg_EditDegreesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0) if (asprintf (&Title,Txt_Degrees_of_CENTER_X,
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Box_BoxBegin (NULL,Title,Deg_PutIconsEditingDegrees,NULL, Box_BoxBegin (NULL,Title,Deg_PutIconsEditingDegrees,NULL,
Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); Hlp_CENTER_Degrees,Box_NOT_CLOSABLE);

View File

@ -259,7 +259,9 @@ static void DegCfg_Center (bool PrintView,bool PutForm)
"class=\"LB BT_LINK\""); "class=\"LB BT_LINK\"");
Str_FreeGoToTitle (); Str_FreeGoToTitle ();
} }
Lgo_DrawLogo (HieLvl_CTR,Gbl.Hierarchy.Node[HieLvl_CTR].Cod,Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName, Lgo_DrawLogo (HieLvl_CTR,
Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName,
20,"LM"); 20,"LM");
HTM_NBSP (); HTM_NBSP ();
HTM_Txt (Gbl.Hierarchy.Node[HieLvl_CTR].FullName); HTM_Txt (Gbl.Hierarchy.Node[HieLvl_CTR].FullName);
@ -292,7 +294,8 @@ static void DegCfg_FullName (bool PutForm)
static void DegCfg_ShrtName (bool PutForm) static void DegCfg_ShrtName (bool PutForm)
{ {
HieCfg_ShrtName (PutForm,ActRenDegShoCfg,Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName); HieCfg_ShrtName (PutForm,ActRenDegShoCfg,
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -343,7 +346,8 @@ static void DegCfg_NumCrss (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
Frm_BeginFormGoTo (ActSeeCrs); Frm_BeginFormGoTo (ActSeeCrs);
ParCod_PutPar (ParCod_Deg,Gbl.Hierarchy.Node[HieLvl_DEG].Cod); ParCod_PutPar (ParCod_Deg,Gbl.Hierarchy.Node[HieLvl_DEG].Cod);
if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName) < 0) if (asprintf (&Title,Txt_Courses_of_DEGREE_X,
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\""); HTM_BUTTON_Submit_Begin (Title,"class=\"LB BT_LINK\"");
free (Title); free (Title);
@ -435,7 +439,8 @@ void DegCfg_ChangeDegWWW (void)
{ {
/***** Update the table changing old WWW by new WWW *****/ /***** Update the table changing old WWW by new WWW *****/
Deg_DB_UpdateDegWWW (Gbl.Hierarchy.Node[HieLvl_DEG].Cod,NewWWW); Deg_DB_UpdateDegWWW (Gbl.Hierarchy.Node[HieLvl_DEG].Cod,NewWWW);
Str_Copy (Gbl.Hierarchy.Node[HieLvl_DEG].WWW,NewWWW,sizeof (Gbl.Hierarchy.Node[HieLvl_DEG].WWW) - 1); Str_Copy (Gbl.Hierarchy.Node[HieLvl_DEG].WWW,NewWWW,
sizeof (Gbl.Hierarchy.Node[HieLvl_DEG].WWW) - 1);
/***** Write message to show the change made *****/ /***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_web_address_is_X, Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_web_address_is_X,

View File

@ -1325,21 +1325,18 @@ bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
{ {
/***** Check if the other user is administrator of the current institution *****/ /***** Check if the other user is administrator of the current institution *****/
UsrIsInsAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod, UsrIsInsAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,
HieLvl_INS, HieLvl_INS);
Gbl.Hierarchy.Node[HieLvl_INS].Cod);
if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0) if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0)
{ {
/***** Check if the other user is administrator of the current center *****/ /***** Check if the other user is administrator of the current center *****/
UsrIsCtrAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod, UsrIsCtrAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,
HieLvl_CTR, HieLvl_CTR);
Gbl.Hierarchy.Node[HieLvl_CTR].Cod);
if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0)
/***** Check if the other user is administrator of the current degree *****/ /***** Check if the other user is administrator of the current degree *****/
UsrIsDegAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod, UsrIsDegAdmin = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,
HieLvl_DEG, HieLvl_DEG);
Gbl.Hierarchy.Node[HieLvl_DEG].Cod);
} }
} }
@ -1471,7 +1468,7 @@ static void Enr_PutActionRegOneDegAdm (bool *OptionChecked)
{ {
extern const char *Txt_Register_USER_as_an_administrator_of_the_degree_X; extern const char *Txt_Register_USER_as_an_administrator_of_the_degree_X;
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_DEGREE_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_DEG_ADMIN,OptionChecked);
HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_degree_X, HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_degree_X,
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName); Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
@ -1485,7 +1482,7 @@ static void Enr_PutActionRegOneCtrAdm (bool *OptionChecked)
{ {
extern const char *Txt_Register_USER_as_an_administrator_of_the_center_X; extern const char *Txt_Register_USER_as_an_administrator_of_the_center_X;
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_CENTER_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_CTR_ADMIN,OptionChecked);
HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_center_X, HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_center_X,
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName); Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
@ -1499,7 +1496,7 @@ static void Enr_PutActionRegOneInsAdm (bool *OptionChecked)
{ {
extern const char *Txt_Register_USER_as_an_administrator_of_the_institution_X; extern const char *Txt_Register_USER_as_an_administrator_of_the_institution_X;
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_INSTITUTION_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REGISTER_ONE_INS_ADMIN,OptionChecked);
HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_institution_X, HTM_TxtF (Txt_Register_USER_as_an_administrator_of_the_institution_X,
Gbl.Hierarchy.Node[HieLvl_INS].ShrtName); Gbl.Hierarchy.Node[HieLvl_INS].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
@ -1551,7 +1548,7 @@ static void Enr_PutActionRemUsrAsDegAdm (bool *OptionChecked,Usr_MeOrOther_t MeO
[Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_degree_X, [Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_degree_X,
}; };
Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_DEGREE_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_DEG_ADMIN,OptionChecked);
HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName); HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
} }
@ -1570,7 +1567,7 @@ static void Enr_PutActionRemUsrAsCtrAdm (bool *OptionChecked,Usr_MeOrOther_t MeO
[Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_center_X, [Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_center_X,
}; };
Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_CENTER_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_CTR_ADMIN,OptionChecked);
HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName); HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
} }
@ -1589,7 +1586,7 @@ static void Enr_PutActionRemUsrAsInsAdm (bool *OptionChecked,Usr_MeOrOther_t MeO
[Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_institution_X, [Usr_OTHER] = Txt_Remove_USER_as_an_administrator_of_the_institution_X,
}; };
Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_INSTITUTION_ADMIN,OptionChecked); Enr_RegRemOneUsrActionBegin (Enr_REMOVE_ONE_INS_ADMIN,OptionChecked);
HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_INS].ShrtName); HTM_TxtF (Txt[MeOrOther],Gbl.Hierarchy.Node[HieLvl_INS].ShrtName);
Enr_RegRemOneUsrActionEnd (); Enr_RegRemOneUsrActionEnd ();
} }
@ -2019,7 +2016,8 @@ void Enr_RejectSignUp (void)
{ {
/* User already belongs to this course */ /* User already belongs to this course */
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y, Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
Gbl.Usrs.Other.UsrDat.FullName,Gbl.Hierarchy.Node[HieLvl_CRS].FullName); Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
} }
@ -2623,10 +2621,12 @@ static void Enr_ShowFormToEditOtherUsr (void)
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
if (Gbl.Usrs.Other.UsrDat.Accepted) if (Gbl.Usrs.Other.UsrDat.Accepted)
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_enroled_in_the_course_Y, Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
Gbl.Usrs.Other.UsrDat.FullName,Gbl.Hierarchy.Node[HieLvl_CRS].FullName); Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
else // Enrolment not yet accepted else // Enrolment not yet accepted
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_in_the_course_Y_but_has_not_yet_accepted_the_enrolment, Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_in_the_course_Y_but_has_not_yet_accepted_the_enrolment,
Gbl.Usrs.Other.UsrDat.FullName,Gbl.Hierarchy.Node[HieLvl_CRS].FullName); Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
Rec_ShowOtherSharedRecordEditable (); Rec_ShowOtherSharedRecordEditable ();
} }
@ -2634,7 +2634,8 @@ static void Enr_ShowFormToEditOtherUsr (void)
{ {
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_exists_in_Y_but_is_not_enroled_in_the_course_Z, Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_exists_in_Y_but_is_not_enroled_in_the_course_Z,
Gbl.Usrs.Other.UsrDat.FullName, Gbl.Usrs.Other.UsrDat.FullName,
Cfg_PLATFORM_SHORT_NAME,Gbl.Hierarchy.Node[HieLvl_CRS].FullName); Cfg_PLATFORM_SHORT_NAME,
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
Rec_ShowOtherSharedRecordEditable (); Rec_ShowOtherSharedRecordEditable ();
} }
@ -2969,15 +2970,15 @@ void Enr_ModifyUsr1 (void)
else else
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REGISTER_ONE_DEGREE_ADMIN: case Enr_REGISTER_ONE_DEG_ADMIN:
if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REGISTER_ONE_CENTER_ADMIN: case Enr_REGISTER_ONE_CTR_ADMIN:
if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REGISTER_ONE_INSTITUTION_ADMIN: case Enr_REGISTER_ONE_INS_ADMIN:
if (Gbl.Usrs.Me.Role.Logged != Rol_SYS_ADM) if (Gbl.Usrs.Me.Role.Logged != Rol_SYS_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
@ -2989,15 +2990,15 @@ void Enr_ModifyUsr1 (void)
if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_TCH) if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_TCH)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REMOVE_ONE_DEGREE_ADMIN: case Enr_REMOVE_ONE_DEG_ADMIN:
if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM) if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REMOVE_ONE_CENTER_ADMIN: case Enr_REMOVE_ONE_CTR_ADMIN:
if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM) if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_REMOVE_ONE_INSTITUTION_ADMIN: case Enr_REMOVE_ONE_INS_ADMIN:
if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged != Rol_SYS_ADM) if (MeOrOther == Usr_OTHER && Gbl.Usrs.Me.Role.Logged != Rol_SYS_ADM)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
@ -3034,14 +3035,14 @@ void Enr_ModifyUsr2 (void)
/***** Show form to edit user again *****/ /***** Show form to edit user again *****/
Enr_ShowFormToEditOtherUsr (); Enr_ShowFormToEditOtherUsr ();
break; break;
case Enr_REGISTER_ONE_DEGREE_ADMIN: case Enr_REGISTER_ONE_DEG_ADMIN:
Adm_ReqAddAdmOfDeg (); Adm_ReqAddAdm (HieLvl_DEG);
break; break;
case Enr_REGISTER_ONE_CENTER_ADMIN: case Enr_REGISTER_ONE_CTR_ADMIN:
Adm_ReqAddAdmOfCtr (); Adm_ReqAddAdm (HieLvl_CTR);
break; break;
case Enr_REGISTER_ONE_INSTITUTION_ADMIN: case Enr_REGISTER_ONE_INS_ADMIN:
Adm_ReqAddAdmOfIns (); Adm_ReqAddAdm (HieLvl_INS);
break; break;
case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE: case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE:
Dup_ReportUsrAsPossibleDuplicate (); Dup_ReportUsrAsPossibleDuplicate ();
@ -3049,13 +3050,13 @@ void Enr_ModifyUsr2 (void)
case Enr_REMOVE_ONE_USR_FROM_CRS: case Enr_REMOVE_ONE_USR_FROM_CRS:
Enr_ReqRemUsrFromCrs (); Enr_ReqRemUsrFromCrs ();
break; break;
case Enr_REMOVE_ONE_DEGREE_ADMIN: case Enr_REMOVE_ONE_DEG_ADMIN:
Adm_ReqRemAdmOfDeg (); Adm_ReqRemAdmOfDeg ();
break; break;
case Enr_REMOVE_ONE_CENTER_ADMIN: case Enr_REMOVE_ONE_CTR_ADMIN:
Adm_ReqRemAdmOfCtr (); Adm_ReqRemAdmOfCtr ();
break; break;
case Enr_REMOVE_ONE_INSTITUTION_ADMIN: case Enr_REMOVE_ONE_INS_ADMIN:
Adm_ReqRemAdmOfIns (); Adm_ReqRemAdmOfIns ();
break; break;
case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM:
@ -3100,7 +3101,8 @@ static void Enr_AskIfRemoveUsrFromCrs (struct Usr_Data *UsrDat)
/***** Show question and button to remove user as administrator *****/ /***** Show question and button to remove user as administrator *****/
/* Begin alert */ /* Begin alert */
Ale_ShowAlertAndButton1 (Ale_QUESTION,Question[MeOrOther],Gbl.Hierarchy.Node[HieLvl_CRS].FullName); Ale_ShowAlertAndButton1 (Ale_QUESTION,Question[MeOrOther],
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
/* Show user's record */ /* Show user's record */
Rec_ShowSharedRecordUnmodifiable (UsrDat); Rec_ShowSharedRecordUnmodifiable (UsrDat);

View File

@ -52,14 +52,14 @@ typedef enum
{ {
Enr_REG_REM_ONE_USR_UNKNOWN_ACTION = 0, Enr_REG_REM_ONE_USR_UNKNOWN_ACTION = 0,
Enr_REGISTER_MODIFY_ONE_USR_IN_CRS = 1, Enr_REGISTER_MODIFY_ONE_USR_IN_CRS = 1,
Enr_REGISTER_ONE_DEGREE_ADMIN = 2, Enr_REGISTER_ONE_DEG_ADMIN = 2,
Enr_REGISTER_ONE_CENTER_ADMIN = 3, Enr_REGISTER_ONE_CTR_ADMIN = 3,
Enr_REGISTER_ONE_INSTITUTION_ADMIN = 4, Enr_REGISTER_ONE_INS_ADMIN = 4,
Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE = 5, Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE = 5,
Enr_REMOVE_ONE_USR_FROM_CRS = 6, Enr_REMOVE_ONE_USR_FROM_CRS = 6,
Enr_REMOVE_ONE_DEGREE_ADMIN = 7, Enr_REMOVE_ONE_DEG_ADMIN = 7,
Enr_REMOVE_ONE_CENTER_ADMIN = 8, Enr_REMOVE_ONE_CTR_ADMIN = 8,
Enr_REMOVE_ONE_INSTITUTION_ADMIN = 9, Enr_REMOVE_ONE_INS_ADMIN = 9,
Enr_ELIMINATE_ONE_USR_FROM_PLATFORM = 10, Enr_ELIMINATE_ONE_USR_FROM_PLATFORM = 10,
} Enr_RegRemOneUsrAction_t; } Enr_RegRemOneUsrAction_t;

View File

@ -603,7 +603,8 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
} }
} }
else else
HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName); HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
HTM_DIV_End (); HTM_DIV_End ();
@ -1037,7 +1038,8 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
"SesCod", "SesCod",
SesCod) ? "" : SesCod) ? "" :
" checked=\"checked\""); " checked=\"checked\"");
HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName); HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();

View File

@ -172,9 +172,18 @@ void Frm_BeginFormNoAction (void)
} }
} }
void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],Act_Action_t NextAction, void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],
Act_Action_t NextAction,
bool PutParLocationIfNoSession) bool PutParLocationIfNoSession)
{ {
static const char *ParName[HieLvl_NUM_LEVELS] =
{
[HieLvl_CTY] = "cty",
[HieLvl_INS] = "ins",
[HieLvl_CTR] = "ctr",
[HieLvl_DEG] = "deg",
[HieLvl_CRS] = "crs",
};
char ParAction[Frm_MAX_BYTES_PARAM_ACTION + 1]; char ParAction[Frm_MAX_BYTES_PARAM_ACTION + 1];
char ParSession[Frm_MAX_BYTES_PARAM_SESSION + 1]; char ParSession[Frm_MAX_BYTES_PARAM_SESSION + 1];
char ParLocation[Frm_MAX_BYTES_PARAM_LOCATION + 1]; char ParLocation[Frm_MAX_BYTES_PARAM_LOCATION + 1];
@ -193,43 +202,15 @@ void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],Act_Action_t Ne
snprintf (ParSession,sizeof (ParSession), snprintf (ParSession,sizeof (ParSession),
"<input type=\"hidden\" name=\"ses\" value=\"%s\" />", "<input type=\"hidden\" name=\"ses\" value=\"%s\" />",
Gbl.Session.Id); Gbl.Session.Id);
else if (PutParLocationIfNoSession) else if (PutParLocationIfNoSession && Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].Cod > 0)
// Extra parameters necessary when there's no open session // Extra parameters necessary when there's no open session
{ /* If session is open, course/degree/... code will be get from session data,
/* If session is open, course code will be get from session data,
but if there is not an open session, and next action is known, but if there is not an open session, and next action is known,
it is necessary to send a parameter with course code */ it is necessary to send a parameter with course/degree/... code */
switch (Gbl.Hierarchy.Level)
{
case HieLvl_CTY: // Country
snprintf (ParLocation,sizeof (ParLocation), snprintf (ParLocation,sizeof (ParLocation),
"<input type=\"hidden\" name=\"cty\" value=\"%ld\" />", "<input type=\"hidden\" name=\"%s\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_CTY].Cod); ParName[Gbl.Hierarchy.Level],
break; Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].Cod);
case HieLvl_INS: // Institution
snprintf (ParLocation,sizeof (ParLocation),
"<input type=\"hidden\" name=\"ins\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_INS].Cod);
break;
case HieLvl_CTR: // Center
snprintf (ParLocation,sizeof (ParLocation),
"<input type=\"hidden\" name=\"ctr\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_CTR].Cod);
break;
case HieLvl_DEG: // Degree
snprintf (ParLocation,sizeof (ParLocation),
"<input type=\"hidden\" name=\"deg\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_DEG].Cod);
break;
case HieLvl_CRS: // Course
snprintf (ParLocation,sizeof (ParLocation),
"<input type=\"hidden\" name=\"crs\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
break;
default:
break;
}
}
} }
snprintf (ParsStr,Frm_MAX_BYTES_PARAMS_STR + 1,"%s%s%s", snprintf (ParsStr,Frm_MAX_BYTES_PARAMS_STR + 1,"%s%s%s",

View File

@ -62,7 +62,8 @@ void Frm_BeginFormAnchorOnSubmit (Act_Action_t NextAction,const char *Anchor,con
void Frm_BeginFormId (Act_Action_t NextAction,const char *Id); void Frm_BeginFormId (Act_Action_t NextAction,const char *Id);
void Frm_BeginFormAnchor (Act_Action_t NextAction,const char *Anchor); void Frm_BeginFormAnchor (Act_Action_t NextAction,const char *Anchor);
void Frm_BeginFormNoAction (void); void Frm_BeginFormNoAction (void);
void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],Act_Action_t NextAction, void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],
Act_Action_t NextAction,
bool PutParLocationIfNoSession); bool PutParLocationIfNoSession);
void Frm_EndForm (void); void Frm_EndForm (void);

View File

@ -2455,39 +2455,34 @@ void For_ShowThreadPosts (void)
void For_GetParsForums (struct For_Forums *Forums) void For_GetParsForums (struct For_Forums *Forums)
{ {
static HieLvl_Level_t Level[For_NUM_TYPES_FORUM] =
{
[For_FORUM_COURSE_USRS] = HieLvl_CRS,
[For_FORUM_COURSE_TCHS] = HieLvl_CRS,
[For_FORUM_DEGREE_USRS] = HieLvl_DEG,
[For_FORUM_DEGREE_TCHS] = HieLvl_DEG,
[For_FORUM_CENTER_USRS] = HieLvl_CTR,
[For_FORUM_CENTER_TCHS] = HieLvl_CTR,
[For_FORUM_INSTIT_USRS] = HieLvl_INS,
[For_FORUM_INSTIT_TCHS] = HieLvl_INS,
[For_FORUM_GLOBAL_USRS] = HieLvl_SYS,
[For_FORUM_GLOBAL_TCHS] = HieLvl_SYS,
[For_FORUM__SWAD__USRS] = HieLvl_SYS,
[For_FORUM__SWAD__TCHS] = HieLvl_SYS,
[For_FORUM_UNKNOWN ] = HieLvl_SYS,
};
/***** Set forum type *****/ /***** Set forum type *****/
For_SetForumType (Forums); For_SetForumType (Forums);
/***** Get parameter with code of institution, center, degree or course *****/ /***** Get parameter with code of institution, center, degree or course *****/
switch (Forums->Forum.Type) if (Level[Forums->Forum.Type] == HieLvl_SYS)
Forums->Forum.HieCod = -1L;
else
{ {
case For_FORUM_INSTIT_USRS:
case For_FORUM_INSTIT_TCHS:
if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0) if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0)
// If no institution specified ==> go to current institution forum // If no institution specified ==> go to current institution forum
Forums->Forum.HieCod = Gbl.Hierarchy.Node[HieLvl_INS].Cod; Forums->Forum.HieCod = Gbl.Hierarchy.Node[Level[Forums->Forum.Type]].Cod;
break;
case For_FORUM_CENTER_USRS:
case For_FORUM_CENTER_TCHS:
if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0)
// If no center specified ==> go to current center forum
Forums->Forum.HieCod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
break;
case For_FORUM_DEGREE_USRS:
case For_FORUM_DEGREE_TCHS:
if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0)
// If no degree specified ==> go to current degree forum
Forums->Forum.HieCod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
break;
case For_FORUM_COURSE_USRS:
case For_FORUM_COURSE_TCHS:
if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0)
// If no course specified ==> go to current course forum
Forums->Forum.HieCod = Gbl.Hierarchy.Node[HieLvl_CRS].Cod;
break;
default:
Forums->Forum.HieCod = -1L;
break;
} }
/***** Get which forums I want to see *****/ /***** Get which forums I want to see *****/

View File

@ -164,34 +164,6 @@ void Gbl_InitializeGlobals (void)
/***** Reset current hierarchy *****/ /***** Reset current hierarchy *****/
Hie_ResetHierarchy (); Hie_ResetHierarchy ();
Gbl.Hierarchy.List[HieLvl_SYS].Num = 0;
Gbl.Hierarchy.List[HieLvl_SYS].Lst = NULL;
Gbl.Hierarchy.List[HieLvl_SYS].SelectedOrder = Hie_ORDER_DEFAULT;
Gbl.Hierarchy.List[HieLvl_CTY].Num = 0;
Gbl.Hierarchy.List[HieLvl_CTY].Lst = NULL;
Gbl.Hierarchy.List[HieLvl_CTY].SelectedOrder = Hie_ORDER_DEFAULT;
Gbl.Hierarchy.Node[HieLvl_INS].ShrtName[0] = '\0';
Gbl.Hierarchy.Node[HieLvl_INS].FullName[0] = '\0';
Gbl.Hierarchy.Node[HieLvl_INS].WWW[0] = '\0';
Gbl.Hierarchy.List[HieLvl_INS].Num = 0;
Gbl.Hierarchy.List[HieLvl_INS].Lst = NULL;
Gbl.Hierarchy.List[HieLvl_INS].SelectedOrder = Hie_ORDER_DEFAULT;
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName[0] = '\0';
Gbl.Hierarchy.Node[HieLvl_CTR].FullName[0] = '\0';
Gbl.Hierarchy.List[HieLvl_CTR].Num = 0;
Gbl.Hierarchy.List[HieLvl_CTR].Lst = NULL;
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName[0] =
Gbl.Hierarchy.Node[HieLvl_DEG].FullName[0] = '\0';
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName[0] =
Gbl.Hierarchy.Node[HieLvl_CRS].FullName[0] = '\0';
Gbl.Crs.Info.ShowMsgMustBeRead = 0; Gbl.Crs.Info.ShowMsgMustBeRead = 0;
Gbl.Crs.Notices.HighlightNotCod = -1L; // No notice highlighted Gbl.Crs.Notices.HighlightNotCod = -1L; // No notice highlighted

View File

@ -522,27 +522,8 @@ void Hie_SetHierarchyFromUsrLastHierarchy (void)
/***** Initialize all codes to -1 *****/ /***** Initialize all codes to -1 *****/
Hie_ResetHierarchy (); Hie_ResetHierarchy ();
/***** Copy last hierarchy scope and code to current hierarchy *****/ /***** Copy last hierarchy code to current hierarchy *****/
switch (Gbl.Usrs.Me.UsrLast.LastHie.Level) Gbl.Hierarchy.Node[Gbl.Usrs.Me.UsrLast.LastHie.Level].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
{
case HieLvl_CTY: // Country
Gbl.Hierarchy.Node[HieLvl_CTY].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
break;
case HieLvl_INS: // Institution
Gbl.Hierarchy.Node[HieLvl_INS].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
break;
case HieLvl_CTR: // Center
Gbl.Hierarchy.Node[HieLvl_CTR].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
break;
case HieLvl_DEG: // Degree
Gbl.Hierarchy.Node[HieLvl_DEG].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
break;
case HieLvl_CRS: // Course
Gbl.Hierarchy.Node[HieLvl_CRS].Cod = Gbl.Usrs.Me.UsrLast.LastHie.HieCod;
break;
default:
break;
}
/****** Initialize again current course, degree, center... ******/ /****** Initialize again current course, degree, center... ******/
Hie_InitHierarchy (); Hie_InitHierarchy ();
@ -660,26 +641,28 @@ void Hie_InitHierarchy (void)
void Hie_ResetHierarchy (void) void Hie_ResetHierarchy (void)
{ {
/***** Country *****/ HieLvl_Level_t Level;
Gbl.Hierarchy.Node[HieLvl_CTY].Cod = -1L;
/***** Institution *****/
Gbl.Hierarchy.Node[HieLvl_INS].Cod = -1L;
/***** Center *****/
Gbl.Hierarchy.Node[HieLvl_CTR].Cod = -1L;
Gbl.Hierarchy.Node[HieLvl_CTR].PrtCod = -1L;
Gbl.Hierarchy.Node[HieLvl_CTR].Specific.PlcCod = -1L;
/***** Degree *****/
Gbl.Hierarchy.Node[HieLvl_DEG].Cod = -1L;
/***** Course *****/
Gbl.Hierarchy.Node[HieLvl_CRS].Cod = -1L;
/***** Hierarchy level and code *****/ /***** Hierarchy level and code *****/
Gbl.Hierarchy.Level = HieLvl_UNK; Gbl.Hierarchy.Level = HieLvl_UNK;
Gbl.Hierarchy.Cod = -1L; Gbl.Hierarchy.Cod = -1L;
for (Level = (HieLvl_Level_t) 0;
Level <= (HieLvl_Level_t) HieLvl_NUM_LEVELS - 1;
Level++)
{
Gbl.Hierarchy.List[Level].Num = 0;
Gbl.Hierarchy.List[Level].Lst = NULL;
Gbl.Hierarchy.List[Level].SelectedOrder = Hie_ORDER_DEFAULT;
Gbl.Hierarchy.Node[Level].Cod = -1L;
Gbl.Hierarchy.Node[Level].PrtCod = -1L;
Gbl.Hierarchy.Node[Level].ShrtName[0] =
Gbl.Hierarchy.Node[Level].FullName[0] = '\0';
Gbl.Hierarchy.Node[Level].WWW[0] = '\0';
}
Gbl.Hierarchy.Node[HieLvl_CTR].Specific.PlcCod = -1L;
Gbl.Hierarchy.Node[HieLvl_DEG].Specific.TypCod = -1L;
Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year = 0;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -73,7 +73,7 @@ struct Hie_Node
{ {
long Cod; // Course/degree/center/institution/country code long Cod; // Course/degree/center/institution/country code
long PrtCod; // Parent code long PrtCod; // Parent code
union struct
{ {
long PlcCod; // Center place code long PlcCod; // Center place code
long TypCod; // Degree type code long TypCod; // Degree type code

View File

@ -1437,7 +1437,10 @@ static bool Inf_CheckAndShowPlainTxt (void)
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || if (Gbl.Crs.Info.Type == Inf_INTRODUCTION ||
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE)
Lay_WriteHeaderClassPhoto (false,false,Gbl.Hierarchy.Node[HieLvl_INS].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Lay_WriteHeaderClassPhoto (false,false,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
HTM_DIV_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ()); HTM_DIV_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ());
@ -1527,7 +1530,10 @@ static bool Inf_CheckAndShowRichTxt (void)
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || if (Gbl.Crs.Info.Type == Inf_INTRODUCTION ||
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE)
Lay_WriteHeaderClassPhoto (false,false,Gbl.Hierarchy.Node[HieLvl_INS].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Lay_WriteHeaderClassPhoto (false,false,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
HTM_DIV_Begin ("id=\"crs_info\" class=\"LM CRS_INFO_%s\"", HTM_DIV_Begin ("id=\"crs_info\" class=\"LM CRS_INFO_%s\"",
The_GetSuffix ()); The_GetSuffix ());
@ -1660,7 +1666,10 @@ void Inf_EditPlainTxtInfo (void)
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || if (Gbl.Crs.Info.Type == Inf_INTRODUCTION ||
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE)
Lay_WriteHeaderClassPhoto (false,false,Gbl.Hierarchy.Node[HieLvl_INS].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Lay_WriteHeaderClassPhoto (false,false,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
/***** Get info text from database *****/ /***** Get info text from database *****/
Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[HieLvl_CRS].Cod,Gbl.Crs.Info.Type, Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[HieLvl_CRS].Cod,Gbl.Crs.Info.Type,
@ -1728,7 +1737,10 @@ void Inf_EditRichTxtInfo (void)
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || if (Gbl.Crs.Info.Type == Inf_INTRODUCTION ||
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE)
Lay_WriteHeaderClassPhoto (false,false,Gbl.Hierarchy.Node[HieLvl_INS].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Lay_WriteHeaderClassPhoto (false,false,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
/***** Get info text from database *****/ /***** Get info text from database *****/
Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[HieLvl_CRS].Cod,Gbl.Crs.Info.Type, Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[HieLvl_CRS].Cod,Gbl.Crs.Info.Type,

View File

@ -286,7 +286,8 @@ void Prg_ShowAllItems (Prg_ListingType_t ListingType,
} }
/***** Begin box *****/ /***** Begin box *****/
if (asprintf (&Title,Txt_COURSE_program,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName) < 0) if (asprintf (&Title,Txt_COURSE_program,
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Box_BoxBegin ("100%",Title, Box_BoxBegin ("100%",Title,
FunctionToDrawContextualIcons[ListingType],NULL, FunctionToDrawContextualIcons[ListingType],NULL,

View File

@ -109,19 +109,16 @@ void Rol_SetMyRoles (void)
{ {
/* Check if I am and administrator of current institution */ /* Check if I am and administrator of current institution */
ICanBeAdm[HieLvl_INS] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod, ICanBeAdm[HieLvl_INS] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
HieLvl_INS, HieLvl_INS);
Gbl.Hierarchy.Node[HieLvl_INS].Cod);
if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0) if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0)
{ {
/* Check if I am and administrator of current center */ /* Check if I am and administrator of current center */
ICanBeAdm[HieLvl_CTR] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod, ICanBeAdm[HieLvl_CTR] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
HieLvl_CTR, HieLvl_CTR);
Gbl.Hierarchy.Node[HieLvl_CTR].Cod);
if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0)
/* Check if I am and administrator of current degree */ /* Check if I am and administrator of current degree */
ICanBeAdm[HieLvl_DEG] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod, ICanBeAdm[HieLvl_DEG] = Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
HieLvl_DEG, HieLvl_DEG);
Gbl.Hierarchy.Node[HieLvl_DEG].Cod);
} }
} }

View File

@ -332,17 +332,12 @@ long Hie_GetCurrentCod (void)
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case HieLvl_SYS: case HieLvl_SYS:
return -1L;
case HieLvl_CTY: case HieLvl_CTY:
return Gbl.Hierarchy.Node[HieLvl_CTY].Cod;
case HieLvl_INS: case HieLvl_INS:
return Gbl.Hierarchy.Node[HieLvl_INS].Cod;
case HieLvl_CTR: case HieLvl_CTR:
return Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
case HieLvl_DEG: case HieLvl_DEG:
return Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
case HieLvl_CRS: case HieLvl_CRS:
return Gbl.Hierarchy.Node[HieLvl_CRS].Cod; return Gbl.Hierarchy.Node[Gbl.Scope.Current].Cod;
default: default:
Err_WrongHierarchyLevelExit (); Err_WrongHierarchyLevelExit ();
return -1L; // Not reached return -1L; // Not reached

View File

@ -2164,7 +2164,8 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
} }
} }
else else
HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName); HTM_TxtF ("%s&nbsp;%s",Txt_The_whole_course,
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
HTM_DIV_End (); HTM_DIV_End ();

View File

@ -156,18 +156,9 @@ unsigned Svy_DB_GetListSurveys (MYSQL_RES **mysql_res,
"Title DESC", "Title DESC",
}; };
unsigned NumSvys; unsigned NumSvys;
long Cods[HieLvl_NUM_LEVELS];
HieLvl_Level_t Level; HieLvl_Level_t Level;
bool SubQueryFilled = false; bool SubQueryFilled = false;
/***** Set hierarchy codes *****/
Cods[HieLvl_SYS] = -1L; // System
Cods[HieLvl_CTY] = Gbl.Hierarchy.Node[HieLvl_CTY].Cod; // Country
Cods[HieLvl_INS] = Gbl.Hierarchy.Node[HieLvl_INS].Cod; // Institution
Cods[HieLvl_CTR] = Gbl.Hierarchy.Node[HieLvl_CTR].Cod; // Center
Cods[HieLvl_DEG] = Gbl.Hierarchy.Node[HieLvl_DEG].Cod; // Degree
Cods[HieLvl_CRS] = Gbl.Hierarchy.Node[HieLvl_CRS].Cod; // Course
/***** Fill subqueries for system, country, institution, center and degree *****/ /***** Fill subqueries for system, country, institution, center and degree *****/
for (Level = HieLvl_SYS; for (Level = HieLvl_SYS;
Level <= HieLvl_DEG; Level <= HieLvl_DEG;
@ -177,7 +168,7 @@ unsigned Svy_DB_GetListSurveys (MYSQL_RES **mysql_res,
if (asprintf (&SubQuery[Level],"%s(Scope='%s' AND Cod=%ld%s)", if (asprintf (&SubQuery[Level],"%s(Scope='%s' AND Cod=%ld%s)",
SubQueryFilled ? " OR " : SubQueryFilled ? " OR " :
"", "",
Hie_GetDBStrFromLevel (Level),Cods[Level], Hie_GetDBStrFromLevel (Level),Gbl.Hierarchy.Node[Level].Cod,
(HiddenAllowed & 1 << Level) ? "" : (HiddenAllowed & 1 << Level) ? "" :
" AND Hidden='N'") < 0) " AND Hidden='N'") < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
@ -211,7 +202,7 @@ unsigned Svy_DB_GetListSurveys (MYSQL_RES **mysql_res,
")", ")",
SubQueryFilled ? " OR " : SubQueryFilled ? " OR " :
"", "",
Hie_GetDBStrFromLevel (HieLvl_CRS),Cods[HieLvl_CRS], Hie_GetDBStrFromLevel (HieLvl_CRS),Gbl.Hierarchy.Node[HieLvl_CRS].Cod,
(HiddenAllowed & 1 << HieLvl_CRS) ? "" : (HiddenAllowed & 1 << HieLvl_CRS) ? "" :
" AND Hidden='N'", " AND Hidden='N'",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0) Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
@ -222,7 +213,7 @@ unsigned Svy_DB_GetListSurveys (MYSQL_RES **mysql_res,
if (asprintf (&SubQuery[HieLvl_CRS],"%s(Scope='%s' AND Cod=%ld%s)", if (asprintf (&SubQuery[HieLvl_CRS],"%s(Scope='%s' AND Cod=%ld%s)",
SubQueryFilled ? " OR " : SubQueryFilled ? " OR " :
"", "",
Hie_GetDBStrFromLevel (HieLvl_CRS),Cods[HieLvl_CRS], Hie_GetDBStrFromLevel (HieLvl_CRS),Gbl.Hierarchy.Node[HieLvl_CRS].Cod,
(HiddenAllowed & 1 << HieLvl_CRS) ? "" : (HiddenAllowed & 1 << HieLvl_CRS) ? "" :
" AND Hidden='N'") < 0) " AND Hidden='N'") < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();

View File

@ -371,7 +371,9 @@ void Tmt_ShowClassTimeTable (void)
/***** Begin time table drawing *****/ /***** Begin time table drawing *****/
if (Timetable.Type == Tmt_COURSE_TIMETABLE) if (Timetable.Type == Tmt_COURSE_TIMETABLE)
Lay_WriteHeaderClassPhoto (PrintView,false, Lay_WriteHeaderClassPhoto (PrintView,false,
Gbl.Hierarchy.Node[HieLvl_INS].Cod,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Gbl.Hierarchy.Node[HieLvl_INS].Cod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
if (PrintView) if (PrintView)
/***** Show whether only my groups or all groups are selected *****/ /***** Show whether only my groups or all groups are selected *****/