Version 20.94.6: Jun 28, 2021 Fixed bug in removal of project.

This commit is contained in:
acanas 2021-06-28 12:54:09 +02:00
parent 6a8c7b9efe
commit 57456e7585
12 changed files with 71 additions and 71 deletions

View File

@ -1243,7 +1243,7 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1274,7 +1274,7 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],

View File

@ -1136,7 +1136,7 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod)
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1168,7 +1168,7 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod)
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.94.5 (2021-06-25)" #define Log_PLATFORM_VERSION "SWAD 20.94.6 (2021-06-28)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js" #define JS_FILE "swad20.69.1.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.94.6: Jun 28, 2021 Fixed bug in removal of project. (313688 lines)
Version 20.94.5: Jun 25, 2021 Queries moved to module swad_group_database. (313686 lines) Version 20.94.5: Jun 25, 2021 Queries moved to module swad_group_database. (313686 lines)
Version 20.94.4: Jun 24, 2021 Queries moved to module swad_group_database. (313637 lines) Version 20.94.4: Jun 24, 2021 Queries moved to module swad_group_database. (313637 lines)
Version 20.94.3: Jun 18, 2021 Queries moved to module swad_group_database. (313602 lines) Version 20.94.3: Jun 18, 2021 Queries moved to module swad_group_database. (313602 lines)

View File

@ -1367,7 +1367,7 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1399,7 +1399,7 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],

View File

@ -245,7 +245,7 @@ void Gbl_InitializeGlobals (void)
Gbl.Crs.Grps.NumGrps = 0; Gbl.Crs.Grps.NumGrps = 0;
Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT; Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT;
Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL; Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL;
Gbl.Crs.Grps.GrpTypes.Num = 0; Gbl.Crs.Grps.GrpTypes.NumGrpTypes = 0;
Gbl.Crs.Grps.GrpTypes.NestedCalls = 0; Gbl.Crs.Grps.GrpTypes.NestedCalls = 0;
Gbl.Crs.Grps.GrpTyp.GrpTypName[0] = '\0'; Gbl.Crs.Grps.GrpTyp.GrpTypName[0] = '\0';
Gbl.Crs.Grps.GrpTyp.MandatoryEnrolment = true; Gbl.Crs.Grps.GrpTyp.MandatoryEnrolment = true;

View File

@ -261,7 +261,7 @@ static void Grp_ReqEditGroupsInternal2 (Ale_AlertType_t AlertTypeGroups,
Roo_GetListRooms (&Rooms,Roo_ONLY_SHRT_NAME); Roo_GetListRooms (&Rooms,Roo_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.NumGrpTypes) // If there are group types...
Grp_EditGroups (&Rooms); Grp_EditGroups (&Rooms);
/***** End groups section *****/ /***** End groups section *****/
@ -293,7 +293,7 @@ static void Grp_EditGroupTypes (void)
Grp_PutFormToCreateGroupType (); Grp_PutFormToCreateGroupType ();
/***** Forms to edit current group types *****/ /***** Forms to edit current group types *****/
if (Gbl.Crs.Grps.GrpTypes.Num) // Group types found... if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes) // Group types found...
Grp_ListGroupTypesForEdition (); Grp_ListGroupTypesForEdition ();
else // No group types found in this course else // No group types found in this course
Ale_ShowAlert (Ale_INFO,Txt_There_are_no_types_of_group_in_the_course_X, Ale_ShowAlert (Ale_INFO,Txt_There_are_no_types_of_group_in_the_course_X,
@ -403,7 +403,7 @@ void Grp_ShowFormToSelectSeveralGroups (void (*FuncParams) (void *Args),void *Ar
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
HTM_TABLE_BeginWidePadding (2); HTM_TABLE_BeginWidePadding (2);
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsForMultipleSelection (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsForMultipleSelection (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],
@ -797,7 +797,8 @@ bool Grp_ChangeMyGrpsAtomically (struct ListCodGrps *LstGrpsIWant)
if (RemoveMeFromThisGrp) if (RemoveMeFromThisGrp)
/* Check if the group is closed */ /* Check if the group is closed */
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num && !ITryToLeaveAClosedGroup; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes &&
!ITryToLeaveAClosedGroup;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -827,7 +828,7 @@ bool Grp_ChangeMyGrpsAtomically (struct ListCodGrps *LstGrpsIWant)
if (RegisterMeInThisGrp) if (RegisterMeInThisGrp)
/* Check if the group is closed or full */ /* Check if the group is closed or full */
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num && NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes &&
!ITryToRegisterInAClosedGroup && !ITryToRegisterInAClosedGroup &&
!ITryToRegisterInFullGroup; !ITryToRegisterInFullGroup;
NumGrpTyp++) NumGrpTyp++)
@ -997,7 +998,7 @@ bool Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Rol_Role_t Role,struct List
if (!MultipleEnrolment) if (!MultipleEnrolment)
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (GrpTypCod == AlreadyExistsGroupOfType[NumGrpTyp].GrpTypCod) if (GrpTypCod == AlreadyExistsGroupOfType[NumGrpTyp].GrpTypCod)
{ {
@ -1030,13 +1031,13 @@ static void Grp_ConstructorListGrpAlreadySelec (struct ListGrpsAlreadySelec **Al
unsigned NumGrpTyp; unsigned NumGrpTyp;
/***** Allocate memory to a list of booleanos that indica if already se ha selected a group of cada type *****/ /***** Allocate memory to a list of booleanos that indica if already se ha selected a group of cada type *****/
if ((*AlreadyExistsGroupOfType = calloc (Gbl.Crs.Grps.GrpTypes.Num, if ((*AlreadyExistsGroupOfType = calloc (Gbl.Crs.Grps.GrpTypes.NumGrpTypes,
sizeof (**AlreadyExistsGroupOfType))) == NULL) sizeof (**AlreadyExistsGroupOfType))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Initialize the list *****/ /***** Initialize the list *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
(*AlreadyExistsGroupOfType)[NumGrpTyp].GrpTypCod = Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod; (*AlreadyExistsGroupOfType)[NumGrpTyp].GrpTypCod = Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod;
@ -1072,7 +1073,7 @@ void Grp_RegisterUsrIntoGroups (struct UsrData *UsrDat,struct ListCodGrps *LstGr
/***** For each existing type of group in the course... *****/ /***** For each existing type of group in the course... *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
MultipleEnrolment = Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].MultipleEnrolment; MultipleEnrolment = Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].MultipleEnrolment;
@ -1251,7 +1252,7 @@ static void Grp_ListGroupTypesForEdition (void)
/***** List group types with forms for edition *****/ /***** List group types with forms for edition *****/
for (NumGrpTyp = 0, UniqueId=1; for (NumGrpTyp = 0, UniqueId=1;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++, UniqueId++) NumGrpTyp++, UniqueId++)
{ {
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1439,7 +1440,7 @@ static void Grp_ListGroupsForEdition (const struct Roo_Rooms *Rooms)
/***** List the groups *****/ /***** List the groups *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -1497,7 +1498,7 @@ static void Grp_ListGroupsForEdition (const struct Roo_Rooms *Rooms)
/* Options for group types */ /* Options for group types */
for (NumTipGrpAux = 0; for (NumTipGrpAux = 0;
NumTipGrpAux < Gbl.Crs.Grps.GrpTypes.Num; NumTipGrpAux < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumTipGrpAux++) NumTipGrpAux++)
{ {
GrpTypAux = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumTipGrpAux]; GrpTypAux = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumTipGrpAux];
@ -1752,7 +1753,7 @@ void Grp_ShowLstGrpsToChgMyGrps (void)
/***** List the groups the user belongs to for change *****/ /***** List the groups the user belongs to for change *****/
HTM_TABLE_BeginWidePadding (2); HTM_TABLE_BeginWidePadding (2);
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If there are groups of this type if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If there are groups of this type
{ {
@ -1817,7 +1818,7 @@ static void Grp_ShowWarningToStdsToChangeGrps (void)
struct GroupType *GrpTyp; struct GroupType *GrpTyp;
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -2035,7 +2036,7 @@ void Grp_ShowLstGrpsToChgOtherUsrsGrps (long UsrCod)
/***** List to select the groups the user belongs to *****/ /***** List to select the groups the user belongs to *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToAddOrRemUsrs (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],UsrCod); Grp_ListGrpsToAddOrRemUsrs (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],UsrCod);
@ -2563,7 +2564,7 @@ static void Grp_PutFormToCreateGroup (const struct Roo_Rooms *Rooms)
/* Options for group types */ /* Options for group types */
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod, HTM_OPTION (HTM_Type_LONG,&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod,
Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod == Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod ==
@ -2660,21 +2661,21 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
Grp_OpenGroupsAutomatically (); Grp_OpenGroupsAutomatically ();
/***** Get group types from database *****/ /***** Get group types from database *****/
Gbl.Crs.Grps.GrpTypes.Num = Grp_DB_GetGrpTypesInCurrentCrs[WhichGroupTypes] (&mysql_res); Gbl.Crs.Grps.GrpTypes.NumGrpTypes = Grp_DB_GetGrpTypesInCurrentCrs[WhichGroupTypes] (&mysql_res);
/***** Get group types *****/ /***** Get group types *****/
Gbl.Crs.Grps.GrpTypes.NumGrpsTotal = 0; Gbl.Crs.Grps.GrpTypes.NumGrpsTotal = 0;
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Create a list of group types *****/ /***** Create a list of group types *****/
if ((Gbl.Crs.Grps.GrpTypes.LstGrpTypes = calloc (Gbl.Crs.Grps.GrpTypes.Num, if ((Gbl.Crs.Grps.GrpTypes.LstGrpTypes = calloc (Gbl.Crs.Grps.GrpTypes.NumGrpTypes,
sizeof (*Gbl.Crs.Grps.GrpTypes.LstGrpTypes))) == NULL) sizeof (*Gbl.Crs.Grps.GrpTypes.LstGrpTypes))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Get group types *****/ /***** Get group types *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
/* Get next group type */ /* Get next group type */
@ -2769,7 +2770,7 @@ void Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
/***** Then we get the list of groups for each group type *****/ /***** Then we get the list of groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -2820,10 +2821,9 @@ void Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
/* Get maximum number of students in group (row[4]) */ /* Get maximum number of students in group (row[4]) */
Grp->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[4]); Grp->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[4]);
/* Get whether group is open ('Y') or closed ('N') (row[5]) */ /* Get whether group is open ('Y') or closed ('N') (row[5]),
Grp->Open = (row[5][0] == 'Y'); and whether group have file zones ('Y') or not ('N') (row[6]) */
Grp->Open = (row[5][0] == 'Y');
/* Get whether group have file zones ('Y') or not ('N') (row[6]) */
Grp->FileZones = (row[6][0] == 'Y'); Grp->FileZones = (row[6][0] == 'Y');
} }
} }
@ -2849,7 +2849,7 @@ void Grp_FreeListGrpTypesAndGrps (void)
{ {
/***** Free memory used for each list of groups (one list for each group type) *****/ /***** Free memory used for each list of groups (one list for each group type) *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -2864,7 +2864,7 @@ void Grp_FreeListGrpTypesAndGrps (void)
/***** Free memory used by the list of group types *****/ /***** Free memory used by the list of group types *****/
free (Gbl.Crs.Grps.GrpTypes.LstGrpTypes); free (Gbl.Crs.Grps.GrpTypes.LstGrpTypes);
Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL; Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL;
Gbl.Crs.Grps.GrpTypes.Num = 0; Gbl.Crs.Grps.GrpTypes.NumGrpTypes = 0;
} }
} }
@ -2928,17 +2928,17 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
MYSQL_ROW row; MYSQL_ROW row;
/***** Reset values *****/ /***** Reset values *****/
GrpDat->GrpTypCod = -1L; GrpDat->GrpTypCod = -1L;
GrpDat->CrsCod = -1L; GrpDat->CrsCod = -1L;
GrpDat->GrpTypName[0] = '\0'; GrpDat->GrpTypName[0] = '\0';
GrpDat->GrpName[0] = '\0'; GrpDat->GrpName[0] = '\0';
GrpDat->Room.RooCod = -1L; GrpDat->Room.RooCod = -1L;
GrpDat->Room.ShrtName[0] = '\0'; GrpDat->Room.ShrtName[0] = '\0';
GrpDat->MaxStudents = 0; GrpDat->MaxStudents = 0;
GrpDat->Vacant = 0; GrpDat->Vacant = 0;
GrpDat->Open = false; GrpDat->Open = false;
GrpDat->FileZones = false; GrpDat->FileZones = false;
GrpDat->MultipleEnrolment = false; GrpDat->MultipleEnrolment = false;
if (GrpDat->GrpCod > 0) if (GrpDat->GrpCod > 0)
{ {
@ -3217,11 +3217,10 @@ void Grp_ReceiveFormNewGrpTyp (void)
Par_GetParToText ("GrpTypName",Gbl.Crs.Grps.GrpTyp.GrpTypName, Par_GetParToText ("GrpTypName",Gbl.Crs.Grps.GrpTyp.GrpTypName,
Grp_MAX_BYTES_GROUP_TYPE_NAME); Grp_MAX_BYTES_GROUP_TYPE_NAME);
/* Get whether it is mandatory to regisrer in any group of this type */ /* Get whether it is mandatory to regisrer in any group of this type
and whether it is possible to register in multiple groups of this type */
Gbl.Crs.Grps.GrpTyp.MandatoryEnrolment = Par_GetParToBool ("MandatoryEnrolment"); Gbl.Crs.Grps.GrpTyp.MandatoryEnrolment = Par_GetParToBool ("MandatoryEnrolment");
Gbl.Crs.Grps.GrpTyp.MultipleEnrolment = Par_GetParToBool ("MultipleEnrolment");
/* Get whether it is possible to register in multiple groups of this type */
Gbl.Crs.Grps.GrpTyp.MultipleEnrolment = Par_GetParToBool ("MultipleEnrolment");
/* Get open time */ /* Get open time */
Gbl.Crs.Grps.GrpTyp.OpenTimeUTC = Dat_GetTimeUTCFromForm ("OpenTimeUTC"); Gbl.Crs.Grps.GrpTyp.OpenTimeUTC = Dat_GetTimeUTCFromForm ("OpenTimeUTC");
@ -4294,14 +4293,14 @@ void Grp_GetLstCodsGrpWanted (struct ListCodGrps *LstGrpsWanted)
unsigned NumGrpWanted; unsigned NumGrpWanted;
/***** Allocate memory for the strings with group codes in each type *****/ /***** Allocate memory for the strings with group codes in each type *****/
if ((LstStrCodGrps = calloc (Gbl.Crs.Grps.GrpTypes.Num, if ((LstStrCodGrps = calloc (Gbl.Crs.Grps.GrpTypes.NumGrpTypes,
sizeof (*LstStrCodGrps))) == NULL) sizeof (*LstStrCodGrps))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Get lists with the groups that I want in each type /***** Get lists with the groups that I want in each type
in order to count the total number of groups selected *****/ in order to count the total number of groups selected *****/
for (NumGrpTyp = 0, LstGrpsWanted->NumGrps = 0; for (NumGrpTyp = 0, LstGrpsWanted->NumGrps = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
/***** Allocate memory for the list of group codes of this type *****/ /***** Allocate memory for the list of group codes of this type *****/
@ -4337,7 +4336,7 @@ void Grp_GetLstCodsGrpWanted (struct ListCodGrps *LstGrpsWanted)
/***** Get the groups *****/ /***** Get the groups *****/
for (NumGrpTyp = 0, NumGrpWanted = 0; for (NumGrpTyp = 0, NumGrpWanted = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
/* Add the groups selected of this type to the complete list of groups selected */ /* Add the groups selected of this type to the complete list of groups selected */

View File

@ -107,7 +107,7 @@ struct GroupType
struct GroupTypes struct GroupTypes
{ {
struct GroupType *LstGrpTypes; // List of types of group struct GroupType *LstGrpTypes; // List of types of group
unsigned Num; // Number of types of group unsigned NumGrpTypes; // Number of types of group
unsigned NumGrpsTotal; // Number of groups of any type unsigned NumGrpsTotal; // Number of groups of any type
int NestedCalls; // Number of nested calls to the function that allocates memory for this list int NestedCalls; // Number of nested calls to the function that allocates memory for this list
}; };

View File

@ -1572,7 +1572,7 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1605,7 +1605,7 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],

View File

@ -3407,9 +3407,9 @@ void Prj_RemoveProject (void)
"DELETE FROM prj_users" "DELETE FROM prj_users"
" USING prj_projects," " USING prj_projects,"
"prj_users" "prj_users"
" WHERE projects.PrjCod=%ld" " WHERE prj_projects.PrjCod=%ld"
" AND projects.CrsCod=%ld" " AND prj_projects.CrsCod=%ld"
" AND projects.PrjCod=prj_users.PrjCod", " AND prj_projects.PrjCod=prj_users.PrjCod",
Prj.PrjCod, Prj.PrjCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);

View File

@ -2135,7 +2135,7 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -2166,7 +2166,7 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgAttSvyEvtMch (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],

View File

@ -1755,7 +1755,7 @@ static void Tmt_TimeTableDrawCell (const struct Tmt_Timetable *Timetable,
HTM_OPTION (HTM_Type_STRING,"-1",GrpCod <= 0,false, HTM_OPTION (HTM_Type_STRING,"-1",GrpCod <= 0,false,
"%s",Txt_All_groups); "%s",Txt_All_groups);
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
{ {
GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]; GrpTyp = &Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp];
@ -1837,5 +1837,5 @@ void Tmt_DB_OrphanAllGrpsOfATypeInCrsTimeTable (long GrpTypCod)
" (SELECT GrpCod" " (SELECT GrpCod"
" FROM grp_groups" " FROM grp_groups"
" WHERE GrpTypCod=%ld)", " WHERE GrpTypCod=%ld)",
Gbl.Crs.Grps.GrpTyp.GrpTypCod); GrpTypCod);
} }

View File

@ -3896,7 +3896,7 @@ static void Usr_WriteRowStdAllData (struct UsrData *UsrDat,char *GroupNames)
{ {
/***** Write the groups a the que pertenece the student *****/ /***** Write the groups a the que pertenece the student *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type
{ {
@ -4553,14 +4553,14 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
Grp_GetListGrpTypesInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
/***** Allocate memory for list of booleans AddStdsWithoutGroupOf *****/ /***** Allocate memory for list of booleans AddStdsWithoutGroupOf *****/
if ((AddStdsWithoutGroupOf = calloc (Gbl.Crs.Grps.GrpTypes.Num, if ((AddStdsWithoutGroupOf = calloc (Gbl.Crs.Grps.GrpTypes.NumGrpTypes,
sizeof (*AddStdsWithoutGroupOf))) == NULL) sizeof (*AddStdsWithoutGroupOf))) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
/***** Initialize vector of booleans that indicates whether it's necessary add to the list /***** Initialize vector of booleans that indicates whether it's necessary add to the list
the students who don't belong to any group of each type *****/ the students who don't belong to any group of each type *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
AddStdsWithoutGroupOf[NumGrpTyp] = false; AddStdsWithoutGroupOf[NumGrpTyp] = false;
@ -4575,7 +4575,7 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
NumPositiveCods++; NumPositiveCods++;
else else
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod == -GrpCod) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod == -GrpCod)
{ {
@ -4610,7 +4610,7 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
/***** Create a query with the students who don't belong to any group *****/ /***** Create a query with the students who don't belong to any group *****/
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (AddStdsWithoutGroupOf[NumGrpTyp]) if (AddStdsWithoutGroupOf[NumGrpTyp])
{ {
@ -7188,7 +7188,7 @@ void Usr_ListAllDataStds (void)
NumColumnsCommonCard = Usr_NUM_ALL_FIELDS_DATA_STD; NumColumnsCommonCard = Usr_NUM_ALL_FIELDS_DATA_STD;
if (Gbl.Scope.Current == HieLvl_CRS) if (Gbl.Scope.Current == HieLvl_CRS)
{ {
NumColumnsCardAndGroups = NumColumnsCommonCard + Gbl.Crs.Grps.GrpTypes.Num; NumColumnsCardAndGroups = NumColumnsCommonCard + Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumColumnsTotal = NumColumnsCardAndGroups + Gbl.Crs.Records.LstFields.Num; NumColumnsTotal = NumColumnsCardAndGroups + Gbl.Crs.Records.LstFields.Num;
} }
else else
@ -7227,9 +7227,9 @@ void Usr_ListAllDataStds (void)
/* 2. Columns for the groups */ /* 2. Columns for the groups */
if (Gbl.Scope.Current == HieLvl_CRS) if (Gbl.Scope.Current == HieLvl_CRS)
{ {
if (Gbl.Crs.Grps.GrpTypes.Num) if (Gbl.Crs.Grps.GrpTypes.NumGrpTypes)
for (NumGrpTyp = 0; for (NumGrpTyp = 0;
NumGrpTyp < Gbl.Crs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type
{ {