Version18.101

This commit is contained in:
Antonio Cañas Vargas 2019-04-08 12:01:08 +02:00
parent dacd85bb3b
commit bafd41dbe7
6 changed files with 98 additions and 40 deletions

View File

@ -464,10 +464,13 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.100 (2019-04-07)"
#define Log_PLATFORM_VERSION "SWAD 18.101 (2019-04-08)"
#define CSS_FILE "swad18.92.css"
#define JS_FILE "swad18.92.js"
/*
¿Por qué Crs_RemoveCourse () no está como función a priori igual que las otras? Ver si se puede poner a priori
En degree, centre, institution y country, hacer más funciones a priori al estilo de como está hecha la edición de course
Version 18.101: Apr 08, 2019 Code refactoring in edition of degree types. (241926 lines)
Version 18.100: Apr 07, 2019 Code refactoring in edition of courses. (241882 lines)
Version 18.99: Apr 07, 2019 Code refactoring in edition of degrees. (241822 lines)
Version 18.98: Apr 06, 2019 Code refactoring in edition of centres. (241762 lines)

View File

@ -2190,8 +2190,7 @@ void Deg_ChangeDegreeType (void)
DB_QueryUPDATE ("can not update the type of a degree",
"UPDATE degrees SET DegTypCod=%ld WHERE DegCod=%ld",
NewDegTypCod,Deg_EditingDeg->DegCod);
Gbl.DegTypes.EditingDegTyp.DegTypCod =
Deg_EditingDeg->DegTypCod = NewDegTypCod;
Deg_EditingDeg->DegTypCod = NewDegTypCod;
/***** Write alert to show the change made
and put button to go to degree changed *****/

View File

@ -50,19 +50,21 @@
extern struct Globals Gbl;
/*****************************************************************************/
/*************************** Public constants ********************************/
/**************************** Public constants *******************************/
/*****************************************************************************/
/*****************************************************************************/
/***************************** Private types *********************************/
/****************************** Private types ********************************/
/*****************************************************************************/
/*****************************************************************************/
/**************************** Private constants ******************************/
/**************************** Private variables ******************************/
/*****************************************************************************/
static struct DegreeType *DT_EditingDegTyp = NULL; // Static variable to keep the degree type beeing edited
/*****************************************************************************/
/**************************** Private prototypes *****************************/
/*************************** Private prototypes ******************************/
/*****************************************************************************/
static void DT_SeeDegreeTypes (Act_Action_t NextAction,Hie_Level_t Scope,
@ -71,6 +73,7 @@ static DT_Order_t DT_GetParamDegTypOrder (DT_Order_t DefaultOrder);
static void DT_ListDegreeTypes (Act_Action_t NextAction,DT_Order_t SelectedOrder);
static void DT_EditDegreeTypesInternal (void);
static void DT_PutIconsEditingDegreeTypes (void);
static void DT_ListDegreeTypesForSeeing (void);
@ -78,6 +81,8 @@ static void DT_PutIconsListingDegTypes (void);
static void DT_PutIconToEditDegTypes (void);
static void DT_ListDegreeTypesForEdition (void);
static void DT_PutFormToCreateDegreeType (void);
static void DT_PutHeadDegreeTypesForSeeing (Act_Action_t NextAction,DT_Order_t SelectedOrder);
static void DT_PutHeadDegreeTypesForEdition (void);
static void DT_CreateDegreeType (struct DegreeType *DegTyp);
@ -88,6 +93,9 @@ static unsigned DT_CountNumDegsOfType (long DegTypCod);
static void DT_RemoveDegreeTypeCompletely (long DegTypCod);
static bool DT_CheckIfDegreeTypeNameExists (const char *DegTypName,long DegTypCod);
static void DT_EditingDegreeTypeConstructor (void);
static void DT_EditingDegreeTypeDestructor (void);
/*****************************************************************************/
/************** Show selector of degree types for statistics *****************/
/*****************************************************************************/
@ -237,6 +245,18 @@ static void DT_ListDegreeTypes (Act_Action_t NextAction,DT_Order_t SelectedOrder
/*****************************************************************************/
void DT_EditDegreeTypes (void)
{
/***** Degree type constructor *****/
DT_EditingDegreeTypeConstructor ();
/***** Edit degree types *****/
DT_EditDegreeTypesInternal ();
/***** Degree type destructor *****/
DT_EditingDegreeTypeDestructor ();
}
static void DT_EditDegreeTypesInternal (void)
{
extern const char *Hlp_CENTRE_DegreeTypes_edit;
extern const char *Txt_Types_of_degree;
@ -437,7 +457,7 @@ bool DT_CheckIfICanCreateDegreeTypes (void)
/******************** Put a form to create a new degree type *****************/
/*****************************************************************************/
void DT_PutFormToCreateDegreeType (void)
static void DT_PutFormToCreateDegreeType (void)
{
extern const char *Txt_New_type_of_degree;
extern const char *Txt_Create_type_of_degree;
@ -465,7 +485,7 @@ void DT_PutFormToCreateDegreeType (void)
" size=\"25\" maxlength=\"%u\" value=\"%s\""
" required=\"required\" />"
"</td>",
Deg_MAX_CHARS_DEGREE_TYPE_NAME,Gbl.DegTypes.EditingDegTyp.DegTypName);
Deg_MAX_CHARS_DEGREE_TYPE_NAME,DT_EditingDegTyp->DegTypName);
/***** Number of degrees of this degree type ****/
fprintf (Gbl.F.Out,"<td class=\"DAT RIGHT_MIDDLE\">"
@ -723,28 +743,31 @@ void DT_RecFormNewDegreeType (void)
{
extern const char *Txt_The_type_of_degree_X_already_exists;
extern const char *Txt_You_must_specify_the_name_of_the_new_type_of_degree;
struct DegreeType *DegTyp;
DegTyp = &Gbl.DegTypes.EditingDegTyp;
/***** Degree type constructor *****/
DT_EditingDegreeTypeConstructor ();
/***** Get parameters from form *****/
/* Get the name of degree type */
Par_GetParToText ("DegTypName",DegTyp->DegTypName,Deg_MAX_BYTES_DEGREE_TYPE_NAME);
Par_GetParToText ("DegTypName",DT_EditingDegTyp->DegTypName,Deg_MAX_BYTES_DEGREE_TYPE_NAME);
if (DegTyp->DegTypName[0]) // If there's a degree type name
if (DT_EditingDegTyp->DegTypName[0]) // If there's a degree type name
{
/***** If name of degree type was in database... *****/
if (DT_CheckIfDegreeTypeNameExists (DegTyp->DegTypName,-1L))
if (DT_CheckIfDegreeTypeNameExists (DT_EditingDegTyp->DegTypName,-1L))
Ale_ShowAlert (Ale_WARNING,Txt_The_type_of_degree_X_already_exists,
DegTyp->DegTypName);
DT_EditingDegTyp->DegTypName);
else // Add new degree type to database
DT_CreateDegreeType (DegTyp);
DT_CreateDegreeType (DT_EditingDegTyp);
}
else // If there is not a degree type name
Ale_ShowAlert (Ale_WARNING,Txt_You_must_specify_the_name_of_the_new_type_of_degree);
/***** Show the form again *****/
DT_EditDegreeTypes ();
DT_EditDegreeTypesInternal ();
/***** Degree type destructor *****/
DT_EditingDegreeTypeDestructor ();
}
/*****************************************************************************/
@ -755,30 +778,35 @@ void DT_RemoveDegreeType (void)
{
extern const char *Txt_To_remove_a_type_of_degree_you_must_first_remove_all_degrees_of_that_type;
extern const char *Txt_Type_of_degree_X_removed;
struct DegreeType DegTyp;
/***** Degree type constructor *****/
DT_EditingDegreeTypeConstructor ();
/***** Get the code of the degree type *****/
DegTyp.DegTypCod = DT_GetAndCheckParamOtherDegTypCod (1);
DT_EditingDegTyp->DegTypCod = DT_GetAndCheckParamOtherDegTypCod (1);
/***** Get data of the degree type from database *****/
if (!DT_GetDataOfDegreeTypeByCod (&DegTyp))
if (!DT_GetDataOfDegreeTypeByCod (DT_EditingDegTyp))
Lay_ShowErrorAndExit ("Code of type of degree not found.");
/***** Check if this degree type has degrees *****/
if (DegTyp.NumDegs) // Degree type has degrees => don't remove
if (DT_EditingDegTyp->NumDegs) // Degree type has degrees => don't remove
Ale_ShowAlert (Ale_WARNING,Txt_To_remove_a_type_of_degree_you_must_first_remove_all_degrees_of_that_type);
else // Degree type has no degrees => remove it
{
/***** Remove degree type *****/
DT_RemoveDegreeTypeCompletely (DegTyp.DegTypCod);
DT_RemoveDegreeTypeCompletely (DT_EditingDegTyp->DegTypCod);
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Type_of_degree_X_removed,
DegTyp.DegTypName);
DT_EditingDegTyp->DegTypName);
}
/***** Show the form again *****/
DT_EditDegreeTypes ();
DT_EditDegreeTypesInternal ();
/***** Degree type destructor *****/
DT_EditingDegreeTypeDestructor ();
}
/*****************************************************************************/
@ -924,34 +952,34 @@ void DT_RenameDegreeType (void)
extern const char *Txt_The_type_of_degree_X_already_exists;
extern const char *Txt_The_type_of_degree_X_has_been_renamed_as_Y;
extern const char *Txt_The_name_of_the_type_of_degree_X_has_not_changed;
struct DegreeType *DegTyp;
char NewNameDegTyp[Deg_MAX_BYTES_DEGREE_TYPE_NAME + 1];
DegTyp = &Gbl.DegTypes.EditingDegTyp;
/***** Degree type constructor *****/
DT_EditingDegreeTypeConstructor ();
/***** Get parameters from form *****/
/* Get the code of the degree type */
DegTyp->DegTypCod = DT_GetAndCheckParamOtherDegTypCod (1);
DT_EditingDegTyp->DegTypCod = DT_GetAndCheckParamOtherDegTypCod (1);
/* Get the new name for the degree type */
Par_GetParToText ("DegTypName",NewNameDegTyp,Deg_MAX_BYTES_DEGREE_TYPE_NAME);
/***** Get from the database the old name of the degree type *****/
if (!DT_GetDataOfDegreeTypeByCod (DegTyp))
if (!DT_GetDataOfDegreeTypeByCod (DT_EditingDegTyp))
Lay_ShowErrorAndExit ("Code of type of degree not found.");
/***** Check if new name is empty *****/
if (!NewNameDegTyp[0])
Ale_ShowAlert (Ale_WARNING,Txt_You_can_not_leave_the_name_of_the_type_of_degree_X_empty,
DegTyp->DegTypName);
DT_EditingDegTyp->DegTypName);
else
{
/***** Check if old and new names are the same
(this happens when return is pressed without changes) *****/
if (strcmp (DegTyp->DegTypName,NewNameDegTyp)) // Different names
if (strcmp (DT_EditingDegTyp->DegTypName,NewNameDegTyp)) // Different names
{
/***** If degree type was in database... *****/
if (DT_CheckIfDegreeTypeNameExists (NewNameDegTyp,DegTyp->DegTypCod))
if (DT_CheckIfDegreeTypeNameExists (NewNameDegTyp,DT_EditingDegTyp->DegTypCod))
Ale_ShowAlert (Ale_WARNING,Txt_The_type_of_degree_X_already_exists,
NewNameDegTyp);
else
@ -960,11 +988,11 @@ void DT_RenameDegreeType (void)
DB_QueryUPDATE ("can not update the type of a degree",
"UPDATE deg_types SET DegTypName='%s'"
" WHERE DegTypCod=%ld",
NewNameDegTyp,DegTyp->DegTypCod);
NewNameDegTyp,DT_EditingDegTyp->DegTypCod);
/* Write message to show the change made */
Ale_ShowAlert (Ale_SUCCESS,Txt_The_type_of_degree_X_has_been_renamed_as_Y,
DegTyp->DegTypName,NewNameDegTyp);
DT_EditingDegTyp->DegTypName,NewNameDegTyp);
}
}
else // The same name
@ -973,9 +1001,12 @@ void DT_RenameDegreeType (void)
}
/***** Show the form again *****/
Str_Copy (DegTyp->DegTypName,NewNameDegTyp,
Str_Copy (DT_EditingDegTyp->DegTypName,NewNameDegTyp,
Deg_MAX_BYTES_DEGREE_TYPE_NAME);
DT_EditDegreeTypes ();
DT_EditDegreeTypesInternal ();
/***** Degree type destructor *****/
DT_EditingDegreeTypeDestructor ();
}
/*****************************************************************************/
@ -991,3 +1022,33 @@ static bool DT_CheckIfDegreeTypeNameExists (const char *DegTypName,long DegTypCo
" WHERE DegTypName='%s' AND DegTypCod<>%ld",
DegTypName,DegTypCod) != 0);
}
/*****************************************************************************/
/********************* Degree type constructor/destructor ********************/
/*****************************************************************************/
static void DT_EditingDegreeTypeConstructor (void)
{
/***** Pointer must be NULL *****/
if (DT_EditingDegTyp != NULL)
Lay_ShowErrorAndExit ("Error initializing degree type.");
/***** Allocate memory for degree type *****/
if ((DT_EditingDegTyp = (struct DegreeType *) malloc (sizeof (struct DegreeType))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for degree type.");
/***** Reset degree type *****/
DT_EditingDegTyp->DegTypCod = -1L;
DT_EditingDegTyp->DegTypName[0] = '\0';
DT_EditingDegTyp->NumDegs = 0;
}
static void DT_EditingDegreeTypeDestructor (void)
{
/***** Free memory used for degree type *****/
if (DT_EditingDegTyp != NULL)
{
free ((void *) DT_EditingDegTyp);
DT_EditingDegTyp = NULL;
}
}

View File

@ -67,7 +67,6 @@ void DT_EditDegreeTypes (void);
void DT_PutIconToViewDegreeTypes (void);
bool DT_CheckIfICanCreateDegreeTypes (void);
void DT_PutFormToCreateDegreeType (void);
void DT_GetListDegreeTypes (Hie_Level_t Scope,DT_Order_t Order);
void DT_FreeListDegreeTypes (void);

View File

@ -275,9 +275,6 @@ void Gbl_InitializeGlobals (void)
Gbl.DegTypes.Num = 0;
Gbl.DegTypes.Lst = NULL;
Gbl.DegTypes.EditingDegTyp.DegTypCod = -1L;
Gbl.DegTypes.EditingDegTyp.DegTypName[0] = '\0';
Gbl.Crs.Grps.NumGrps = 0;
Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT;
Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL;

View File

@ -218,7 +218,6 @@ struct Globals
{
unsigned Num; // Number of degree types
struct DegreeType *Lst; // List of degree types
struct DegreeType EditingDegTyp;
} DegTypes;
struct
{