From 4870c7e134cccb0b71c082c28cd6a07e1f38c50a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Fri, 4 Jan 2019 11:59:31 +0100 Subject: [PATCH] Version 18.27.4 --- sql/swad.sql | 4 +++- swad_changelog.h | 6 ++++- swad_database.c | 7 ++++-- swad_group.c | 61 +++++++++++++++++++++++++++++------------------- swad_group.h | 10 ++++---- 5 files changed, 56 insertions(+), 32 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index fef12b133..8d646d9f9 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -280,11 +280,13 @@ CREATE TABLE IF NOT EXISTS crs_grp ( GrpCod INT NOT NULL AUTO_INCREMENT, GrpTypCod INT NOT NULL, GrpName VARCHAR(2047) NOT NULL, + ClaCod INT NOT NULL DEFAULT -1, MaxStudents INT NOT NULL, Open ENUM('N','Y') NOT NULL DEFAULT 'N', FileZones ENUM('N','Y') NOT NULL DEFAULT 'N', UNIQUE INDEX(GrpCod), - INDEX(GrpTypCod)); + INDEX(GrpTypCod), + INDEX(ClaCod)); -- -- Table crs_grp_types: stores the types of groups in courses -- diff --git a/swad_changelog.h b/swad_changelog.h index 64e5ce708..a8396c234 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -364,10 +364,14 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.27.3 (2019-01-03)" +#define Log_PLATFORM_VERSION "SWAD 18.27.4 (2019-01-04)" #define CSS_FILE "swad18.22.css" #define JS_FILE "swad17.17.1.js" /* + Version 18.27.4: Jan 04, 2019 New field in groups table to select a classroom. (238881 lines) + 1 change necessary in database: +ALTER TABLE crs_grp ADD COLUMN ClaCod INT NOT NULL DEFAULT -1 AFTER GrpName,ADD INDEX (ClaCod); + Version 18.27.3: Jan 03, 2019 Rows in colors in listing of classrooms. Fixed bugs in classrooms. (238860 lines) Version 18.27.2: Jan 03, 2019 Short name and full name in listing of classrooms. (238847 lines) diff --git a/swad_database.c b/swad_database.c index dcd1034d7..8fcda1151 100644 --- a/swad_database.c +++ b/swad_database.c @@ -659,21 +659,24 @@ mysql> DESCRIBE crs_grp; | GrpCod | int(11) | NO | PRI | NULL | auto_increment | | GrpTypCod | int(11) | NO | MUL | NULL | | | GrpName | varchar(2047) | NO | | NULL | | +| ClaCod | int(11) | NO | MUL | -1 | | | MaxStudents | int(11) | NO | | NULL | | | Open | enum('N','Y') | NO | | N | | | FileZones | enum('N','Y') | NO | | N | | +-------------+---------------+------+-----+---------+----------------+ -6 rows in set (0,00 sec) +7 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_grp (" "GrpCod INT NOT NULL AUTO_INCREMENT," "GrpTypCod INT NOT NULL," "GrpName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME "MaxStudents INT NOT NULL," + "ClaCod INT NOT NULL DEFAULT -1," "Open ENUM('N','Y') NOT NULL DEFAULT 'N'," "FileZones ENUM('N','Y') NOT NULL DEFAULT 'N'," "UNIQUE INDEX(GrpCod)," - "INDEX(GrpTypCod))"); + "INDEX(GrpTypCod)," + "INDEX(ClaCod))"); /***** Table crs_grp_types *****/ /* diff --git a/swad_group.c b/swad_group.c index b0231b920..33187c9cd 100644 --- a/swad_group.c +++ b/swad_group.c @@ -2890,8 +2890,8 @@ void Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes) Str_Copy (Grp->GrpName,row[1], Grp_MAX_BYTES_GROUP_NAME); - /* Get max number of students of group (row[2]) */ - Grp->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[2]); + /* Get classroom code (row[2]) */ + Grp->ClaCod = Str_ConvertStrCodToLongCod (row[2]); /* Get number of current users in group */ for (Role = Rol_TCH; @@ -2899,11 +2899,14 @@ void Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes) Role--) Grp->NumUsrs[Role] = Grp_CountNumUsrsInGrp (Role,Grp->GrpCod); - /* Get whether group is open ('Y') or closed ('N') (row[3]) */ - Grp->Open = (row[3][0] == 'Y'); + /* Get maximum number of students in group (row[3]) */ + Grp->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[3]); - /* Get whether group have file zones ('Y') or not ('N') (row[4]) */ - Grp->FileZones = (row[4][0] == 'Y'); + /* Get whether group is open ('Y') or closed ('N') (row[4]) */ + Grp->Open = (row[4][0] == 'Y'); + + /* Get whether group have file zones ('Y') or not ('N') (row[5]) */ + Grp->FileZones = (row[5][0] == 'Y'); } } else // Error: groups should be found, but really they haven't be found. This never should happen. @@ -2979,14 +2982,19 @@ static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod) } /*****************************************************************************/ -/***************** Get current groups of a type in this course ***************/ +/******************** Get groups of a type in this course ********************/ /*****************************************************************************/ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res) { /***** Get groups of a type from database *****/ return DB_QuerySELECT (mysql_res,"can not get groups of a type", - "SELECT GrpCod,GrpName,MaxStudents,Open,FileZones" + "SELECT GrpCod," + "GrpName," + "MaxStudents," + "ClaCod," + "Open," + "FileZones" " FROM crs_grp" " WHERE GrpTypCod=%ld" " ORDER BY GrpName", @@ -3007,10 +3015,10 @@ static void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp) /***** Get data of a type of group from database *****/ NumRows = DB_QuerySELECT (&mysql_res,"can not get type of group", "SELECT GrpTypName," - "Mandatory," - "Multiple," - "MustBeOpened," - "UNIX_TIMESTAMP(OpenTime)" + "Mandatory," + "Multiple," + "MustBeOpened," + "UNIX_TIMESTAMP(OpenTime)" " FROM crs_grp_types" " WHERE CrsCod=%ld AND GrpTypCod=%ld", Gbl.CurrentCrs.Crs.CrsCod,GrpTyp->GrpTypCod); @@ -3071,12 +3079,13 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat) unsigned long NumRows; /***** Reset values *****/ - GrpDat->GrpTypCod = -1L; - GrpDat->CrsCod = -1L; - GrpDat->GrpTypName[0] = '\0'; - GrpDat->GrpName[0] = '\0'; - GrpDat->MaxStudents = 0; - GrpDat->Vacant = 0; + GrpDat->GrpTypCod = -1L; + GrpDat->CrsCod = -1L; + GrpDat->GrpTypName[0] = '\0'; + GrpDat->GrpName[0] = '\0'; + GrpDat->ClaCod = -1L; + GrpDat->MaxStudents = 0; + GrpDat->Vacant = 0; GrpDat->Open = false; GrpDat->FileZones = false; GrpDat->MultipleEnrolment = false; @@ -3090,6 +3099,7 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat) "crs_grp_types.GrpTypName," "crs_grp_types.Multiple," "crs_grp.GrpName," + "crs_grp.ClaCod," "crs_grp.MaxStudents," "crs_grp.Open," "crs_grp.FileZones" @@ -3122,14 +3132,17 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat) Str_Copy (GrpDat->GrpName,row[4], Grp_MAX_BYTES_GROUP_NAME); - /* Get maximum number of students (row[5]) */ - GrpDat->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[5]); + /* Get the code of the course (row[5]) */ + GrpDat->ClaCod = Str_ConvertStrCodToLongCod (row[5]); - /* Get whether group is open or closed (row[6]) */ - GrpDat->Open = (row[6][0] == 'Y'); + /* Get maximum number of students (row[6]) */ + GrpDat->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[6]); - /* Get whether group has file zones (row[7]) */ - GrpDat->FileZones = (row[7][0] == 'Y'); + /* Get whether group is open or closed (row[7]) */ + GrpDat->Open = (row[7][0] == 'Y'); + + /* Get whether group has file zones (row[8]) */ + GrpDat->FileZones = (row[8][0] == 'Y'); } /***** Free structure that stores the query result *****/ diff --git a/swad_group.h b/swad_group.h index 8a43fa150..58291f24d 100644 --- a/swad_group.h +++ b/swad_group.h @@ -57,11 +57,12 @@ typedef enum // Related with groups struct GroupData { - long GrpCod; - long GrpTypCod; - long CrsCod; + long GrpCod; // Group code + long GrpTypCod; // Group type code + long CrsCod; // Course code char GrpTypName[Grp_MAX_BYTES_GROUP_TYPE_NAME + 1]; char GrpName[Grp_MAX_BYTES_GROUP_NAME + 1]; + long ClaCod; // Classroom code unsigned MaxStudents; int Vacant; bool Open; // Group is open? @@ -73,8 +74,9 @@ struct Group { long GrpCod; // Code of group char GrpName[Grp_MAX_BYTES_GROUP_NAME + 1]; // Name of group + long ClaCod; // Classroom code unsigned NumUsrs[Rol_NUM_ROLES]; // Number of users in the group - unsigned MaxStudents; + unsigned MaxStudents; // Maximum number of students in the group bool Open; // Group is open? bool FileZones; // Group has file zones? bool ShowFileZone; // Show file zone of this group?