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(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,
GrpTypCod INT 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 *****/
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"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=%ld",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.GrpCod=%ld",
CrsCod,GrpCod) != 1)
return soap_sender_fault (soap,
"Bad group code",
@ -2227,16 +2229,17 @@ int swad__getGroups (struct soap *soap,
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's groups",
"SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName,"
"crs_grp.GrpCod,"
"crs_grp.GrpName,"
"crs_grp.MaxStudents,"
"crs_grp.Open,"
"crs_grp.FileZones"
" FROM crs_grp_types,crs_grp"
"grp_groups.GrpCod,"
"grp_groups.GrpName,"
"grp_groups.MaxStudents,"
"grp_groups.Open,"
"grp_groups.FileZones"
" FROM crs_grp_types,"
"grp_groups"
" 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",
"grp_groups.GrpName",
courseCode);
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",
"SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName,"
"crs_grp.GrpCod,"
"crs_grp.GrpName,"
"crs_grp.MaxStudents,"
"crs_grp.Open,"
"crs_grp.FileZones"
" FROM crs_grp_types,crs_grp"
"grp_groups.GrpCod,"
"grp_groups.GrpName,"
"grp_groups.MaxStudents,"
"grp_groups.Open,"
"grp_groups.FileZones"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%d"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
courseCode);
SendMyGroupsOut->numGroups = (int) NumRows;
@ -3019,13 +3024,13 @@ int swad__getAttendanceUsers (struct soap *soap,
sprintf (SubQuery,"SELECT DISTINCT crs_grp_usr.UsrCod AS UsrCod,"
"'N' AS Present"
" FROM att_groups,"
"crs_grp,"
"grp_groups,"
"crs_grp_types,"
"crs_users,"
"crs_grp_usr"
" WHERE att_groups.AttCod=%ld"
" AND att_groups.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND att_groups.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u"
" 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"
" between assignments and groups",
"DELETE FROM asg_groups"
" USING crs_grp,"
" USING grp_groups,"
"asg_groups"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=asg_groups.GrpCod",
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=asg_groups.GrpCod",
GrpTypCod);
}
@ -1753,15 +1753,16 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
/***** Get groups associated to an assignment from database *****/
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,"
"crs_grp,"
"grp_groups,"
"crs_grp_types"
" WHERE asg_groups.AsgCod=%ld"
" AND asg_groups.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND asg_groups.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName",
"grp_groups.GrpName",
Asg->AsgCod);
/***** 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"
" between attendance events and groups",
"DELETE FROM att_groups"
" USING crs_grp,"
" USING grp_groups,"
"att_groups"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=att_groups.GrpCod",
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=att_groups.GrpCod",
GrpTypCod);
}
@ -1544,18 +1544,18 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToAttEvent (struct Att_Event *Ev
/***** Get groups associated to an attendance event from database *****/
NumGrps = (unsigned) DB_QuerySELECT (&mysql_res,"can not get groups of an attendance event",
"SELECT crs_grp_types.GrpTypName,"
"crs_grp.GrpName,"
"grp_groups.GrpName,"
"roo_rooms.ShortName"
" FROM (att_groups,"
"crs_grp,"
"grp_groups,"
"crs_grp_types)"
" LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod"
" ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE att_groups.AttCod=%ld"
" AND att_groups.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND att_groups.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName",
"grp_groups.GrpName",
Event->AttCod);
/***** 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.
*/
#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 JS_FILE "swad20.6.2.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
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)
1 change necessary in database:
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",
"DELETE FROM crs_grp_usr"
" USING crs_grp_types,"
"crs_grp,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod",
CrsCod);
/* Remove all the groups in the course */
DB_QueryDELETE ("can not remove groups of a course",
"DELETE FROM crs_grp"
"DELETE FROM grp_groups"
" USING crs_grp_types,"
"crs_grp"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod",
CrsCod);
/* Remove all the group types in the course */

View File

@ -650,9 +650,9 @@ mysql> DESCRIBE crs_courses;
"INDEX(DegCod,Year),"
"INDEX(Status))");
/***** Table crs_grp *****/
/***** Table grp_groups *****/
/*
mysql> DESCRIBE crs_grp;
mysql> DESCRIBE grp_groups;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
@ -666,7 +666,7 @@ mysql> DESCRIBE crs_grp;
+-------------+---------------+------+-----+---------+----------------+
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,"
"GrpTypCod INT NOT NULL,"
"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 *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an exam session",
"SELECT crs_grp_types.GrpTypName," // row[0]
"crs_grp.GrpName" // row[1]
" FROM exa_groups,crs_grp,crs_grp_types"
"grp_groups.GrpName" // row[1]
" FROM exa_groups,"
"grp_groups,"
"crs_grp_types"
" WHERE exa_groups.SesCod=%ld"
" AND exa_groups.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
" AND exa_groups.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Session->SesCod);
/***** Write heading *****/
@ -1661,9 +1664,10 @@ void ExaSes_RemoveGroupsOfType (long GrpTypCod)
DB_QueryDELETE ("can not remove groups of a type"
" from the associations between sessions and groups",
"DELETE FROM exa_groups"
" USING crs_grp,exa_groups"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=exa_groups.GrpCod",
" USING grp_groups,"
"exa_groups"
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=exa_groups.GrpCod",
GrpTypCod);
}

View File

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

View File

@ -4379,10 +4379,11 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
char SubqueryPrj[128];
/***** Build subquery for groups *****/
sprintf (SubqueryGrp,"(SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp"
sprintf (SubqueryGrp,"(SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod)",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod)",
CrsCod);
/***** Build subquery for projects *****/
@ -4790,11 +4791,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR "
"(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN"
" (SELECT crs_grp.GrpCod"
" (SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"crs_grp"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")",
UsrCod,
(unsigned) Brw_ADMI_DOC_CRS,
@ -4822,11 +4823,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR "
"(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN"
" (SELECT crs_grp.GrpCod"
" (SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"crs_grp"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")",
UsrCod,
(unsigned) Brw_ADMI_DOC_CRS,
@ -4857,11 +4858,11 @@ void Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (long UsrCod,long CrsCod)
" OR "
"(FileBrowser IN (%u,%u,%u,%u)"
" AND Cod IN"
" (SELECT crs_grp.GrpCod"
" (SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"crs_grp"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod))"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod))"
")",
UsrCod,
(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",
"LOCK TABLES "
"crs_grp_types WRITE,"
"crs_grp WRITE,"
"grp_groups WRITE,"
"crs_grp_usr WRITE,"
"crs_users 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 *****/
DB_QueryDELETE ("can not remove a user from all groups of a course",
"DELETE FROM crs_grp_usr"
" WHERE UsrCod=%ld AND GrpCod IN"
" (SELECT crs_grp.GrpCod FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod)",
" WHERE UsrCod=%ld"
" AND GrpCod IN"
" (SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod)",
UsrCod,CrsCod);
/***** Flush caches *****/
@ -2759,14 +2762,17 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
Gbl.Crs.Grps.GrpTypes.Num =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group"
" of a course",
"SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
"SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName,"
"crs_grp_types.Mandatory,"
"crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(grp_groups.GrpCod)"
" FROM crs_grp_types,"
"grp_groups"
" 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"
" ORDER BY crs_grp_types.GrpTypName",
Gbl.Hierarchy.Crs.CrsCod);
@ -2775,23 +2781,31 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
Gbl.Crs.Grps.GrpTypes.Num =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get types of group"
" of a course",
"(SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName AS GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod)"
"(SELECT crs_grp_types.GrpTypCod,"
"crs_grp_types.GrpTypName AS GrpTypName,"
"crs_grp_types.Mandatory,"
"crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(grp_groups.GrpCod)"
" FROM crs_grp_types,"
"grp_groups"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod)"
" UNION "
"(SELECT GrpTypCod,GrpTypName,"
"Mandatory,Multiple,"
"MustBeOpened,"
"UNIX_TIMESTAMP(OpenTime),"
"0"
" FROM crs_grp_types WHERE CrsCod=%ld"
" AND GrpTypCod NOT IN (SELECT GrpTypCod FROM crs_grp))"
"(SELECT GrpTypCod,"
"GrpTypName,"
"Mandatory,"
"Multiple,"
"MustBeOpened,"
"UNIX_TIMESTAMP(OpenTime),"
"0"
" FROM crs_grp_types"
" WHERE CrsCod=%ld"
" AND GrpTypCod NOT IN"
" (SELECT GrpTypCod"
" FROM grp_groups))"
" ORDER BY GrpTypName",
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
and with open time in the past ****/
DB_QueryUPDATE ("can not open groups",
"UPDATE crs_grp SET Open='Y'"
" WHERE GrpTypCod=%ld AND Open='N'",
"UPDATE grp_groups"
" SET Open='Y'"
" WHERE GrpTypCod=%ld"
" AND Open='N'",
GrpTypCod);
/***** To not try to open groups again, set MustBeOpened to false *****/
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",
GrpTypCod);
}
@ -3036,9 +3053,11 @@ unsigned Grp_CountNumGrpsInCurrentCrs (void)
/***** Get number of group in current course from database *****/
return
(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"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod",
Gbl.Hierarchy.Crs.CrsCod);
}
@ -3051,7 +3070,8 @@ static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod)
/***** Get number of groups of a type from database *****/
return
(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",
GrpTypCod);
}
@ -3065,18 +3085,18 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res)
/***** Get groups of a type from database *****/
// Don't use INNER JOIN because there are groups without assigned room
return DB_QuerySELECT (mysql_res,"can not get groups of a type",
"SELECT crs_grp.GrpCod,"
"crs_grp.GrpName,"
"crs_grp.RooCod,"
"SELECT grp_groups.GrpCod,"
"grp_groups.GrpName,"
"grp_groups.RooCod,"
"roo_rooms.ShortName,"
"crs_grp.MaxStudents,"
"crs_grp.Open,"
"crs_grp.FileZones"
" FROM crs_grp"
"grp_groups.MaxStudents,"
"grp_groups.Open,"
"grp_groups.FileZones"
" FROM grp_groups"
" LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod"
" WHERE crs_grp.GrpTypCod=%ld"
" ORDER BY crs_grp.GrpName",
" ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE grp_groups.GrpTypCod=%ld"
" ORDER BY grp_groups.GrpName",
GrpTypCod);
}
@ -3169,22 +3189,22 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
{
/***** Get data of a group from database *****/
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.GrpTypName," // row[2]
"crs_grp_types.Multiple," // row[3]
"crs_grp.GrpName," // row[4]
"crs_grp.RooCod," // row[5]
"grp_groups.GrpName," // row[4]
"grp_groups.RooCod," // row[5]
"roo_rooms.ShortName," // row[6]
"crs_grp.MaxStudents," // row[7]
"crs_grp.Open," // row[8]
"crs_grp.FileZones" // row[9]
" FROM (crs_grp,"
"crs_grp_types)"
" LEFT JOIN roo_rooms"
" ON crs_grp.RooCod=roo_rooms.RooCod"
" WHERE crs_grp.GrpCod=%ld"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod",
"grp_groups.MaxStudents," // row[7]
"grp_groups.Open," // row[8]
"grp_groups.FileZones" // row[9]
" FROM (grp_groups,"
"crs_grp_types)"
" LEFT JOIN roo_rooms"
" ON grp_groups.RooCod=roo_rooms.RooCod"
" WHERE grp_groups.GrpCod=%ld"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod",
GrpDat->GrpCod);
if (NumRows == 1)
@ -3247,7 +3267,7 @@ static long Grp_GetTypeOfGroupOfAGroup (long GrpCod)
/***** Get data of a group from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the type of a group",
"SELECT GrpTypCod"
" FROM crs_grp"
" FROM grp_groups"
" WHERE GrpCod=%ld",
GrpCod) != 1)
Lay_ShowErrorAndExit ("Error when getting group.");
@ -3272,7 +3292,8 @@ bool Grp_CheckIfGroupExists (long GrpCod)
{
/***** Get if a group exists from database *****/
return (DB_QueryCOUNT ("can not check if a group exists",
"SELECT COUNT(*) FROM crs_grp"
"SELECT COUNT(*)"
" FROM grp_groups"
" WHERE GrpCod=%ld",
GrpCod) != 0);
}
@ -3285,10 +3306,12 @@ bool Grp_CheckIfGroupBelongsToCourse (long GrpCod,long CrsCod)
{
/***** Get if a group exists from database *****/
return (DB_QueryCOUNT ("can not check if a group belongs to a course",
"SELECT COUNT(*) FROM crs_grp,crs_grp_types"
" WHERE crs_grp.GrpCod=%ld"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=%ld",
"SELECT COUNT(*)"
" FROM grp_groups,"
"crs_grp_types"
" WHERE grp_groups.GrpCod=%ld"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=%ld",
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",
"SELECT COUNT(*)"
" FROM crs_grp_usr,"
"crs_grp,"
"grp_groups,"
"crs_grp_types,"
"crs_users"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_usr.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_users.CrsCod"
" AND crs_grp_usr.UsrCod=crs_users.UsrCod"
" AND crs_users.Role=%u",
@ -3330,10 +3353,10 @@ static unsigned long Grp_CountNumUsrsInNoGrpsOfType (Rol_Role_t Role,long GrpTyp
" AND Role=%u"
" AND UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp,"
" FROM grp_groups,"
"crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod)",
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod)",
Gbl.Hierarchy.Crs.CrsCod,
(unsigned) Role,GrpTypCod);
}
@ -3348,11 +3371,11 @@ static bool Grp_CheckIfIBelongToGrpsOfType (long GrpTypCod)
/***** Get a group which I belong to from database *****/
NumGrps = DB_QueryCOUNT ("can not check if you belong to a group type",
"SELECT COUNT(crs_grp.GrpCod)"
" FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld", // I belong
"SELECT COUNT(grp_groups.GrpCod)"
" FROM grp_groups,crs_grp_usr"
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld", // I belong
GrpTypCod,Gbl.Usrs.Me.UsrDat.UsrCod);
return (NumGrps != 0);
@ -3453,15 +3476,18 @@ bool Grp_CheckIfUsrSharesAnyOfMyGrpsInCurrentCrs (const struct UsrData *UsrDat)
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares =
(DB_QueryCOUNT ("can not check if a user shares any group"
" in the current course with you",
"SELECT COUNT(*) FROM crs_grp_usr"
"SELECT COUNT(*)"
" FROM crs_grp_usr"
" WHERE UsrCod=%ld"
" AND GrpCod IN"
" (SELECT crs_grp_usr.GrpCod"
" FROM crs_grp_usr,crs_grp,crs_grp_types"
" WHERE crs_grp_usr.UsrCod=%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=%ld)",
" AND GrpCod IN"
" (SELECT crs_grp_usr.GrpCod"
" FROM crs_grp_usr,"
"grp_groups,"
"crs_grp_types"
" WHERE crs_grp_usr.UsrCod=%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,
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Hierarchy.Crs.CrsCod) != 0);
@ -3505,20 +3531,20 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
" ("
"SELECT crs_grp_types.GrpTypCod AS GrpTypCod,"
"COUNT(*) AS NumStudents,"
"crs_grp.MaxStudents as MaxStudents"
"grp_groups.MaxStudents as MaxStudents"
" FROM crs_grp_types,"
"crs_grp,"
"grp_groups,"
"crs_grp_usr,"
"crs_users"
" WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.Open='Y'" // Open
" AND grp_groups.MaxStudents>0" // Admits students
" 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_users.Role=%u" // Student
" GROUP BY crs_grp.GrpCod"
" GROUP BY grp_groups.GrpCod"
" HAVING NumStudents<MaxStudents" // Not full
") AS available_grp_types_with_stds"
@ -3527,13 +3553,13 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
// Available mandatory groups...
"SELECT crs_grp_types.GrpTypCod AS GrpTypCod"
" FROM crs_grp_types,"
"crs_grp"
"grp_groups"
" WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.Open='Y'" // Open
" AND grp_groups.MaxStudents>0" // Admits students
// ...without students
" AND crs_grp.GrpCod NOT IN"
" AND grp_groups.GrpCod NOT IN"
" (SELECT crs_grp_usr.GrpCod"
" FROM crs_users,"
"crs_grp_usr"
@ -3547,13 +3573,13 @@ bool Grp_GetIfAvailableGrpTyp (long GrpTypCod)
" WHERE GrpTypCod NOT IN"
" (SELECT crs_grp_types.GrpTypCod"
" FROM crs_grp_types,"
"crs_grp,"
"grp_groups,"
"crs_grp_usr"
" WHERE %s" // Which group types?
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.Open='Y'" // Open
" AND crs_grp.MaxStudents>0" // Admits students
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.Open='Y'" // Open
" AND grp_groups.MaxStudents>0" // Admits students
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld)", // I belong
SubQueryGrpTypes,(unsigned) Rol_STD,
@ -3593,27 +3619,35 @@ static void Grp_GetLstCodGrpsUsrBelongs (long CrsCod,long GrpTypCod,
LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which a user belongs to",
"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
"SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
Gbl.Hierarchy.Crs.CrsCod,UsrCod);
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,
UsrCod);
else // Query only the groups of specified type in the course
LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which a user belongs to",
"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
"SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
Gbl.Hierarchy.Crs.CrsCod,GrpTypCod,UsrCod);
" AND crs_grp_types.GrpTypCod=%ld"
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,
GrpTypCod,
UsrCod);
/***** Get the groups *****/
if (LstGrps->NumGrps)
@ -3652,14 +3686,17 @@ void Grp_GetLstCodGrpsWithFileZonesIBelong (struct ListCodGrps *LstGrps)
LstGrps->NumGrps =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get the groups"
" which you belong to",
"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
"SELECT grp_groups.GrpCod"
" FROM crs_grp_types,"
"grp_groups,"
"crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.FileZones='Y'"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
" AND crs_grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND grp_groups.FileZones='Y'"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,"
"grp_groups.GrpName",
Gbl.Hierarchy.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
/***** 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 *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get the names of groups"
" a user belongs to",
"SELECT crs_grp.GrpName"
" FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
"SELECT grp_groups.GrpName"
" FROM grp_groups,crs_grp_usr"
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY grp_groups.GrpName",
GrpTypCod,UsrCod);
/***** 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 *****/
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"
" AND GrpName='%s'"
" AND GrpCod<>%ld",
" AND GrpName='%s'"
" AND GrpCod<>%ld",
GrpTypCod,GrpName,GrpCod) != 0);
}
@ -3947,7 +3985,7 @@ static void Grp_CreateGroup (void)
{
/***** Create a new group *****/
DB_QueryINSERT ("can not create group",
"INSERT INTO crs_grp"
"INSERT INTO grp_groups"
" (GrpTypCod,GrpName,RooCod,MaxStudents,Open,FileZones)"
" VALUES"
" (%ld,'%s',%ld,%u,'N','N')",
@ -4134,24 +4172,29 @@ static void Grp_RemoveGroupTypeCompletely (void)
" SET GrpCod=-1"
" WHERE GrpCod IN"
" (SELECT GrpCod"
" FROM crs_grp"
" FROM grp_groups"
" WHERE GrpTypCod=%ld)",
Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Remove all the students in groups of this type *****/
DB_QueryDELETE ("can not remove users from all groups of a type",
"DELETE FROM crs_grp_usr WHERE GrpCod IN"
" (SELECT GrpCod FROM crs_grp WHERE GrpTypCod=%ld)",
"DELETE FROM crs_grp_usr"
" WHERE GrpCod IN"
" (SELECT GrpCod"
" FROM grp_groups"
" WHERE GrpTypCod=%ld)",
Gbl.Crs.Grps.GrpTyp.GrpTypCod);
/***** Remove all the groups of this 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);
/***** Remove the group type *****/
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);
/***** Create message to show the change made *****/
@ -4206,7 +4249,8 @@ static void Grp_RemoveGroupCompletely (void)
/***** Remove the 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);
/***** Create message to show the change made *****/
@ -4238,7 +4282,9 @@ void Grp_OpenGroup (void)
/***** Update the table of groups changing open/close status *****/
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);
/***** Create message to show the change made *****/
@ -4271,7 +4317,9 @@ void Grp_CloseGroup (void)
/***** Update the table of groups changing open/close status *****/
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);
/***** Create message to show the change made *****/
@ -4304,7 +4352,9 @@ void Grp_EnableFileZonesGrp (void)
/***** Update the table of groups changing file zones status *****/
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);
/***** Create message to show the change made *****/
@ -4338,7 +4388,9 @@ void Grp_DisableFileZonesGrp (void)
/***** Update the table of groups changing file zones status *****/
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);
/***** 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 */
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);
/* 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 *****/
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);
/* 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 *****/
DB_QueryUPDATE ("can not update the maximum number of students"
" 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);
/***** Write message to show the change made *****/
@ -4818,7 +4876,9 @@ void Grp_RenameGroup (void)
{
/* Update the table changing old name by new name */
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);
/***** 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) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM crs_grp_types,"
"crs_grp,"
"grp_groups,"
"brw_sizes"
" 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.Cod=crs_grp.GrpCod)",
" AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS],
CrsCod,
CrsCod,
@ -1538,12 +1538,12 @@ static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod)
" WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM crs_grp_types,"
"crs_grp,"
"grp_groups,"
"brw_sizes"
" 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.Cod=crs_grp.GrpCod)",
" AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS],
CrsCod,
CrsCod,

View File

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

View File

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

View File

@ -1018,7 +1018,8 @@ void Roo_RemoveRoom (void)
/***** Update groups assigned to this room *****/
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",
Roo_EditingRoom->RooCod);

View File

@ -932,9 +932,9 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
"deg_degrees.ShortName AS DegShortName,"
"crs_courses.CrsCod,"
"crs_courses.ShortName AS CrsShortName,"
"crs_grp.GrpCod"
"grp_groups.GrpCod"
" FROM brw_files,"
"crs_grp,"
"grp_groups,"
"crs_grp_types,"
"crs_courses,"
"deg_degrees,"
@ -944,8 +944,8 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
" WHERE brw_files.FilCod IN (SELECT FilCod FROM my_files_grp)"
" AND %s"
" AND brw_files.FileBrowser IN (%u,%u,%u,%u)"
" AND brw_files.Cod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND brw_files.Cod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod"
@ -1121,9 +1121,9 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
"deg_degrees.ShortName AS DegShortName,"
"crs_courses.CrsCod,"
"crs_courses.ShortName AS CrsShortName,"
"crs_grp.GrpCod"
"grp_groups.GrpCod"
" FROM brw_files,"
"crs_grp,"
"grp_groups,"
"crs_grp_types,"
"crs_courses,"
"deg_degrees,"
@ -1133,8 +1133,8 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
" WHERE brw_files.PublisherUsrCod=%ld"
" AND %s"
" AND brw_files.FileBrowser IN (%u,%u,%u,%u)"
" AND brw_files.Cod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND brw_files.Cod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod"
" 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"
" from the associations between surveys and groups",
"DELETE FROM svy_groups"
" USING crs_grp,"
" USING grp_groups,"
"svy_groups"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=svy_groups.GrpCod",
" WHERE grp_groups.GrpTypCod=%ld"
" AND grp_groups.GrpCod=svy_groups.GrpCod",
GrpTypCod);
}
@ -2497,13 +2497,15 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
/***** Get groups associated to a survey from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a survey",
"SELECT crs_grp_types.GrpTypName,"
"crs_grp.GrpName"
" FROM svy_groups,crs_grp,crs_grp_types"
"grp_groups.GrpName"
" FROM svy_groups,"
"grp_groups,"
"crs_grp_types"
" WHERE svy_groups.SvyCod=%ld"
" AND svy_groups.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND svy_groups.GrpCod=grp_groups.GrpCod"
" AND grp_groups.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName",
"grp_groups.GrpName",
Svy->SvyCod);
/***** 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 */
Str_Concat (*Query,"crs_users.UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp,"
" FROM grp_groups,"
"crs_grp_usr"
" WHERE crs_grp.GrpTypCod='",
" WHERE grp_groups.GrpTypCod='",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
snprintf (LongStr,sizeof (LongStr),"%ld",
Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod);
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);
NumNegativeCods++;
}