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

@ -643,7 +643,7 @@ void Crs_WriteSelectorOfCourse (void)
/***** Initial disabled option *****/ /***** Initial disabled option *****/
HTM_OPTION (HTM_Type_STRING,"", HTM_OPTION (HTM_Type_STRING,"",
Gbl.Hierarchy.Node[HieLvl_CRS].Cod < 0 ? HTM_OPTION_SELECTED : Gbl.Hierarchy.Node[HieLvl_CRS].Cod < 0 ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_DISABLED, HTM_OPTION_DISABLED,
"[%s]",Txt_Course); "[%s]",Txt_Course);
@ -666,7 +666,7 @@ void Crs_WriteSelectorOfCourse (void)
HTM_OPTION (HTM_Type_LONG,&CrsCod, HTM_OPTION (HTM_Type_LONG,&CrsCod,
Gbl.Hierarchy.Level == HieLvl_CRS && // Course selected Gbl.Hierarchy.Level == HieLvl_CRS && // Course selected
CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod ? HTM_OPTION_SELECTED : CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",row[1]); // Short name (row[1]) "%s",row[1]); // Short name (row[1])
} }
@ -807,7 +807,7 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void)
HTM_OPTION (HTM_Type_LONG,&CrsCod, HTM_OPTION (HTM_Type_LONG,&CrsCod,
CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod ? HTM_OPTION_SELECTED : CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",CrsShortName); "%s",CrsShortName);
} }
@ -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);
@ -2385,7 +2386,7 @@ static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnA
ClassTxt = NumUsrs ? "DAT_STRONG" : ClassTxt = NumUsrs ? "DAT_STRONG" :
"DAT"; "DAT";
BgColor = (CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod) ? "BG_HIGHLIGHT" : BgColor = (CrsCod == Gbl.Hierarchy.Node[HieLvl_CRS].Cod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
/***** Begin row *****/ /***** Begin row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -197,8 +197,8 @@ void CrsCfg_PrintConfiguration (void)
static void CrsCfg_Title (bool PutLink) static void CrsCfg_Title (bool PutLink)
{ {
HieCfg_Title (PutLink, HieCfg_Title (PutLink,
HieLvl_DEG, // Logo scope HieLvl_DEG, // Logo scope
Gbl.Hierarchy.Node[HieLvl_DEG].Cod, // Logo code Gbl.Hierarchy.Node[HieLvl_DEG].Cod, // Logo code
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName, // Logo short name Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName, // Logo short name
Gbl.Hierarchy.Node[HieLvl_DEG].FullName, // Logo full name Gbl.Hierarchy.Node[HieLvl_DEG].FullName, // Logo full name
Gbl.Hierarchy.Node[HieLvl_DEG].WWW, // Logo www Gbl.Hierarchy.Node[HieLvl_DEG].WWW, // Logo www
@ -244,7 +244,7 @@ static void CrsCfg_Degree (bool PrintView,bool PutForm)
DegInLst = &Gbl.Hierarchy.List[HieLvl_CTR].Lst[NumDeg]; DegInLst = &Gbl.Hierarchy.List[HieLvl_CTR].Lst[NumDeg];
HTM_OPTION (HTM_Type_LONG,&DegInLst->Cod, HTM_OPTION (HTM_Type_LONG,&DegInLst->Cod,
DegInLst->Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod ? HTM_OPTION_SELECTED : DegInLst->Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",DegInLst->ShrtName); "%s",DegInLst->ShrtName);
} }
@ -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);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -333,7 +336,7 @@ static void CrsCfg_Year (bool PutForm)
Year++) Year++)
HTM_OPTION (HTM_Type_UNSIGNED,&Year, HTM_OPTION (HTM_Type_UNSIGNED,&Year,
Year == Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year ? HTM_OPTION_SELECTED : Year == Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",Txt_YEAR_OF_DEGREE[Year]); "%s",Txt_YEAR_OF_DEGREE[Year]);
HTM_SELECT_End (); HTM_SELECT_End ();
@ -341,7 +344,7 @@ static void CrsCfg_Year (bool PutForm)
} }
else else
HTM_Txt (Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year ? Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year] : HTM_Txt (Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year ? Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Node[HieLvl_CRS].Specific.Year] :
Txt_Not_applicable); Txt_Not_applicable);
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -152,7 +152,7 @@ void Deg_SeeDegWithPendingCrss (void)
/* Get degree code (row[0]) */ /* Get degree code (row[0]) */
Deg.Cod = Str_ConvertStrCodToLongCod (row[0]); Deg.Cod = Str_ConvertStrCodToLongCod (row[0]);
BgColor = (Deg.Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod) ? "BG_HIGHLIGHT" : BgColor = (Deg.Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
/* Get data of degree */ /* Get data of degree */
Deg_GetDegreeDataByCod (&Deg); Deg_GetDegreeDataByCod (&Deg);
@ -241,7 +241,7 @@ void Deg_WriteSelectorOfDegree (void)
The_GetSuffix ()); The_GetSuffix ());
HTM_OPTION (HTM_Type_STRING,"", HTM_OPTION (HTM_Type_STRING,"",
Gbl.Hierarchy.Node[HieLvl_DEG].Cod <= 0 ? HTM_OPTION_SELECTED : Gbl.Hierarchy.Node[HieLvl_DEG].Cod <= 0 ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_DISABLED, HTM_OPTION_DISABLED,
"[%s]",Txt_Degree); "[%s]",Txt_Degree);
@ -266,7 +266,7 @@ void Deg_WriteSelectorOfDegree (void)
HTM_OPTION (HTM_Type_LONG,&DegCod, HTM_OPTION (HTM_Type_LONG,&DegCod,
Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0 && Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0 &&
DegCod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod ? HTM_OPTION_SELECTED : DegCod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",row[1]); "%s",row[1]);
} }
@ -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);
@ -804,7 +805,7 @@ static void Deg_ListOneDegreeForSeeing (struct Hie_Node *Deg,unsigned NumDeg)
TxtClassStrong = "DAT_STRONG"; TxtClassStrong = "DAT_STRONG";
} }
BgColor = (Deg->Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod) ? "BG_HIGHLIGHT" : BgColor = (Deg->Cod == Gbl.Hierarchy.Node[HieLvl_DEG].Cod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
/***** Begin table row *****/ /***** Begin table row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -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

@ -192,10 +192,10 @@ static void DegCfg_PutIconsToPrintAndUpload (__attribute__((unused)) void *Args)
static void DegCfg_Title (bool PutLink) static void DegCfg_Title (bool PutLink)
{ {
HieCfg_Title (PutLink, HieCfg_Title (PutLink,
HieLvl_DEG, // Logo scope HieLvl_DEG, // Logo scope
Gbl.Hierarchy.Node[HieLvl_DEG].Cod, // Logo code Gbl.Hierarchy.Node[HieLvl_DEG].Cod, // Logo code
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName, // Logo short name Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName, // Logo short name
Gbl.Hierarchy.Node[HieLvl_DEG].FullName, // Logo full name Gbl.Hierarchy.Node[HieLvl_DEG].FullName, // Logo full name
Gbl.Hierarchy.Node[HieLvl_DEG].WWW, // Logo www Gbl.Hierarchy.Node[HieLvl_DEG].WWW, // Logo www
Gbl.Hierarchy.Node[HieLvl_DEG].FullName); // Text full name Gbl.Hierarchy.Node[HieLvl_DEG].FullName); // Text full name
} }
@ -239,7 +239,7 @@ static void DegCfg_Center (bool PrintView,bool PutForm)
CtrInLst = &Gbl.Hierarchy.List[HieLvl_INS].Lst[NumCtr]; CtrInLst = &Gbl.Hierarchy.List[HieLvl_INS].Lst[NumCtr];
HTM_OPTION (HTM_Type_LONG,&CtrInLst->Cod, HTM_OPTION (HTM_Type_LONG,&CtrInLst->Cod,
CtrInLst->Cod == Gbl.Hierarchy.Node[HieLvl_CTR].Cod ? HTM_OPTION_SELECTED : CtrInLst->Cod == Gbl.Hierarchy.Node[HieLvl_CTR].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",CtrInLst->ShrtName); "%s",CtrInLst->ShrtName);
} }
@ -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

@ -325,7 +325,7 @@ static void DegTyp_ListDegreeTypesForSeeing (const struct DegTyp_DegTypes *DegTy
{ {
BgColor = (DegTypes->Lst[NumDegTyp].DegTypCod == BgColor = (DegTypes->Lst[NumDegTyp].DegTypCod ==
Gbl.Hierarchy.Node[HieLvl_DEG].Specific.TypCod) ? "BG_HIGHLIGHT" : Gbl.Hierarchy.Node[HieLvl_DEG].Specific.TypCod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
/* Begin table row */ /* Begin table row */
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

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,13 +2016,14 @@ 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);
} }
/* Remove inscription request */ /* Remove inscription request */
Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod, Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod,
Gbl.Hierarchy.Node[HieLvl_CRS].Cod); Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
/* Confirmation message */ /* Confirmation message */
Ale_ShowAlert (Ale_SUCCESS,Txt_Enrolment_of_X_rejected, Ale_ShowAlert (Ale_SUCCESS,Txt_Enrolment_of_X_rejected,
@ -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) snprintf (ParLocation,sizeof (ParLocation),
{ "<input type=\"hidden\" name=\"%s\" value=\"%ld\" />",
case HieLvl_CTY: // Country ParName[Gbl.Hierarchy.Level],
snprintf (ParLocation,sizeof (ParLocation), Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].Cod);
"<input type=\"hidden\" name=\"cty\" value=\"%ld\" />",
Gbl.Hierarchy.Node[HieLvl_CTY].Cod);
break;
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: if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0)
case For_FORUM_INSTIT_TCHS: // If no institution specified ==> go to current institution forum
if ((Forums->Forum.HieCod = ParCod_GetPar (ParCod_OthHie)) <= 0) Forums->Forum.HieCod = Gbl.Hierarchy.Node[Level[Forums->Forum.Type]].Cod;
// If no institution specified ==> go to current institution forum
Forums->Forum.HieCod = Gbl.Hierarchy.Node[HieLvl_INS].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

@ -197,7 +197,7 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
{ {
/* Select a degree */ /* Select a degree */
if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0 ? Txt_Select_or_create_another_degree_in_X : if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0 ? Txt_Select_or_create_another_degree_in_X :
Txt_Select_or_create_one_degree_in_X, Txt_Select_or_create_one_degree_in_X,
Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0) Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description,
@ -209,7 +209,7 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
{ {
/* Select a center */ /* Select a center */
if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0 ? Txt_Select_or_create_another_center_in_X : if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0 ? Txt_Select_or_create_another_center_in_X :
Txt_Select_or_create_one_center_in_X, Txt_Select_or_create_one_center_in_X,
Gbl.Hierarchy.Node[HieLvl_INS].ShrtName) < 0) Gbl.Hierarchy.Node[HieLvl_INS].ShrtName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description,
@ -221,7 +221,7 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
{ {
/* Select an institution */ /* Select an institution */
if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0 ? Txt_Select_or_create_another_institution_in_X : if (asprintf (&Description,Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0 ? Txt_Select_or_create_another_institution_in_X :
Txt_Select_or_create_one_institution_in_X, Txt_Select_or_create_one_institution_in_X,
Gbl.Hierarchy.Node[HieLvl_CTY].FullName) < 0) Gbl.Hierarchy.Node[HieLvl_CTY].FullName) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Description,
@ -232,7 +232,7 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
else else
/* Select a country */ /* Select a country */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Hierarchy.Node[HieLvl_CTY].Cod > 0 ? Txt_Select_another_country : Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Hierarchy.Node[HieLvl_CTY].Cod > 0 ? Txt_Select_another_country :
Txt_Select_one_country, Txt_Select_one_country,
ActSeeCty, ActSeeCty,
Btn_CONFIRM_BUTTON,Txt_Countries); Btn_CONFIRM_BUTTON,Txt_Countries);

View File

@ -402,7 +402,7 @@ void Hie_WriteHierarchyInBreadcrumb (void)
HTM_DIV_Begin ("class=\"BC%s BC_%s\"", HTM_DIV_Begin ("class=\"BC%s BC_%s\"",
(Gbl.Hierarchy.Level == HieLvl_CRS) ? "" : (Gbl.Hierarchy.Level == HieLvl_CRS) ? "" :
((Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) ? " BC_SEMIOFF" : ((Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) ? " BC_SEMIOFF" :
" BC_OFF"), " BC_OFF"),
The_GetSuffix ()); The_GetSuffix ());
/***** Separator *****/ /***** Separator *****/
@ -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

@ -169,11 +169,11 @@ void Ind_ReqIndicatorsCourses (void)
The_GetSuffix ()) < 0) The_GetSuffix ()) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Departments in current insitution Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Departments in current insitution
Indicators.DptCod, // Selected department Indicators.DptCod, // Selected department
Par_CodeStr[ParCod_Dpt], // Parameter name Par_CodeStr[ParCod_Dpt], // Parameter name
SelectClass, // Selector class SelectClass, // Selector class
-1L, // First option -1L, // First option
Txt_Any_department, // Text when no department selected Txt_Any_department, // Text when no department selected
HTM_SUBMIT_ON_CHANGE); HTM_SUBMIT_ON_CHANGE);
free (SelectClass); free (SelectClass);
HTM_TD_End (); HTM_TD_End ();

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

@ -169,7 +169,7 @@ void Ins_SeeInsWithPendingCtrs (void)
/* Get institution code (row[0]) */ /* Get institution code (row[0]) */
Ins.Cod = Str_ConvertStrCodToLongCod (row[0]); Ins.Cod = Str_ConvertStrCodToLongCod (row[0]);
BgColor = (Ins.Cod == Gbl.Hierarchy.Node[HieLvl_INS].Cod) ? "BG_HIGHLIGHT" : BgColor = (Ins.Cod == Gbl.Hierarchy.Node[HieLvl_INS].Cod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
/* Get data of institution */ /* Get data of institution */
Ins_GetInstitDataByCod (&Ins); Ins_GetInstitDataByCod (&Ins);
@ -366,7 +366,7 @@ static void Ins_ListOneInstitutionForSeeing (struct Hie_Node *Ins,unsigned NumIn
TxtClassStrong = "DAT_STRONG"; TxtClassStrong = "DAT_STRONG";
} }
BgColor = (Ins->Cod == Gbl.Hierarchy.Node[HieLvl_INS].Cod) ? "BG_HIGHLIGHT" : BgColor = (Ins->Cod == Gbl.Hierarchy.Node[HieLvl_INS].Cod) ? "BG_HIGHLIGHT" :
The_GetColorRows (); The_GetColorRows ();
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -567,7 +567,7 @@ void Ins_GetBasicListOfInstitutions (long CtyCod)
{ {
/***** Create list with institutions *****/ /***** Create list with institutions *****/
if ((Gbl.Hierarchy.List[HieLvl_CTY].Lst = calloc ((size_t) Gbl.Hierarchy.List[HieLvl_CTY].Num, if ((Gbl.Hierarchy.List[HieLvl_CTY].Lst = calloc ((size_t) Gbl.Hierarchy.List[HieLvl_CTY].Num,
sizeof (*Gbl.Hierarchy.List[HieLvl_CTY].Lst))) == NULL) sizeof (*Gbl.Hierarchy.List[HieLvl_CTY].Lst))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Get the institutions *****/ /***** Get the institutions *****/
@ -600,7 +600,7 @@ void Ins_GetFullListOfInstitutions (long CtyCod)
{ {
/***** Create list with institutions *****/ /***** Create list with institutions *****/
if ((Gbl.Hierarchy.List[HieLvl_CTY].Lst = calloc ((size_t) Gbl.Hierarchy.List[HieLvl_CTY].Num, if ((Gbl.Hierarchy.List[HieLvl_CTY].Lst = calloc ((size_t) Gbl.Hierarchy.List[HieLvl_CTY].Num,
sizeof (*Gbl.Hierarchy.List[HieLvl_CTY].Lst))) == NULL) sizeof (*Gbl.Hierarchy.List[HieLvl_CTY].Lst))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Get the institutions *****/ /***** Get the institutions *****/
@ -832,7 +832,7 @@ void Ins_WriteSelectorOfInstitution (void)
HTM_OPTION (HTM_Type_STRING,"", HTM_OPTION (HTM_Type_STRING,"",
Gbl.Hierarchy.Node[HieLvl_INS].Cod < 0 ? HTM_OPTION_SELECTED : Gbl.Hierarchy.Node[HieLvl_INS].Cod < 0 ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_DISABLED, HTM_OPTION_DISABLED,
"[%s]",Txt_Institution); "[%s]",Txt_Institution);
@ -857,7 +857,7 @@ void Ins_WriteSelectorOfInstitution (void)
HTM_OPTION (HTM_Type_LONG,&InsCod, HTM_OPTION (HTM_Type_LONG,&InsCod,
Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0 && Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0 &&
InsCod == Gbl.Hierarchy.Node[HieLvl_INS].Cod ? HTM_OPTION_SELECTED : InsCod == Gbl.Hierarchy.Node[HieLvl_INS].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",row[1]); "%s",row[1]);
} }
@ -1531,12 +1531,12 @@ static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status)
{ {
/***** If name of institution was in database... *****/ /***** If name of institution was in database... *****/
if (Ins_DB_CheckIfInsNameExistsInCty ("ShortName",Ins_EditingIns->ShrtName, if (Ins_DB_CheckIfInsNameExistsInCty ("ShortName",Ins_EditingIns->ShrtName,
-1L,Gbl.Hierarchy.Node[HieLvl_CTY].Cod)) -1L,Gbl.Hierarchy.Node[HieLvl_CTY].Cod))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_institution_X_already_exists, Txt_The_institution_X_already_exists,
Ins_EditingIns->ShrtName); Ins_EditingIns->ShrtName);
else if (Ins_DB_CheckIfInsNameExistsInCty ("FullName",Ins_EditingIns->FullName, else if (Ins_DB_CheckIfInsNameExistsInCty ("FullName",Ins_EditingIns->FullName,
-1L,Gbl.Hierarchy.Node[HieLvl_CTY].Cod)) -1L,Gbl.Hierarchy.Node[HieLvl_CTY].Cod))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_institution_X_already_exists, Txt_The_institution_X_already_exists,
Ins_EditingIns->FullName); Ins_EditingIns->FullName);

View File

@ -229,10 +229,10 @@ static void InsCfg_PutIconsToPrintAndUpload (__attribute__((unused)) void *Args)
static void InsCfg_Title (bool PutLink) static void InsCfg_Title (bool PutLink)
{ {
HieCfg_Title (PutLink, HieCfg_Title (PutLink,
HieLvl_INS, // Logo scope HieLvl_INS, // Logo scope
Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Logo code Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Logo code
Gbl.Hierarchy.Node[HieLvl_INS].ShrtName, // Logo short name Gbl.Hierarchy.Node[HieLvl_INS].ShrtName, // Logo short name
Gbl.Hierarchy.Node[HieLvl_INS].FullName, // Logo full name Gbl.Hierarchy.Node[HieLvl_INS].FullName, // Logo full name
Gbl.Hierarchy.Node[HieLvl_INS].WWW, // Logo www Gbl.Hierarchy.Node[HieLvl_INS].WWW, // Logo www
Gbl.Hierarchy.Node[HieLvl_INS].FullName); // Text full name Gbl.Hierarchy.Node[HieLvl_INS].FullName); // Text full name
} }
@ -343,7 +343,7 @@ static void InsCfg_Country (bool PrintView,bool PutForm)
CtyInLst = &Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty]; CtyInLst = &Gbl.Hierarchy.List[HieLvl_SYS].Lst[NumCty];
HTM_OPTION (HTM_Type_LONG,&CtyInLst->Cod, HTM_OPTION (HTM_Type_LONG,&CtyInLst->Cod,
CtyInLst->Cod == Gbl.Hierarchy.Node[HieLvl_CTY].Cod ? HTM_OPTION_SELECTED : CtyInLst->Cod == Gbl.Hierarchy.Node[HieLvl_CTY].Cod ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED, HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED, HTM_OPTION_ENABLED,
"%s",CtyInLst->FullName); "%s",CtyInLst->FullName);
} }

View File

@ -822,22 +822,22 @@ static Act_Action_t Ntf_StartFormGoToAction (Ntf_NotifyEvent_t NotifyEvent,
if (CrsCod > 0) // Course specified if (CrsCod > 0) // Course specified
{ {
if (CrsCod != Gbl.Hierarchy.Node[HieLvl_CRS].Cod) // Not the current course if (CrsCod != Gbl.Hierarchy.Node[HieLvl_CRS].Cod) // Not the current course
ParCod_PutPar (ParCod_Crs,CrsCod); // Go to another course ParCod_PutPar (ParCod_Crs,CrsCod); // Go to another course
} }
else if (DegCod > 0) // Degree specified else if (DegCod > 0) // Degree specified
{ {
if (DegCod != Gbl.Hierarchy.Node[HieLvl_DEG].Cod) // Not the current degree if (DegCod != Gbl.Hierarchy.Node[HieLvl_DEG].Cod) // Not the current degree
ParCod_PutPar (ParCod_Deg,DegCod); // Go to another degree ParCod_PutPar (ParCod_Deg,DegCod); // Go to another degree
} }
else if (CtrCod > 0) // Center specified else if (CtrCod > 0) // Center specified
{ {
if (CtrCod != Gbl.Hierarchy.Node[HieLvl_CTR].Cod) // Not the current center if (CtrCod != Gbl.Hierarchy.Node[HieLvl_CTR].Cod) // Not the current center
ParCod_PutPar (ParCod_Ctr,CtrCod); // Go to another center ParCod_PutPar (ParCod_Ctr,CtrCod); // Go to another center
} }
else if (InsCod > 0) // Institution specified else if (InsCod > 0) // Institution specified
{ {
if (InsCod != Gbl.Hierarchy.Node[HieLvl_INS].Cod) // Not the current institution if (InsCod != Gbl.Hierarchy.Node[HieLvl_INS].Cod) // Not the current institution
ParCod_PutPar (ParCod_Ins,InsCod); // Go to another institution ParCod_PutPar (ParCod_Ins,InsCod); // Go to another institution
} }
} }

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

@ -3771,9 +3771,9 @@ static void Prj_PutFormProject (struct Prj_Projects *Projects,
The_GetSuffix ()) < 0) The_GetSuffix ()) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Departments in current institution Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[HieLvl_INS].Cod, // Departments in current institution
Projects->Prj.DptCod, // Selected department Projects->Prj.DptCod, // Selected department
Par_CodeStr[ParCod_Dpt], // Parameter name Par_CodeStr[ParCod_Dpt], // Parameter name
SelectClass, // Selector class SelectClass, // Selector class
0, // First option 0, // First option
Txt_Another_department, // Text when no department selected Txt_Another_department, // Text when no department selected
HTM_DONT_SUBMIT_ON_CHANGE); HTM_DONT_SUBMIT_ON_CHANGE);

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,9 +202,9 @@ 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)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
} }
@ -222,9 +213,9 @@ 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 ();
} }
SubQueryFilled = true; SubQueryFilled = true;

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

View File

@ -5243,12 +5243,12 @@ void Usr_SeeStudents (void)
Gbl.Scope.Current == HieLvl_DEG || Gbl.Scope.Current == HieLvl_DEG ||
Gbl.Scope.Current == HieLvl_CTR || Gbl.Scope.Current == HieLvl_CTR ||
Gbl.Scope.Current == HieLvl_INS) ? Gbl.Hierarchy.Node[HieLvl_INS].Cod : Gbl.Scope.Current == HieLvl_INS) ? Gbl.Hierarchy.Node[HieLvl_INS].Cod :
-1L, -1L,
(Gbl.Scope.Current == HieLvl_CRS || (Gbl.Scope.Current == HieLvl_CRS ||
Gbl.Scope.Current == HieLvl_DEG) ? Gbl.Hierarchy.Node[HieLvl_DEG].Cod : Gbl.Scope.Current == HieLvl_DEG) ? Gbl.Hierarchy.Node[HieLvl_DEG].Cod :
-1L, -1L,
Gbl.Scope.Current == HieLvl_CRS ? Gbl.Hierarchy.Node[HieLvl_CRS].Cod : Gbl.Scope.Current == HieLvl_CRS ? Gbl.Hierarchy.Node[HieLvl_CRS].Cod :
-1L); -1L);
/* Set options allowed */ /* Set options allowed */
PutForm = Usr_SetOptionsListUsrsAllowed (Rol_STD,ICanChooseOption); PutForm = Usr_SetOptionsListUsrsAllowed (Rol_STD,ICanChooseOption);