From d0c4d46c0a421a95e08443ad32815d0e6565e993 Mon Sep 17 00:00:00 2001 From: acanas Date: Tue, 14 Apr 2020 11:08:23 +0200 Subject: [PATCH] Version19.184 --- swad_changelog.h | 3 +- swad_classroom.c | 111 +++++++++++++++++++++++++++-------------------- swad_classroom.h | 18 ++++++-- swad_global.h | 6 --- swad_group.c | 47 +++++++++++--------- 5 files changed, 107 insertions(+), 78 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 96ea292e1..5b2244e5f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -497,7 +497,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.183.2 (2020-04-14)" +#define Log_PLATFORM_VERSION "SWAD 19.184 (2020-04-14)" #define CSS_FILE "swad19.146.css" #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: 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.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) diff --git a/swad_classroom.c b/swad_classroom.c index 13faf04d7..7494354e6 100644 --- a/swad_classroom.c +++ b/swad_classroom.c @@ -54,13 +54,13 @@ extern struct Globals Gbl; /***************************** 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 ****************************/ /*****************************************************************************/ -static void Cla_GetParamClaOrder (void); +static Cla_Order_t Cla_GetParamClaOrder (void); static bool Cla_CheckIfICanCreateClassrooms (void); static void Cla_PutIconsListingClassrooms (__attribute__((unused)) void *Args); 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_ListClassroomsForEdition (void); +static void Cla_ListClassroomsForEdition (const struct Cla_Classrooms *Classrooms); static void Cla_PutParamClaCod (long ClaCod); 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_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_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) { @@ -97,6 +106,7 @@ void Cla_SeeClassrooms (void) extern const char *Txt_CLASSROOMS_HELP_ORDER[Cla_NUM_ORDERS]; extern const char *Txt_CLASSROOMS_ORDER[Cla_NUM_ORDERS]; extern const char *Txt_New_classroom; + struct Cla_Classrooms Classrooms; Cla_Order_t Order; unsigned NumCla; unsigned RowEvenOdd; @@ -106,11 +116,14 @@ void Cla_SeeClassrooms (void) if (Gbl.Hierarchy.Ctr.CtrCod <= 0) // No centre selected return; + /***** Reset classrooms context *****/ + Cla_ResetClassrooms (&Classrooms); + /***** Get parameter with the type of order in the list of classrooms *****/ - Cla_GetParamClaOrder (); + Classrooms.SelectedOrder = Cla_GetParamClaOrder (); /***** Get list of classrooms *****/ - Cla_GetListClassrooms (Cla_ALL_DATA); + Cla_GetListClassrooms (&Classrooms,Cla_ALL_DATA); /***** Table head *****/ Box_BoxBegin (NULL,Txt_Classrooms, @@ -126,10 +139,10 @@ void Cla_SeeClassrooms (void) Frm_StartForm (ActSeeCla); Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order); 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_Txt (Txt_CLASSROOMS_ORDER[Order]); - if (Order == Gbl.Classrooms.SelectedOrder) + if (Order == Classrooms.SelectedOrder) HTM_U_End (); HTM_BUTTON_End (); Frm_EndForm (); @@ -139,30 +152,30 @@ void Cla_SeeClassrooms (void) /***** Write list of classrooms *****/ for (NumCla = 0, RowEvenOdd = 1; - NumCla < Gbl.Classrooms.Num; + NumCla < Classrooms.Num; NumCla++, RowEvenOdd = 1 - RowEvenOdd) { HTM_TR_Begin (NULL); /* Short name */ 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 (); /* Full name */ 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 (); /* Capacity */ 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_TD_End (); /* Location */ 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_TR_End (); @@ -183,20 +196,19 @@ void Cla_SeeClassrooms (void) Box_BoxEnd (); /***** Free list of classrooms *****/ - Cla_FreeListClassrooms (); + Cla_FreeListClassrooms (&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) - Par_GetParToUnsignedLong ("Order", - 0, - Cla_NUM_ORDERS - 1, - (unsigned long) Cla_ORDER_DEFAULT); + return (Cla_Order_t) Par_GetParToUnsignedLong ("Order", + 0, + Cla_NUM_ORDERS - 1, + (unsigned long) Cla_ORDER_DEFAULT); } /*****************************************************************************/ @@ -249,9 +261,13 @@ static void Cla_EditClassroomsInternal (void) { extern const char *Hlp_CENTRE_Classrooms_edit; extern const char *Txt_Classrooms; + struct Cla_Classrooms Classrooms; + + /***** Reset classrooms context *****/ + Cla_ResetClassrooms (&Classrooms); /***** Get list of classrooms *****/ - Cla_GetListClassrooms (Cla_ALL_DATA); + Cla_GetListClassrooms (&Classrooms,Cla_ALL_DATA); /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Classrooms, @@ -262,14 +278,14 @@ static void Cla_EditClassroomsInternal (void) Cla_PutFormToCreateClassroom (); /***** Forms to edit current classrooms *****/ - if (Gbl.Classrooms.Num) - Cla_ListClassroomsForEdition (); + if (Classrooms.Num) + Cla_ListClassroomsForEdition (&Classrooms); /***** End box *****/ Box_BoxEnd (); /***** Free list of classrooms *****/ - Cla_FreeListClassrooms (); + Cla_FreeListClassrooms (&Classrooms); } /*****************************************************************************/ @@ -300,7 +316,8 @@ void Cla_PutIconToViewClassrooms (void) /************************** 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] = { @@ -313,7 +330,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData) MYSQL_ROW row; unsigned long NumRows; unsigned NumCla; - struct Classroom *Cla; + struct Cla_Classroom *Cla; /***** Get classrooms from database *****/ switch (WhichData) @@ -329,7 +346,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData) " WHERE CtrCod=%ld" " ORDER BY %s", Gbl.Hierarchy.Ctr.CtrCod, - OrderBySubQuery[Gbl.Classrooms.SelectedOrder]); + OrderBySubQuery[Classrooms->SelectedOrder]); break; case Cla_ONLY_SHRT_NAME: default: @@ -346,18 +363,20 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData) /***** Count number of rows in result *****/ if (NumRows) // Classrooms found... { - Gbl.Classrooms.Num = (unsigned) NumRows; + Classrooms->Num = (unsigned) NumRows; /***** 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 (); /***** Get the classrooms *****/ for (NumCla = 0; - NumCla < Gbl.Classrooms.Num; + NumCla < Classrooms->Num; NumCla++) { - Cla = &(Gbl.Classrooms.Lst[NumCla]); + Cla = &Classrooms->Lst[NumCla]; /* Get next classroom */ row = mysql_fetch_row (mysql_res); @@ -387,7 +406,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData) } } else - Gbl.Classrooms.Num = 0; + Classrooms->Num = 0; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -397,7 +416,7 @@ void Cla_GetListClassrooms (Cla_WhichData_t WhichData) /************************** Get classroom full name **************************/ /*****************************************************************************/ -void Cla_GetDataOfClassroomByCod (struct Classroom *Cla) +void Cla_GetDataOfClassroomByCod (struct Cla_Classroom *Cla) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -454,14 +473,14 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla) /************************** 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 (Gbl.Classrooms.Lst); - Gbl.Classrooms.Lst = NULL; - Gbl.Classrooms.Num = 0; + free (Classrooms->Lst); + Classrooms->Lst = NULL; + Classrooms->Num = 0; } } @@ -469,10 +488,10 @@ void Cla_FreeListClassrooms (void) /************************* List all the classrooms ***************************/ /*****************************************************************************/ -static void Cla_ListClassroomsForEdition (void) +static void Cla_ListClassroomsForEdition (const struct Cla_Classrooms *Classrooms) { unsigned NumCla; - struct Classroom *Cla; + struct Cla_Classroom *Cla; char StrCapacity[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; /***** Write heading *****/ @@ -481,10 +500,10 @@ static void Cla_ListClassroomsForEdition (void) /***** Write all the classrooms *****/ for (NumCla = 0; - NumCla < Gbl.Classrooms.Num; + NumCla < Classrooms->Num; NumCla++) { - Cla = &Gbl.Classrooms.Lst[NumCla]; + Cla = &Classrooms->Lst[NumCla]; HTM_TR_Begin (NULL); @@ -1022,7 +1041,7 @@ void Cla_RecFormNewClassroom (void) /************************** Create a new classroom ***************************/ /*****************************************************************************/ -static void Cla_CreateClassroom (struct Classroom *Cla) +static void Cla_CreateClassroom (struct Cla_Classroom *Cla) { /***** Create a new classroom *****/ DB_QueryINSERT ("can not create classroom", @@ -1045,7 +1064,7 @@ static void Cla_EditingClassroomConstructor (void) Lay_ShowErrorAndExit ("Error initializing 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."); /***** Reset classroom *****/ diff --git a/swad_classroom.h b/swad_classroom.h index d1e143e75..4ef0fa609 100644 --- a/swad_classroom.h +++ b/swad_classroom.h @@ -46,7 +46,7 @@ #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 -struct Classroom +struct Cla_Classroom { long ClaCod; long InsCod; @@ -73,19 +73,29 @@ typedef enum Cla_ONLY_SHRT_NAME, } Cla_WhichData_t; +struct Cla_Classrooms + { + unsigned Num; // Number of classrooms + struct Cla_Classroom *Lst; // List of classrooms + Cla_Order_t SelectedOrder; + }; + /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ +void Cla_ResetClassrooms (struct Cla_Classrooms *Classrooms); + void Cla_SeeClassrooms (void); void Cla_EditClassrooms (void); void Cla_PutIconToViewClassrooms (void); -void Cla_GetListClassrooms (Cla_WhichData_t WhichData); -void Cla_FreeListClassrooms (void); +void Cla_GetListClassrooms (struct Cla_Classrooms *Classrooms, + Cla_WhichData_t WhichData); +void Cla_FreeListClassrooms (struct Cla_Classrooms *Classrooms); void Cla_GetListClassroomsInThisCtr (void); -void Cla_GetDataOfClassroomByCod (struct Classroom *Cla); +void Cla_GetDataOfClassroomByCod (struct Cla_Classroom *Cla); long Cla_GetParamClaCod (void); void Cla_RemoveClassroom (void); diff --git a/swad_global.h b/swad_global.h index ad8bd83a7..dab0eb4b3 100644 --- a/swad_global.h +++ b/swad_global.h @@ -226,12 +226,6 @@ struct Globals unsigned Num; // Number of degree types struct DegreeType *Lst; // List of degree types } DegTypes; - struct - { - unsigned Num; // Number of classrooms - struct Classroom *Lst; // List of classrooms - Cla_Order_t SelectedOrder; - } Classrooms; struct { unsigned Num; // Number of mail domains diff --git a/swad_group.c b/swad_group.c index b91a41ed9..65c972a50 100644 --- a/swad_group.c +++ b/swad_group.c @@ -96,7 +96,7 @@ static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups, const char *AlertTextGroups); 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_PutIconToCreateNewGroup (void); @@ -116,7 +116,7 @@ static void Grp_PutIconToViewGroups (void); static void Grp_PutIconToCreateNewGroupType (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_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_WriteRowGrp (struct Group *Grp,bool Highlight); 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 void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp); 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 *****/ Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ALL_GROUP_TYPES); - /***** Get list of classrooms in this centre *****/ - Cla_GetListClassrooms (Cla_ONLY_SHRT_NAME); - /***** Show optional alert *****/ if (AlertTextGroupTypes) if (AlertTextGroupTypes[0]) @@ -256,20 +253,28 @@ static void Grp_ReqEditGroupsInternal1 (Ale_AlertType_t AlertTypeGroupTypes, static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups, const char *AlertTextGroups) { + struct Cla_Classrooms Classrooms; + + /***** Reset classrooms context *****/ + Cla_ResetClassrooms (&Classrooms); + /***** Show optional alert *****/ if (AlertTextGroups) if (AlertTextGroups[0]) Ale_ShowAlert (AlertTypeGroups,AlertTextGroups); + /***** Get list of classrooms in this centre *****/ + Cla_GetListClassrooms (&Classrooms,Cla_ONLY_SHRT_NAME); + /***** Put form to edit groups *****/ if (Gbl.Crs.Grps.GrpTypes.Num) // If there are group types... - Grp_EditGroups (); + Grp_EditGroups (&Classrooms); /***** End groups section *****/ HTM_SECTION_End (); /***** Free list of classrooms in this centre *****/ - Cla_FreeListClassrooms (); + Cla_FreeListClassrooms (&Classrooms); /***** Free list of groups types and groups in this course *****/ Grp_FreeListGrpTypesAndGrps (); @@ -308,7 +313,7 @@ static void Grp_EditGroupTypes (void) /**************************** 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 *Txt_Groups; @@ -320,11 +325,11 @@ static void Grp_EditGroups (void) Hlp_USERS_Groups,Box_NOT_CLOSABLE); /***** Put a form to create a new group *****/ - Grp_PutFormToCreateGroup (); + Grp_PutFormToCreateGroup (Classrooms); /***** Forms to edit current 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 Ale_ShowAlert (Ale_INFO,Txt_No_groups_have_been_created_in_the_course_X, Gbl.Hierarchy.Crs.ShrtName); @@ -1468,7 +1473,7 @@ static void Grp_WriteHeadingGroupTypes (void) /********************** 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_closed_click_to_open_it; @@ -1595,11 +1600,11 @@ static void Grp_ListGroupsForEdition (void) /* Options for classrooms */ for (NumCla = 0; - NumCla < Gbl.Classrooms.Num; + NumCla < Classrooms->Num; NumCla++) - HTM_OPTION (HTM_Type_LONG,&Gbl.Classrooms.Lst[NumCla].ClaCod, - Gbl.Classrooms.Lst[NumCla].ClaCod == Grp->Classroom.ClaCod,false, - "%s",Gbl.Classrooms.Lst[NumCla].ShrtName); + HTM_OPTION (HTM_Type_LONG,&Classrooms->Lst[NumCla].ClaCod, + Classrooms->Lst[NumCla].ClaCod == Grp->Classroom.ClaCod,false, + "%s",Classrooms->Lst[NumCla].ShrtName); /* End selector */ HTM_SELECT_End (); @@ -2569,7 +2574,7 @@ static void Grp_PutFormToCreateGroupType (void) /*********************** 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_Group_closed; @@ -2651,11 +2656,11 @@ static void Grp_PutFormToCreateGroup (void) /* Options for classrooms */ for (NumCla = 0; - NumCla < Gbl.Classrooms.Num; + NumCla < Classrooms->Num; NumCla++) - HTM_OPTION (HTM_Type_LONG,&Gbl.Classrooms.Lst[NumCla].ClaCod, - Gbl.Classrooms.Lst[NumCla].ClaCod == Gbl.Crs.Grps.ClaCod,false, - "%s",Gbl.Classrooms.Lst[NumCla].ShrtName); + HTM_OPTION (HTM_Type_LONG,&Classrooms->Lst[NumCla].ClaCod, + Classrooms->Lst[NumCla].ClaCod == Gbl.Crs.Grps.ClaCod,false, + "%s",Classrooms->Lst[NumCla].ShrtName); /* End selector */ HTM_SELECT_End ();