Version 18.27.4

This commit is contained in:
Antonio Cañas Vargas 2019-01-04 11:59:31 +01:00
parent 434a846f84
commit 4870c7e134
5 changed files with 56 additions and 32 deletions

View File

@ -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
--

View File

@ -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)

View File

@ -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 *****/
/*

View File

@ -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 *****/

View File

@ -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?