mirror of https://github.com/acanas/swad-core.git
Version19.104.1
This commit is contained in:
parent
3b7a79f29a
commit
47d68b773e
|
@ -40,6 +40,7 @@
|
|||
#include "swad_cookie.h"
|
||||
#include "swad_country.h"
|
||||
#include "swad_course.h"
|
||||
#include "swad_course_config.h"
|
||||
#include "swad_chat.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_date.h"
|
||||
|
@ -1912,11 +1913,11 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
|
||||
// Actions not in menu:
|
||||
[ActPrnCrsInf ] = {1028,-1,TabUnk,ActSeeCrsInf ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,CrsCfg_PrintConfiguration ,NULL},
|
||||
[ActChgCrsDegCfg ] = {1587,-1,TabUnk,ActSeeCrsInf ,0x380,0x380, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_ChangeCrsDegInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActRenCrsShoCfg ] = {1601,-1,TabUnk,ActSeeCrsInf ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_RenameCourseShortInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActRenCrsFulCfg ] = {1600,-1,TabUnk,ActSeeCrsInf ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_RenameCourseFullInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActChgInsCrsCodCfg ] = {1024,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_ChangeInsCrsCodInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_ChangeCrsYearInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActChgCrsDegCfg ] = {1587,-1,TabUnk,ActSeeCrsInf ,0x380,0x380, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsDegInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActRenCrsShoCfg ] = {1601,-1,TabUnk,ActSeeCrsInf ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_RenameCourseShortInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActRenCrsFulCfg ] = {1600,-1,TabUnk,ActSeeCrsInf ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_RenameCourseFullInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActChgInsCrsCodCfg ] = {1024,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeInsCrsCodInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsYearInConfig ,CrsCfg_ContEditAfterChgCrsInConfig,NULL},
|
||||
[ActEdiCrsInf ] = { 848,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
||||
|
||||
[ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
||||
|
|
|
@ -492,7 +492,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
|||
En OpenSWAD:
|
||||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 19.104 (2019-12-29)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 19.104.1 (2019-12-29)"
|
||||
#define CSS_FILE "swad19.101.5.css"
|
||||
#define JS_FILE "swad19.91.1.js"
|
||||
/*
|
||||
|
@ -502,6 +502,7 @@ ps2pdf source.ps destination.pdf
|
|||
|
||||
Version 19.10x: Dec 29, 2019 Map in country information. (? lines)
|
||||
Version 19.10x: Dec 29, 2019 Map in institution information. (? lines)
|
||||
Version 19.104.1: Dec 29, 2019 Code refactoring in course configuration. (249536 lines)
|
||||
Version 19.104: Dec 29, 2019 New module swad_centre_config for centre configuration. (249534 lines)
|
||||
Version 19.103: Dec 29, 2019 New module swad_degree_config for degree configuration. (249457 lines)
|
||||
Version 19.102: Dec 29, 2019 New module swad_course_config for course configuration. (249397 lines)
|
||||
|
|
184
swad_course.c
184
swad_course.c
|
@ -90,19 +90,12 @@ static void Crs_GetParamsNewCourse (struct Course *Crs);
|
|||
static void Crs_CreateCourse (unsigned Status);
|
||||
static void Crs_GetDataOfCourseFromRow (struct Course *Crs,MYSQL_ROW row);
|
||||
|
||||
static void Crs_UpdateCrsDegDB (long CrsCod,long DegCod);
|
||||
|
||||
static void Crs_UpdateCrsYear (struct Course *Crs,unsigned NewYear);
|
||||
|
||||
static void Crs_GetShortNamesByCod (long CrsCod,
|
||||
char CrsShortName[Hie_MAX_BYTES_SHRT_NAME + 1],
|
||||
char DegShortName[Hie_MAX_BYTES_SHRT_NAME + 1]);
|
||||
|
||||
static void Crs_EmptyCourseCompletely (long CrsCod);
|
||||
|
||||
static void Crs_RenameCourse (struct Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullName);
|
||||
static bool Crs_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
||||
long DegCod,unsigned Year);
|
||||
static void Crs_UpdateCrsNameDB (long CrsCod,const char *FieldName,const char *NewCrsName);
|
||||
|
||||
static void Crs_PutButtonToGoToCrs (void);
|
||||
|
@ -1882,35 +1875,6 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
|
|||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Change the institutional code of a course in course configuration *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Crs_ChangeInsCrsCodInConfig (void)
|
||||
{
|
||||
extern const char *Txt_The_institutional_code_of_the_course_X_has_changed_to_Y;
|
||||
extern const char *Txt_The_institutional_code_of_the_course_X_has_not_changed;
|
||||
char NewInstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1];
|
||||
|
||||
/***** Get institutional code from form *****/
|
||||
Par_GetParToText ("InsCrsCod",NewInstitutionalCrsCod,Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD);
|
||||
|
||||
/***** Change the institutional course code *****/
|
||||
if (strcmp (NewInstitutionalCrsCod,Gbl.Hierarchy.Crs.InstitutionalCrsCod))
|
||||
{
|
||||
Crs_UpdateInstitutionalCrsCod (&Gbl.Hierarchy.Crs,NewInstitutionalCrsCod);
|
||||
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_institutional_code_of_the_course_X_has_changed_to_Y,
|
||||
Gbl.Hierarchy.Crs.ShrtName,
|
||||
NewInstitutionalCrsCod);
|
||||
}
|
||||
else // The same institutional code
|
||||
Ale_CreateAlert (Ale_INFO,NULL,
|
||||
Txt_The_institutional_code_of_the_course_X_has_not_changed,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Change the institutional code of a course ********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -1954,134 +1918,6 @@ void Crs_ChangeInsCrsCod (void)
|
|||
Lay_NoPermissionExit ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Change the degree of the current course *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Crs_ChangeCrsDegInConfig (void)
|
||||
{
|
||||
extern const char *Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z;
|
||||
extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE];
|
||||
extern const char *Txt_The_course_X_has_been_moved_to_the_degree_Y;
|
||||
struct Degree NewDeg;
|
||||
|
||||
/***** Get parameter with degree code *****/
|
||||
NewDeg.DegCod = Deg_GetAndCheckParamOtherDegCod (1);
|
||||
|
||||
/***** Check if degree has changed *****/
|
||||
if (NewDeg.DegCod != Gbl.Hierarchy.Crs.DegCod)
|
||||
{
|
||||
/***** Get data of new degree *****/
|
||||
Deg_GetDataOfDegreeByCod (&NewDeg,Deg_GET_BASIC_DATA);
|
||||
|
||||
/***** If name of course was in database in the new degree... *****/
|
||||
if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Hierarchy.Crs.ShrtName,-1L,
|
||||
NewDeg.DegCod,Gbl.Hierarchy.Crs.Year))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
||||
NewDeg.FullName,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
||||
NewDeg.DegCod,Gbl.Hierarchy.Crs.Year))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
||||
NewDeg.FullName,
|
||||
Gbl.Hierarchy.Crs.FullName);
|
||||
else // Update degree in database
|
||||
{
|
||||
/***** Update degree in table of courses *****/
|
||||
Crs_UpdateCrsDegDB (Gbl.Hierarchy.Crs.CrsCod,NewDeg.DegCod);
|
||||
Gbl.Hierarchy.Crs.DegCod =
|
||||
Gbl.Hierarchy.Deg.DegCod = NewDeg.DegCod;
|
||||
|
||||
/***** Initialize again current course, degree, centre... *****/
|
||||
Hie_InitHierarchy ();
|
||||
|
||||
/***** Create alert to show the change made *****/
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_course_X_has_been_moved_to_the_degree_Y,
|
||||
Gbl.Hierarchy.Crs.FullName,
|
||||
Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Show message of success after changing a course in course configuration **/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_ContEditAfterChgCrsInConfig (void)
|
||||
{
|
||||
/***** Write error/success message *****/
|
||||
Ale_ShowAlerts (NULL);
|
||||
|
||||
/***** Show the form again *****/
|
||||
Crs_ShowIntroduction ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Update degree in table of courses ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Crs_UpdateCrsDegDB (long CrsCod,long DegCod)
|
||||
{
|
||||
/***** Update degree in table of courses *****/
|
||||
DB_QueryUPDATE ("can not move course to another degree",
|
||||
"UPDATE courses SET DegCod=%ld WHERE CrsCod=%ld",
|
||||
DegCod,CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** Change the year of a course in course configuration *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Crs_ChangeCrsYearInConfig (void)
|
||||
{
|
||||
extern const char *Txt_The_course_X_already_exists_in_year_Y;
|
||||
extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE];
|
||||
extern const char *Txt_The_year_of_the_course_X_has_changed;
|
||||
extern const char *Txt_The_year_X_is_not_allowed;
|
||||
char YearStr[2 + 1];
|
||||
unsigned NewYear;
|
||||
|
||||
/***** Get parameter with year/semester *****/
|
||||
Par_GetParToText ("OthCrsYear",YearStr,2);
|
||||
NewYear = Deg_ConvStrToYear (YearStr);
|
||||
|
||||
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.Hierarchy.Crs.ShrtName,-1L,
|
||||
Gbl.Hierarchy.Crs.DegCod,NewYear))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_course_X_already_exists_in_year_Y,
|
||||
Gbl.Hierarchy.Crs.ShrtName,
|
||||
Txt_YEAR_OF_DEGREE[NewYear]);
|
||||
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
||||
Gbl.Hierarchy.Crs.DegCod,NewYear))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_course_X_already_exists_in_year_Y,
|
||||
Gbl.Hierarchy.Crs.FullName,
|
||||
Txt_YEAR_OF_DEGREE[NewYear]);
|
||||
else // Update year in database
|
||||
{
|
||||
/***** Update year in table of courses *****/
|
||||
Crs_UpdateCrsYear (&Gbl.Hierarchy.Crs,NewYear);
|
||||
|
||||
/***** Create alert to show the change made *****/
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_year_of_the_course_X_has_changed,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
}
|
||||
}
|
||||
else // Year not valid
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_year_X_is_not_allowed,
|
||||
NewYear);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Change the year of a course ************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -2149,7 +1985,7 @@ void Crs_ChangeCrsYear (void)
|
|||
/****************** Change the year/semester of a course *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Crs_UpdateCrsYear (struct Course *Crs,unsigned NewYear)
|
||||
void Crs_UpdateCrsYear (struct Course *Crs,unsigned NewYear)
|
||||
{
|
||||
/***** Update year/semester in table of courses *****/
|
||||
DB_QueryUPDATE ("can not update the year of a course",
|
||||
|
@ -2201,25 +2037,11 @@ void Crs_RenameCourseFull (void)
|
|||
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);
|
||||
}
|
||||
|
||||
void Crs_RenameCourseFullInConfig (void)
|
||||
{
|
||||
Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_FULL_NAME);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Change the name of a course ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Crs_RenameCourse (struct Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullName)
|
||||
void Crs_RenameCourse (struct Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullName)
|
||||
{
|
||||
extern const char *Txt_The_course_X_already_exists;
|
||||
extern const char *Txt_The_name_of_the_course_X_has_changed_to_Y;
|
||||
|
@ -2299,7 +2121,7 @@ static void Crs_RenameCourse (struct Course *Crs,Cns_ShrtOrFullName_t ShrtOrFull
|
|||
/********** Check if the name of course exists in existing courses ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
static bool Crs_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
||||
bool Crs_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
||||
long DegCod,unsigned Year)
|
||||
{
|
||||
/***** Get number of courses in a year of a degree and with a name from database *****/
|
||||
|
|
|
@ -99,8 +99,6 @@ typedef enum
|
|||
/*****************************************************************************/
|
||||
|
||||
void Crs_ShowIntroduction (void);
|
||||
void CrsCfg_PrintConfiguration (void);
|
||||
void CrsCfg_ContEditAfterChgCrsInConfig (void);
|
||||
|
||||
unsigned Crs_GetNumCrssTotal (void);
|
||||
unsigned Crs_GetNumCrssInCty (long CtyCod);
|
||||
|
@ -123,16 +121,15 @@ void Crs_RemoveCourse (void);
|
|||
bool Crs_GetDataOfCourseByCod (struct Course *Crs,
|
||||
Crs_GetExtraData_t GetExtraData);
|
||||
void Crs_RemoveCourseCompletely (long CrsCod);
|
||||
void Crs_ChangeInsCrsCodInConfig (void);
|
||||
void Crs_ChangeInsCrsCod (void);
|
||||
void Crs_ChangeCrsDegInConfig (void);
|
||||
void Crs_ChangeCrsYearInConfig (void);
|
||||
void Crs_ChangeCrsYear (void);
|
||||
void Crs_UpdateCrsYear (struct Course *Crs,unsigned NewYear);
|
||||
void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutionalCrsCod);
|
||||
void Crs_RenameCourseShort (void);
|
||||
void Crs_RenameCourseFull (void);
|
||||
void Crs_RenameCourseShortInConfig (void);
|
||||
void Crs_RenameCourseFullInConfig (void);
|
||||
void Crs_RenameCourse (struct Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullName);
|
||||
bool Crs_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
||||
long DegCod,unsigned Year);
|
||||
void Crs_ChangeCrsStatus (void);
|
||||
void Crs_ContEditAfterChgCrs (void);
|
||||
|
||||
|
|
|
@ -27,7 +27,9 @@
|
|||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stddef.h> // For NULL
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_database.h"
|
||||
#include "swad_form.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_HTML.h"
|
||||
|
@ -69,6 +71,8 @@ static void CrsCfg_QR (void);
|
|||
static void CrsCfg_NumUsrsInCrs (Rol_Role_t Role);
|
||||
static void CrsCfg_Indicators (void);
|
||||
|
||||
static void CrsCfg_UpdateCrsDegDB (long CrsCod,long DegCod);
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Configuration of the current course ***********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -466,3 +470,174 @@ static void CrsCfg_Indicators (void)
|
|||
|
||||
HTM_TR_End ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Change the degree of the current course *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_ChangeCrsDegInConfig (void)
|
||||
{
|
||||
extern const char *Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z;
|
||||
extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE];
|
||||
extern const char *Txt_The_course_X_has_been_moved_to_the_degree_Y;
|
||||
struct Degree NewDeg;
|
||||
|
||||
/***** Get parameter with degree code *****/
|
||||
NewDeg.DegCod = Deg_GetAndCheckParamOtherDegCod (1);
|
||||
|
||||
/***** Check if degree has changed *****/
|
||||
if (NewDeg.DegCod != Gbl.Hierarchy.Crs.DegCod)
|
||||
{
|
||||
/***** Get data of new degree *****/
|
||||
Deg_GetDataOfDegreeByCod (&NewDeg,Deg_GET_BASIC_DATA);
|
||||
|
||||
/***** If name of course was in database in the new degree... *****/
|
||||
if (Crs_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Hierarchy.Crs.ShrtName,-1L,
|
||||
NewDeg.DegCod,Gbl.Hierarchy.Crs.Year))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
||||
NewDeg.FullName,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
||||
NewDeg.DegCod,Gbl.Hierarchy.Crs.Year))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
||||
NewDeg.FullName,
|
||||
Gbl.Hierarchy.Crs.FullName);
|
||||
else // Update degree in database
|
||||
{
|
||||
/***** Update degree in table of courses *****/
|
||||
CrsCfg_UpdateCrsDegDB (Gbl.Hierarchy.Crs.CrsCod,NewDeg.DegCod);
|
||||
Gbl.Hierarchy.Crs.DegCod =
|
||||
Gbl.Hierarchy.Deg.DegCod = NewDeg.DegCod;
|
||||
|
||||
/***** Initialize again current course, degree, centre... *****/
|
||||
Hie_InitHierarchy ();
|
||||
|
||||
/***** Create alert to show the change made *****/
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_course_X_has_been_moved_to_the_degree_Y,
|
||||
Gbl.Hierarchy.Crs.FullName,
|
||||
Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Update degree in table of courses ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void CrsCfg_UpdateCrsDegDB (long CrsCod,long DegCod)
|
||||
{
|
||||
/***** Update degree in table of courses *****/
|
||||
DB_QueryUPDATE ("can not move course to another degree",
|
||||
"UPDATE courses SET DegCod=%ld WHERE CrsCod=%ld",
|
||||
DegCod,CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Change the name of a course in configuration ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_RenameCourseShortInConfig (void)
|
||||
{
|
||||
Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_SHRT_NAME);
|
||||
}
|
||||
|
||||
void CrsCfg_RenameCourseFullInConfig (void)
|
||||
{
|
||||
Crs_RenameCourse (&Gbl.Hierarchy.Crs,Cns_FULL_NAME);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** Change the year of a course in course configuration *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_ChangeCrsYearInConfig (void)
|
||||
{
|
||||
extern const char *Txt_The_course_X_already_exists_in_year_Y;
|
||||
extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE];
|
||||
extern const char *Txt_The_year_of_the_course_X_has_changed;
|
||||
extern const char *Txt_The_year_X_is_not_allowed;
|
||||
char YearStr[2 + 1];
|
||||
unsigned NewYear;
|
||||
|
||||
/***** Get parameter with year/semester *****/
|
||||
Par_GetParToText ("OthCrsYear",YearStr,2);
|
||||
NewYear = Deg_ConvStrToYear (YearStr);
|
||||
|
||||
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.Hierarchy.Crs.ShrtName,-1L,
|
||||
Gbl.Hierarchy.Crs.DegCod,NewYear))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_course_X_already_exists_in_year_Y,
|
||||
Gbl.Hierarchy.Crs.ShrtName,
|
||||
Txt_YEAR_OF_DEGREE[NewYear]);
|
||||
else if (Crs_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
||||
Gbl.Hierarchy.Crs.DegCod,NewYear))
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_course_X_already_exists_in_year_Y,
|
||||
Gbl.Hierarchy.Crs.FullName,
|
||||
Txt_YEAR_OF_DEGREE[NewYear]);
|
||||
else // Update year in database
|
||||
{
|
||||
/***** Update year in table of courses *****/
|
||||
Crs_UpdateCrsYear (&Gbl.Hierarchy.Crs,NewYear);
|
||||
|
||||
/***** Create alert to show the change made *****/
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_year_of_the_course_X_has_changed,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
}
|
||||
}
|
||||
else // Year not valid
|
||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||
Txt_The_year_X_is_not_allowed,
|
||||
NewYear);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Change the institutional code of a course in course configuration *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_ChangeInsCrsCodInConfig (void)
|
||||
{
|
||||
extern const char *Txt_The_institutional_code_of_the_course_X_has_changed_to_Y;
|
||||
extern const char *Txt_The_institutional_code_of_the_course_X_has_not_changed;
|
||||
char NewInstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1];
|
||||
|
||||
/***** Get institutional code from form *****/
|
||||
Par_GetParToText ("InsCrsCod",NewInstitutionalCrsCod,Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD);
|
||||
|
||||
/***** Change the institutional course code *****/
|
||||
if (strcmp (NewInstitutionalCrsCod,Gbl.Hierarchy.Crs.InstitutionalCrsCod))
|
||||
{
|
||||
Crs_UpdateInstitutionalCrsCod (&Gbl.Hierarchy.Crs,NewInstitutionalCrsCod);
|
||||
|
||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||
Txt_The_institutional_code_of_the_course_X_has_changed_to_Y,
|
||||
Gbl.Hierarchy.Crs.ShrtName,
|
||||
NewInstitutionalCrsCod);
|
||||
}
|
||||
else // The same institutional code
|
||||
Ale_CreateAlert (Ale_INFO,NULL,
|
||||
Txt_The_institutional_code_of_the_course_X_has_not_changed,
|
||||
Gbl.Hierarchy.Crs.ShrtName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Show message of success after changing a course in course configuration **/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CrsCfg_ContEditAfterChgCrsInConfig (void)
|
||||
{
|
||||
/***** Write error/success message *****/
|
||||
Ale_ShowAlerts (NULL);
|
||||
|
||||
/***** Show the form again *****/
|
||||
Crs_ShowIntroduction ();
|
||||
}
|
||||
|
|
|
@ -43,6 +43,12 @@
|
|||
|
||||
void CrsCfg_Configuration (bool PrintView);
|
||||
void CrsCfg_PrintConfiguration (void);
|
||||
|
||||
void CrsCfg_ChangeCrsDegInConfig (void);
|
||||
void CrsCfg_RenameCourseShortInConfig (void);
|
||||
void CrsCfg_RenameCourseFullInConfig (void);
|
||||
void CrsCfg_ChangeCrsYearInConfig (void);
|
||||
void CrsCfg_ChangeInsCrsCodInConfig (void);
|
||||
void CrsCfg_ContEditAfterChgCrsInConfig (void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue