diff --git a/swad_centre.c b/swad_centre.c index 3e8da88d..2df6212b 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -75,7 +75,7 @@ extern struct Globals Gbl; /***************************** 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 ****************************/ @@ -3058,7 +3058,7 @@ static void Ctr_EditingCentreConstructor (void) static void Ctr_EditingCentreDestructor (void) { - /***** Free memory used for institution *****/ + /***** Free memory used for centre *****/ if (Ctr_EditingCtr != NULL) { free ((void *) Ctr_EditingCtr); diff --git a/swad_changelog.h b/swad_changelog.h index 2461664a..48bd6052 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -464,10 +464,11 @@ En OpenSWAD: 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 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.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) diff --git a/swad_course.c b/swad_course.c index 79a4c260..890bf342 100644 --- a/swad_course.c +++ b/swad_course.c @@ -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 *****************************/ /*****************************************************************************/ @@ -90,6 +92,7 @@ static void Crs_PutIconsListCourses (void); static void Crs_PutIconToEditCourses (void); static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year); +static void Crs_EditCoursesInternal (void); static void Crs_PutIconsEditingCourses (void); static void Crs_PutIconToViewCourses (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_EditingCourseConstructor (void); +static void Crs_EditingCourseDestructor (void); + /*****************************************************************************/ /***************** Show introduction to the current course *******************/ /*****************************************************************************/ @@ -1339,6 +1345,18 @@ static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year) /*****************************************************************************/ 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 *Txt_Courses_of_DEGREE_X; @@ -1699,7 +1717,7 @@ static void Crs_PutFormToCreateCourse (void) " class=\"INPUT_INS_CODE\" />" "", Crs_MAX_CHARS_INSTITUTIONAL_CRS_COD, - Gbl.Crss.EditingCrs.InstitutionalCrsCod); + Crs_EditingCrs->InstitutionalCrsCod); /***** Year *****/ fprintf (Gbl.F.Out,"" @@ -1709,8 +1727,8 @@ static void Crs_PutFormToCreateCourse (void) Year++) fprintf (Gbl.F.Out,"", Year, - Year == Gbl.Crss.EditingCrs.Year ? " selected=\"selected\"" : - "", + Year == Crs_EditingCrs->Year ? " selected=\"selected\"" : + "", Txt_YEAR_OF_DEGREE[Year]); fprintf (Gbl.F.Out,"" ""); @@ -1722,7 +1740,7 @@ static void Crs_PutFormToCreateCourse (void) " class=\"INPUT_SHORT_NAME\"" " required=\"required\" />" "", - Hie_MAX_CHARS_SHRT_NAME,Gbl.Crss.EditingCrs.ShrtName); + Hie_MAX_CHARS_SHRT_NAME,Crs_EditingCrs->ShrtName); /***** Course full name *****/ fprintf (Gbl.F.Out,"" @@ -1731,7 +1749,7 @@ static void Crs_PutFormToCreateCourse (void) " class=\"INPUT_FULL_NAME\"" " required=\"required\" />" "", - Hie_MAX_CHARS_FULL_NAME,Gbl.Crss.EditingCrs.FullName); + Hie_MAX_CHARS_FULL_NAME,Crs_EditingCrs->FullName); /***** Current number of teachers in this course *****/ fprintf (Gbl.F.Out,"" @@ -1858,6 +1876,10 @@ static void Crs_PutHeadCoursesForEdition (void) void Crs_RecFormReqCrs (void) { + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + + /***** Receive form to request a new course *****/ Crs_RecFormRequestOrCreateCrs ((unsigned) Crs_STATUS_BIT_PENDING); } @@ -1867,6 +1889,10 @@ void Crs_RecFormReqCrs (void) void Crs_RecFormNewCrs (void) { + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + + /***** Receive form to create a new course *****/ Crs_RecFormRequestOrCreateCrs (0); } @@ -1884,29 +1910,29 @@ static void Crs_RecFormRequestOrCreateCrs (unsigned Status) /***** Get parameters from form *****/ /* 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 */ - Crs_GetParamsNewCourse (&Gbl.Crss.EditingCrs); + Crs_GetParamsNewCourse (Crs_EditingCrs); /***** Check if year is correct *****/ 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] && - Gbl.Crss.EditingCrs.FullName[0]) // If there's a course name + if (Crs_EditingCrs->ShrtName[0] && + Crs_EditingCrs->FullName[0]) // If there's a course name { /***** If name of course was in database... *****/ - if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Crss.EditingCrs.ShrtName,-1L, - Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year)) + if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName, + -1L,Crs_EditingCrs->DegCod,Crs_EditingCrs->Year)) Ale_CreateAlert (Ale_WARNING,NULL, Txt_The_course_X_already_exists, - Gbl.Crss.EditingCrs.ShrtName); - else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Crss.EditingCrs.FullName,-1L, - Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year)) + Crs_EditingCrs->ShrtName); + else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName, + -1L,Crs_EditingCrs->DegCod,Crs_EditingCrs->Year)) Ale_CreateAlert (Ale_WARNING,NULL, Txt_The_course_X_already_exists, - Gbl.Crss.EditingCrs.FullName); + Crs_EditingCrs->FullName); else // Add new requested course to database Crs_CreateCourse (Status); } @@ -1917,7 +1943,7 @@ static void Crs_RecFormRequestOrCreateCrs (unsigned Status) else // Year not valid Ale_CreateAlert (Ale_WARNING,NULL, 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 ****************/ /*****************************************************************************/ -// Gbl.Crss.EditingCrs must hold the course beeing edited static void Crs_CreateCourse (unsigned Status) { extern const char *Txt_Created_new_course_X; /***** Insert new course into pending requests *****/ - Gbl.Crss.EditingCrs.CrsCod = + Crs_EditingCrs->CrsCod = DB_QueryINSERTandReturnCode ("can not create a new course", "INSERT INTO courses" " (DegCod,Year,InsCrsCod,Status,RequesterUsrCod," @@ -1961,21 +1986,21 @@ static void Crs_CreateCourse (unsigned Status) " VALUES" " (%ld,%u,'%s',%u,%ld," "'%s','%s')", - Gbl.Crss.EditingCrs.DegCod,Gbl.Crss.EditingCrs.Year, - Gbl.Crss.EditingCrs.InstitutionalCrsCod, + Crs_EditingCrs->DegCod,Crs_EditingCrs->Year, + Crs_EditingCrs->InstitutionalCrsCod, Status, Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Crss.EditingCrs.ShrtName, - Gbl.Crss.EditingCrs.FullName); + Crs_EditingCrs->ShrtName, + Crs_EditingCrs->FullName); /***** Create success message *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_Created_new_course_X, - Gbl.Crss.EditingCrs.FullName); + Crs_EditingCrs->FullName); } /*****************************************************************************/ -/************************ Request removing of a course ***********************/ +/****************************** Remove a course ******************************/ /*****************************************************************************/ void Crs_RemoveCourse (void) @@ -1984,6 +2009,9 @@ void Crs_RemoveCourse (void) extern const char *Txt_Course_X_removed; struct Course Crs; + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + /***** Get course code *****/ Crs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); @@ -2009,7 +2037,10 @@ void Crs_RemoveCourse (void) Lay_NoPermissionExit (); /***** 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; char NewInstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1]; + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + /***** Get parameters from form *****/ /* Get course code */ - Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); + Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); /* Get institutional code */ Par_GetParToText ("InsCrsCod",NewInstitutionalCrsCod,Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD); /* 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 *****/ - 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, Txt_The_institutional_code_of_the_course_X_has_changed_to_Y, - Gbl.Crss.EditingCrs.ShrtName, + Crs_EditingCrs->ShrtName, NewInstitutionalCrsCod); } else // The same institutional code Ale_CreateAlert (Ale_INFO,NULL, Txt_The_institutional_code_of_the_course_X_has_not_changed, - Gbl.Crss.EditingCrs.ShrtName); + Crs_EditingCrs->ShrtName); } else Lay_NoPermissionExit (); @@ -2520,45 +2554,48 @@ void Crs_ChangeCrsYear (void) char YearStr[2 + 1]; unsigned NewYear; + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + /***** Get parameters from form *****/ /* Get course code */ - Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); + Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); /* Get parameter with year */ Par_GetParToText ("OthCrsYear",YearStr,2); 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); if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid { /***** If name of course was in database in the new year... *****/ - if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Crss.EditingCrs.ShrtName,-1L, - Gbl.Crss.EditingCrs.DegCod,NewYear)) + if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName, + -1L,Crs_EditingCrs->DegCod,NewYear)) Ale_CreateAlert (Ale_WARNING,NULL, Txt_The_course_X_already_exists_in_year_Y, - Gbl.Crss.EditingCrs.ShrtName, + Crs_EditingCrs->ShrtName, Txt_YEAR_OF_DEGREE[NewYear]); - else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Crss.EditingCrs.FullName,-1L, - Gbl.Crss.EditingCrs.DegCod,NewYear)) + else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName, + -1L,Crs_EditingCrs->DegCod,NewYear)) Ale_CreateAlert (Ale_WARNING,NULL, Txt_The_course_X_already_exists_in_year_Y, - Gbl.Crss.EditingCrs.FullName, + Crs_EditingCrs->FullName, Txt_YEAR_OF_DEGREE[NewYear]); else // Update year in database { /***** Update year in table of courses *****/ - Crs_UpdateCrsYear (&Gbl.Crss.EditingCrs,NewYear); + Crs_UpdateCrsYear (Crs_EditingCrs,NewYear); /***** Create message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_The_year_of_the_course_X_has_changed, - Gbl.Crss.EditingCrs.ShrtName); + Crs_EditingCrs->ShrtName); } } 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) { - Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); - Crs_RenameCourse (&Gbl.Crss.EditingCrs,Cns_SHRT_NAME); + /***** Course constructor *****/ + 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) { 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) { Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_FULL_NAME); @@ -2753,9 +2798,12 @@ void Crs_ChangeCrsStatus (void) Crs_Status_t Status; Crs_StatusTxt_t StatusTxt; + /***** Course constructor *****/ + Crs_EditingCourseConstructor (); + /***** Get parameters from form *****/ /* Get course code */ - Gbl.Crss.EditingCrs.CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); + Crs_EditingCrs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (1); /* Get parameter with status */ Status = (Crs_Status_t) @@ -2769,18 +2817,18 @@ void Crs_ChangeCrsStatus (void) Status = Crs_GetStatusBitsFromStatusTxt (StatusTxt); // New status /***** Get data of course *****/ - Crs_GetDataOfCourseByCod (&Gbl.Crss.EditingCrs); + Crs_GetDataOfCourseByCod (Crs_EditingCrs); /***** Update status in table of courses *****/ DB_QueryUPDATE ("can not update the status of a course", "UPDATE courses SET Status=%u WHERE CrsCod=%ld", - (unsigned) Status,Gbl.Crss.EditingCrs.CrsCod); - Gbl.Crss.EditingCrs.Status = Status; + (unsigned) Status,Crs_EditingCrs->CrsCod); + Crs_EditingCrs->Status = Status; /***** Create alert to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, 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; case Rol_USR: PutButtonToRequestRegistration = !Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Crss.EditingCrs.CrsCod, + Crs_EditingCrs->CrsCod, false); break; case Rol_STD: case Rol_NET: 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, - Gbl.Crss.EditingCrs.CrsCod, + Crs_EditingCrs->CrsCod, false); break; default: @@ -2834,27 +2882,28 @@ void Crs_ContEditAfterChgCrs (void) Ale_ShowAlerts (NULL); /***** Show the form again *****/ - Crs_EditCourses (); + Crs_EditCoursesInternal (); + + /***** Course destructor *****/ + Crs_EditingCourseDestructor (); } /*****************************************************************************/ /************************ 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) { extern const char *Txt_Go_to_X; // 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); - Crs_PutParamCrsCod (Gbl.Crss.EditingCrs.CrsCod); + Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod); snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_Go_to_X, - Gbl.Crss.EditingCrs.ShrtName); + Crs_EditingCrs->ShrtName); Btn_PutConfirmButton (Gbl.Title); Frm_EndForm (); } @@ -2863,8 +2912,6 @@ static void Crs_PutButtonToGoToCrs (void) /*****************************************************************************/ /************************ 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) { @@ -2872,11 +2919,11 @@ static void Crs_PutButtonToRegisterInCrs (void) Frm_StartForm (ActReqSignUp); // If the course beeing edited is different to the current one... - if (Gbl.Crss.EditingCrs.CrsCod != Gbl.Hierarchy.Crs.CrsCod) - Crs_PutParamCrsCod (Gbl.Crss.EditingCrs.CrsCod); + if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod) + Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod); snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_Register_me_in_X, - Gbl.Crss.EditingCrs.ShrtName); + Crs_EditingCrs->ShrtName); Btn_PutCreateButton (Gbl.Title); Frm_EndForm (); } @@ -3441,3 +3488,43 @@ void Crs_RemoveOldCrss (void) Ale_ShowAlert (Ale_SUCCESS,Txt_X_courses_have_been_eliminated, 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; + } + } diff --git a/swad_course.h b/swad_course.h index 756df8e3..7ba1a91d 100644 --- a/swad_course.h +++ b/swad_course.h @@ -123,8 +123,8 @@ void Crs_ChangeCrsYearInConfig (void); void Crs_ChangeCrsYear (void); void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutionalCrsCod); void Crs_RenameCourseShort (void); -void Crs_RenameCourseShortInConfig (void); void Crs_RenameCourseFull (void); +void Crs_RenameCourseShortInConfig (void); void Crs_RenameCourseFullInConfig (void); void Crs_ChangeCrsStatus (void); void Crs_ContEditAfterChgCrs (void); diff --git a/swad_degree.c b/swad_degree.c index 730924a9..b9f13059 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -81,7 +81,7 @@ typedef enum /**************************** 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 *****************************/ @@ -1567,7 +1567,7 @@ void Deg_RecFormNewDeg (void) /***** Degree constructor *****/ Deg_EditingDegreeConstructor (); - /***** Receive form to request a new degree *****/ + /***** Receive form to create a new degree *****/ Deg_RecFormRequestOrCreateDeg (0); /***** Degree destructor *****/ @@ -1946,6 +1946,7 @@ void Deg_RenameDegreeShort (void) /***** Degree constructor *****/ Deg_EditingDegreeConstructor (); + /***** Rename degree *****/ Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1); Deg_RenameDegree (Deg_EditingDeg,Cns_SHRT_NAME); } @@ -1955,6 +1956,7 @@ void Deg_RenameDegreeFull (void) /***** Degree constructor *****/ Deg_EditingDegreeConstructor (); + /***** Rename degree *****/ Deg_EditingDeg->DegCod = Deg_GetAndCheckParamOtherDegCod (1); Deg_RenameDegree (Deg_EditingDeg,Cns_FULL_NAME); } @@ -2707,7 +2709,7 @@ static void Deg_EditingDegreeConstructor (void) static void Deg_EditingDegreeDestructor (void) { - /***** Free memory used for institution *****/ + /***** Free memory used for degree *****/ if (Deg_EditingDeg != NULL) { free ((void *) Deg_EditingDeg); diff --git a/swad_global.c b/swad_global.c index 9c68ac24..6ad1a4ef 100644 --- a/swad_global.c +++ b/swad_global.c @@ -278,12 +278,6 @@ void Gbl_InitializeGlobals (void) Gbl.DegTypes.EditingDegTyp.DegTypCod = -1L; 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.WhichGrps = Grp_WHICH_GROUPS_DEFAULT; Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL; diff --git a/swad_global.h b/swad_global.h index 4648fc05..ca0a20d2 100644 --- a/swad_global.h +++ b/swad_global.h @@ -214,10 +214,6 @@ struct Globals struct Degree Deg; // Current degree struct Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs. } Hierarchy; - struct - { - struct Course EditingCrs; - } Crss; struct { unsigned Num; // Number of degree types diff --git a/swad_institution.c b/swad_institution.c index 93db3816..f7ffafee 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -63,7 +63,7 @@ extern struct Globals Gbl; /***************************** 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 ****************************/