Version19.184

This commit is contained in:
acanas 2020-04-14 11:08:23 +02:00
parent 23c7e8baf5
commit d0c4d46c0a
5 changed files with 107 additions and 78 deletions

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.183.2 (2020-04-14)" #define Log_PLATFORM_VERSION "SWAD 19.184 (2020-04-14)"
#define CSS_FILE "swad19.146.css" #define CSS_FILE "swad19.146.css"
#define JS_FILE "swad19.172.1.js" #define JS_FILE "swad19.172.1.js"
/* /*
@ -548,6 +548,7 @@ Funci
// TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores // TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores
// TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub // TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub
Version 19.184: Apr 14, 2020 Code refactoring in classrooms. (285706 lines)
Version 19.183.2: Apr 14, 2020 Fixed bug in test exams. (285684 lines) Version 19.183.2: Apr 14, 2020 Fixed bug in test exams. (285684 lines)
Version 19.183.1: Apr 14, 2020 Fixed bug in forums, reported by Javier Fernández Baldomero. (285677 lines) Version 19.183.1: Apr 14, 2020 Fixed bug in forums, reported by Javier Fernández Baldomero. (285677 lines)
Version 19.183: Apr 13, 2020 Code refactoring in holidays. (285689 lines) Version 19.183: Apr 13, 2020 Code refactoring in holidays. (285689 lines)

View File

@ -54,13 +54,13 @@ extern struct Globals Gbl;
/***************************** Private variables *****************************/ /***************************** Private variables *****************************/
/*****************************************************************************/ /*****************************************************************************/
static struct Classroom *Cla_EditingCla = NULL; // Static variable to keep the classroom being edited static struct Cla_Classroom *Cla_EditingCla = NULL; // Static variable to keep the classroom being edited
/*****************************************************************************/ /*****************************************************************************/
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static void Cla_GetParamClaOrder (void); static Cla_Order_t Cla_GetParamClaOrder (void);
static bool Cla_CheckIfICanCreateClassrooms (void); static bool Cla_CheckIfICanCreateClassrooms (void);
static void Cla_PutIconsListingClassrooms (__attribute__((unused)) void *Args); static void Cla_PutIconsListingClassrooms (__attribute__((unused)) void *Args);
static void Cla_PutIconToEditClassrooms (void); static void Cla_PutIconToEditClassrooms (void);
@ -68,7 +68,7 @@ static void Cla_PutIconsEditingClassrooms (__attribute__((unused)) void *Args);
static void Cla_EditClassroomsInternal (void); static void Cla_EditClassroomsInternal (void);
static void Cla_ListClassroomsForEdition (void); static void Cla_ListClassroomsForEdition (const struct Cla_Classrooms *Classrooms);
static void Cla_PutParamClaCod (long ClaCod); static void Cla_PutParamClaCod (long ClaCod);
static void Cla_RenameClassroom (Cns_ShrtOrFullName_t ShrtOrFullName); static void Cla_RenameClassroom (Cns_ShrtOrFullName_t ShrtOrFullName);
@ -79,16 +79,25 @@ static void Cla_WriteCapacity (char Str[Cns_MAX_DECIMAL_DIGITS_UINT + 1],unsigne
static void Cla_PutFormToCreateClassroom (void); static void Cla_PutFormToCreateClassroom (void);
static void Cla_PutHeadClassrooms (void); static void Cla_PutHeadClassrooms (void);
static void Cla_CreateClassroom (struct Classroom *Cla); static void Cla_CreateClassroom (struct Cla_Classroom *Cla);
static void Cla_EditingClassroomConstructor (void); static void Cla_EditingClassroomConstructor (void);
static void Cla_EditingClassroomDestructor (void); static void Cla_EditingClassroomDestructor (void);
/*****************************************************************************/ /*****************************************************************************/
/************************* List all the classrooms ***************************/ /************************* Reset classrooms context **************************/
/*****************************************************************************/ /*****************************************************************************/
#define A SIZE_MAX void Cla_ResetClassrooms (struct Cla_Classrooms *Classrooms)
{
Classrooms->Num = 0; // Number of classrooms
Classrooms->Lst = NULL; // List of classrooms
Classrooms->SelectedOrder = Cla_ORDER_DEFAULT;
}
/*****************************************************************************/
/************************* List all the classrooms ***************************/
/*****************************************************************************/
void Cla_SeeClassrooms (void) void Cla_SeeClassrooms (void)
{ {
@ -97,6 +106,7 @@ void Cla_SeeClassrooms (void)
extern const char *Txt_CLASSROOMS_HELP_ORDER[Cla_NUM_ORDERS]; extern const char *Txt_CLASSROOMS_HELP_ORDER[Cla_NUM_ORDERS];
extern const char *Txt_CLASSROOMS_ORDER[Cla_NUM_ORDERS]; extern const char *Txt_CLASSROOMS_ORDER[Cla_NUM_ORDERS];
extern const char *Txt_New_classroom; extern const char *Txt_New_classroom;
struct Cla_Classrooms Classrooms;
Cla_Order_t Order; Cla_Order_t Order;
unsigned NumCla; unsigned NumCla;
unsigned RowEvenOdd; unsigned RowEvenOdd;
@ -106,11 +116,14 @@ void Cla_SeeClassrooms (void)
if (Gbl.Hierarchy.Ctr.CtrCod <= 0) // No centre selected if (Gbl.Hierarchy.Ctr.CtrCod <= 0) // No centre selected
return; return;
/***** Reset classrooms context *****/
Cla_ResetClassrooms (&Classrooms);
/***** Get parameter with the type of order in the list of classrooms *****/ /***** Get parameter with the type of order in the list of classrooms *****/
Cla_GetParamClaOrder (); Classrooms.SelectedOrder = Cla_GetParamClaOrder ();
/***** Get list of classrooms *****/ /***** Get list of classrooms *****/
Cla_GetListClassrooms (Cla_ALL_DATA); Cla_GetListClassrooms (&Classrooms,Cla_ALL_DATA);
/***** Table head *****/ /***** Table head *****/
Box_BoxBegin (NULL,Txt_Classrooms, Box_BoxBegin (NULL,Txt_Classrooms,
@ -126,10 +139,10 @@ void Cla_SeeClassrooms (void)
Frm_StartForm (ActSeeCla); Frm_StartForm (ActSeeCla);
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order); Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
HTM_BUTTON_SUBMIT_Begin (Txt_CLASSROOMS_HELP_ORDER[Order],"BT_LINK TIT_TBL",NULL); HTM_BUTTON_SUBMIT_Begin (Txt_CLASSROOMS_HELP_ORDER[Order],"BT_LINK TIT_TBL",NULL);
if (Order == Gbl.Classrooms.SelectedOrder) if (Order == Classrooms.SelectedOrder)
HTM_U_Begin (); HTM_U_Begin ();
HTM_Txt (Txt_CLASSROOMS_ORDER[Order]); HTM_Txt (Txt_CLASSROOMS_ORDER[Order]);
if (Order == Gbl.Classrooms.SelectedOrder) if (Order == Classrooms.SelectedOrder)
HTM_U_End (); HTM_U_End ();
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();
@ -139,30 +152,30 @@ void Cla_SeeClassrooms (void)
/***** Write list of classrooms *****/ /***** Write list of classrooms *****/
for (NumCla = 0, RowEvenOdd = 1; for (NumCla = 0, RowEvenOdd = 1;
NumCla < Gbl.Classrooms.Num; NumCla < Classrooms.Num;
NumCla++, RowEvenOdd = 1 - RowEvenOdd) NumCla++, RowEvenOdd = 1 - RowEvenOdd)
{ {
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Short name */ /* Short name */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]); HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Gbl.Classrooms.Lst[NumCla].ShrtName); HTM_Txt (Classrooms.Lst[NumCla].ShrtName);
HTM_TD_End (); HTM_TD_End ();
/* Full name */ /* Full name */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]); HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Gbl.Classrooms.Lst[NumCla].FullName); HTM_Txt (Classrooms.Lst[NumCla].FullName);
HTM_TD_End (); HTM_TD_End ();
/* Capacity */ /* Capacity */
HTM_TD_Begin ("class=\"DAT RM %s\"",Gbl.ColorRows[RowEvenOdd]); HTM_TD_Begin ("class=\"DAT RM %s\"",Gbl.ColorRows[RowEvenOdd]);
Cla_WriteCapacity (StrCapacity,Gbl.Classrooms.Lst[NumCla].Capacity); Cla_WriteCapacity (StrCapacity,Classrooms.Lst[NumCla].Capacity);
HTM_Txt (StrCapacity); HTM_Txt (StrCapacity);
HTM_TD_End (); HTM_TD_End ();
/* Location */ /* Location */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]); HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Gbl.Classrooms.Lst[NumCla].Location); HTM_Txt (Classrooms.Lst[NumCla].Location);
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -183,20 +196,19 @@ void Cla_SeeClassrooms (void)
Box_BoxEnd (); Box_BoxEnd ();
/***** Free list of classrooms *****/ /***** Free list of classrooms *****/
Cla_FreeListClassrooms (); Cla_FreeListClassrooms (&Classrooms);
} }
/*****************************************************************************/ /*****************************************************************************/
/******** Get parameter with the type or order in list of classrooms *********/ /******** Get parameter with the type or order in list of classrooms *********/
/*****************************************************************************/ /*****************************************************************************/
static void Cla_GetParamClaOrder (void) static Cla_Order_t Cla_GetParamClaOrder (void)
{ {
Gbl.Classrooms.SelectedOrder = (Cla_Order_t) return (Cla_Order_t) Par_GetParToUnsignedLong ("Order",
Par_GetParToUnsignedLong ("Order", 0,
0, Cla_NUM_ORDERS - 1,
Cla_NUM_ORDERS - 1, (unsigned long) Cla_ORDER_DEFAULT);
(unsigned long) Cla_ORDER_DEFAULT);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -249,9 +261,13 @@ static void Cla_EditClassroomsInternal (void)
{ {
extern const char *Hlp_CENTRE_Classrooms_edit; extern const char *Hlp_CENTRE_Classrooms_edit;
extern const char *Txt_Classrooms; extern const char *Txt_Classrooms;
struct Cla_Classrooms Classrooms;
/***** Reset classrooms context *****/
Cla_ResetClassrooms (&Classrooms);
/***** Get list of classrooms *****/ /***** Get list of classrooms *****/
Cla_GetListClassrooms (Cla_ALL_DATA); Cla_GetListClassrooms (&Classrooms,Cla_ALL_DATA);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Txt_Classrooms, Box_BoxBegin (NULL,Txt_Classrooms,
@ -262,14 +278,14 @@ static void Cla_EditClassroomsInternal (void)
Cla_PutFormToCreateClassroom (); Cla_PutFormToCreateClassroom ();
/***** Forms to edit current classrooms *****/ /***** Forms to edit current classrooms *****/
if (Gbl.Classrooms.Num) if (Classrooms.Num)
Cla_ListClassroomsForEdition (); Cla_ListClassroomsForEdition (&Classrooms);
/***** End box *****/ /***** End box *****/
Box_BoxEnd (); Box_BoxEnd ();
/***** Free list of classrooms *****/ /***** Free list of classrooms *****/
Cla_FreeListClassrooms (); Cla_FreeListClassrooms (&Classrooms);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -300,7 +316,8 @@ void Cla_PutIconToViewClassrooms (void)
/************************** List all the classrooms **************************/ /************************** List all the classrooms **************************/
/*****************************************************************************/ /*****************************************************************************/
void Cla_GetListClassrooms (Cla_WhichData_t WhichData) void Cla_GetListClassrooms (struct Cla_Classrooms *Classrooms,
Cla_WhichData_t WhichData)
{ {
static const char *OrderBySubQuery[Cla_NUM_ORDERS] = static const char *OrderBySubQuery[Cla_NUM_ORDERS] =
{ {
@ -313,7 +330,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData)
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned NumCla; unsigned NumCla;
struct Classroom *Cla; struct Cla_Classroom *Cla;
/***** Get classrooms from database *****/ /***** Get classrooms from database *****/
switch (WhichData) switch (WhichData)
@ -329,7 +346,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData)
" WHERE CtrCod=%ld" " WHERE CtrCod=%ld"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
OrderBySubQuery[Gbl.Classrooms.SelectedOrder]); OrderBySubQuery[Classrooms->SelectedOrder]);
break; break;
case Cla_ONLY_SHRT_NAME: case Cla_ONLY_SHRT_NAME:
default: default:
@ -346,18 +363,20 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData)
/***** Count number of rows in result *****/ /***** Count number of rows in result *****/
if (NumRows) // Classrooms found... if (NumRows) // Classrooms found...
{ {
Gbl.Classrooms.Num = (unsigned) NumRows; Classrooms->Num = (unsigned) NumRows;
/***** Create list with courses in centre *****/ /***** Create list with courses in centre *****/
if ((Gbl.Classrooms.Lst = (struct Classroom *) calloc (NumRows,sizeof (struct Classroom))) == NULL) if ((Classrooms->Lst = (struct Cla_Classroom *)
calloc (NumRows,
sizeof (struct Cla_Classroom))) == NULL)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
/***** Get the classrooms *****/ /***** Get the classrooms *****/
for (NumCla = 0; for (NumCla = 0;
NumCla < Gbl.Classrooms.Num; NumCla < Classrooms->Num;
NumCla++) NumCla++)
{ {
Cla = &(Gbl.Classrooms.Lst[NumCla]); Cla = &Classrooms->Lst[NumCla];
/* Get next classroom */ /* Get next classroom */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -387,7 +406,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData)
} }
} }
else else
Gbl.Classrooms.Num = 0; Classrooms->Num = 0;
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
@ -397,7 +416,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData)
/************************** Get classroom full name **************************/ /************************** Get classroom full name **************************/
/*****************************************************************************/ /*****************************************************************************/
void Cla_GetDataOfClassroomByCod (struct Classroom *Cla) void Cla_GetDataOfClassroomByCod (struct Cla_Classroom *Cla)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
@ -454,14 +473,14 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
/************************** Free list of classrooms **************************/ /************************** Free list of classrooms **************************/
/*****************************************************************************/ /*****************************************************************************/
void Cla_FreeListClassrooms (void) void Cla_FreeListClassrooms (struct Cla_Classrooms *Classrooms)
{ {
if (Gbl.Classrooms.Lst) if (Classrooms->Lst)
{ {
/***** Free memory used by the list of classrooms in institution *****/ /***** Free memory used by the list of classrooms in institution *****/
free (Gbl.Classrooms.Lst); free (Classrooms->Lst);
Gbl.Classrooms.Lst = NULL; Classrooms->Lst = NULL;
Gbl.Classrooms.Num = 0; Classrooms->Num = 0;
} }
} }
@ -469,10 +488,10 @@ void Cla_FreeListClassrooms (void)
/************************* List all the classrooms ***************************/ /************************* List all the classrooms ***************************/
/*****************************************************************************/ /*****************************************************************************/
static void Cla_ListClassroomsForEdition (void) static void Cla_ListClassroomsForEdition (const struct Cla_Classrooms *Classrooms)
{ {
unsigned NumCla; unsigned NumCla;
struct Classroom *Cla; struct Cla_Classroom *Cla;
char StrCapacity[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; char StrCapacity[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
/***** Write heading *****/ /***** Write heading *****/
@ -481,10 +500,10 @@ static void Cla_ListClassroomsForEdition (void)
/***** Write all the classrooms *****/ /***** Write all the classrooms *****/
for (NumCla = 0; for (NumCla = 0;
NumCla < Gbl.Classrooms.Num; NumCla < Classrooms->Num;
NumCla++) NumCla++)
{ {
Cla = &Gbl.Classrooms.Lst[NumCla]; Cla = &Classrooms->Lst[NumCla];
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1022,7 +1041,7 @@ void Cla_RecFormNewClassroom (void)
/************************** Create a new classroom ***************************/ /************************** Create a new classroom ***************************/
/*****************************************************************************/ /*****************************************************************************/
static void Cla_CreateClassroom (struct Classroom *Cla) static void Cla_CreateClassroom (struct Cla_Classroom *Cla)
{ {
/***** Create a new classroom *****/ /***** Create a new classroom *****/
DB_QueryINSERT ("can not create classroom", DB_QueryINSERT ("can not create classroom",
@ -1045,7 +1064,7 @@ static void Cla_EditingClassroomConstructor (void)
Lay_ShowErrorAndExit ("Error initializing classroom."); Lay_ShowErrorAndExit ("Error initializing classroom.");
/***** Allocate memory for classroom *****/ /***** Allocate memory for classroom *****/
if ((Cla_EditingCla = (struct Classroom *) malloc (sizeof (struct Classroom))) == NULL) if ((Cla_EditingCla = (struct Cla_Classroom *) malloc (sizeof (struct Cla_Classroom))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for classroom."); Lay_ShowErrorAndExit ("Error allocating memory for classroom.");
/***** Reset classroom *****/ /***** Reset classroom *****/

View File

@ -46,7 +46,7 @@
#define Cla_MAX_CHARS_LOCATION (128 - 1) // 127 #define Cla_MAX_CHARS_LOCATION (128 - 1) // 127
#define Cla_MAX_BYTES_LOCATION ((Cla_MAX_CHARS_LOCATION + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047 #define Cla_MAX_BYTES_LOCATION ((Cla_MAX_CHARS_LOCATION + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
struct Classroom struct Cla_Classroom
{ {
long ClaCod; long ClaCod;
long InsCod; long InsCod;
@ -73,19 +73,29 @@ typedef enum
Cla_ONLY_SHRT_NAME, Cla_ONLY_SHRT_NAME,
} Cla_WhichData_t; } Cla_WhichData_t;
struct Cla_Classrooms
{
unsigned Num; // Number of classrooms
struct Cla_Classroom *Lst; // List of classrooms
Cla_Order_t SelectedOrder;
};
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Cla_ResetClassrooms (struct Cla_Classrooms *Classrooms);
void Cla_SeeClassrooms (void); void Cla_SeeClassrooms (void);
void Cla_EditClassrooms (void); void Cla_EditClassrooms (void);
void Cla_PutIconToViewClassrooms (void); void Cla_PutIconToViewClassrooms (void);
void Cla_GetListClassrooms (Cla_WhichData_t WhichData); void Cla_GetListClassrooms (struct Cla_Classrooms *Classrooms,
void Cla_FreeListClassrooms (void); Cla_WhichData_t WhichData);
void Cla_FreeListClassrooms (struct Cla_Classrooms *Classrooms);
void Cla_GetListClassroomsInThisCtr (void); void Cla_GetListClassroomsInThisCtr (void);
void Cla_GetDataOfClassroomByCod (struct Classroom *Cla); void Cla_GetDataOfClassroomByCod (struct Cla_Classroom *Cla);
long Cla_GetParamClaCod (void); long Cla_GetParamClaCod (void);
void Cla_RemoveClassroom (void); void Cla_RemoveClassroom (void);

View File

@ -226,12 +226,6 @@ struct Globals
unsigned Num; // Number of degree types unsigned Num; // Number of degree types
struct DegreeType *Lst; // List of degree types struct DegreeType *Lst; // List of degree types
} DegTypes; } DegTypes;
struct
{
unsigned Num; // Number of classrooms
struct Classroom *Lst; // List of classrooms
Cla_Order_t SelectedOrder;
} Classrooms;
struct struct
{ {
unsigned Num; // Number of mail domains unsigned Num; // Number of mail domains

View File

@ -96,7 +96,7 @@ static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups,
const char *AlertTextGroups); const char *AlertTextGroups);
static void Grp_EditGroupTypes (void); static void Grp_EditGroupTypes (void);
static void Grp_EditGroups (void); static void Grp_EditGroups (const struct Cla_Classrooms *Classrooms);
static void Grp_PutIconsEditingGroups (__attribute__((unused)) void *Args); static void Grp_PutIconsEditingGroups (__attribute__((unused)) void *Args);
static void Grp_PutIconToCreateNewGroup (void); static void Grp_PutIconToCreateNewGroup (void);
@ -116,7 +116,7 @@ static void Grp_PutIconToViewGroups (void);
static void Grp_PutIconToCreateNewGroupType (void); static void Grp_PutIconToCreateNewGroupType (void);
static void Grp_WriteHeadingGroupTypes (void); static void Grp_WriteHeadingGroupTypes (void);
static void Grp_ListGroupsForEdition (void); static void Grp_ListGroupsForEdition (const struct Cla_Classrooms *Classrooms);
static void Grp_WriteHeadingGroups (void); static void Grp_WriteHeadingGroups (void);
static void Grp_PutIconToEditGroups (__attribute__((unused)) void *Args); static void Grp_PutIconToEditGroups (__attribute__((unused)) void *Args);
@ -129,7 +129,7 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp,
static void Grp_WriteGrpHead (struct GroupType *GrpTyp); static void Grp_WriteGrpHead (struct GroupType *GrpTyp);
static void Grp_WriteRowGrp (struct Group *Grp,bool Highlight); static void Grp_WriteRowGrp (struct Group *Grp,bool Highlight);
static void Grp_PutFormToCreateGroupType (void); static void Grp_PutFormToCreateGroupType (void);
static void Grp_PutFormToCreateGroup (void); static void Grp_PutFormToCreateGroup (const struct Cla_Classrooms *Classrooms);
static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod); static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod);
static void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp); static void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp);
static bool Grp_GetMultipleEnrolmentOfAGroupType (long GrpTypCod); static bool Grp_GetMultipleEnrolmentOfAGroupType (long GrpTypCod);
@ -235,9 +235,6 @@ static void Grp_ReqEditGroupsInternal1 (Ale_AlertType_t AlertTypeGroupTypes,
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ALL_GROUP_TYPES); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ALL_GROUP_TYPES);
/***** Get list of classrooms in this centre *****/
Cla_GetListClassrooms (Cla_ONLY_SHRT_NAME);
/***** Show optional alert *****/ /***** Show optional alert *****/
if (AlertTextGroupTypes) if (AlertTextGroupTypes)
if (AlertTextGroupTypes[0]) if (AlertTextGroupTypes[0])
@ -256,20 +253,28 @@ static void Grp_ReqEditGroupsInternal1 (Ale_AlertType_t AlertTypeGroupTypes,
static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups, static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups,
const char *AlertTextGroups) const char *AlertTextGroups)
{ {
struct Cla_Classrooms Classrooms;
/***** Reset classrooms context *****/
Cla_ResetClassrooms (&Classrooms);
/***** Show optional alert *****/ /***** Show optional alert *****/
if (AlertTextGroups) if (AlertTextGroups)
if (AlertTextGroups[0]) if (AlertTextGroups[0])
Ale_ShowAlert (AlertTypeGroups,AlertTextGroups); Ale_ShowAlert (AlertTypeGroups,AlertTextGroups);
/***** Get list of classrooms in this centre *****/
Cla_GetListClassrooms (&Classrooms,Cla_ONLY_SHRT_NAME);
/***** Put form to edit groups *****/ /***** Put form to edit groups *****/
if (Gbl.Crs.Grps.GrpTypes.Num) // If there are group types... if (Gbl.Crs.Grps.GrpTypes.Num) // If there are group types...
Grp_EditGroups (); Grp_EditGroups (&Classrooms);
/***** End groups section *****/ /***** End groups section *****/
HTM_SECTION_End (); HTM_SECTION_End ();
/***** Free list of classrooms in this centre *****/ /***** Free list of classrooms in this centre *****/
Cla_FreeListClassrooms (); Cla_FreeListClassrooms (&Classrooms);
/***** Free list of groups types and groups in this course *****/ /***** Free list of groups types and groups in this course *****/
Grp_FreeListGrpTypesAndGrps (); Grp_FreeListGrpTypesAndGrps ();
@ -308,7 +313,7 @@ static void Grp_EditGroupTypes (void)
/**************************** Put forms to edit groups ***********************/ /**************************** Put forms to edit groups ***********************/
/*****************************************************************************/ /*****************************************************************************/
static void Grp_EditGroups (void) static void Grp_EditGroups (const struct Cla_Classrooms *Classrooms)
{ {
extern const char *Hlp_USERS_Groups; extern const char *Hlp_USERS_Groups;
extern const char *Txt_Groups; extern const char *Txt_Groups;
@ -320,11 +325,11 @@ static void Grp_EditGroups (void)
Hlp_USERS_Groups,Box_NOT_CLOSABLE); Hlp_USERS_Groups,Box_NOT_CLOSABLE);
/***** Put a form to create a new group *****/ /***** Put a form to create a new group *****/
Grp_PutFormToCreateGroup (); Grp_PutFormToCreateGroup (Classrooms);
/***** Forms to edit current groups *****/ /***** Forms to edit current groups *****/
if (Gbl.Crs.Grps.GrpTypes.NumGrpsTotal) // If there are groups... if (Gbl.Crs.Grps.GrpTypes.NumGrpsTotal) // If there are groups...
Grp_ListGroupsForEdition (); Grp_ListGroupsForEdition (Classrooms);
else // There are group types, but there aren't groups else // There are group types, but there aren't groups
Ale_ShowAlert (Ale_INFO,Txt_No_groups_have_been_created_in_the_course_X, Ale_ShowAlert (Ale_INFO,Txt_No_groups_have_been_created_in_the_course_X,
Gbl.Hierarchy.Crs.ShrtName); Gbl.Hierarchy.Crs.ShrtName);
@ -1468,7 +1473,7 @@ static void Grp_WriteHeadingGroupTypes (void)
/********************** List current groups for edition **********************/ /********************** List current groups for edition **********************/
/*****************************************************************************/ /*****************************************************************************/
static void Grp_ListGroupsForEdition (void) static void Grp_ListGroupsForEdition (const struct Cla_Classrooms *Classrooms)
{ {
extern const char *Txt_Group_X_open_click_to_close_it; extern const char *Txt_Group_X_open_click_to_close_it;
extern const char *Txt_Group_X_closed_click_to_open_it; extern const char *Txt_Group_X_closed_click_to_open_it;
@ -1595,11 +1600,11 @@ static void Grp_ListGroupsForEdition (void)
/* Options for classrooms */ /* Options for classrooms */
for (NumCla = 0; for (NumCla = 0;
NumCla < Gbl.Classrooms.Num; NumCla < Classrooms->Num;
NumCla++) NumCla++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Classrooms.Lst[NumCla].ClaCod, HTM_OPTION (HTM_Type_LONG,&Classrooms->Lst[NumCla].ClaCod,
Gbl.Classrooms.Lst[NumCla].ClaCod == Grp->Classroom.ClaCod,false, Classrooms->Lst[NumCla].ClaCod == Grp->Classroom.ClaCod,false,
"%s",Gbl.Classrooms.Lst[NumCla].ShrtName); "%s",Classrooms->Lst[NumCla].ShrtName);
/* End selector */ /* End selector */
HTM_SELECT_End (); HTM_SELECT_End ();
@ -2569,7 +2574,7 @@ static void Grp_PutFormToCreateGroupType (void)
/*********************** Put a form to create a new group ********************/ /*********************** Put a form to create a new group ********************/
/*****************************************************************************/ /*****************************************************************************/
static void Grp_PutFormToCreateGroup (void) static void Grp_PutFormToCreateGroup (const struct Cla_Classrooms *Classrooms)
{ {
extern const char *Txt_New_group; extern const char *Txt_New_group;
extern const char *Txt_Group_closed; extern const char *Txt_Group_closed;
@ -2651,11 +2656,11 @@ static void Grp_PutFormToCreateGroup (void)
/* Options for classrooms */ /* Options for classrooms */
for (NumCla = 0; for (NumCla = 0;
NumCla < Gbl.Classrooms.Num; NumCla < Classrooms->Num;
NumCla++) NumCla++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Classrooms.Lst[NumCla].ClaCod, HTM_OPTION (HTM_Type_LONG,&Classrooms->Lst[NumCla].ClaCod,
Gbl.Classrooms.Lst[NumCla].ClaCod == Gbl.Crs.Grps.ClaCod,false, Classrooms->Lst[NumCla].ClaCod == Gbl.Crs.Grps.ClaCod,false,
"%s",Gbl.Classrooms.Lst[NumCla].ShrtName); "%s",Classrooms->Lst[NumCla].ShrtName);
/* End selector */ /* End selector */
HTM_SELECT_End (); HTM_SELECT_End ();