mirror of
https://github.com/acanas/swad-core.git
synced 2024-05-28 20:43:27 +02:00
Version 20.50.3: Mar 16, 2021 Assignments database table renamed.
This commit is contained in:
parent
c6aa4fe3cc
commit
986b7e6d11
18
sql/swad.sql
18
sql/swad.sql
|
@ -58,16 +58,9 @@ CREATE TABLE IF NOT EXISTS ann_seen (
|
||||||
UsrCod INT NOT NULL,
|
UsrCod INT NOT NULL,
|
||||||
UNIQUE INDEX(AnnCod,UsrCod));
|
UNIQUE INDEX(AnnCod,UsrCod));
|
||||||
--
|
--
|
||||||
-- Table asg_grp: stores the groups associated to assigments
|
-- Table asg_assignments: stores the assignments proposed by the teachers to their students
|
||||||
--
|
--
|
||||||
CREATE TABLE IF NOT EXISTS asg_grp (
|
CREATE TABLE IF NOT EXISTS asg_assignments (
|
||||||
AsgCod INT NOT NULL,
|
|
||||||
GrpCod INT NOT NULL,
|
|
||||||
UNIQUE INDEX(AsgCod,GrpCod));
|
|
||||||
--
|
|
||||||
-- Table assignments: stores the assignments proposed by the teachers to their students
|
|
||||||
--
|
|
||||||
CREATE TABLE IF NOT EXISTS assignments (
|
|
||||||
AsgCod INT NOT NULL AUTO_INCREMENT,
|
AsgCod INT NOT NULL AUTO_INCREMENT,
|
||||||
CrsCod INT NOT NULL DEFAULT -1,
|
CrsCod INT NOT NULL DEFAULT -1,
|
||||||
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
|
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||||
|
@ -81,6 +74,13 @@ CREATE TABLE IF NOT EXISTS assignments (
|
||||||
UNIQUE INDEX(AsgCod),
|
UNIQUE INDEX(AsgCod),
|
||||||
INDEX(CrsCod,Hidden));
|
INDEX(CrsCod,Hidden));
|
||||||
--
|
--
|
||||||
|
-- Table asg_grp: stores the groups associated to assigments
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS asg_grp (
|
||||||
|
AsgCod INT NOT NULL,
|
||||||
|
GrpCod INT NOT NULL,
|
||||||
|
UNIQUE INDEX(AsgCod,GrpCod));
|
||||||
|
--
|
||||||
-- Table att_events: stores events used to control attendance
|
-- Table att_events: stores events used to control attendance
|
||||||
--
|
--
|
||||||
CREATE TABLE IF NOT EXISTS att_events (
|
CREATE TABLE IF NOT EXISTS att_events (
|
||||||
|
|
|
@ -695,11 +695,22 @@ static void Asg_GetListAssignments (struct Asg_Assignments *Assignments)
|
||||||
if (Gbl.Crs.Grps.WhichGrps == Grp_MY_GROUPS)
|
if (Gbl.Crs.Grps.WhichGrps == Grp_MY_GROUPS)
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||||
"SELECT AsgCod"
|
"SELECT AsgCod"
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod=%ld%s"
|
" WHERE CrsCod=%ld%s"
|
||||||
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
" AND ("
|
||||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
// Assignment is for the whole course
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
"AsgCod NOT IN"
|
||||||
|
" (SELECT AsgCod"
|
||||||
|
" FROM asg_grp)" // Not associated to any group
|
||||||
|
" OR"
|
||||||
|
// Assignment is for some of my groups
|
||||||
|
" AsgCod IN"
|
||||||
|
" (SELECT asg_grp.AsgCod"
|
||||||
|
" FROM asg_grp,"
|
||||||
|
"crs_grp_usr"
|
||||||
|
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||||
|
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod)"
|
||||||
|
")"
|
||||||
" ORDER BY %s",
|
" ORDER BY %s",
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
HiddenSubQuery[Gbl.Usrs.Me.Role.Logged],
|
HiddenSubQuery[Gbl.Usrs.Me.Role.Logged],
|
||||||
|
@ -708,7 +719,7 @@ static void Asg_GetListAssignments (struct Asg_Assignments *Assignments)
|
||||||
else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS
|
else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||||
"SELECT AsgCod"
|
"SELECT AsgCod"
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod=%ld%s"
|
" WHERE CrsCod=%ld%s"
|
||||||
" ORDER BY %s",
|
" ORDER BY %s",
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
|
@ -765,9 +776,11 @@ void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg)
|
||||||
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
||||||
"Title," // row[6]
|
"Title," // row[6]
|
||||||
"Folder" // row[7]
|
"Folder" // row[7]
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
" WHERE AsgCod=%ld"
|
||||||
Asg->AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
" AND CrsCod=%ld",
|
||||||
|
Asg->AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Get data of assignment *****/
|
/***** Get data of assignment *****/
|
||||||
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
||||||
|
@ -801,9 +814,11 @@ void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg)
|
||||||
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
||||||
"Title," // row[6]
|
"Title," // row[6]
|
||||||
"Folder" // row[7]
|
"Folder" // row[7]
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
" WHERE CrsCod=%ld"
|
||||||
Gbl.Hierarchy.Crs.CrsCod,Asg->Folder);
|
" AND Folder='%s'",
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
|
Asg->Folder);
|
||||||
|
|
||||||
/***** Get data of assignment *****/
|
/***** Get data of assignment *****/
|
||||||
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
||||||
|
@ -925,9 +940,12 @@ static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT
|
||||||
|
|
||||||
/***** Get text of assignment from database *****/
|
/***** Get text of assignment from database *****/
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text",
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text",
|
||||||
"SELECT Txt FROM assignments"
|
"SELECT Txt" // row[0]
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
" FROM asg_assignments"
|
||||||
AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
" WHERE AsgCod=%ld"
|
||||||
|
" AND CrsCod=%ld",
|
||||||
|
AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** The result of the query must have one row or none *****/
|
/***** The result of the query must have one row or none *****/
|
||||||
if (NumRows == 1)
|
if (NumRows == 1)
|
||||||
|
@ -964,7 +982,9 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
|
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment title and text",
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment title and text",
|
||||||
"SELECT Title,Txt FROM assignments"
|
"SELECT Title," // row[0]
|
||||||
|
"Txt" // row[1]
|
||||||
|
" FROM asg_assignments"
|
||||||
" WHERE AsgCod=%ld",
|
" WHERE AsgCod=%ld",
|
||||||
AsgCod);
|
AsgCod);
|
||||||
|
|
||||||
|
@ -1082,8 +1102,11 @@ void Asg_RemoveAssignment (void)
|
||||||
|
|
||||||
/***** Remove assignment *****/
|
/***** Remove assignment *****/
|
||||||
DB_QueryDELETE ("can not remove assignment",
|
DB_QueryDELETE ("can not remove assignment",
|
||||||
"DELETE FROM assignments WHERE AsgCod=%ld AND CrsCod=%ld",
|
"DELETE FROM asg_assignments"
|
||||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
" WHERE AsgCod=%ld"
|
||||||
|
" AND CrsCod=%ld",
|
||||||
|
Asg.AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Mark possible notifications as removed *****/
|
/***** Mark possible notifications as removed *****/
|
||||||
Ntf_MarkNotifAsRemoved (Ntf_EVENT_ASSIGNMENT,Asg.AsgCod);
|
Ntf_MarkNotifAsRemoved (Ntf_EVENT_ASSIGNMENT,Asg.AsgCod);
|
||||||
|
@ -1122,9 +1145,12 @@ void Asg_HideAssignment (void)
|
||||||
|
|
||||||
/***** Hide assignment *****/
|
/***** Hide assignment *****/
|
||||||
DB_QueryUPDATE ("can not hide assignment",
|
DB_QueryUPDATE ("can not hide assignment",
|
||||||
"UPDATE assignments SET Hidden='Y'"
|
"UPDATE asg_assignments"
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
" SET Hidden='Y'"
|
||||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
" WHERE AsgCod=%ld"
|
||||||
|
" AND CrsCod=%ld",
|
||||||
|
Asg.AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Show all assignments again *****/
|
/***** Show all assignments again *****/
|
||||||
Asg_ShowAllAssignments (&Assignments);
|
Asg_ShowAllAssignments (&Assignments);
|
||||||
|
@ -1156,9 +1182,12 @@ void Asg_ShowAssignment (void)
|
||||||
|
|
||||||
/***** Hide assignment *****/
|
/***** Hide assignment *****/
|
||||||
DB_QueryUPDATE ("can not show assignment",
|
DB_QueryUPDATE ("can not show assignment",
|
||||||
"UPDATE assignments SET Hidden='N'"
|
"UPDATE asg_assignments"
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
" SET Hidden='N'"
|
||||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
" WHERE AsgCod=%ld"
|
||||||
|
" AND CrsCod=%ld",
|
||||||
|
Asg.AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Show all assignments again *****/
|
/***** Show all assignments again *****/
|
||||||
Asg_ShowAllAssignments (&Assignments);
|
Asg_ShowAllAssignments (&Assignments);
|
||||||
|
@ -1172,9 +1201,10 @@ static bool Asg_CheckIfSimilarAssignmentExists (const char *Field,const char *Va
|
||||||
{
|
{
|
||||||
/***** Get number of assignments with a field value from database *****/
|
/***** Get number of assignments with a field value from database *****/
|
||||||
return (DB_QueryCOUNT ("can not get similar assignments",
|
return (DB_QueryCOUNT ("can not get similar assignments",
|
||||||
"SELECT COUNT(*) FROM assignments"
|
"SELECT COUNT(*)"
|
||||||
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod=%ld"
|
" WHERE CrsCod=%ld"
|
||||||
" AND %s='%s' AND AsgCod<>%ld",
|
" AND %s='%s' AND AsgCod<>%ld",
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
Field,Value,AsgCod) != 0);
|
Field,Value,AsgCod) != 0);
|
||||||
}
|
}
|
||||||
|
@ -1572,11 +1602,12 @@ void Asg_ReceiveFormAssignment (void)
|
||||||
static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigned NumUsrsToBeNotifiedByEMail)
|
static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigned NumUsrsToBeNotifiedByEMail)
|
||||||
{
|
{
|
||||||
/***** Update number of users notified *****/
|
/***** Update number of users notified *****/
|
||||||
DB_QueryUPDATE ("can not update the number of notifications"
|
DB_QueryUPDATE ("can not update the number of notifs. of an assignment",
|
||||||
" of an assignment",
|
"UPDATE asg_ssignments"
|
||||||
"UPDATE assignments SET NumNotif=NumNotif+%u"
|
" SET NumNotif=NumNotif+%u"
|
||||||
" WHERE AsgCod=%ld",
|
" WHERE AsgCod=%ld",
|
||||||
NumUsrsToBeNotifiedByEMail,AsgCod);
|
NumUsrsToBeNotifiedByEMail,
|
||||||
|
AsgCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1588,7 +1619,7 @@ static void Asg_CreateAssignment (struct Asg_Assignment *Asg,const char *Txt)
|
||||||
/***** Create a new assignment *****/
|
/***** Create a new assignment *****/
|
||||||
Asg->AsgCod =
|
Asg->AsgCod =
|
||||||
DB_QueryINSERTandReturnCode ("can not create new assignment",
|
DB_QueryINSERTandReturnCode ("can not create new assignment",
|
||||||
"INSERT INTO assignments"
|
"INSERT INTO asg_assignments"
|
||||||
" (CrsCod,UsrCod,StartTime,EndTime,Title,Folder,Txt)"
|
" (CrsCod,UsrCod,StartTime,EndTime,Title,Folder,Txt)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
||||||
|
@ -1614,17 +1645,21 @@ static void Asg_UpdateAssignment (struct Asg_Assignment *Asg,const char *Txt)
|
||||||
{
|
{
|
||||||
/***** Update the data of the assignment *****/
|
/***** Update the data of the assignment *****/
|
||||||
DB_QueryUPDATE ("can not update assignment",
|
DB_QueryUPDATE ("can not update assignment",
|
||||||
"UPDATE assignments SET "
|
"UPDATE asg_assignments"
|
||||||
"StartTime=FROM_UNIXTIME(%ld),"
|
" SET StartTime=FROM_UNIXTIME(%ld),"
|
||||||
"EndTime=FROM_UNIXTIME(%ld),"
|
"EndTime=FROM_UNIXTIME(%ld),"
|
||||||
"Title='%s',Folder='%s',Txt='%s'"
|
"Title='%s',"
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
"Folder='%s',"
|
||||||
|
"Txt='%s'"
|
||||||
|
" WHERE AsgCod=%ld"
|
||||||
|
" AND CrsCod=%ld",
|
||||||
Asg->TimeUTC[Dat_START_TIME],
|
Asg->TimeUTC[Dat_START_TIME],
|
||||||
Asg->TimeUTC[Dat_END_TIME ],
|
Asg->TimeUTC[Dat_END_TIME ],
|
||||||
Asg->Title,
|
Asg->Title,
|
||||||
Asg->Folder,
|
Asg->Folder,
|
||||||
Txt,
|
Txt,
|
||||||
Asg->AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
Asg->AsgCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Update groups *****/
|
/***** Update groups *****/
|
||||||
/* Remove old groups */
|
/* Remove old groups */
|
||||||
|
@ -1768,16 +1803,18 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
|
||||||
void Asg_RemoveCrsAssignments (long CrsCod)
|
void Asg_RemoveCrsAssignments (long CrsCod)
|
||||||
{
|
{
|
||||||
/***** Remove groups *****/
|
/***** Remove groups *****/
|
||||||
DB_QueryDELETE ("can not remove all the groups associated"
|
DB_QueryDELETE ("can not remove groups associated to assignments in a course",
|
||||||
" to assignments of a course",
|
"DELETE FROM asg_grp"
|
||||||
"DELETE FROM asg_grp USING assignments,asg_grp"
|
" USING asg_assignments,"
|
||||||
" WHERE assignments.CrsCod=%ld"
|
"asg_grp"
|
||||||
" AND assignments.AsgCod=asg_grp.AsgCod",
|
" WHERE asg_assignments.CrsCod=%ld"
|
||||||
|
" AND asg_assignments.AsgCod=asg_grp.AsgCod",
|
||||||
CrsCod);
|
CrsCod);
|
||||||
|
|
||||||
/***** Remove assignments *****/
|
/***** Remove assignments *****/
|
||||||
DB_QueryDELETE ("can not remove all the assignments of a course",
|
DB_QueryDELETE ("can not remove all assignments in a course",
|
||||||
"DELETE FROM assignments WHERE CrsCod=%ld",
|
"DELETE FROM asg_assignments"
|
||||||
|
" WHERE CrsCod=%ld",
|
||||||
CrsCod);
|
CrsCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1795,19 +1832,22 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
|
||||||
// Students and teachers can do assignments depending on groups
|
// Students and teachers can do assignments depending on groups
|
||||||
/***** Get if I can do an assignment from database *****/
|
/***** Get if I can do an assignment from database *****/
|
||||||
return (DB_QueryCOUNT ("can not check if I can do an assignment",
|
return (DB_QueryCOUNT ("can not check if I can do an assignment",
|
||||||
"SELECT COUNT(*) FROM assignments"
|
"SELECT COUNT(*)"
|
||||||
|
" FROM asg_assignments"
|
||||||
" WHERE AsgCod=%ld"
|
" WHERE AsgCod=%ld"
|
||||||
" AND "
|
" AND ("
|
||||||
"("
|
// Assignment is for the whole course
|
||||||
// Assignment is for the whole course
|
"AsgCod NOT IN"
|
||||||
"AsgCod NOT IN (SELECT AsgCod FROM asg_grp)"
|
" (SELECT AsgCod FROM asg_grp)"
|
||||||
" OR "
|
" OR "
|
||||||
// Assignment is for specific groups
|
// Assignment is for some of my groups
|
||||||
"AsgCod IN"
|
"AsgCod IN"
|
||||||
" (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
" (SELECT asg_grp.AsgCod"
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld"
|
" FROM asg_grp,"
|
||||||
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod)"
|
"crs_grp_usr"
|
||||||
")",
|
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||||
|
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod)"
|
||||||
|
")",
|
||||||
AsgCod,Gbl.Usrs.Me.UsrDat.UsrCod) != 0);
|
AsgCod,Gbl.Usrs.Me.UsrDat.UsrCod) != 0);
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
|
@ -1824,92 +1864,78 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
|
||||||
|
|
||||||
unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
|
unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned NumCourses;
|
|
||||||
|
|
||||||
/***** Get number of courses with assignments from database *****/
|
/***** Get number of courses with assignments from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(DISTINCT CrsCod)"
|
||||||
" WHERE CrsCod>0");
|
" FROM asg_assignments"
|
||||||
break;
|
" WHERE CrsCod>0");
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM ins_instits,"
|
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||||
"ctr_centers,"
|
" FROM ins_instits,"
|
||||||
"deg_degrees,"
|
"ctr_centers,"
|
||||||
"courses,"
|
"deg_degrees,"
|
||||||
"assignments"
|
"courses,"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
"asg_assignments"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND crs_courses.Status=0"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
" AND crs_courses.Status=0"
|
||||||
Gbl.Hierarchy.Cty.CtyCod);
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
break;
|
Gbl.Hierarchy.Cty.CtyCod);
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM ctr_centers,"
|
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||||
"deg_degrees,"
|
" FROM ctr_centers,"
|
||||||
"crs_courses,"
|
"deg_degrees,"
|
||||||
"assignments"
|
"crs_courses,"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
"asg_assignments"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND crs_courses.Status=0"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
" AND crs_courses.Status=0"
|
||||||
Gbl.Hierarchy.Ins.InsCod);
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
break;
|
Gbl.Hierarchy.Ins.InsCod);
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM deg_degrees,"
|
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||||
"crs_courses,"
|
" FROM deg_degrees,"
|
||||||
"assignments"
|
"crs_courses,"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
"asg_assignments"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND crs_courses.Status=0"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
" AND crs_courses.Status=0"
|
||||||
Gbl.Hierarchy.Ctr.CtrCod);
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
break;
|
Gbl.Hierarchy.Ctr.CtrCod);
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM crs_courses,"
|
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||||
"assignments"
|
" FROM crs_courses,"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
"asg_assignments"
|
||||||
" AND crs_courses.Status=0"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
" AND crs_courses.Status=0"
|
||||||
Gbl.Hierarchy.Deg.DegCod);
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
break;
|
Gbl.Hierarchy.Deg.DegCod);
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
return (unsigned)
|
||||||
"SELECT COUNT(DISTINCT CrsCod)"
|
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(DISTINCT CrsCod)"
|
||||||
" WHERE CrsCod=%ld",
|
" FROM asg_assignments"
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
" WHERE CrsCod=%ld",
|
||||||
break;
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get number of courses *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
if (sscanf (row[0],"%u",&NumCourses) != 1)
|
|
||||||
Lay_ShowErrorAndExit ("Error when getting number of courses with assignments.");
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumCourses;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1931,66 +1957,66 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*)," // row[0]
|
"SELECT COUNT(*)," // row[0]
|
||||||
"SUM(NumNotif)" // row[1]
|
"SUM(NumNotif)" // row[1]
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod>0");
|
" WHERE CrsCod>0");
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*)," // row[0]
|
"SELECT COUNT(*)," // row[0]
|
||||||
"SUM(assignments.NumNotif)" // row[1]
|
"SUM(asg_assignments.NumNotif)" // row[1]
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"assignments"
|
"asg_assignments"
|
||||||
" 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=assignments.CrsCod",
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
Gbl.Hierarchy.Cty.CtyCod);
|
Gbl.Hierarchy.Cty.CtyCod);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*)," // row[0]
|
"SELECT COUNT(*)," // row[0]
|
||||||
"SUM(assignments.NumNotif)" // row[1]
|
"SUM(asg_assignments.NumNotif)" // row[1]
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"assignments"
|
"asg_assignments"
|
||||||
" 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=assignments.CrsCod",
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
Gbl.Hierarchy.Ins.InsCod);
|
Gbl.Hierarchy.Ins.InsCod);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*),"
|
"SELECT COUNT(*),"
|
||||||
"SUM(assignments.NumNotif)"
|
"SUM(asg_assignments.NumNotif)"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"assignments"
|
"asg_assignments"
|
||||||
" 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=assignments.CrsCod",
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
Gbl.Hierarchy.Ctr.CtrCod);
|
Gbl.Hierarchy.Ctr.CtrCod);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*),"
|
"SELECT COUNT(*),"
|
||||||
"SUM(assignments.NumNotif)"
|
"SUM(asg_assignments.NumNotif)"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"assignments"
|
"asg_assignments"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||||
Gbl.Hierarchy.Deg.DegCod);
|
Gbl.Hierarchy.Deg.DegCod);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
"SELECT COUNT(*),"
|
"SELECT COUNT(*),"
|
||||||
"SUM(NumNotif)"
|
"SUM(NumNotif)"
|
||||||
" FROM assignments"
|
" FROM asg_assignments"
|
||||||
" WHERE CrsCod=%ld",
|
" WHERE CrsCod=%ld",
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
break;
|
break;
|
||||||
|
@ -2026,9 +2052,10 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
|
||||||
unsigned Asg_GetNumAssignmentsInCrs (long CrsCod)
|
unsigned Asg_GetNumAssignmentsInCrs (long CrsCod)
|
||||||
{
|
{
|
||||||
/***** Get number of assignments in a course from database *****/
|
/***** Get number of assignments in a course from database *****/
|
||||||
return
|
return (unsigned)
|
||||||
(unsigned) DB_QueryCOUNT ("can not get number of assignments in course",
|
DB_QueryCOUNT ("can not get number of assignments in course",
|
||||||
"SELECT COUNT(*) FROM assignments"
|
"SELECT COUNT(*)"
|
||||||
" WHERE CrsCod=%ld",
|
" FROM asg_assignments"
|
||||||
CrsCod);
|
" WHERE CrsCod=%ld",
|
||||||
|
CrsCod);
|
||||||
}
|
}
|
||||||
|
|
|
@ -600,12 +600,16 @@ 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.50.2 (2021-03-15)"
|
#define Log_PLATFORM_VERSION "SWAD 20.50.3 (2021-03-16)"
|
||||||
#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.
|
||||||
|
|
||||||
|
Version 20.50.3: Mar 16, 2021 Assignments database table renamed. (307241 lines)
|
||||||
|
1 change necessary in database:
|
||||||
|
RENAME TABLE assignments TO asg_assignments;
|
||||||
|
|
||||||
Version 20.50.2: Mar 15, 2021 Global announcements database table renamed. (307166 lines)
|
Version 20.50.2: Mar 15, 2021 Global announcements database table renamed. (307166 lines)
|
||||||
1 change necessary in database:
|
1 change necessary in database:
|
||||||
RENAME TABLE announcements TO ann_announcements;
|
RENAME TABLE announcements TO ann_announcements;
|
||||||
|
|
|
@ -214,25 +214,9 @@ mysql> DESCRIBE ann_seen;
|
||||||
"UsrCod INT NOT NULL,"
|
"UsrCod INT NOT NULL,"
|
||||||
"UNIQUE INDEX(AnnCod,UsrCod))");
|
"UNIQUE INDEX(AnnCod,UsrCod))");
|
||||||
|
|
||||||
/***** Table asg_grp *****/
|
/***** Table asg_assignments *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE asg_grp;
|
mysql> DESCRIBE asg_assignments;
|
||||||
+--------+---------+------+-----+---------+-------+
|
|
||||||
| Field | Type | Null | Key | Default | Extra |
|
|
||||||
+--------+---------+------+-----+---------+-------+
|
|
||||||
| AsgCod | int(11) | NO | PRI | NULL | |
|
|
||||||
| GrpCod | int(11) | NO | PRI | NULL | |
|
|
||||||
+--------+---------+------+-----+---------+-------+
|
|
||||||
2 rows in set (0.00 sec)
|
|
||||||
*/
|
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS asg_grp ("
|
|
||||||
"AsgCod INT NOT NULL,"
|
|
||||||
"GrpCod INT NOT NULL,"
|
|
||||||
"UNIQUE INDEX(AsgCod,GrpCod))");
|
|
||||||
|
|
||||||
/***** Table assignments *****/
|
|
||||||
/*
|
|
||||||
mysql> DESCRIBE assignments;
|
|
||||||
+-----------+----------------+------+-----+---------+----------------+
|
+-----------+----------------+------+-----+---------+----------------+
|
||||||
| Field | Type | Null | Key | Default | Extra |
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
+-----------+----------------+------+-----+---------+----------------+
|
+-----------+----------------+------+-----+---------+----------------+
|
||||||
|
@ -249,7 +233,7 @@ mysql> DESCRIBE assignments;
|
||||||
+-----------+----------------+------+-----+---------+----------------+
|
+-----------+----------------+------+-----+---------+----------------+
|
||||||
10 rows in set (0,00 sec)
|
10 rows in set (0,00 sec)
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS assignments ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS asg_assignments ("
|
||||||
"AsgCod INT NOT NULL AUTO_INCREMENT,"
|
"AsgCod INT NOT NULL AUTO_INCREMENT,"
|
||||||
"CrsCod INT NOT NULL DEFAULT -1,"
|
"CrsCod INT NOT NULL DEFAULT -1,"
|
||||||
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||||
|
@ -263,6 +247,22 @@ mysql> DESCRIBE assignments;
|
||||||
"UNIQUE INDEX(AsgCod),"
|
"UNIQUE INDEX(AsgCod),"
|
||||||
"INDEX(CrsCod,Hidden))");
|
"INDEX(CrsCod,Hidden))");
|
||||||
|
|
||||||
|
/***** Table asg_grp *****/
|
||||||
|
/*
|
||||||
|
mysql> DESCRIBE asg_grp;
|
||||||
|
+--------+---------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+--------+---------+------+-----+---------+-------+
|
||||||
|
| AsgCod | int(11) | NO | PRI | NULL | |
|
||||||
|
| GrpCod | int(11) | NO | PRI | NULL | |
|
||||||
|
+--------+---------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.00 sec)
|
||||||
|
*/
|
||||||
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS asg_grp ("
|
||||||
|
"AsgCod INT NOT NULL,"
|
||||||
|
"GrpCod INT NOT NULL,"
|
||||||
|
"UNIQUE INDEX(AsgCod,GrpCod))");
|
||||||
|
|
||||||
/***** Table att_events *****/
|
/***** Table att_events *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE att_events;
|
mysql> DESCRIBE att_events;
|
||||||
|
|
|
@ -2729,12 +2729,22 @@ static void Brw_CreateFoldersAssignmentsIfNotExist (long ZoneUsrCod)
|
||||||
|
|
||||||
/***** Get assignment folders from database *****/
|
/***** Get assignment folders from database *****/
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get folders of assignments",
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get folders of assignments",
|
||||||
"SELECT Folder FROM assignments"
|
"SELECT Folder" // row[0]
|
||||||
" WHERE CrsCod=%ld AND Hidden='N' AND Folder<>''"
|
" FROM asg_assignments"
|
||||||
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
" WHERE CrsCod=%ld"
|
||||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
" AND Hidden='N'"
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld"
|
" AND Folder<>''"
|
||||||
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod))",
|
" AND ("
|
||||||
|
"AsgCod NOT IN"
|
||||||
|
" (SELECT AsgCod FROM asg_grp)"
|
||||||
|
" OR "
|
||||||
|
"AsgCod IN"
|
||||||
|
" (SELECT asg_grp.AsgCod"
|
||||||
|
" FROM asg_grp,"
|
||||||
|
"crs_grp_usr"
|
||||||
|
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||||
|
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod)"
|
||||||
|
")",
|
||||||
Gbl.Hierarchy.Crs.CrsCod,ZoneUsrCod);
|
Gbl.Hierarchy.Crs.CrsCod,ZoneUsrCod);
|
||||||
|
|
||||||
/***** Create one folder for each assignment *****/
|
/***** Create one folder for each assignment *****/
|
||||||
|
|
|
@ -1230,19 +1230,23 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
|
||||||
// Cases 1 and 2 are mutually exclusive, so the union returns the case 1 or 2
|
// Cases 1 and 2 are mutually exclusive, so the union returns the case 1 or 2
|
||||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
|
||||||
" to be notified",
|
" to be notified",
|
||||||
"(SELECT crs_usr.UsrCod"
|
"(SELECT crs_usr.UsrCod" // row[0]
|
||||||
" FROM assignments,crs_usr"
|
" FROM asg_assignments,"
|
||||||
" WHERE assignments.AsgCod=%ld"
|
"crs_usr"
|
||||||
" AND assignments.AsgCod NOT IN"
|
" WHERE asg_assignments.AsgCod=%ld"
|
||||||
" (SELECT AsgCod FROM asg_grp WHERE AsgCod=%ld)"
|
" AND asg_assignments.AsgCod NOT IN"
|
||||||
" AND assignments.CrsCod=crs_usr.CrsCod"
|
" (SELECT AsgCod"
|
||||||
" AND crs_usr.UsrCod<>%ld)"
|
" FROM asg_grp"
|
||||||
|
" WHERE AsgCod=%ld)"
|
||||||
|
" AND asg_assignments.CrsCod=crs_usr.CrsCod"
|
||||||
|
" AND crs_usr.UsrCod<>%ld)"
|
||||||
" UNION "
|
" UNION "
|
||||||
"(SELECT DISTINCT crs_grp_usr.UsrCod"
|
"(SELECT DISTINCT crs_grp_usr.UsrCod"
|
||||||
" FROM asg_grp,crs_grp_usr"
|
" FROM asg_grp,"
|
||||||
" WHERE asg_grp.AsgCod=%ld"
|
"crs_grp_usr"
|
||||||
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
|
" WHERE asg_grp.AsgCod=%ld"
|
||||||
" AND crs_grp_usr.UsrCod<>%ld)",
|
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
|
||||||
|
" AND crs_grp_usr.UsrCod<>%ld)",
|
||||||
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
|
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
|
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user