Version18.100

This commit is contained in:
Antonio Cañas Vargas 2019-04-07 19:49:53 +02:00
parent ab671d9447
commit dacd85bb3b
8 changed files with 176 additions and 96 deletions

View File

@ -75,7 +75,7 @@ extern struct Globals Gbl;
/***************************** Private variables *****************************/ /***************************** Private variables *****************************/
/*****************************************************************************/ /*****************************************************************************/
static struct Centre *Ctr_EditingCtr = NULL; // Static variable to keep centre beeing edited static struct Centre *Ctr_EditingCtr = NULL; // Static variable to keep the centre beeing edited
/*****************************************************************************/ /*****************************************************************************/
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
@ -3058,7 +3058,7 @@ static void Ctr_EditingCentreConstructor (void)
static void Ctr_EditingCentreDestructor (void) static void Ctr_EditingCentreDestructor (void)
{ {
/***** Free memory used for institution *****/ /***** Free memory used for centre *****/
if (Ctr_EditingCtr != NULL) if (Ctr_EditingCtr != NULL)
{ {
free ((void *) Ctr_EditingCtr); free ((void *) Ctr_EditingCtr);

View File

@ -464,10 +464,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 18.99 (2019-04-07)" #define Log_PLATFORM_VERSION "SWAD 18.100 (2019-04-07)"
#define CSS_FILE "swad18.92.css" #define CSS_FILE "swad18.92.css"
#define JS_FILE "swad18.92.js" #define JS_FILE "swad18.92.js"
/* /*
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.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) Version 18.98: Apr 06, 2019 Code refactoring in edition of centres. (241762 lines)
Version 18.97: Apr 06, 2019 Code refactoring in edition of institutions. (241699 lines) Version 18.97: Apr 06, 2019 Code refactoring in edition of institutions. (241699 lines)

View File

@ -70,9 +70,11 @@ extern struct Globals Gbl;
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/**************************** Private constants ******************************/ /**************************** Private variables ******************************/
/*****************************************************************************/ /*****************************************************************************/
static struct Course *Crs_EditingCrs = NULL; // Static variable to keep the course beeing edited
/*****************************************************************************/ /*****************************************************************************/
/**************************** Private prototypes *****************************/ /**************************** Private prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -90,6 +92,7 @@ static void Crs_PutIconsListCourses (void);
static void Crs_PutIconToEditCourses (void); static void Crs_PutIconToEditCourses (void);
static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year); static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year);
static void Crs_EditCoursesInternal (void);
static void Crs_PutIconsEditingCourses (void); static void Crs_PutIconsEditingCourses (void);
static void Crs_PutIconToViewCourses (void); static void Crs_PutIconToViewCourses (void);
static void Crs_ListCoursesForEdition (void); static void Crs_ListCoursesForEdition (void);
@ -132,6 +135,9 @@ static long Crs_GetAndCheckParamOtherCrsCod (long MinCodAllowed);
static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnAccepted); static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnAccepted);
static void Crs_EditingCourseConstructor (void);
static void Crs_EditingCourseDestructor (void);
/*****************************************************************************/ /*****************************************************************************/
/***************** Show introduction to the current course *******************/ /***************** Show introduction to the current course *******************/
/*****************************************************************************/ /*****************************************************************************/
@ -1339,6 +1345,18 @@ static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year)
/*****************************************************************************/ /*****************************************************************************/
void Crs_EditCourses (void) void Crs_EditCourses (void)
{
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Edit courses *****/
Crs_EditCoursesInternal ();
/***** Course destructor *****/
Crs_EditingCourseDestructor ();
}
static void Crs_EditCoursesInternal (void)
{ {
extern const char *Hlp_DEGREE_Courses; extern const char *Hlp_DEGREE_Courses;
extern const char *Txt_Courses_of_DEGREE_X; extern const char *Txt_Courses_of_DEGREE_X;
@ -1699,7 +1717,7 @@ static void Crs_PutFormToCreateCourse (void)
" class=\"INPUT_INS_CODE\" />" " class=\"INPUT_INS_CODE\" />"
"</td>", "</td>",
Crs_MAX_CHARS_INSTITUTIONAL_CRS_COD, Crs_MAX_CHARS_INSTITUTIONAL_CRS_COD,
Gbl.Crss.EditingCrs.InstitutionalCrsCod); Crs_EditingCrs->InstitutionalCrsCod);
/***** Year *****/ /***** Year *****/
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">"
@ -1709,8 +1727,8 @@ static void Crs_PutFormToCreateCourse (void)
Year++) Year++)
fprintf (Gbl.F.Out,"<option value=\"%u\"%s>%s</option>", fprintf (Gbl.F.Out,"<option value=\"%u\"%s>%s</option>",
Year, Year,
Year == Gbl.Crss.EditingCrs.Year ? " selected=\"selected\"" : Year == Crs_EditingCrs->Year ? " selected=\"selected\"" :
"", "",
Txt_YEAR_OF_DEGREE[Year]); Txt_YEAR_OF_DEGREE[Year]);
fprintf (Gbl.F.Out,"</select>" fprintf (Gbl.F.Out,"</select>"
"</td>"); "</td>");
@ -1722,7 +1740,7 @@ static void Crs_PutFormToCreateCourse (void)
" class=\"INPUT_SHORT_NAME\"" " class=\"INPUT_SHORT_NAME\""
" required=\"required\" />" " required=\"required\" />"
"</td>", "</td>",
Hie_MAX_CHARS_SHRT_NAME,Gbl.Crss.EditingCrs.ShrtName); Hie_MAX_CHARS_SHRT_NAME,Crs_EditingCrs->ShrtName);
/***** Course full name *****/ /***** Course full name *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
@ -1731,7 +1749,7 @@ static void Crs_PutFormToCreateCourse (void)
" class=\"INPUT_FULL_NAME\"" " class=\"INPUT_FULL_NAME\""
" required=\"required\" />" " required=\"required\" />"
"</td>", "</td>",
Hie_MAX_CHARS_FULL_NAME,Gbl.Crss.EditingCrs.FullName); Hie_MAX_CHARS_FULL_NAME,Crs_EditingCrs->FullName);
/***** Current number of teachers in this course *****/ /***** Current number of teachers in this course *****/
fprintf (Gbl.F.Out,"<td class=\"DAT RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"DAT RIGHT_MIDDLE\">"
@ -1858,6 +1876,10 @@ static void Crs_PutHeadCoursesForEdition (void)
void Crs_RecFormReqCrs (void) void Crs_RecFormReqCrs (void)
{ {
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Receive form to request a new course *****/
Crs_RecFormRequestOrCreateCrs ((unsigned) Crs_STATUS_BIT_PENDING); Crs_RecFormRequestOrCreateCrs ((unsigned) Crs_STATUS_BIT_PENDING);
} }
@ -1867,6 +1889,10 @@ void Crs_RecFormReqCrs (void)
void Crs_RecFormNewCrs (void) void Crs_RecFormNewCrs (void)
{ {
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Receive form to create a new course *****/
Crs_RecFormRequestOrCreateCrs (0); Crs_RecFormRequestOrCreateCrs (0);
} }
@ -1884,29 +1910,29 @@ static void Crs_RecFormRequestOrCreateCrs (unsigned Status)
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Set course degree */ /* Set course degree */
Deg.DegCod = Gbl.Crss.EditingCrs.DegCod = Gbl.Hierarchy.Deg.DegCod; Deg.DegCod = Crs_EditingCrs->DegCod = Gbl.Hierarchy.Deg.DegCod;
/* Get parameters of the new course */ /* Get parameters of the new course */
Crs_GetParamsNewCourse (&Gbl.Crss.EditingCrs); Crs_GetParamsNewCourse (Crs_EditingCrs);
/***** Check if year is correct *****/ /***** Check if year is correct *****/
Deg_GetDataOfDegreeByCod (&Deg); Deg_GetDataOfDegreeByCod (&Deg);
if (Gbl.Crss.EditingCrs.Year <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid if (Crs_EditingCrs->Year <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
{ {
if (Gbl.Crss.EditingCrs.ShrtName[0] && if (Crs_EditingCrs->ShrtName[0] &&
Gbl.Crss.EditingCrs.FullName[0]) // If there's a course name Crs_EditingCrs->FullName[0]) // If there's a course name
{ {
/***** If name of course was in database... *****/ /***** If name of course was in database... *****/
if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Crss.EditingCrs.ShrtName,-1L, if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName,
Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year)) -1L,Crs_EditingCrs->DegCod,Crs_EditingCrs->Year))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_course_X_already_exists, Txt_The_course_X_already_exists,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Crss.EditingCrs.FullName,-1L, else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName,
Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year)) -1L,Crs_EditingCrs->DegCod,Crs_EditingCrs->Year))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_course_X_already_exists, Txt_The_course_X_already_exists,
Gbl.Crss.EditingCrs.FullName); Crs_EditingCrs->FullName);
else // Add new requested course to database else // Add new requested course to database
Crs_CreateCourse (Status); Crs_CreateCourse (Status);
} }
@ -1917,7 +1943,7 @@ static void Crs_RecFormRequestOrCreateCrs (unsigned Status)
else // Year not valid else // Year not valid
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_year_X_is_not_allowed, Txt_The_year_X_is_not_allowed,
Gbl.Crss.EditingCrs.Year); Crs_EditingCrs->Year);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1946,14 +1972,13 @@ static void Crs_GetParamsNewCourse (struct Course *Crs)
/*****************************************************************************/ /*****************************************************************************/
/************* Add a new requested course to pending requests ****************/ /************* Add a new requested course to pending requests ****************/
/*****************************************************************************/ /*****************************************************************************/
// Gbl.Crss.EditingCrs must hold the course beeing edited
static void Crs_CreateCourse (unsigned Status) static void Crs_CreateCourse (unsigned Status)
{ {
extern const char *Txt_Created_new_course_X; extern const char *Txt_Created_new_course_X;
/***** Insert new course into pending requests *****/ /***** Insert new course into pending requests *****/
Gbl.Crss.EditingCrs.CrsCod = Crs_EditingCrs->CrsCod =
DB_QueryINSERTandReturnCode ("can not create a new course", DB_QueryINSERTandReturnCode ("can not create a new course",
"INSERT INTO courses" "INSERT INTO courses"
" (DegCod,Year,InsCrsCod,Status,RequesterUsrCod," " (DegCod,Year,InsCrsCod,Status,RequesterUsrCod,"
@ -1961,21 +1986,21 @@ static void Crs_CreateCourse (unsigned Status)
" VALUES" " VALUES"
" (%ld,%u,'%s',%u,%ld," " (%ld,%u,'%s',%u,%ld,"
"'%s','%s')", "'%s','%s')",
Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year, Crs_EditingCrs->DegCod,Crs_EditingCrs->Year,
Gbl.Crss.EditingCrs.InstitutionalCrsCod, Crs_EditingCrs->InstitutionalCrsCod,
Status, Status,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Crss.EditingCrs.ShrtName, Crs_EditingCrs->ShrtName,
Gbl.Crss.EditingCrs.FullName); Crs_EditingCrs->FullName);
/***** Create success message *****/ /***** Create success message *****/
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_Created_new_course_X, Txt_Created_new_course_X,
Gbl.Crss.EditingCrs.FullName); Crs_EditingCrs->FullName);
} }
/*****************************************************************************/ /*****************************************************************************/
/************************ Request removing of a course ***********************/ /****************************** Remove a course ******************************/
/*****************************************************************************/ /*****************************************************************************/
void Crs_RemoveCourse (void) void Crs_RemoveCourse (void)
@ -1984,6 +2009,9 @@ void Crs_RemoveCourse (void)
extern const char *Txt_Course_X_removed; extern const char *Txt_Course_X_removed;
struct Course Crs; struct Course Crs;
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Get course code *****/ /***** Get course code *****/
Crs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); Crs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
@ -2009,7 +2037,10 @@ void Crs_RemoveCourse (void)
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
/***** Show the form again *****/ /***** Show the form again *****/
Crs_EditCourses (); Crs_EditCoursesInternal ();
/***** Course destructor *****/
Crs_EditingCourseDestructor ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2348,31 +2379,34 @@ void Crs_ChangeInsCrsCod (void)
extern const char *Txt_The_institutional_code_of_the_course_X_has_not_changed; extern const char *Txt_The_institutional_code_of_the_course_X_has_not_changed;
char NewInstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1]; char NewInstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1];
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Get course code */ /* Get course code */
Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
/* Get institutional code */ /* Get institutional code */
Par_GetParToText ("InsCrsCod",NewInstitutionalCrsCod,Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD); Par_GetParToText ("InsCrsCod",NewInstitutionalCrsCod,Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD);
/* Get data of the course */ /* Get data of the course */
Crs_GetDataOfCourseByCod (&Gbl.Crss.EditingCrs); Crs_GetDataOfCourseByCod (Crs_EditingCrs);
if (Crs_CheckIfICanEdit (&Gbl.Crss.EditingCrs)) if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{ {
/***** Change the institutional course code *****/ /***** Change the institutional course code *****/
if (strcmp (NewInstitutionalCrsCod,Gbl.Crss.EditingCrs.InstitutionalCrsCod)) if (strcmp (NewInstitutionalCrsCod,Crs_EditingCrs->InstitutionalCrsCod))
{ {
Crs_UpdateInstitutionalCrsCod (&Gbl.Crss.EditingCrs,NewInstitutionalCrsCod); Crs_UpdateInstitutionalCrsCod (Crs_EditingCrs,NewInstitutionalCrsCod);
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_institutional_code_of_the_course_X_has_changed_to_Y, Txt_The_institutional_code_of_the_course_X_has_changed_to_Y,
Gbl.Crss.EditingCrs.ShrtName, Crs_EditingCrs->ShrtName,
NewInstitutionalCrsCod); NewInstitutionalCrsCod);
} }
else // The same institutional code else // The same institutional code
Ale_CreateAlert (Ale_INFO,NULL, Ale_CreateAlert (Ale_INFO,NULL,
Txt_The_institutional_code_of_the_course_X_has_not_changed, Txt_The_institutional_code_of_the_course_X_has_not_changed,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
} }
else else
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2520,45 +2554,48 @@ void Crs_ChangeCrsYear (void)
char YearStr[2 + 1]; char YearStr[2 + 1];
unsigned NewYear; unsigned NewYear;
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Get course code */ /* Get course code */
Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
/* Get parameter with year */ /* Get parameter with year */
Par_GetParToText ("OthCrsYear",YearStr,2); Par_GetParToText ("OthCrsYear",YearStr,2);
NewYear = Deg_ConvStrToYear (YearStr); NewYear = Deg_ConvStrToYear (YearStr);
Crs_GetDataOfCourseByCod (&Gbl.Crss.EditingCrs); Crs_GetDataOfCourseByCod (Crs_EditingCrs);
if (Crs_CheckIfICanEdit (&Gbl.Crss.EditingCrs)) if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{ {
Deg.DegCod = Gbl.Crss.EditingCrs.DegCod; Deg.DegCod = Crs_EditingCrs->DegCod;
Deg_GetDataOfDegreeByCod (&Deg); Deg_GetDataOfDegreeByCod (&Deg);
if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
{ {
/***** If name of course was in database in the new year... *****/ /***** If name of course was in database in the new year... *****/
if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Crss.EditingCrs.ShrtName,-1L, if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName,
Gbl.Crss.EditingCrs.DegCod,NewYear)) -1L,Crs_EditingCrs->DegCod,NewYear))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_course_X_already_exists_in_year_Y, Txt_The_course_X_already_exists_in_year_Y,
Gbl.Crss.EditingCrs.ShrtName, Crs_EditingCrs->ShrtName,
Txt_YEAR_OF_DEGREE[NewYear]); Txt_YEAR_OF_DEGREE[NewYear]);
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Crss.EditingCrs.FullName,-1L, else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName,
Gbl.Crss.EditingCrs.DegCod,NewYear)) -1L,Crs_EditingCrs->DegCod,NewYear))
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_The_course_X_already_exists_in_year_Y, Txt_The_course_X_already_exists_in_year_Y,
Gbl.Crss.EditingCrs.FullName, Crs_EditingCrs->FullName,
Txt_YEAR_OF_DEGREE[NewYear]); Txt_YEAR_OF_DEGREE[NewYear]);
else // Update year in database else // Update year in database
{ {
/***** Update year in table of courses *****/ /***** Update year in table of courses *****/
Crs_UpdateCrsYear (&Gbl.Crss.EditingCrs,NewYear); Crs_UpdateCrsYear (Crs_EditingCrs,NewYear);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_year_of_the_course_X_has_changed, Txt_The_year_of_the_course_X_has_changed,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
} }
} }
else // Year not valid else // Year not valid
@ -2603,30 +2640,38 @@ void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutio
} }
/*****************************************************************************/ /*****************************************************************************/
/********************* Change the short name of a course *********************/ /************************ Change the name of a course ************************/
/*****************************************************************************/ /*****************************************************************************/
void Crs_RenameCourseShort (void) void Crs_RenameCourseShort (void)
{ {
Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); /***** Course constructor *****/
Crs_RenameCourse (&Gbl.Crss.EditingCrs,Cns_SHRT_NAME); Crs_EditingCourseConstructor ();
/***** Rename course *****/
Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
Crs_RenameCourse (Crs_EditingCrs,Cns_SHRT_NAME);
} }
void Crs_RenameCourseFull (void)
{
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Rename course *****/
Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
Crs_RenameCourse (Crs_EditingCrs,Cns_FULL_NAME);
}
/*****************************************************************************/
/*************** Change the name of a course in configuration ****************/
/*****************************************************************************/
void Crs_RenameCourseShortInConfig (void) void Crs_RenameCourseShortInConfig (void)
{ {
Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_SHRT_NAME); Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_SHRT_NAME);
} }
/*****************************************************************************/
/********************* Change the full name of a course **********************/
/*****************************************************************************/
void Crs_RenameCourseFull (void)
{
Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
Crs_RenameCourse (&Gbl.Crss.EditingCrs,Cns_FULL_NAME);
}
void Crs_RenameCourseFullInConfig (void) void Crs_RenameCourseFullInConfig (void)
{ {
Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_FULL_NAME); Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_FULL_NAME);
@ -2753,9 +2798,12 @@ void Crs_ChangeCrsStatus (void)
Crs_Status_t Status; Crs_Status_t Status;
Crs_StatusTxt_t StatusTxt; Crs_StatusTxt_t StatusTxt;
/***** Course constructor *****/
Crs_EditingCourseConstructor ();
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Get course code */ /* Get course code */
Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1);
/* Get parameter with status */ /* Get parameter with status */
Status = (Crs_Status_t) Status = (Crs_Status_t)
@ -2769,18 +2817,18 @@ void Crs_ChangeCrsStatus (void)
Status = Crs_GetStatusBitsFromStatusTxt (StatusTxt); // New status Status = Crs_GetStatusBitsFromStatusTxt (StatusTxt); // New status
/***** Get data of course *****/ /***** Get data of course *****/
Crs_GetDataOfCourseByCod (&Gbl.Crss.EditingCrs); Crs_GetDataOfCourseByCod (Crs_EditingCrs);
/***** Update status in table of courses *****/ /***** Update status in table of courses *****/
DB_QueryUPDATE ("can not update the status of a course", DB_QueryUPDATE ("can not update the status of a course",
"UPDATE courses SET Status=%u WHERE CrsCod=%ld", "UPDATE courses SET Status=%u WHERE CrsCod=%ld",
(unsigned) Status,Gbl.Crss.EditingCrs.CrsCod); (unsigned) Status,Crs_EditingCrs->CrsCod);
Gbl.Crss.EditingCrs.Status = Status; Crs_EditingCrs->Status = Status;
/***** Create alert to show the change made *****/ /***** Create alert to show the change made *****/
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_status_of_the_course_X_has_changed, Txt_The_status_of_the_course_X_has_changed,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2808,15 +2856,15 @@ void Crs_ContEditAfterChgCrs (void)
break; break;
case Rol_USR: case Rol_USR:
PutButtonToRequestRegistration = !Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Me.UsrDat.UsrCod, PutButtonToRequestRegistration = !Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Crss.EditingCrs.CrsCod, Crs_EditingCrs->CrsCod,
false); false);
break; break;
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
if (Gbl.Crss.EditingCrs.CrsCod != Gbl.Hierarchy.Crs.CrsCod) if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod)
PutButtonToRequestRegistration = !Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Me.UsrDat.UsrCod, PutButtonToRequestRegistration = !Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Crss.EditingCrs.CrsCod, Crs_EditingCrs->CrsCod,
false); false);
break; break;
default: default:
@ -2834,27 +2882,28 @@ void Crs_ContEditAfterChgCrs (void)
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
/***** Show the form again *****/ /***** Show the form again *****/
Crs_EditCourses (); Crs_EditCoursesInternal ();
/***** Course destructor *****/
Crs_EditingCourseDestructor ();
} }
/*****************************************************************************/ /*****************************************************************************/
/************************ Put button to go to course *************************/ /************************ Put button to go to course *************************/
/*****************************************************************************/ /*****************************************************************************/
// Gbl.Crss.EditingCrs is the course that is beeing edited
// Gbl.Hierarchy.Crs. is the current course
static void Crs_PutButtonToGoToCrs (void) static void Crs_PutButtonToGoToCrs (void)
{ {
extern const char *Txt_Go_to_X; extern const char *Txt_Go_to_X;
// If the course being edited is different to the current one... // If the course being edited is different to the current one...
if (Gbl.Crss.EditingCrs.CrsCod != Gbl.Hierarchy.Crs.CrsCod) if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod)
{ {
Frm_StartForm (ActSeeCrsInf); Frm_StartForm (ActSeeCrsInf);
Crs_PutParamCrsCod (Gbl.Crss.EditingCrs.CrsCod); Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod);
snprintf (Gbl.Title,sizeof (Gbl.Title), snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Go_to_X, Txt_Go_to_X,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
Btn_PutConfirmButton (Gbl.Title); Btn_PutConfirmButton (Gbl.Title);
Frm_EndForm (); Frm_EndForm ();
} }
@ -2863,8 +2912,6 @@ static void Crs_PutButtonToGoToCrs (void)
/*****************************************************************************/ /*****************************************************************************/
/************************ Put button to go to course *************************/ /************************ Put button to go to course *************************/
/*****************************************************************************/ /*****************************************************************************/
// Gbl.Crss.EditingCrs is the course that is beeing edited
// Gbl.Hierarchy.Crs. is the current course
static void Crs_PutButtonToRegisterInCrs (void) static void Crs_PutButtonToRegisterInCrs (void)
{ {
@ -2872,11 +2919,11 @@ static void Crs_PutButtonToRegisterInCrs (void)
Frm_StartForm (ActReqSignUp); Frm_StartForm (ActReqSignUp);
// If the course beeing edited is different to the current one... // If the course beeing edited is different to the current one...
if (Gbl.Crss.EditingCrs.CrsCod != Gbl.Hierarchy.Crs.CrsCod) if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod)
Crs_PutParamCrsCod (Gbl.Crss.EditingCrs.CrsCod); Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod);
snprintf (Gbl.Title,sizeof (Gbl.Title), snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Register_me_in_X, Txt_Register_me_in_X,
Gbl.Crss.EditingCrs.ShrtName); Crs_EditingCrs->ShrtName);
Btn_PutCreateButton (Gbl.Title); Btn_PutCreateButton (Gbl.Title);
Frm_EndForm (); Frm_EndForm ();
} }
@ -3441,3 +3488,43 @@ void Crs_RemoveOldCrss (void)
Ale_ShowAlert (Ale_SUCCESS,Txt_X_courses_have_been_eliminated, Ale_ShowAlert (Ale_SUCCESS,Txt_X_courses_have_been_eliminated,
NumCrssRemoved); NumCrssRemoved);
} }
/*****************************************************************************/
/************************ Course constructor/destructor **********************/
/*****************************************************************************/
static void Crs_EditingCourseConstructor (void)
{
Rol_Role_t Role;
/***** Pointer must be NULL *****/
if (Crs_EditingCrs != NULL)
Lay_ShowErrorAndExit ("Error initializing course.");
/***** Allocate memory for course *****/
if ((Crs_EditingCrs = (struct Course *) malloc (sizeof (struct Course))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for course.");
/***** Reset course *****/
Crs_EditingCrs->CrsCod = -1L;
Crs_EditingCrs->InstitutionalCrsCod[0] = '\0';
Crs_EditingCrs->DegCod = -1L;
Crs_EditingCrs->Year = 0;
Crs_EditingCrs->Status = 0;
Crs_EditingCrs->ShrtName[0] = '\0';
Crs_EditingCrs->FullName[0] = '\0';
for (Role = (Rol_Role_t) 0;
Role < Rol_NUM_ROLES;
Role++)
Crs_EditingCrs->NumUsrs[Role] = 0;
}
static void Crs_EditingCourseDestructor (void)
{
/***** Free memory used for course *****/
if (Crs_EditingCrs != NULL)
{
free ((void *) Crs_EditingCrs);
Crs_EditingCrs = NULL;
}
}

View File

@ -123,8 +123,8 @@ void Crs_ChangeCrsYearInConfig (void);
void Crs_ChangeCrsYear (void); void Crs_ChangeCrsYear (void);
void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutionalCrsCod); void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutionalCrsCod);
void Crs_RenameCourseShort (void); void Crs_RenameCourseShort (void);
void Crs_RenameCourseShortInConfig (void);
void Crs_RenameCourseFull (void); void Crs_RenameCourseFull (void);
void Crs_RenameCourseShortInConfig (void);
void Crs_RenameCourseFullInConfig (void); void Crs_RenameCourseFullInConfig (void);
void Crs_ChangeCrsStatus (void); void Crs_ChangeCrsStatus (void);
void Crs_ContEditAfterChgCrs (void); void Crs_ContEditAfterChgCrs (void);

View File

@ -81,7 +81,7 @@ typedef enum
/**************************** Private variables ******************************/ /**************************** Private variables ******************************/
/*****************************************************************************/ /*****************************************************************************/
static struct Degree *Deg_EditingDeg = NULL; // Static variable to keep degree beeing edited static struct Degree *Deg_EditingDeg = NULL; // Static variable to keep the degree beeing edited
/*****************************************************************************/ /*****************************************************************************/
/**************************** Private prototypes *****************************/ /**************************** Private prototypes *****************************/
@ -1567,7 +1567,7 @@ void Deg_RecFormNewDeg (void)
/***** Degree constructor *****/ /***** Degree constructor *****/
Deg_EditingDegreeConstructor (); Deg_EditingDegreeConstructor ();
/***** Receive form to request a new degree *****/ /***** Receive form to create a new degree *****/
Deg_RecFormRequestOrCreateDeg (0); Deg_RecFormRequestOrCreateDeg (0);
/***** Degree destructor *****/ /***** Degree destructor *****/
@ -1946,6 +1946,7 @@ void Deg_RenameDegreeShort (void)
/***** Degree constructor *****/ /***** Degree constructor *****/
Deg_EditingDegreeConstructor (); Deg_EditingDegreeConstructor ();
/***** Rename degree *****/
Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1); Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1);
Deg_RenameDegree (Deg_EditingDeg,Cns_SHRT_NAME); Deg_RenameDegree (Deg_EditingDeg,Cns_SHRT_NAME);
} }
@ -1955,6 +1956,7 @@ void Deg_RenameDegreeFull (void)
/***** Degree constructor *****/ /***** Degree constructor *****/
Deg_EditingDegreeConstructor (); Deg_EditingDegreeConstructor ();
/***** Rename degree *****/
Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1); Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1);
Deg_RenameDegree (Deg_EditingDeg,Cns_FULL_NAME); Deg_RenameDegree (Deg_EditingDeg,Cns_FULL_NAME);
} }
@ -2707,7 +2709,7 @@ static void Deg_EditingDegreeConstructor (void)
static void Deg_EditingDegreeDestructor (void) static void Deg_EditingDegreeDestructor (void)
{ {
/***** Free memory used for institution *****/ /***** Free memory used for degree *****/
if (Deg_EditingDeg != NULL) if (Deg_EditingDeg != NULL)
{ {
free ((void *) Deg_EditingDeg); free ((void *) Deg_EditingDeg);

View File

@ -278,12 +278,6 @@ void Gbl_InitializeGlobals (void)
Gbl.DegTypes.EditingDegTyp.DegTypCod = -1L; Gbl.DegTypes.EditingDegTyp.DegTypCod = -1L;
Gbl.DegTypes.EditingDegTyp.DegTypName[0] = '\0'; Gbl.DegTypes.EditingDegTyp.DegTypName[0] = '\0';
Gbl.Crss.EditingCrs.CrsCod = -1L;
Gbl.Crss.EditingCrs.DegCod = -1L;
Gbl.Crss.EditingCrs.Year = 0;
Gbl.Crss.EditingCrs.ShrtName[0] = '\0';
Gbl.Crss.EditingCrs.FullName[0] = '\0';
Gbl.Crs.Grps.NumGrps = 0; Gbl.Crs.Grps.NumGrps = 0;
Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT; Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT;
Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL; Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL;

View File

@ -214,10 +214,6 @@ struct Globals
struct Degree Deg; // Current degree struct Degree Deg; // Current degree
struct Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs. struct Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs.
} Hierarchy; } Hierarchy;
struct
{
struct Course EditingCrs;
} Crss;
struct struct
{ {
unsigned Num; // Number of degree types unsigned Num; // Number of degree types

View File

@ -63,7 +63,7 @@ extern struct Globals Gbl;
/***************************** Private variables *****************************/ /***************************** Private variables *****************************/
/*****************************************************************************/ /*****************************************************************************/
static struct Instit *Ins_EditingIns = NULL; // Static variable to keep institution beeing edited static struct Instit *Ins_EditingIns = NULL; // Static variable to keep the institution beeing edited
/*****************************************************************************/ /*****************************************************************************/
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/