mirror of https://github.com/acanas/swad-core.git
Version 22.55: Oct 28, 2022 Code refactoring in degree types.
This commit is contained in:
parent
03ed699c83
commit
870f496b24
|
@ -362,7 +362,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
[ActChgCtrPhoAtt ] = {1159,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ChangeCtrPhotoAttr ,NULL},
|
||||
|
||||
[ActSeeDegTyp ] = {1013,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,DegTyp_SeeDegreeTypesInDegTab ,NULL},
|
||||
[ActEdiDegTyp ] = { 573,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,DegTyp_EditDegreeTypes ,NULL},
|
||||
[ActEdiDegTyp ] = { 573,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,DegTyp_GetAndEditDegreeTypes ,NULL},
|
||||
[ActNewDegTyp ] = { 537,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,DegTyp_ReceiveFormNewDegreeType,DegTyp_ContEditAfterChgDegTyp ,NULL},
|
||||
[ActRemDegTyp ] = { 545,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,DegTyp_RemoveDegreeType ,DegTyp_ContEditAfterChgDegTyp ,NULL},
|
||||
[ActRenDegTyp ] = { 538,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,DegTyp_RenameDegreeType ,DegTyp_ContEditAfterChgDegTyp ,NULL},
|
||||
|
|
|
@ -605,7 +605,7 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
|
|||
|
||||
TODO: Attach pdf files in multimedia.
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 22.54 (2022-10-28)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 22.55 (2022-10-28)"
|
||||
#define CSS_FILE "swad22.49.4.css"
|
||||
#define JS_FILE "swad22.49.js"
|
||||
/*
|
||||
|
@ -616,6 +616,7 @@ Que al subir un fichero por defecto est
|
|||
Al subir cosas para los grupos, en documentos, resltar más los grupos porque no son conscientes...
|
||||
Exportar listas en CSV.
|
||||
|
||||
Version 22.55: Oct 28, 2022 Code refactoring in degree types. (333694 lines)
|
||||
Version 22.54: Oct 28, 2022 Code refactoring and bug fixing in institutional links. (333614 lines)
|
||||
Version 22.53: Oct 28, 2022 Code refactoring in mail domains. (333607 lines)
|
||||
Version 22.52: Oct 28, 2022 Code refactoring in plugins. (333589 lines)
|
||||
|
|
|
@ -81,9 +81,9 @@ static struct Deg_Degree *Deg_EditingDeg = NULL; // Static variable to keep the
|
|||
/**************************** Private prototypes *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Deg_ListDegreesForEdition (void);
|
||||
static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes);
|
||||
static bool Deg_CheckIfICanEditADegree (struct Deg_Degree *Deg);
|
||||
static void Deg_PutFormToCreateDegree (void);
|
||||
static void Deg_PutFormToCreateDegree (const struct DegTyp_DegTypes *DegTypes);
|
||||
static void Deg_PutHeadDegreesForSeeing (void);
|
||||
static void Deg_PutHeadDegreesForEdition (void);
|
||||
|
||||
|
@ -304,11 +304,11 @@ void Deg_ShowDegsOfCurrentCtr (void)
|
|||
/********************* List current degrees for edition **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Deg_ListDegreesForEdition (void)
|
||||
static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
extern const char *Txt_DEGREE_STATUS[Hie_NUM_STATUS_TXT];
|
||||
unsigned NumDeg;
|
||||
struct DegreeType *DegTyp;
|
||||
struct DegTyp_DegreeType *DegTyp;
|
||||
struct Deg_Degree *Deg;
|
||||
unsigned NumDegTyp;
|
||||
char WWW[Cns_MAX_BYTES_WWW + 1];
|
||||
|
@ -406,10 +406,10 @@ static void Deg_ListDegreesForEdition (void)
|
|||
" class=\"HIE_SEL_NARROW INPUT_%s\"",
|
||||
The_GetSuffix ());
|
||||
for (NumDegTyp = 0;
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes->Num;
|
||||
NumDegTyp++)
|
||||
{
|
||||
DegTyp = &Gbl.DegTypes.Lst[NumDegTyp];
|
||||
DegTyp = &DegTypes->Lst[NumDegTyp];
|
||||
HTM_OPTION (HTM_Type_LONG,&DegTyp->DegTypCod,
|
||||
// Gbl.Hierarchy.Deg.DegCod > 0 &&
|
||||
DegTyp->DegTypCod == Deg->DegTypCod,false,
|
||||
|
@ -420,10 +420,10 @@ static void Deg_ListDegreesForEdition (void)
|
|||
}
|
||||
else
|
||||
for (NumDegTyp = 0;
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes->Num;
|
||||
NumDegTyp++)
|
||||
if (Gbl.DegTypes.Lst[NumDegTyp].DegTypCod == Deg->DegTypCod)
|
||||
HTM_Txt (Gbl.DegTypes.Lst[NumDegTyp].DegTypName);
|
||||
if (DegTypes->Lst[NumDegTyp].DegTypCod == Deg->DegTypCod)
|
||||
HTM_Txt (DegTypes->Lst[NumDegTyp].DegTypName);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Degree WWW */
|
||||
|
@ -503,11 +503,11 @@ static bool Deg_CheckIfICanEditADegree (struct Deg_Degree *Deg)
|
|||
/*********************** Put a form to create a new degree *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Deg_PutFormToCreateDegree (void)
|
||||
static void Deg_PutFormToCreateDegree (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
extern const char *Txt_New_degree;
|
||||
extern const char *Txt_Create_degree;
|
||||
struct DegreeType *DegTyp;
|
||||
struct DegTyp_DegreeType *DegTyp;
|
||||
unsigned NumDegTyp;
|
||||
|
||||
/***** Begin form *****/
|
||||
|
@ -566,10 +566,10 @@ static void Deg_PutFormToCreateDegree (void)
|
|||
" class=\"HIE_SEL_NARROW INPUT_%s\"",
|
||||
The_GetSuffix ());
|
||||
for (NumDegTyp = 0;
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes->Num;
|
||||
NumDegTyp++)
|
||||
{
|
||||
DegTyp = &Gbl.DegTypes.Lst[NumDegTyp];
|
||||
DegTyp = &DegTypes->Lst[NumDegTyp];
|
||||
HTM_OPTION (HTM_Type_LONG,&DegTyp->DegTypCod,
|
||||
DegTyp->DegTypCod == Deg_EditingDeg->DegTypCod,false,
|
||||
"%s",DegTyp->DegTypName);
|
||||
|
@ -794,7 +794,7 @@ static void Deg_ListOneDegreeForSeeing (struct Deg_Degree *Deg,unsigned NumDeg)
|
|||
extern const char *Txt_DEGREE_With_courses;
|
||||
extern const char *Txt_DEGREE_Without_courses;
|
||||
extern const char *Txt_DEGREE_STATUS[Hie_NUM_STATUS_TXT];
|
||||
struct DegreeType DegTyp;
|
||||
struct DegTyp_DegreeType DegTyp;
|
||||
const char *TxtClassNormal;
|
||||
const char *TxtClassStrong;
|
||||
const char *BgColor;
|
||||
|
@ -891,14 +891,15 @@ static void Deg_EditDegreesInternal (void)
|
|||
extern const char *Hlp_CENTER_Degrees;
|
||||
extern const char *Txt_Degrees_of_CENTER_X;
|
||||
extern const char *Txt_No_types_of_degree;
|
||||
struct DegTyp_DegTypes DegTypes;
|
||||
char *Title;
|
||||
|
||||
/***** Get list of degree types *****/
|
||||
DegTyp_GetListDegreeTypes (&DegTypes,HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
|
||||
/***** Get list of degrees in the current center *****/
|
||||
Deg_GetListDegsInCurrentCtr ();
|
||||
|
||||
/***** Get list of degree types *****/
|
||||
DegTyp_GetListDegreeTypes (HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
|
||||
/***** Write menu to select country, institution and center *****/
|
||||
Hie_WriteMenuHierarchy ();
|
||||
|
||||
|
@ -909,14 +910,14 @@ static void Deg_EditDegreesInternal (void)
|
|||
Hlp_CENTER_Degrees,Box_NOT_CLOSABLE);
|
||||
free (Title);
|
||||
|
||||
if (Gbl.DegTypes.Num)
|
||||
if (Deg_DB_GetNumDegreeTypes (HieLvl_SYS))
|
||||
{
|
||||
/***** Put a form to create a new degree *****/
|
||||
Deg_PutFormToCreateDegree ();
|
||||
Deg_PutFormToCreateDegree (&DegTypes);
|
||||
|
||||
/***** Forms to edit current degrees *****/
|
||||
if (Gbl.Hierarchy.Degs.Num)
|
||||
Deg_ListDegreesForEdition ();
|
||||
Deg_ListDegreesForEdition (&DegTypes);
|
||||
}
|
||||
else // No degree types
|
||||
{
|
||||
|
@ -925,17 +926,14 @@ static void Deg_EditDegreesInternal (void)
|
|||
|
||||
/***** Form to create the first degree type *****/
|
||||
if (DegTyp_CheckIfICanCreateDegreeTypes ())
|
||||
DegTyp_EditDegreeTypes ();
|
||||
DegTyp_EditDegreeTypes (&DegTypes);
|
||||
}
|
||||
|
||||
/***** End box *****/
|
||||
Box_BoxEnd ();
|
||||
|
||||
/***** Free list of degree types *****/
|
||||
DegTyp_FreeListDegreeTypes ();
|
||||
|
||||
/***** Free list of degrees in the current center *****/
|
||||
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
|
||||
DegTyp_FreeListDegreeTypes (&DegTypes);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -73,6 +73,78 @@ void Deg_DB_CreateDegree (struct Deg_Degree *Deg,Hie_Status_t Status)
|
|||
Deg->WWW);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Get number of degree types ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Deg_DB_GetNumDegreeTypes (HieLvl_Level_t Scope)
|
||||
{
|
||||
/***** Get number of types of degree from database *****/
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get types of degree",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_types");
|
||||
case HieLvl_CTY:
|
||||
/* Get only degree types with degrees in the current country */
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get types of degree",
|
||||
"SELECT COUNT(deg_types.*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"deg_types"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegTypCod=deg_types.DegTypCod"
|
||||
" GROUP BY deg_degrees.DegTypCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case HieLvl_INS:
|
||||
/* Get only degree types with degrees in the current institution */
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get types of degree",
|
||||
"SELECT COUNT(deg_types.*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"deg_types"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegTypCod=deg_types.DegTypCod"
|
||||
" GROUP BY deg_degrees.DegTypCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case HieLvl_CTR:
|
||||
/* Get only degree types with degrees in the current center */
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get types of degree",
|
||||
"SELECT COUNT(deg_types.*)"
|
||||
" FROM deg_degrees,"
|
||||
"deg_types"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegTypCod=deg_types.DegTypCod"
|
||||
" GROUP BY deg_degrees.DegTypCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case HieLvl_DEG:
|
||||
case HieLvl_CRS:
|
||||
/* Get only degree types with degrees in the current degree */
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get types of degree",
|
||||
"SELECT COUNT(deg_types.*)"
|
||||
" FROM deg_degrees,"
|
||||
"deg_types"
|
||||
" FROM deg_degrees,"
|
||||
"deg_types"
|
||||
" WHERE deg_degrees.DegCod=%ld"
|
||||
" AND deg_degrees.DegTypCod=deg_types.DegTypCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
default:
|
||||
Err_WrongScopeExit ();
|
||||
return 0; // Not reached
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Create a list with all degree types **********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -194,7 +266,7 @@ unsigned Deg_DB_GetDegreeTypes (MYSQL_RES **mysql_res,
|
|||
/************** Get the name of a type of degree from database ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Deg_DB_GetDegTypeNameByCod (struct DegreeType *DegTyp)
|
||||
void Deg_DB_GetDegTypeNameByCod (struct DegTyp_DegreeType *DegTyp)
|
||||
{
|
||||
DB_QuerySELECTString (DegTyp->DegTypName,sizeof (DegTyp->DegTypName) - 1,
|
||||
"can not get the name of a type of degree",
|
||||
|
|
|
@ -40,9 +40,10 @@
|
|||
void Deg_DB_CreateDegreeType (const char DegTypName[DegTyp_MAX_BYTES_DEGREE_TYPE_NAME + 1]);
|
||||
void Deg_DB_CreateDegree (struct Deg_Degree *Deg,Hie_Status_t Status);
|
||||
|
||||
unsigned Deg_DB_GetNumDegreeTypes (HieLvl_Level_t Scope);
|
||||
unsigned Deg_DB_GetDegreeTypes (MYSQL_RES **mysql_res,
|
||||
HieLvl_Level_t Scope,DegTyp_Order_t Order);
|
||||
void Deg_DB_GetDegTypeNameByCod (struct DegreeType *DegTyp);
|
||||
void Deg_DB_GetDegTypeNameByCod (struct DegTyp_DegreeType *DegTyp);
|
||||
unsigned Deg_DB_GetDataOfDegreeByCod (MYSQL_RES **mysql_res,long DegCod);
|
||||
long Deg_DB_GetInsCodOfDegreeByCod (long DegCod);
|
||||
long Deg_DB_GetCtrCodOfDegreeByCod (long DegCod);
|
||||
|
|
|
@ -57,7 +57,7 @@ extern struct Globals Gbl;
|
|||
/**************************** Private variables ******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static struct DegreeType *DegTyp_EditingDegTyp = NULL; // Static variable to keep the degree type being edited
|
||||
static struct DegTyp_DegreeType *DegTyp_EditingDegTyp = NULL; // Static variable to keep the degree type being edited
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************************** Private prototypes ******************************/
|
||||
|
@ -67,17 +67,18 @@ static void DegTyp_SeeDegreeTypes (Act_Action_t NextAction,HieLvl_Level_t Scope,
|
|||
DegTyp_Order_t DefaultOrder);
|
||||
static DegTyp_Order_t DegTyp_GetParamDegTypOrder (DegTyp_Order_t DefaultOrder);
|
||||
|
||||
static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
||||
static void DegTyp_ListDegreeTypes (const struct DegTyp_DegTypes *DegTypes,
|
||||
Act_Action_t NextAction,
|
||||
HieLvl_Level_t Scope,
|
||||
DegTyp_Order_t SelectedOrder);
|
||||
|
||||
static void DegTyp_EditDegreeTypesInternal (void);
|
||||
static void DegTyp_EditDegreeTypesInternal (const struct DegTyp_DegTypes *DegTypes);
|
||||
static void DegTyp_PutIconsEditingDegreeTypes (__attribute__((unused)) void *Args);
|
||||
|
||||
static void DegTyp_ListDegreeTypesForSeeing (void);
|
||||
static void DegTyp_ListDegreeTypesForSeeing (const struct DegTyp_DegTypes *DegTypes);
|
||||
static void DegTyp_PutIconsListingDegTypes (__attribute__((unused)) void *Args);
|
||||
static void DegTyp_PutIconToEditDegTypes (__attribute__((unused)) void *Args);
|
||||
static void DegTyp_ListDegreeTypesForEdition (void);
|
||||
static void DegTyp_ListDegreeTypesForEdition (const struct DegTyp_DegTypes *DegTypes);
|
||||
|
||||
static void DegTyp_PutFormToCreateDegreeType (void);
|
||||
|
||||
|
@ -100,11 +101,12 @@ static void DegTyp_EditingDegreeTypeDestructor (void);
|
|||
void DegTyp_WriteSelectorDegreeTypes (long SelectedDegTypCod)
|
||||
{
|
||||
extern const char *Txt_Any_type_of_degree;
|
||||
struct DegTyp_DegTypes DegTypes;
|
||||
unsigned NumDegTyp;
|
||||
|
||||
/***** Form to select degree types *****/
|
||||
/* Get list of degree types */
|
||||
DegTyp_GetListDegreeTypes (HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
DegTyp_GetListDegreeTypes (&DegTypes,HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
|
||||
/* List degree types */
|
||||
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,
|
||||
|
@ -115,15 +117,15 @@ void DegTyp_WriteSelectorDegreeTypes (long SelectedDegTypCod)
|
|||
SelectedDegTypCod == -1L,false,
|
||||
"%s",Txt_Any_type_of_degree);
|
||||
for (NumDegTyp = 0;
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes.Num;
|
||||
NumDegTyp++)
|
||||
HTM_OPTION (HTM_Type_LONG,&Gbl.DegTypes.Lst[NumDegTyp].DegTypCod,
|
||||
Gbl.DegTypes.Lst[NumDegTyp].DegTypCod == SelectedDegTypCod,false,
|
||||
"%s",Gbl.DegTypes.Lst[NumDegTyp].DegTypName);
|
||||
HTM_OPTION (HTM_Type_LONG,&DegTypes.Lst[NumDegTyp].DegTypCod,
|
||||
DegTypes.Lst[NumDegTyp].DegTypCod == SelectedDegTypCod,false,
|
||||
"%s",DegTypes.Lst[NumDegTyp].DegTypName);
|
||||
HTM_SELECT_End ();
|
||||
|
||||
/***** Free list of degree types *****/
|
||||
DegTyp_FreeListDegreeTypes ();
|
||||
DegTyp_FreeListDegreeTypes (&DegTypes);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -146,18 +148,19 @@ static void DegTyp_SeeDegreeTypes (Act_Action_t NextAction,HieLvl_Level_t Scope,
|
|||
DegTyp_Order_t DefaultOrder)
|
||||
{
|
||||
DegTyp_Order_t SelectedOrder;
|
||||
struct DegTyp_DegTypes DegTypes;
|
||||
|
||||
/***** Get parameter with the type of order in the list of degree types *****/
|
||||
SelectedOrder = DegTyp_GetParamDegTypOrder (DefaultOrder);
|
||||
|
||||
/***** Get list of degree types *****/
|
||||
DegTyp_GetListDegreeTypes (Scope,SelectedOrder);
|
||||
DegTyp_GetListDegreeTypes (&DegTypes,Scope,SelectedOrder);
|
||||
|
||||
/***** List degree types *****/
|
||||
DegTyp_ListDegreeTypes (NextAction,Scope,SelectedOrder);
|
||||
DegTyp_ListDegreeTypes (&DegTypes,NextAction,Scope,SelectedOrder);
|
||||
|
||||
/***** Free list of degree types *****/
|
||||
DegTyp_FreeListDegreeTypes ();
|
||||
DegTyp_FreeListDegreeTypes (&DegTypes);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -179,7 +182,8 @@ static DegTyp_Order_t DegTyp_GetParamDegTypOrder (DegTyp_Order_t DefaultOrder)
|
|||
// - center tab => NextAction = ActSeeDegTyp
|
||||
// - statistic tab => NextAction = ActSeeUseGbl
|
||||
|
||||
static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
||||
static void DegTyp_ListDegreeTypes (const struct DegTyp_DegTypes *DegTypes,
|
||||
Act_Action_t NextAction,
|
||||
HieLvl_Level_t Scope,
|
||||
DegTyp_Order_t SelectedOrder)
|
||||
{
|
||||
|
@ -207,7 +211,7 @@ static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
|||
return;
|
||||
}
|
||||
|
||||
if (Gbl.DegTypes.Num)
|
||||
if (DegTypes->Num)
|
||||
{
|
||||
/***** Begin table *****/
|
||||
HTM_TABLE_BeginWideMarginPadding (2);
|
||||
|
@ -216,7 +220,7 @@ static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
|||
DegTyp_PutHeadDegreeTypesForSeeing (NextAction,Scope,SelectedOrder);
|
||||
|
||||
/***** List current degree types for seeing *****/
|
||||
DegTyp_ListDegreeTypesForSeeing ();
|
||||
DegTyp_ListDegreeTypesForSeeing (DegTypes);
|
||||
|
||||
/***** End table *****/
|
||||
HTM_TABLE_End ();
|
||||
|
@ -228,8 +232,8 @@ static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
|||
if (DegTyp_CheckIfICanCreateDegreeTypes ())
|
||||
{
|
||||
Frm_BeginForm (ActEdiDegTyp);
|
||||
Btn_PutConfirmButton (Gbl.DegTypes.Num ? Txt_Create_another_type_of_degree :
|
||||
Txt_Create_type_of_degree);
|
||||
Btn_PutConfirmButton (DegTypes->Num ? Txt_Create_another_type_of_degree :
|
||||
Txt_Create_type_of_degree);
|
||||
Frm_EndForm ();
|
||||
}
|
||||
|
||||
|
@ -241,26 +245,27 @@ static void DegTyp_ListDegreeTypes (Act_Action_t NextAction,
|
|||
/************************ Put forms to edit degree types *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void DegTyp_EditDegreeTypes (void)
|
||||
void DegTyp_GetAndEditDegreeTypes (void)
|
||||
{
|
||||
struct DegTyp_DegTypes DegTypes;
|
||||
|
||||
DegTyp_GetListDegreeTypes (&DegTypes,HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
DegTyp_EditDegreeTypes (&DegTypes);
|
||||
DegTyp_FreeListDegreeTypes (&DegTypes);
|
||||
}
|
||||
|
||||
void DegTyp_EditDegreeTypes (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
/***** Degree type constructor *****/
|
||||
DegTyp_EditingDegreeTypeConstructor ();
|
||||
|
||||
/***** Edit degree types *****/
|
||||
DegTyp_EditDegreeTypesInternal ();
|
||||
|
||||
/***** Degree type destructor *****/
|
||||
DegTyp_EditDegreeTypesInternal (DegTypes);
|
||||
DegTyp_EditingDegreeTypeDestructor ();
|
||||
}
|
||||
|
||||
static void DegTyp_EditDegreeTypesInternal (void)
|
||||
static void DegTyp_EditDegreeTypesInternal (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
extern const char *Hlp_CENTER_DegreeTypes_edit;
|
||||
extern const char *Txt_Types_of_degree;
|
||||
|
||||
/***** Get list of degree types *****/
|
||||
DegTyp_GetListDegreeTypes (HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
|
||||
/***** Begin box *****/
|
||||
Box_BoxBegin (NULL,Txt_Types_of_degree,
|
||||
DegTyp_PutIconsEditingDegreeTypes,NULL,
|
||||
|
@ -270,14 +275,11 @@ static void DegTyp_EditDegreeTypesInternal (void)
|
|||
DegTyp_PutFormToCreateDegreeType ();
|
||||
|
||||
/***** Forms to edit current degree types *****/
|
||||
if (Gbl.DegTypes.Num)
|
||||
DegTyp_ListDegreeTypesForEdition ();
|
||||
if (DegTypes->Num)
|
||||
DegTyp_ListDegreeTypesForEdition (DegTypes);
|
||||
|
||||
/***** End box *****/
|
||||
Box_BoxEnd ();
|
||||
|
||||
/***** Free list of degree types *****/
|
||||
DegTyp_FreeListDegreeTypes ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -311,17 +313,17 @@ void DegTyp_PutIconToViewDegreeTypes (void)
|
|||
/******************* List current degree types for seeing ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void DegTyp_ListDegreeTypesForSeeing (void)
|
||||
static void DegTyp_ListDegreeTypesForSeeing (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
unsigned NumDegTyp;
|
||||
const char *BgColor;
|
||||
|
||||
/***** List degree types with forms for edition *****/
|
||||
for (NumDegTyp = 0, The_ResetRowColor ();
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes->Num;
|
||||
NumDegTyp++, The_ChangeRowColor ())
|
||||
{
|
||||
BgColor = (Gbl.DegTypes.Lst[NumDegTyp].DegTypCod ==
|
||||
BgColor = (DegTypes->Lst[NumDegTyp].DegTypCod ==
|
||||
Gbl.Hierarchy.Deg.DegTypCod) ? "BG_HIGHLIGHT" :
|
||||
The_GetColorRows ();
|
||||
|
||||
|
@ -337,13 +339,13 @@ static void DegTyp_ListDegreeTypesForSeeing (void)
|
|||
/* Name of degree type */
|
||||
HTM_TD_Begin ("class=\"LM DAT_STRONG_%s %s\"",
|
||||
The_GetSuffix (),BgColor);
|
||||
HTM_Txt (Gbl.DegTypes.Lst[NumDegTyp].DegTypName);
|
||||
HTM_Txt (DegTypes->Lst[NumDegTyp].DegTypName);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Number of degrees of this type */
|
||||
HTM_TD_Begin ("class=\"RM DAT_STRONG_%s %s\"",
|
||||
The_GetSuffix (),BgColor);
|
||||
HTM_Unsigned (Gbl.DegTypes.Lst[NumDegTyp].NumDegs);
|
||||
HTM_Unsigned (DegTypes->Lst[NumDegTyp].NumDegs);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* End table row */
|
||||
|
@ -383,7 +385,7 @@ static void DegTyp_PutIconToEditDegTypes (__attribute__((unused)) void *Args)
|
|||
/******************* List current degree types for edition *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void DegTyp_ListDegreeTypesForEdition (void)
|
||||
static void DegTyp_ListDegreeTypesForEdition (const struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
unsigned NumDegTyp;
|
||||
|
||||
|
@ -395,7 +397,7 @@ static void DegTyp_ListDegreeTypesForEdition (void)
|
|||
|
||||
/***** List degree types with forms for edition *****/
|
||||
for (NumDegTyp = 0;
|
||||
NumDegTyp < Gbl.DegTypes.Num;
|
||||
NumDegTyp < DegTypes->Num;
|
||||
NumDegTyp++)
|
||||
{
|
||||
/* Begin table row */
|
||||
|
@ -403,24 +405,25 @@ static void DegTyp_ListDegreeTypesForEdition (void)
|
|||
|
||||
/* Put icon to remove degree type */
|
||||
HTM_TD_Begin ("class=\"BM\"");
|
||||
if (Gbl.DegTypes.Lst[NumDegTyp].NumDegs) // Degree type has degrees => deletion forbidden
|
||||
if (DegTypes->Lst[NumDegTyp].NumDegs) // Degree type has degrees => deletion forbidden
|
||||
Ico_PutIconRemovalNotAllowed ();
|
||||
else
|
||||
Ico_PutContextualIconToRemove (ActRemDegTyp,NULL,
|
||||
DegTyp_PutParamOtherDegTypCod,&Gbl.DegTypes.Lst[NumDegTyp].DegTypCod);
|
||||
DegTyp_PutParamOtherDegTypCod,
|
||||
&DegTypes->Lst[NumDegTyp].DegTypCod);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Degree type code */
|
||||
HTM_TD_Begin ("class=\"DAT_%s CODE\"",The_GetSuffix ());
|
||||
HTM_Long (Gbl.DegTypes.Lst[NumDegTyp].DegTypCod);
|
||||
HTM_Long (DegTypes->Lst[NumDegTyp].DegTypCod);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Name of degree type */
|
||||
HTM_TD_Begin ("class=\"LM\"");
|
||||
Frm_BeginForm (ActRenDegTyp);
|
||||
DegTyp_PutParamOtherDegTypCod (&Gbl.DegTypes.Lst[NumDegTyp].DegTypCod);
|
||||
DegTyp_PutParamOtherDegTypCod (&DegTypes->Lst[NumDegTyp].DegTypCod);
|
||||
HTM_INPUT_TEXT ("DegTypName",DegTyp_MAX_CHARS_DEGREE_TYPE_NAME,
|
||||
Gbl.DegTypes.Lst[NumDegTyp].DegTypName,
|
||||
DegTypes->Lst[NumDegTyp].DegTypName,
|
||||
HTM_SUBMIT_ON_CHANGE,
|
||||
"size=\"25\" class=\"INPUT_%s\""
|
||||
" required=\"required\"",
|
||||
|
@ -430,7 +433,7 @@ static void DegTyp_ListDegreeTypesForEdition (void)
|
|||
|
||||
/* Number of degrees of this type */
|
||||
HTM_TD_Begin ("class=\"RM DAT_%s\"",The_GetSuffix ());
|
||||
HTM_Unsigned (Gbl.DegTypes.Lst[NumDegTyp].NumDegs);
|
||||
HTM_Unsigned (DegTypes->Lst[NumDegTyp].NumDegs);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* End table row */
|
||||
|
@ -586,41 +589,43 @@ static void DegTyp_PutHeadDegreeTypesForEdition (void)
|
|||
/****************** Create a list with all degree types **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void DegTyp_GetListDegreeTypes (HieLvl_Level_t Scope,DegTyp_Order_t Order)
|
||||
void DegTyp_GetListDegreeTypes (struct DegTyp_DegTypes *DegTypes,
|
||||
HieLvl_Level_t Scope,DegTyp_Order_t Order)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumTyp;
|
||||
|
||||
/***** Get types of degree from database *****/
|
||||
Gbl.DegTypes.Num = Deg_DB_GetDegreeTypes (&mysql_res,Scope,Order);
|
||||
DegTypes->Num = Deg_DB_GetDegreeTypes (&mysql_res,Scope,Order);
|
||||
DegTypes->Lst = NULL;
|
||||
|
||||
/***** Get degree types *****/
|
||||
if (Gbl.DegTypes.Num)
|
||||
if (DegTypes->Num)
|
||||
{
|
||||
/***** Create a list of degree types *****/
|
||||
if ((Gbl.DegTypes.Lst = calloc (Gbl.DegTypes.Num,
|
||||
sizeof (*Gbl.DegTypes.Lst))) == NULL)
|
||||
if ((DegTypes->Lst = calloc ((size_t) DegTypes->Num,
|
||||
sizeof (struct DegTyp_DegreeType))) == NULL)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
|
||||
/***** Get degree types *****/
|
||||
for (NumTyp = 0;
|
||||
NumTyp < Gbl.DegTypes.Num;
|
||||
NumTyp < DegTypes->Num;
|
||||
NumTyp++)
|
||||
{
|
||||
/* Get next degree type */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Get degree type code (row[0]) */
|
||||
if ((Gbl.DegTypes.Lst[NumTyp].DegTypCod = Str_ConvertStrCodToLongCod (row[0])) <= 0)
|
||||
if ((DegTypes->Lst[NumTyp].DegTypCod = Str_ConvertStrCodToLongCod (row[0])) <= 0)
|
||||
Err_WrongDegTypExit ();
|
||||
|
||||
/* Get degree type name (row[1]) */
|
||||
Str_Copy (Gbl.DegTypes.Lst[NumTyp].DegTypName,row[1],
|
||||
sizeof (Gbl.DegTypes.Lst[NumTyp].DegTypName) - 1);
|
||||
Str_Copy (DegTypes->Lst[NumTyp].DegTypName,row[1],
|
||||
sizeof (DegTypes->Lst[NumTyp].DegTypName) - 1);
|
||||
|
||||
/* Number of degrees of this type (row[2]) */
|
||||
if (sscanf (row[2],"%u",&Gbl.DegTypes.Lst[NumTyp].NumDegs) != 1)
|
||||
if (sscanf (row[2],"%u",&DegTypes->Lst[NumTyp].NumDegs) != 1)
|
||||
Err_ShowErrorAndExit ("Error when getting number of degrees of a type");
|
||||
}
|
||||
}
|
||||
|
@ -633,14 +638,14 @@ void DegTyp_GetListDegreeTypes (HieLvl_Level_t Scope,DegTyp_Order_t Order)
|
|||
/********* Free list of degree types and list of degrees of each type ********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void DegTyp_FreeListDegreeTypes (void)
|
||||
void DegTyp_FreeListDegreeTypes (struct DegTyp_DegTypes *DegTypes)
|
||||
{
|
||||
/***** Free memory used by the list of degree types *****/
|
||||
if (Gbl.DegTypes.Lst)
|
||||
if (DegTypes->Num && DegTypes->Lst)
|
||||
{
|
||||
free (Gbl.DegTypes.Lst);
|
||||
Gbl.DegTypes.Lst = NULL;
|
||||
Gbl.DegTypes.Num = 0;
|
||||
free (DegTypes->Lst);
|
||||
DegTypes->Lst = NULL;
|
||||
DegTypes->Num = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -745,7 +750,7 @@ long DegTyp_GetAndCheckParamOtherDegTypCod (long MinCodAllowed)
|
|||
/****************** Get data of a degree type from its code ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool DegTyp_GetDataOfDegreeTypeByCod (struct DegreeType *DegTyp)
|
||||
bool DegTyp_GetDataOfDegreeTypeByCod (struct DegTyp_DegreeType *DegTyp)
|
||||
{
|
||||
/***** Trivial check: code of degree type should be >= 0 *****/
|
||||
if (DegTyp->DegTypCod <= 0)
|
||||
|
@ -871,11 +876,15 @@ void DegTyp_RenameDegreeType (void)
|
|||
|
||||
void DegTyp_ContEditAfterChgDegTyp (void)
|
||||
{
|
||||
struct DegTyp_DegTypes DegTypes;
|
||||
|
||||
/***** Show possible delayed alerts *****/
|
||||
Ale_ShowAlerts (NULL);
|
||||
|
||||
/***** Show the form again *****/
|
||||
DegTyp_EditDegreeTypesInternal ();
|
||||
DegTyp_GetListDegreeTypes (&DegTypes,HieLvl_SYS,DegTyp_ORDER_BY_DEGREE_TYPE);
|
||||
DegTyp_EditDegreeTypesInternal (&DegTypes);
|
||||
DegTyp_FreeListDegreeTypes (&DegTypes);
|
||||
|
||||
/***** Degree type destructor *****/
|
||||
DegTyp_EditingDegreeTypeDestructor ();
|
||||
|
|
|
@ -40,13 +40,19 @@
|
|||
/******************************* Public types ********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
struct DegreeType
|
||||
struct DegTyp_DegreeType
|
||||
{
|
||||
long DegTypCod; // Degree type code
|
||||
char DegTypName[DegTyp_MAX_BYTES_DEGREE_TYPE_NAME + 1]; // Degree type name
|
||||
unsigned NumDegs; // Number of degrees of this type
|
||||
};
|
||||
|
||||
struct DegTyp_DegTypes
|
||||
{
|
||||
unsigned Num; // Number of degree types
|
||||
struct DegTyp_DegreeType *Lst; // List of degree types
|
||||
};
|
||||
|
||||
#define DegTyp_NUM_ORDERS 2
|
||||
typedef enum
|
||||
{
|
||||
|
@ -62,14 +68,16 @@ void DegTyp_WriteSelectorDegreeTypes (long SelectedDegTypCod);
|
|||
|
||||
void DegTyp_SeeDegreeTypesInDegTab (void);
|
||||
void DegTyp_SeeDegreeTypesInStaTab (void);
|
||||
void DegTyp_EditDegreeTypes (void);
|
||||
void DegTyp_GetAndEditDegreeTypes (void);
|
||||
void DegTyp_EditDegreeTypes (const struct DegTyp_DegTypes *DegTypes);
|
||||
|
||||
void DegTyp_PutIconToViewDegreeTypes (void);
|
||||
|
||||
bool DegTyp_CheckIfICanCreateDegreeTypes (void);
|
||||
|
||||
void DegTyp_GetListDegreeTypes (HieLvl_Level_t Scope,DegTyp_Order_t Order);
|
||||
void DegTyp_FreeListDegreeTypes (void);
|
||||
void DegTyp_GetListDegreeTypes (struct DegTyp_DegTypes *DegTypes,
|
||||
HieLvl_Level_t Scope,DegTyp_Order_t Order);
|
||||
void DegTyp_FreeListDegreeTypes (struct DegTyp_DegTypes *DegTypes);
|
||||
|
||||
void DegTyp_ReceiveFormNewDegreeType (void);
|
||||
|
||||
|
@ -77,7 +85,7 @@ void DegTyp_RemoveDegreeType (void);
|
|||
|
||||
long DegTyp_GetAndCheckParamOtherDegTypCod (long MinCodAllowed);
|
||||
|
||||
bool DegTyp_GetDataOfDegreeTypeByCod (struct DegreeType *DegTyp);
|
||||
bool DegTyp_GetDataOfDegreeTypeByCod (struct DegTyp_DegreeType *DegTyp);
|
||||
void DegTyp_RenameDegreeType (void);
|
||||
|
||||
void DegTyp_ContEditAfterChgDegTyp (void);
|
||||
|
|
|
@ -191,9 +191,6 @@ void Gbl_InitializeGlobals (void)
|
|||
Gbl.Hierarchy.Crs.ShrtName[0] =
|
||||
Gbl.Hierarchy.Crs.FullName[0] = '\0';
|
||||
|
||||
Gbl.DegTypes.Num = 0;
|
||||
Gbl.DegTypes.Lst = NULL;
|
||||
|
||||
Gbl.Crs.Info.ShowMsgMustBeRead = 0;
|
||||
|
||||
Gbl.Crs.Notices.HighlightNotCod = -1L; // No notice highlighted
|
||||
|
@ -314,7 +311,6 @@ void Gbl_Cleanup (void)
|
|||
Grp_FreeListCodSelectedGrps ();
|
||||
Crs_FreeListCoursesInCurrentDegree ();
|
||||
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
|
||||
DegTyp_FreeListDegreeTypes ();
|
||||
Ins_FreeListInstitutions ();
|
||||
Ctr_FreeListCenters ();
|
||||
Cty_FreeListCountries ();
|
||||
|
|
|
@ -100,11 +100,6 @@ struct Globals
|
|||
struct Crs_ListCourses Crss; // List of courses in current degree
|
||||
struct Crs_Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs.
|
||||
} Hierarchy;
|
||||
struct
|
||||
{
|
||||
unsigned Num; // Number of degree types
|
||||
struct DegreeType *Lst; // List of degree types
|
||||
} DegTypes;
|
||||
struct
|
||||
{
|
||||
Sch_WhatToSearch_t WhatToSearch;
|
||||
|
|
Loading…
Reference in New Issue