Version 20.51.33: Mar 23, 2021 Groups database table renamed.

This commit is contained in:
acanas 2021-03-23 23:23:10 +01:00
parent 1f2bd46bc2
commit 36365b0813
18 changed files with 371 additions and 288 deletions

View File

@ -279,9 +279,9 @@ CREATE TABLE IF NOT EXISTS crs_courses (
INDEX(DegCod,Year), INDEX(DegCod,Year),
INDEX(Status)); INDEX(Status));
-- --
-- Table crs_grp: stores the groups in courses -- Table grp_groups: stores the groups in courses
-- --
CREATE TABLE IF NOT EXISTS crs_grp ( CREATE TABLE IF NOT EXISTS grp_groups (
GrpCod INT NOT NULL AUTO_INCREMENT, GrpCod INT NOT NULL AUTO_INCREMENT,
GrpTypCod INT NOT NULL, GrpTypCod INT NOT NULL,
GrpName VARCHAR(2047) NOT NULL, GrpName VARCHAR(2047) NOT NULL,

View File

@ -509,10 +509,12 @@ static int API_CheckCourseAndGroupCodes (struct soap *soap,
{ {
/***** Query if group code already exists in database *****/ /***** Query if group code already exists in database *****/
if (DB_QueryCOUNT ("can not get group", if (DB_QueryCOUNT ("can not get group",
"SELECT COUNT(*) FROM crs_grp_types,crs_grp" "SELECT COUNT(*)"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=%ld", " AND grp_groups.GrpCod=%ld",
CrsCod,GrpCod) != 1) CrsCod,GrpCod) != 1)
return soap_sender_fault (soap, return soap_sender_fault (soap,
"Bad group code", "Bad group code",
@ -2227,16 +2229,17 @@ int swad__getGroups (struct soap *soap,
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's groups", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's groups",
"SELECT crs_grp_types.GrpTypCod," "SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName," "crs_grp_types.GrpTypName,"
"crs_grp.GrpCod," "grp_groups.GrpCod,"
"crs_grp.GrpName," "grp_groups.GrpName,"
"crs_grp.MaxStudents," "grp_groups.MaxStudents,"
"crs_grp.Open," "grp_groups.Open,"
"crs_grp.FileZones" "grp_groups.FileZones"
" FROM crs_grp_types,crs_grp" " FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%d" " WHERE crs_grp_types.CrsCod=%d"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName," " ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName", "grp_groups.GrpName",
courseCode); courseCode);
getGroupsOut->numGroups = (int) NumRows; getGroupsOut->numGroups = (int) NumRows;
@ -2400,15 +2403,17 @@ int swad__sendMyGroups (struct soap *soap,
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's groups", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's groups",
"SELECT crs_grp_types.GrpTypCod," "SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName," "crs_grp_types.GrpTypName,"
"crs_grp.GrpCod," "grp_groups.GrpCod,"
"crs_grp.GrpName," "grp_groups.GrpName,"
"crs_grp.MaxStudents," "grp_groups.MaxStudents,"
"crs_grp.Open," "grp_groups.Open,"
"crs_grp.FileZones" "grp_groups.FileZones"
" FROM crs_grp_types,crs_grp" " FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%d" " WHERE crs_grp_types.CrsCod=%d"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
courseCode); courseCode);
SendMyGroupsOut->numGroups = (int) NumRows; SendMyGroupsOut->numGroups = (int) NumRows;
@ -3019,13 +3024,13 @@ int swad__getAttendanceUsers (struct soap *soap,
sprintf (SubQuery,"SELECT DISTINCT crs_grp_usr.UsrCod AS UsrCod," sprintf (SubQuery,"SELECT DISTINCT crs_grp_usr.UsrCod AS UsrCod,"
"'N' AS Present" "'N' AS Present"
" FROM att_groups," " FROM att_groups,"
"crs_grp," "grp_groups,"
"crs_grp_types," "crs_grp_types,"
"crs_users," "crs_users,"
"crs_grp_usr" "crs_grp_usr"
" WHERE att_groups.AttCod=%ld" " WHERE att_groups.AttCod=%ld"
" AND att_groups.GrpCod=crs_grp.GrpCod" " AND att_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_users.CrsCod" " AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u" " AND crs_users.Role=%u"
" AND crs_users.UsrCod=crs_grp_usr.UsrCod" " AND crs_users.UsrCod=crs_grp_usr.UsrCod"

View File

@ -1707,10 +1707,10 @@ void Asg_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type from the associations" DB_QueryDELETE ("can not remove groups of a type from the associations"
" between assignments and groups", " between assignments and groups",
"DELETE FROM asg_groups" "DELETE FROM asg_groups"
" USING crs_grp," " USING grp_groups,"
"asg_groups" "asg_groups"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=asg_groups.GrpCod", " AND grp_groups.GrpCod=asg_groups.GrpCod",
GrpTypCod); GrpTypCod);
} }
@ -1753,15 +1753,16 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
/***** Get groups associated to an assignment from database *****/ /***** Get groups associated to an assignment from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an assignment", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an assignment",
"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName" "SELECT crs_grp_types.GrpTypName,"
"grp_groups.GrpName"
" FROM asg_groups," " FROM asg_groups,"
"crs_grp," "grp_groups,"
"crs_grp_types" "crs_grp_types"
" WHERE asg_groups.AsgCod=%ld" " WHERE asg_groups.AsgCod=%ld"
" AND asg_groups.GrpCod=crs_grp.GrpCod" " AND asg_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName," " ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName", "grp_groups.GrpName",
Asg->AsgCod); Asg->AsgCod);
/***** Write heading *****/ /***** Write heading *****/

View File

@ -1497,10 +1497,10 @@ void Att_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type from the associations" DB_QueryDELETE ("can not remove groups of a type from the associations"
" between attendance events and groups", " between attendance events and groups",
"DELETE FROM att_groups" "DELETE FROM att_groups"
" USING crs_grp," " USING grp_groups,"
"att_groups" "att_groups"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=att_groups.GrpCod", " AND grp_groups.GrpCod=att_groups.GrpCod",
GrpTypCod); GrpTypCod);
} }
@ -1544,18 +1544,18 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToAttEvent (struct Att_Event *Ev
/***** Get groups associated to an attendance event from database *****/ /***** Get groups associated to an attendance event from database *****/
NumGrps = (unsigned) DB_QuerySELECT (&mysql_res,"can not get groups of an attendance event", NumGrps = (unsigned) DB_QuerySELECT (&mysql_res,"can not get groups of an attendance event",
"SELECT crs_grp_types.GrpTypName," "SELECT crs_grp_types.GrpTypName,"
"crs_grp.GrpName," "grp_groups.GrpName,"
"roo_rooms.ShortName" "roo_rooms.ShortName"
" FROM (att_groups," " FROM (att_groups,"
"crs_grp," "grp_groups,"
"crs_grp_types)" "crs_grp_types)"
" LEFT JOIN roo_rooms" " LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod" " ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE att_groups.AttCod=%ld" " WHERE att_groups.AttCod=%ld"
" AND att_groups.GrpCod=crs_grp.GrpCod" " AND att_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName," " ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName", "grp_groups.GrpName",
Event->AttCod); Event->AttCod);
/***** Write heading *****/ /***** Write heading *****/

View File

@ -600,13 +600,17 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.51.32 (2021-03-23)" #define Log_PLATFORM_VERSION "SWAD 20.51.33 (2021-03-23)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.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.51.33: Mar 23, 2021 Groups database table renamed. (308594 lines)
1 change necessary in database:
RENAME TABLE crs_grp TO grp_groups;
Version 20.51.32: Mar 23, 2021 Course users database table renamed. (308512 lines) Version 20.51.32: Mar 23, 2021 Course users database table renamed. (308512 lines)
1 change necessary in database: 1 change necessary in database:
RENAME TABLE crs_usr TO crs_users; RENAME TABLE crs_usr TO crs_users;

View File

@ -2028,20 +2028,20 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
DB_QueryDELETE ("can not remove users from groups of a course", DB_QueryDELETE ("can not remove users from groups of a course",
"DELETE FROM crs_grp_usr" "DELETE FROM crs_grp_usr"
" USING crs_grp_types," " USING crs_grp_types,"
"crs_grp," "grp_groups,"
"crs_grp_usr" "crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod", " AND grp_groups.GrpCod=crs_grp_usr.GrpCod",
CrsCod); CrsCod);
/* Remove all the groups in the course */ /* Remove all the groups in the course */
DB_QueryDELETE ("can not remove groups of a course", DB_QueryDELETE ("can not remove groups of a course",
"DELETE FROM crs_grp" "DELETE FROM grp_groups"
" USING crs_grp_types," " USING crs_grp_types,"
"crs_grp" "grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod", " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod",
CrsCod); CrsCod);
/* Remove all the group types in the course */ /* Remove all the group types in the course */

View File

@ -650,9 +650,9 @@ mysql> DESCRIBE crs_courses;
"INDEX(DegCod,Year)," "INDEX(DegCod,Year),"
"INDEX(Status))"); "INDEX(Status))");
/***** Table crs_grp *****/ /***** Table grp_groups *****/
/* /*
mysql> DESCRIBE crs_grp; mysql> DESCRIBE grp_groups;
+-------------+---------------+------+-----+---------+----------------+ +-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+ +-------------+---------------+------+-----+---------+----------------+
@ -666,7 +666,7 @@ mysql> DESCRIBE crs_grp;
+-------------+---------------+------+-----+---------+----------------+ +-------------+---------------+------+-----+---------+----------------+
7 rows in set (0.00 sec) 7 rows in set (0.00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_grp (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS grp_groups ("
"GrpCod INT NOT NULL AUTO_INCREMENT," "GrpCod INT NOT NULL AUTO_INCREMENT,"
"GrpTypCod INT NOT NULL," "GrpTypCod INT NOT NULL,"
"GrpName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME "GrpName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME

View File

@ -666,12 +666,15 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
/***** Get groups associated to an exam session from database *****/ /***** Get groups associated to an exam session from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an exam session", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an exam session",
"SELECT crs_grp_types.GrpTypName," // row[0] "SELECT crs_grp_types.GrpTypName," // row[0]
"crs_grp.GrpName" // row[1] "grp_groups.GrpName" // row[1]
" FROM exa_groups,crs_grp,crs_grp_types" " FROM exa_groups,"
"grp_groups,"
"crs_grp_types"
" WHERE exa_groups.SesCod=%ld" " WHERE exa_groups.SesCod=%ld"
" AND exa_groups.GrpCod=crs_grp.GrpCod" " AND exa_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Session->SesCod); Session->SesCod);
/***** Write heading *****/ /***** Write heading *****/
@ -1661,9 +1664,10 @@ void ExaSes_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type" DB_QueryDELETE ("can not remove groups of a type"
" from the associations between sessions and groups", " from the associations between sessions and groups",
"DELETE FROM exa_groups" "DELETE FROM exa_groups"
" USING crs_grp,exa_groups" " USING grp_groups,"
" WHERE crs_grp.GrpTypCod=%ld" "exa_groups"
" AND crs_grp.GrpCod=exa_groups.GrpCod", " WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=exa_groups.GrpCod",
GrpTypCod); GrpTypCod);
} }

View File

@ -1710,10 +1710,10 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"brw_sizes.NumFiles," "brw_sizes.NumFiles,"
"brw_sizes.TotalSize" "brw_sizes.TotalSize"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " WHERE crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
(unsigned) Brw_ADMI_DOC_CRS, (unsigned) Brw_ADMI_DOC_CRS,
@ -1756,10 +1756,10 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"SUM(brw_sizes.NumFiles)," // row[5] "SUM(brw_sizes.NumFiles)," // row[5]
"SUM(brw_sizes.TotalSize)" // row[6] "SUM(brw_sizes.TotalSize)" // row[6]
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " WHERE crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
(unsigned) FileBrowser); (unsigned) FileBrowser);
break; break;
@ -1839,15 +1839,15 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
@ -1906,15 +1906,15 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
(unsigned) FileBrowser); (unsigned) FileBrowser);
@ -2014,14 +2014,14 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
@ -2077,14 +2077,14 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
(unsigned) FileBrowser); (unsigned) FileBrowser);
@ -2177,13 +2177,13 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
@ -2236,13 +2236,13 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
(unsigned) FileBrowser); (unsigned) FileBrowser);
@ -2328,12 +2328,12 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"brw_sizes.TotalSize" "brw_sizes.TotalSize"
" FROM crs_courses," " FROM crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
@ -2383,12 +2383,12 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"SUM(brw_sizes.TotalSize)" // row[6] "SUM(brw_sizes.TotalSize)" // row[6]
" FROM crs_courses," " FROM crs_courses,"
"crs_grp_types," "crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_grp_types.CrsCod" " AND crs_courses.CrsCod=crs_grp_types.CrsCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
(unsigned) FileBrowser); (unsigned) FileBrowser);
@ -2467,11 +2467,11 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"brw_sizes.NumFiles," "brw_sizes.NumFiles,"
"brw_sizes.TotalSize" "brw_sizes.TotalSize"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)"
") AS sizes", ") AS sizes",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -2518,11 +2518,11 @@ static void Fig_GetSizeOfFileZoneFromDB (Hie_Lvl_Level_t Scope,
"SUM(brw_sizes.NumFiles)," // row[5] "SUM(brw_sizes.NumFiles)," // row[5]
"SUM(brw_sizes.TotalSize)" // row[6] "SUM(brw_sizes.TotalSize)" // row[6]
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=brw_sizes.Cod" " AND grp_groups.GrpCod=brw_sizes.Cod"
" AND brw_sizes.FileBrowser=%u", " AND brw_sizes.FileBrowser=%u",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
(unsigned) FileBrowser); (unsigned) FileBrowser);

View File

@ -4379,10 +4379,11 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
char SubqueryPrj[128]; char SubqueryPrj[128];
/***** Build subquery for groups *****/ /***** Build subquery for groups *****/
sprintf (SubqueryGrp,"(SELECT crs_grp.GrpCod" sprintf (SubqueryGrp,"(SELECT grp_groups.GrpCod"
" FROM crs_grp_types,crs_grp" " FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod)", " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod)",
CrsCod); CrsCod);
/***** Build subquery for projects *****/ /***** Build subquery for projects *****/
@ -4790,11 +4791,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR " " OR "
"(FileBrowser IN (%u,%u,%u,%u)" "(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN" " AND Cod IN"
" (SELECT crs_grp.GrpCod" " (SELECT grp_groups.GrpCod"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp" "grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")", ")",
UsrCod, UsrCod,
(unsigned) Brw_ADMI_DOC_CRS, (unsigned) Brw_ADMI_DOC_CRS,
@ -4822,11 +4823,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR " " OR "
"(FileBrowser IN (%u,%u,%u,%u)" "(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN" " AND Cod IN"
" (SELECT crs_grp.GrpCod" " (SELECT grp_groups.GrpCod"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp" "grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")", ")",
UsrCod, UsrCod,
(unsigned) Brw_ADMI_DOC_CRS, (unsigned) Brw_ADMI_DOC_CRS,
@ -4857,11 +4858,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR " " OR "
"(FileBrowser IN (%u,%u,%u,%u)" "(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN" " AND Cod IN"
" (SELECT crs_grp.GrpCod" " (SELECT grp_groups.GrpCod"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp" "grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")", ")",
UsrCod, UsrCod,
(unsigned) Brw_ADMI_DOC_CRS, (unsigned) Brw_ADMI_DOC_CRS,

View File

@ -978,7 +978,7 @@ static void Grp_LockTables (void)
DB_Query ("can not lock tables to change user's groups", DB_Query ("can not lock tables to change user's groups",
"LOCK TABLES " "LOCK TABLES "
"crs_grp_types WRITE," "crs_grp_types WRITE,"
"crs_grp WRITE," "grp_groups WRITE,"
"crs_grp_usr WRITE," "crs_grp_usr WRITE,"
"crs_users READ," "crs_users READ,"
"crs_usr_last READ," "crs_usr_last READ,"
@ -1225,10 +1225,13 @@ void Grp_RemUsrFromAllGrpsInCrs (long UsrCod,long CrsCod)
/***** Remove user from all the groups of the course *****/ /***** Remove user from all the groups of the course *****/
DB_QueryDELETE ("can not remove a user from all groups of a course", DB_QueryDELETE ("can not remove a user from all groups of a course",
"DELETE FROM crs_grp_usr" "DELETE FROM crs_grp_usr"
" WHERE UsrCod=%ld AND GrpCod IN" " WHERE UsrCod=%ld"
" (SELECT crs_grp.GrpCod FROM crs_grp_types,crs_grp" " AND GrpCod IN"
" WHERE crs_grp_types.CrsCod=%ld" " (SELECT grp_groups.GrpCod"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod)", " FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod)",
UsrCod,CrsCod); UsrCod,CrsCod);
/***** Flush caches *****/ /***** Flush caches *****/
@ -2759,14 +2762,17 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
Gbl.Crs.Grps.GrpTypes.Num = Gbl.Crs.Grps.GrpTypes.Num =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group" (unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group"
" of a course", " of a course",
"SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName," "SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple," "crs_grp_types.GrpTypName,"
"crs_grp_types.MustBeOpened," "crs_grp_types.Mandatory,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime)," "crs_grp_types.Multiple,"
"COUNT(crs_grp.GrpCod)" "crs_grp_types.MustBeOpened,"
" FROM crs_grp_types,crs_grp" "UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(grp_groups.GrpCod)"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod" " GROUP BY crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName", " ORDER BY crs_grp_types.GrpTypName",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
@ -2775,23 +2781,31 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
Gbl.Crs.Grps.GrpTypes.Num = Gbl.Crs.Grps.GrpTypes.Num =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group" (unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group"
" of a course", " of a course",
"(SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName AS GrpTypName," "(SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple," "crs_grp_types.GrpTypName AS GrpTypName,"
"crs_grp_types.MustBeOpened," "crs_grp_types.Mandatory,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime)," "crs_grp_types.Multiple,"
"COUNT(crs_grp.GrpCod)" "crs_grp_types.MustBeOpened,"
" FROM crs_grp_types,crs_grp" "UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
" WHERE crs_grp_types.CrsCod=%ld" "COUNT(grp_groups.GrpCod)"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " FROM crs_grp_types,"
" GROUP BY crs_grp_types.GrpTypCod)" "grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod)"
" UNION " " UNION "
"(SELECT GrpTypCod,GrpTypName," "(SELECT GrpTypCod,"
"Mandatory,Multiple," "GrpTypName,"
"MustBeOpened," "Mandatory,"
"UNIX_TIMESTAMP(OpenTime)," "Multiple,"
"0" "MustBeOpened,"
" FROM crs_grp_types WHERE CrsCod=%ld" "UNIX_TIMESTAMP(OpenTime),"
" AND GrpTypCod NOT IN (SELECT GrpTypCod FROM crs_grp))" "0"
" FROM crs_grp_types"
" WHERE CrsCod=%ld"
" AND GrpTypCod NOT IN"
" (SELECT GrpTypCod"
" FROM grp_groups))"
" ORDER BY GrpTypName", " ORDER BY GrpTypName",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
@ -2887,13 +2901,16 @@ void Grp_OpenGroupsAutomatically (void)
/***** Open all the closed groups in this course the must be opened /***** Open all the closed groups in this course the must be opened
and with open time in the past ****/ and with open time in the past ****/
DB_QueryUPDATE ("can not open groups", DB_QueryUPDATE ("can not open groups",
"UPDATE crs_grp SET Open='Y'" "UPDATE grp_groups"
" WHERE GrpTypCod=%ld AND Open='N'", " SET Open='Y'"
" WHERE GrpTypCod=%ld"
" AND Open='N'",
GrpTypCod); GrpTypCod);
/***** To not try to open groups again, set MustBeOpened to false *****/ /***** To not try to open groups again, set MustBeOpened to false *****/
DB_QueryUPDATE ("can not update the opening of a type of group", DB_QueryUPDATE ("can not update the opening of a type of group",
"UPDATE crs_grp_types SET MustBeOpened='N'" "UPDATE crs_grp_types"
" SET MustBeOpened='N'"
" WHERE GrpTypCod=%ld", " WHERE GrpTypCod=%ld",
GrpTypCod); GrpTypCod);
} }
@ -3036,9 +3053,11 @@ unsigned Grp_CountNumGrpsInCurrentCrs (void)
/***** Get number of group in current course from database *****/ /***** Get number of group in current course from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of groups in this course", (unsigned) DB_QueryCOUNT ("can not get number of groups in this course",
"SELECT COUNT(*) FROM crs_grp_types,crs_grp" "SELECT COUNT(*)"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod", " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
} }
@ -3051,7 +3070,8 @@ static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod)
/***** Get number of groups of a type from database *****/ /***** Get number of groups of a type from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of groups of a type", (unsigned) DB_QueryCOUNT ("can not get number of groups of a type",
"SELECT COUNT(*) FROM crs_grp" "SELECT COUNT(*)"
" FROM grp_groups"
" WHERE GrpTypCod=%ld", " WHERE GrpTypCod=%ld",
GrpTypCod); GrpTypCod);
} }
@ -3065,18 +3085,18 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res)
/***** Get groups of a type from database *****/ /***** Get groups of a type from database *****/
// Don't use INNER JOIN because there are groups without assigned room // Don't use INNER JOIN because there are groups without assigned room
return DB_QuerySELECT (mysql_res,"can not get groups of a type", return DB_QuerySELECT (mysql_res,"can not get groups of a type",
"SELECT crs_grp.GrpCod," "SELECT grp_groups.GrpCod,"
"crs_grp.GrpName," "grp_groups.GrpName,"
"crs_grp.RooCod," "grp_groups.RooCod,"
"roo_rooms.ShortName," "roo_rooms.ShortName,"
"crs_grp.MaxStudents," "grp_groups.MaxStudents,"
"crs_grp.Open," "grp_groups.Open,"
"crs_grp.FileZones" "grp_groups.FileZones"
" FROM crs_grp" " FROM grp_groups"
" LEFT JOIN roo_rooms" " LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod" " ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" ORDER BY crs_grp.GrpName", " ORDER BY grp_groups.GrpName",
GrpTypCod); GrpTypCod);
} }
@ -3169,22 +3189,22 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
{ {
/***** Get data of a group from database *****/ /***** Get data of a group from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a group", NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a group",
"SELECT crs_grp.GrpTypCod," // row[0] "SELECT grp_groups.GrpTypCod," // row[0]
"crs_grp_types.CrsCod," // row[1] "crs_grp_types.CrsCod," // row[1]
"crs_grp_types.GrpTypName," // row[2] "crs_grp_types.GrpTypName," // row[2]
"crs_grp_types.Multiple," // row[3] "crs_grp_types.Multiple," // row[3]
"crs_grp.GrpName," // row[4] "grp_groups.GrpName," // row[4]
"crs_grp.RooCod," // row[5] "grp_groups.RooCod," // row[5]
"roo_rooms.ShortName," // row[6] "roo_rooms.ShortName," // row[6]
"crs_grp.MaxStudents," // row[7] "grp_groups.MaxStudents," // row[7]
"crs_grp.Open," // row[8] "grp_groups.Open," // row[8]
"crs_grp.FileZones" // row[9] "grp_groups.FileZones" // row[9]
" FROM (crs_grp," " FROM (grp_groups,"
"crs_grp_types)" "crs_grp_types)"
" LEFT JOIN roo_rooms" " LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod" " ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE crs_grp.GrpCod=%ld" " WHERE grp_groups.GrpCod=%ld"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod", " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod",
GrpDat->GrpCod); GrpDat->GrpCod);
if (NumRows == 1) if (NumRows == 1)
@ -3247,7 +3267,7 @@ static long Grp_GetTypeOfGroupOfAGroup (long GrpCod)
/***** Get data of a group from database *****/ /***** Get data of a group from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the type of a group", if (DB_QuerySELECT (&mysql_res,"can not get the type of a group",
"SELECT GrpTypCod" "SELECT GrpTypCod"
" FROM crs_grp" " FROM grp_groups"
" WHERE GrpCod=%ld", " WHERE GrpCod=%ld",
GrpCod) != 1) GrpCod) != 1)
Lay_ShowErrorAndExit ("Error when getting group."); Lay_ShowErrorAndExit ("Error when getting group.");
@ -3272,7 +3292,8 @@ bool Grp_CheckIfGroupExists (long GrpCod)
{ {
/***** Get if a group exists from database *****/ /***** Get if a group exists from database *****/
return (DB_QueryCOUNT ("can not check if a group exists", return (DB_QueryCOUNT ("can not check if a group exists",
"SELECT COUNT(*) FROM crs_grp" "SELECT COUNT(*)"
" FROM grp_groups"
" WHERE GrpCod=%ld", " WHERE GrpCod=%ld",
GrpCod) != 0); GrpCod) != 0);
} }
@ -3285,10 +3306,12 @@ bool Grp_CheckIfGroupBelongsToCourse (long GrpCod,long CrsCod)
{ {
/***** Get if a group exists from database *****/ /***** Get if a group exists from database *****/
return (DB_QueryCOUNT ("can not check if a group belongs to a course", return (DB_QueryCOUNT ("can not check if a group belongs to a course",
"SELECT COUNT(*) FROM crs_grp,crs_grp_types" "SELECT COUNT(*)"
" WHERE crs_grp.GrpCod=%ld" " FROM grp_groups,"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" "crs_grp_types"
" AND crs_grp_types.CrsCod=%ld", " WHERE grp_groups.GrpCod=%ld"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=%ld",
GrpCod,CrsCod) != 0); GrpCod,CrsCod) != 0);
} }
@ -3303,12 +3326,12 @@ unsigned Grp_CountNumUsrsInGrp (Rol_Role_t Role,long GrpCod)
(unsigned) DB_QueryCOUNT ("can not get number of users in a group", (unsigned) DB_QueryCOUNT ("can not get number of users in a group",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM crs_grp_usr," " FROM crs_grp_usr,"
"crs_grp," "grp_groups,"
"crs_grp_types," "crs_grp_types,"
"crs_users" "crs_users"
" WHERE crs_grp_usr.GrpCod=%ld" " WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod" " AND crs_grp_usr.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_users.CrsCod" " AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_grp_usr.UsrCod=crs_users.UsrCod" " AND crs_grp_usr.UsrCod=crs_users.UsrCod"
" AND crs_users.Role=%u", " AND crs_users.Role=%u",
@ -3330,10 +3353,10 @@ static unsigned long Grp_CountNumUsrsInNoGrpsOfType (Rol_Role_t Role,long GrpTyp
" AND Role=%u" " AND Role=%u"
" AND UsrCod NOT IN" " AND UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod" " (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp," " FROM grp_groups,"
"crs_grp_usr" "crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod)", " AND grp_groups.GrpCod=crs_grp_usr.GrpCod)",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
(unsigned) Role,GrpTypCod); (unsigned) Role,GrpTypCod);
} }
@ -3348,11 +3371,11 @@ static bool Grp_CheckIfIBelongToGrpsOfType (long GrpTypCod)
/***** Get a group which I belong to from database *****/ /***** Get a group which I belong to from database *****/
NumGrps = DB_QueryCOUNT ("can not check if you belong to a group type", NumGrps = DB_QueryCOUNT ("can not check if you belong to a group type",
"SELECT COUNT(crs_grp.GrpCod)" "SELECT COUNT(grp_groups.GrpCod)"
" FROM crs_grp,crs_grp_usr" " FROM grp_groups,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld", // I belong " AND crs_grp_usr.UsrCod=%ld", // I belong
GrpTypCod,Gbl.Usrs.Me.UsrDat.UsrCod); GrpTypCod,Gbl.Usrs.Me.UsrDat.UsrCod);
return (NumGrps != 0); return (NumGrps != 0);
@ -3453,15 +3476,18 @@ bool Grp_CheckIfUsrSharesAnyOfMyGrpsInCurrentCrs (const struct UsrData *UsrDat)
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares = Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares =
(DB_QueryCOUNT ("can not check if a user shares any group" (DB_QueryCOUNT ("can not check if a user shares any group"
" in the current course with you", " in the current course with you",
"SELECT COUNT(*) FROM crs_grp_usr" "SELECT COUNT(*)"
" FROM crs_grp_usr"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND GrpCod IN" " AND GrpCod IN"
" (SELECT crs_grp_usr.GrpCod" " (SELECT crs_grp_usr.GrpCod"
" FROM crs_grp_usr,crs_grp,crs_grp_types" " FROM crs_grp_usr,"
" WHERE crs_grp_usr.UsrCod=%ld" "grp_groups,"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod" "crs_grp_types"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " WHERE crs_grp_usr.UsrCod=%ld"
" AND crs_grp_types.CrsCod=%ld)", " AND crs_grp_usr.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=%ld)",
UsrDat->UsrCod, UsrDat->UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Hierarchy.Crs.CrsCod) != 0); Gbl.Hierarchy.Crs.CrsCod) != 0);
@ -3505,20 +3531,20 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
" (" " ("
"SELECT crs_grp_types.GrpTypCod AS GrpTypCod," "SELECT crs_grp_types.GrpTypCod AS GrpTypCod,"
"COUNT(*) AS NumStudents," "COUNT(*) AS NumStudents,"
"crs_grp.MaxStudents as MaxStudents" "grp_groups.MaxStudents as MaxStudents"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"crs_grp_usr," "crs_grp_usr,"
"crs_users" "crs_users"
" WHERE %s" // Which group types? " WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.Open='Y'" // Open " AND grp_groups.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students " AND grp_groups.MaxStudents>0" // Admits students
" AND crs_grp_types.CrsCod=crs_users.CrsCod" " AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=crs_users.UsrCod" " AND crs_grp_usr.UsrCod=crs_users.UsrCod"
" AND crs_users.Role=%u" // Student " AND crs_users.Role=%u" // Student
" GROUP BY crs_grp.GrpCod" " GROUP BY grp_groups.GrpCod"
" HAVING NumStudents<MaxStudents" // Not full " HAVING NumStudents<MaxStudents" // Not full
") AS available_grp_types_with_stds" ") AS available_grp_types_with_stds"
@ -3527,13 +3553,13 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
// Available mandatory groups... // Available mandatory groups...
"SELECT crs_grp_types.GrpTypCod AS GrpTypCod" "SELECT crs_grp_types.GrpTypCod AS GrpTypCod"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp" "grp_groups"
" WHERE %s" // Which group types? " WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.Open='Y'" // Open " AND grp_groups.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students " AND grp_groups.MaxStudents>0" // Admits students
// ...without students // ...without students
" AND crs_grp.GrpCod NOT IN" " AND grp_groups.GrpCod NOT IN"
" (SELECT crs_grp_usr.GrpCod" " (SELECT crs_grp_usr.GrpCod"
" FROM crs_users," " FROM crs_users,"
"crs_grp_usr" "crs_grp_usr"
@ -3547,13 +3573,13 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
" WHERE GrpTypCod NOT IN" " WHERE GrpTypCod NOT IN"
" (SELECT crs_grp_types.GrpTypCod" " (SELECT crs_grp_types.GrpTypCod"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"crs_grp_usr" "crs_grp_usr"
" WHERE %s" // Which group types? " WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.Open='Y'" // Open " AND grp_groups.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students " AND grp_groups.MaxStudents>0" // Admits students
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld)", // I belong " AND crs_grp_usr.UsrCod=%ld)", // I belong
SubQueryGrpTypes,(unsigned) Rol_STD, SubQueryGrpTypes,(unsigned) Rol_STD,
@ -3593,27 +3619,35 @@ static void Grp_GetLstCodGrpsUsrBelongs (long CrsCod,long GrpTypCod,
LstGrps->NumGrps = LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups" (unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which a user belongs to", " which a user belongs to",
"SELECT crs_grp.GrpCod" "SELECT grp_groups.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr" " FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld" " AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
Gbl.Hierarchy.Crs.CrsCod,UsrCod); "grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,
UsrCod);
else // Query only the groups of specified type in the course else // Query only the groups of specified type in the course
LstGrps->NumGrps = LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups" (unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which a user belongs to", " which a user belongs to",
"SELECT crs_grp.GrpCod" "SELECT grp_groups.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr" " FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=%ld" " AND crs_grp_types.GrpTypCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld" " AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName", " ORDER BY grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,GrpTypCod,UsrCod); Gbl.Hierarchy.Crs.CrsCod,
GrpTypCod,
UsrCod);
/***** Get the groups *****/ /***** Get the groups *****/
if (LstGrps->NumGrps) if (LstGrps->NumGrps)
@ -3652,14 +3686,17 @@ void Grp_GetLstCodGrpsWithFileZonesIBelong (struct ListCodGrps *LstGrps)
LstGrps->NumGrps = LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups" (unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which you belong to", " which you belong to",
"SELECT crs_grp.GrpCod" "SELECT grp_groups.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr" " FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND crs_grp.FileZones='Y'" " AND grp_groups.FileZones='Y'"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld" " AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Hierarchy.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Get the groups *****/ /***** Get the groups *****/
@ -3717,12 +3754,12 @@ void Grp_GetNamesGrpsStdBelongsTo (long GrpTypCod,long UsrCod,char *GroupNames)
/***** Get the names of groups which a user belongs to, from database *****/ /***** Get the names of groups which a user belongs to, from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get the names of groups" NumRows = DB_QuerySELECT (&mysql_res,"can not get the names of groups"
" a user belongs to", " a user belongs to",
"SELECT crs_grp.GrpName" "SELECT grp_groups.GrpName"
" FROM crs_grp,crs_grp_usr" " FROM grp_groups,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod" " AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld" " AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName", " ORDER BY grp_groups.GrpName",
GrpTypCod,UsrCod); GrpTypCod,UsrCod);
/***** Get the groups *****/ /***** Get the groups *****/
@ -3909,10 +3946,11 @@ static bool Grp_CheckIfGroupNameExists (long GrpTypCod,const char *GrpName,long
{ {
/***** Get number of groups with a type and a name from database *****/ /***** Get number of groups with a type and a name from database *****/
return (DB_QueryCOUNT ("can not check if the name of group already existed", return (DB_QueryCOUNT ("can not check if the name of group already existed",
"SELECT COUNT(*) FROM crs_grp" "SELECT COUNT(*)"
" FROM grp_groups"
" WHERE GrpTypCod=%ld" " WHERE GrpTypCod=%ld"
" AND GrpName='%s'" " AND GrpName='%s'"
" AND GrpCod<>%ld", " AND GrpCod<>%ld",
GrpTypCod,GrpName,GrpCod) != 0); GrpTypCod,GrpName,GrpCod) != 0);
} }
@ -3947,7 +3985,7 @@ static void Grp_CreateGroup (void)
{ {
/***** Create a new group *****/ /***** Create a new group *****/
DB_QueryINSERT ("can not create group", DB_QueryINSERT ("can not create group",
"INSERT INTO crs_grp" "INSERT INTO grp_groups"
" (GrpTypCod,GrpName,RooCod,MaxStudents,Open,FileZones)" " (GrpTypCod,GrpName,RooCod,MaxStudents,Open,FileZones)"
" VALUES" " VALUES"
" (%ld,'%s',%ld,%u,'N','N')", " (%ld,'%s',%ld,%u,'N','N')",
@ -4134,24 +4172,29 @@ static void Grp_RemoveGroupTypeCompletely (void)
" SET GrpCod=-1" " SET GrpCod=-1"
" WHERE GrpCod IN" " WHERE GrpCod IN"
" (SELECT GrpCod" " (SELECT GrpCod"
" FROM crs_grp" " FROM grp_groups"
" WHERE GrpTypCod=%ld)", " WHERE GrpTypCod=%ld)",
Gbl.Crs.Grps.GrpTyp.GrpTypCod); Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Remove all the students in groups of this type *****/ /***** Remove all the students in groups of this type *****/
DB_QueryDELETE ("can not remove users from all groups of a type", DB_QueryDELETE ("can not remove users from all groups of a type",
"DELETE FROM crs_grp_usr WHERE GrpCod IN" "DELETE FROM crs_grp_usr"
" (SELECT GrpCod FROM crs_grp WHERE GrpTypCod=%ld)", " WHERE GrpCod IN"
" (SELECT GrpCod"
" FROM grp_groups"
" WHERE GrpTypCod=%ld)",
Gbl.Crs.Grps.GrpTyp.GrpTypCod); Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Remove all the groups of this type *****/ /***** Remove all the groups of this type *****/
DB_QueryDELETE ("can not remove groups of a type", DB_QueryDELETE ("can not remove groups of a type",
"DELETE FROM crs_grp WHERE GrpTypCod=%ld", "DELETE FROM grp_groups"
" WHERE GrpTypCod=%ld",
Gbl.Crs.Grps.GrpTyp.GrpTypCod); Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Remove the group type *****/ /***** Remove the group type *****/
DB_QueryDELETE ("can not remove a type of group", DB_QueryDELETE ("can not remove a type of group",
"DELETE FROM crs_grp_types WHERE GrpTypCod=%ld", "DELETE FROM crs_grp_types"
" WHERE GrpTypCod=%ld",
Gbl.Crs.Grps.GrpTyp.GrpTypCod); Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4206,7 +4249,8 @@ static void Grp_RemoveGroupCompletely (void)
/***** Remove the group *****/ /***** Remove the group *****/
DB_QueryDELETE ("can not remove a group", DB_QueryDELETE ("can not remove a group",
"DELETE FROM crs_grp WHERE GrpCod=%ld", "DELETE FROM grp_groups"
" WHERE GrpCod=%ld",
Gbl.Crs.Grps.GrpCod); Gbl.Crs.Grps.GrpCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4238,7 +4282,9 @@ void Grp_OpenGroup (void)
/***** Update the table of groups changing open/close status *****/ /***** Update the table of groups changing open/close status *****/
DB_QueryUPDATE ("can not open a group", DB_QueryUPDATE ("can not open a group",
"UPDATE crs_grp SET Open='Y' WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET Open='Y'"
" WHERE GrpCod=%ld",
Gbl.Crs.Grps.GrpCod); Gbl.Crs.Grps.GrpCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4271,7 +4317,9 @@ void Grp_CloseGroup (void)
/***** Update the table of groups changing open/close status *****/ /***** Update the table of groups changing open/close status *****/
DB_QueryUPDATE ("can not close a group", DB_QueryUPDATE ("can not close a group",
"UPDATE crs_grp SET Open='N' WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET Open='N'"
" WHERE GrpCod=%ld",
Gbl.Crs.Grps.GrpCod); Gbl.Crs.Grps.GrpCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4304,7 +4352,9 @@ void Grp_EnableFileZonesGrp (void)
/***** Update the table of groups changing file zones status *****/ /***** Update the table of groups changing file zones status *****/
DB_QueryUPDATE ("can not enable file zones of a group", DB_QueryUPDATE ("can not enable file zones of a group",
"UPDATE crs_grp SET FileZones='Y' WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET FileZones='Y'"
" WHERE GrpCod=%ld",
Gbl.Crs.Grps.GrpCod); Gbl.Crs.Grps.GrpCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4338,7 +4388,9 @@ void Grp_DisableFileZonesGrp (void)
/***** Update the table of groups changing file zones status *****/ /***** Update the table of groups changing file zones status *****/
DB_QueryUPDATE ("can not disable file zones of a group", DB_QueryUPDATE ("can not disable file zones of a group",
"UPDATE crs_grp SET FileZones='N' WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET FileZones='N'"
" WHERE GrpCod=%ld",
Gbl.Crs.Grps.GrpCod); Gbl.Crs.Grps.GrpCod);
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
@ -4389,7 +4441,9 @@ void Grp_ChangeGroupType (void)
{ {
/* Update the table of groups changing old type by new type */ /* Update the table of groups changing old type by new type */
DB_QueryUPDATE ("can not update the type of a group", DB_QueryUPDATE ("can not update the type of a group",
"UPDATE crs_grp SET GrpTypCod=%ld WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET GrpTypCod=%ld"
" WHERE GrpCod=%ld",
NewGrpTypCod,Gbl.Crs.Grps.GrpCod); NewGrpTypCod,Gbl.Crs.Grps.GrpCod);
/* Create message to show the change made */ /* Create message to show the change made */
@ -4431,7 +4485,9 @@ void Grp_ChangeGroupRoom (void)
/***** Update the table of groups changing old room by new room *****/ /***** Update the table of groups changing old room by new room *****/
DB_QueryUPDATE ("can not update the room of a group", DB_QueryUPDATE ("can not update the room of a group",
"UPDATE crs_grp SET RooCod=%ld WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET RooCod=%ld"
" WHERE GrpCod=%ld",
NewRooCod,Gbl.Crs.Grps.GrpCod); NewRooCod,Gbl.Crs.Grps.GrpCod);
/* Create message to show the change made */ /* Create message to show the change made */
@ -4642,7 +4698,9 @@ void Grp_ChangeMaxStdsGrp (void)
/***** Update the table of groups changing the old maximum of students to the new *****/ /***** Update the table of groups changing the old maximum of students to the new *****/
DB_QueryUPDATE ("can not update the maximum number of students" DB_QueryUPDATE ("can not update the maximum number of students"
" in a group", " in a group",
"UPDATE crs_grp SET MaxStudents=%u WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET MaxStudents=%u"
" WHERE GrpCod=%ld",
NewMaxStds,Gbl.Crs.Grps.GrpCod); NewMaxStds,Gbl.Crs.Grps.GrpCod);
/***** Write message to show the change made *****/ /***** Write message to show the change made *****/
@ -4818,7 +4876,9 @@ void Grp_RenameGroup (void)
{ {
/* Update the table changing old name by new name */ /* Update the table changing old name by new name */
DB_QueryUPDATE ("can not update the name of a group", DB_QueryUPDATE ("can not update the name of a group",
"UPDATE crs_grp SET GrpName='%s' WHERE GrpCod=%ld", "UPDATE grp_groups"
" SET GrpName='%s'"
" WHERE GrpCod=%ld",
NewNameGrp,Gbl.Crs.Grps.GrpCod); NewNameGrp,Gbl.Crs.Grps.GrpCod);
/***** Write message to show the change made *****/ /***** Write message to show the change made *****/

View File

@ -1495,12 +1495,12 @@ static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod)
" WHERE FileBrowser=%u AND Cod=%ld) +" " WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND brw_sizes.FileBrowser=%u" " AND brw_sizes.FileBrowser=%u"
" AND brw_sizes.Cod=crs_grp.GrpCod)", " AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS],
CrsCod, CrsCod,
CrsCod, CrsCod,
@ -1538,12 +1538,12 @@ static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod)
" WHERE FileBrowser=%u AND Cod=%ld) +" " WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM crs_grp_types," " FROM crs_grp_types,"
"crs_grp," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE crs_grp_types.CrsCod=%ld" " WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod" " AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND brw_sizes.FileBrowser=%u" " AND brw_sizes.FileBrowser=%u"
" AND brw_sizes.Cod=crs_grp.GrpCod)", " AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS],
CrsCod, CrsCod,
CrsCod, CrsCod,

View File

@ -766,12 +766,16 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Mch_Match
/***** Get groups associated to a match from database *****/ /***** Get groups associated to a match from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a match", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a match",
"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName" "SELECT crs_grp_types.GrpTypName,"
" FROM mch_groups,crs_grp,crs_grp_types" "grp_groups.GrpName"
" FROM mch_groups,"
"grp_groups,"
"crs_grp_types"
" WHERE mch_groups.MchCod=%ld" " WHERE mch_groups.MchCod=%ld"
" AND mch_groups.GrpCod=crs_grp.GrpCod" " AND mch_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Match->MchCod); Match->MchCod);
/***** Write heading *****/ /***** Write heading *****/
@ -1970,9 +1974,10 @@ void Mch_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type" DB_QueryDELETE ("can not remove groups of a type"
" from the associations between matches and groups", " from the associations between matches and groups",
"DELETE FROM mch_groups" "DELETE FROM mch_groups"
" USING crs_grp,mch_groups" " USING grp_groups,"
" WHERE crs_grp.GrpTypCod=%ld" "mch_groups"
" AND crs_grp.GrpCod=mch_groups.GrpCod", " WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=mch_groups.GrpCod",
GrpTypCod); GrpTypCod);
} }

View File

@ -1256,13 +1256,13 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
" to be notified", " to be notified",
"SELECT crs_grp_usr.UsrCod" // row[0] "SELECT crs_grp_usr.UsrCod" // row[0]
" FROM crs_grp_usr," " FROM crs_grp_usr,"
"crs_grp," "grp_groups,"
"crs_grp_types," "crs_grp_types,"
"crs_users" "crs_users"
" WHERE crs_grp_usr.GrpCod=%ld" " WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld" " AND crs_grp_usr.UsrCod<>%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod" " AND crs_grp_usr.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_users.CrsCod" " AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u", // Notify teachers only " AND crs_users.Role=%u", // Notify teachers only
Gbl.Crs.Grps.GrpCod, Gbl.Crs.Grps.GrpCod,

View File

@ -1018,7 +1018,8 @@ void Roo_RemoveRoom (void)
/***** Update groups assigned to this room *****/ /***** Update groups assigned to this room *****/
DB_QueryUPDATE ("can not update room in groups", DB_QueryUPDATE ("can not update room in groups",
"UPDATE crs_grp SET RooCod=0" // 0 means another room "UPDATE grp_groups"
" SET RooCod=0" // 0 means another room
" WHERE RooCod=%ld", " WHERE RooCod=%ld",
Roo_EditingRoom->RooCod); Roo_EditingRoom->RooCod);

View File

@ -932,9 +932,9 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
"deg_degrees.ShortName AS DegShortName," "deg_degrees.ShortName AS DegShortName,"
"crs_courses.CrsCod," "crs_courses.CrsCod,"
"crs_courses.ShortName AS CrsShortName," "crs_courses.ShortName AS CrsShortName,"
"crs_grp.GrpCod" "grp_groups.GrpCod"
" FROM brw_files," " FROM brw_files,"
"crs_grp," "grp_groups,"
"crs_grp_types," "crs_grp_types,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -944,8 +944,8 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
" WHERE brw_files.FilCod IN (SELECT FilCod FROM my_files_grp)" " WHERE brw_files.FilCod IN (SELECT FilCod FROM my_files_grp)"
" AND %s" " AND %s"
" AND brw_files.FileBrowser IN (%u,%u,%u,%u)" " AND brw_files.FileBrowser IN (%u,%u,%u,%u)"
" AND brw_files.Cod=crs_grp.GrpCod" " AND brw_files.Cod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_courses.CrsCod" " AND crs_grp_types.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod" " AND crs_courses.DegCod=deg_degrees.DegCod"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod"
@ -1121,9 +1121,9 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
"deg_degrees.ShortName AS DegShortName," "deg_degrees.ShortName AS DegShortName,"
"crs_courses.CrsCod," "crs_courses.CrsCod,"
"crs_courses.ShortName AS CrsShortName," "crs_courses.ShortName AS CrsShortName,"
"crs_grp.GrpCod" "grp_groups.GrpCod"
" FROM brw_files," " FROM brw_files,"
"crs_grp," "grp_groups,"
"crs_grp_types," "crs_grp_types,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -1133,8 +1133,8 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
" WHERE brw_files.PublisherUsrCod=%ld" " WHERE brw_files.PublisherUsrCod=%ld"
" AND %s" " AND %s"
" AND brw_files.FileBrowser IN (%u,%u,%u,%u)" " AND brw_files.FileBrowser IN (%u,%u,%u,%u)"
" AND brw_files.Cod=crs_grp.GrpCod" " AND brw_files.Cod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_courses.CrsCod" " AND crs_grp_types.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod" " AND crs_courses.DegCod=deg_degrees.DegCod"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod"

View File

@ -2451,10 +2451,10 @@ void Svy_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type" DB_QueryDELETE ("can not remove groups of a type"
" from the associations between surveys and groups", " from the associations between surveys and groups",
"DELETE FROM svy_groups" "DELETE FROM svy_groups"
" USING crs_grp," " USING grp_groups,"
"svy_groups" "svy_groups"
" WHERE crs_grp.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"
" AND crs_grp.GrpCod=svy_groups.GrpCod", " AND grp_groups.GrpCod=svy_groups.GrpCod",
GrpTypCod); GrpTypCod);
} }
@ -2497,13 +2497,15 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
/***** Get groups associated to a survey from database *****/ /***** Get groups associated to a survey from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a survey", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a survey",
"SELECT crs_grp_types.GrpTypName," "SELECT crs_grp_types.GrpTypName,"
"crs_grp.GrpName" "grp_groups.GrpName"
" FROM svy_groups,crs_grp,crs_grp_types" " FROM svy_groups,"
"grp_groups,"
"crs_grp_types"
" WHERE svy_groups.SvyCod=%ld" " WHERE svy_groups.SvyCod=%ld"
" AND svy_groups.GrpCod=crs_grp.GrpCod" " AND svy_groups.GrpCod=grp_groups.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName," " ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName", "grp_groups.GrpName",
Svy->SvyCod); Svy->SvyCod);
/***** Write heading *****/ /***** Write heading *****/

View File

@ -4554,14 +4554,14 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
/* Select all the students of the course who don't belong to any group of type GrpTypCod */ /* Select all the students of the course who don't belong to any group of type GrpTypCod */
Str_Concat (*Query,"crs_users.UsrCod NOT IN" Str_Concat (*Query,"crs_users.UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod" " (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp," " FROM grp_groups,"
"crs_grp_usr" "crs_grp_usr"
" WHERE crs_grp.GrpTypCod='", " WHERE grp_groups.GrpTypCod='",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS); Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
snprintf (LongStr,sizeof (LongStr),"%ld", snprintf (LongStr,sizeof (LongStr),"%ld",
Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod); Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod);
Str_Concat (*Query,LongStr,Usr_MAX_BYTES_QUERY_GET_LIST_USRS); Str_Concat (*Query,LongStr,Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
Str_Concat (*Query,"' AND crs_grp.GrpCod=crs_grp_usr.GrpCod)", Str_Concat (*Query,"' AND grp_groups.GrpCod=crs_grp_usr.GrpCod)",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS); Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
NumNegativeCods++; NumNegativeCods++;
} }