mirror of https://github.com/acanas/swad-core.git
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,
|
||||
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 (
|
||||
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 (
|
||||
CREATE TABLE IF NOT EXISTS asg_assignments (
|
||||
AsgCod INT NOT NULL AUTO_INCREMENT,
|
||||
CrsCod INT NOT NULL DEFAULT -1,
|
||||
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||
|
@ -81,6 +74,13 @@ CREATE TABLE IF NOT EXISTS assignments (
|
|||
UNIQUE INDEX(AsgCod),
|
||||
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
|
||||
--
|
||||
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)
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||
"SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" 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))"
|
||||
" AND ("
|
||||
// Assignment is for the whole course
|
||||
"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",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
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
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||
"SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" ORDER BY %s",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
|
@ -765,9 +776,11 @@ void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg)
|
|||
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
||||
"Title," // row[6]
|
||||
"Folder" // row[7]
|
||||
" FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg->AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
" FROM asg_assignments"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
Asg->AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** Get data of assignment *****/
|
||||
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
||||
|
@ -801,9 +814,11 @@ void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg)
|
|||
"NOW() BETWEEN StartTime AND EndTime," // row[5]
|
||||
"Title," // row[6]
|
||||
"Folder" // row[7]
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
||||
Gbl.Hierarchy.Crs.CrsCod,Asg->Folder);
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld"
|
||||
" AND Folder='%s'",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Asg->Folder);
|
||||
|
||||
/***** Get data of assignment *****/
|
||||
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 *****/
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text",
|
||||
"SELECT Txt FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
"SELECT Txt" // row[0]
|
||||
" FROM asg_assignments"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** The result of the query must have one row or none *****/
|
||||
if (NumRows == 1)
|
||||
|
@ -964,7 +982,9 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
|
||||
/***** Build query *****/
|
||||
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",
|
||||
AsgCod);
|
||||
|
||||
|
@ -1082,8 +1102,11 @@ void Asg_RemoveAssignment (void)
|
|||
|
||||
/***** Remove assignment *****/
|
||||
DB_QueryDELETE ("can not remove assignment",
|
||||
"DELETE FROM assignments WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
"DELETE FROM asg_assignments"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
Asg.AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** Mark possible notifications as removed *****/
|
||||
Ntf_MarkNotifAsRemoved (Ntf_EVENT_ASSIGNMENT,Asg.AsgCod);
|
||||
|
@ -1122,9 +1145,12 @@ void Asg_HideAssignment (void)
|
|||
|
||||
/***** Hide assignment *****/
|
||||
DB_QueryUPDATE ("can not hide assignment",
|
||||
"UPDATE assignments SET Hidden='Y'"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
"UPDATE asg_assignments"
|
||||
" SET Hidden='Y'"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
Asg.AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** Show all assignments again *****/
|
||||
Asg_ShowAllAssignments (&Assignments);
|
||||
|
@ -1156,9 +1182,12 @@ void Asg_ShowAssignment (void)
|
|||
|
||||
/***** Hide assignment *****/
|
||||
DB_QueryUPDATE ("can not show assignment",
|
||||
"UPDATE assignments SET Hidden='N'"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg.AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
"UPDATE asg_assignments"
|
||||
" SET Hidden='N'"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
Asg.AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** Show all assignments again *****/
|
||||
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 *****/
|
||||
return (DB_QueryCOUNT ("can not get similar assignments",
|
||||
"SELECT COUNT(*) FROM assignments"
|
||||
"SELECT COUNT(*)"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld"
|
||||
" AND %s='%s' AND AsgCod<>%ld",
|
||||
" AND %s='%s' AND AsgCod<>%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Field,Value,AsgCod) != 0);
|
||||
}
|
||||
|
@ -1572,11 +1602,12 @@ void Asg_ReceiveFormAssignment (void)
|
|||
static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigned NumUsrsToBeNotifiedByEMail)
|
||||
{
|
||||
/***** Update number of users notified *****/
|
||||
DB_QueryUPDATE ("can not update the number of notifications"
|
||||
" of an assignment",
|
||||
"UPDATE assignments SET NumNotif=NumNotif+%u"
|
||||
DB_QueryUPDATE ("can not update the number of notifs. of an assignment",
|
||||
"UPDATE asg_ssignments"
|
||||
" SET NumNotif=NumNotif+%u"
|
||||
" 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 *****/
|
||||
Asg->AsgCod =
|
||||
DB_QueryINSERTandReturnCode ("can not create new assignment",
|
||||
"INSERT INTO assignments"
|
||||
"INSERT INTO asg_assignments"
|
||||
" (CrsCod,UsrCod,StartTime,EndTime,Title,Folder,Txt)"
|
||||
" VALUES"
|
||||
" (%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 *****/
|
||||
DB_QueryUPDATE ("can not update assignment",
|
||||
"UPDATE assignments SET "
|
||||
"StartTime=FROM_UNIXTIME(%ld),"
|
||||
"EndTime=FROM_UNIXTIME(%ld),"
|
||||
"Title='%s',Folder='%s',Txt='%s'"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
"UPDATE asg_assignments"
|
||||
" SET StartTime=FROM_UNIXTIME(%ld),"
|
||||
"EndTime=FROM_UNIXTIME(%ld),"
|
||||
"Title='%s',"
|
||||
"Folder='%s',"
|
||||
"Txt='%s'"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND CrsCod=%ld",
|
||||
Asg->TimeUTC[Dat_START_TIME],
|
||||
Asg->TimeUTC[Dat_END_TIME ],
|
||||
Asg->Title,
|
||||
Asg->Folder,
|
||||
Txt,
|
||||
Asg->AsgCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||
Asg->AsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
|
||||
/***** Update groups *****/
|
||||
/* Remove old groups */
|
||||
|
@ -1768,16 +1803,18 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
|
|||
void Asg_RemoveCrsAssignments (long CrsCod)
|
||||
{
|
||||
/***** Remove groups *****/
|
||||
DB_QueryDELETE ("can not remove all the groups associated"
|
||||
" to assignments of a course",
|
||||
"DELETE FROM asg_grp USING assignments,asg_grp"
|
||||
" WHERE assignments.CrsCod=%ld"
|
||||
" AND assignments.AsgCod=asg_grp.AsgCod",
|
||||
DB_QueryDELETE ("can not remove groups associated to assignments in a course",
|
||||
"DELETE FROM asg_grp"
|
||||
" USING asg_assignments,"
|
||||
"asg_grp"
|
||||
" WHERE asg_assignments.CrsCod=%ld"
|
||||
" AND asg_assignments.AsgCod=asg_grp.AsgCod",
|
||||
CrsCod);
|
||||
|
||||
/***** Remove assignments *****/
|
||||
DB_QueryDELETE ("can not remove all the assignments of a course",
|
||||
"DELETE FROM assignments WHERE CrsCod=%ld",
|
||||
DB_QueryDELETE ("can not remove all assignments in a course",
|
||||
"DELETE FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
CrsCod);
|
||||
}
|
||||
|
||||
|
@ -1795,19 +1832,22 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
|
|||
// Students and teachers can do assignments depending on groups
|
||||
/***** Get if I can do an assignment from database *****/
|
||||
return (DB_QueryCOUNT ("can not check if I can do an assignment",
|
||||
"SELECT COUNT(*) FROM assignments"
|
||||
"SELECT COUNT(*)"
|
||||
" FROM asg_assignments"
|
||||
" WHERE AsgCod=%ld"
|
||||
" AND "
|
||||
"("
|
||||
// Assignment is for the whole course
|
||||
"AsgCod NOT IN (SELECT AsgCod FROM asg_grp)"
|
||||
" OR "
|
||||
// Assignment is for specific 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)"
|
||||
")",
|
||||
" AND ("
|
||||
// Assignment is for the whole course
|
||||
"AsgCod NOT IN"
|
||||
" (SELECT AsgCod FROM asg_grp)"
|
||||
" 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)"
|
||||
")",
|
||||
AsgCod,Gbl.Usrs.Me.UsrDat.UsrCod) != 0);
|
||||
case Rol_SYS_ADM:
|
||||
return true;
|
||||
|
@ -1824,92 +1864,78 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
|
|||
|
||||
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 *****/
|
||||
switch (Scope)
|
||||
{
|
||||
case Hie_Lvl_SYS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod>0");
|
||||
case Hie_Lvl_CTY:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"courses,"
|
||||
"assignments"
|
||||
" 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.Status=0"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"courses,"
|
||||
"asg_assignments"
|
||||
" 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.Status=0"
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case Hie_Lvl_INS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"assignments"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"asg_assignments"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case Hie_Lvl_CTR:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"assignments"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"asg_assignments"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case Hie_Lvl_DEG:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM crs_courses,"
|
||||
"assignments"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
|
||||
" FROM crs_courses,"
|
||||
"asg_assignments"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
case Hie_Lvl_CRS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of courses with assignments",
|
||||
"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
default:
|
||||
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",
|
||||
"SELECT COUNT(*)," // row[0]
|
||||
"SUM(NumNotif)" // row[1]
|
||||
" FROM assignments"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
case Hie_Lvl_CTY:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||
"SELECT COUNT(*)," // row[0]
|
||||
"SUM(assignments.NumNotif)" // row[1]
|
||||
"SUM(asg_assignments.NumNotif)" // row[1]
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"assignments"
|
||||
"asg_assignments"
|
||||
" 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=assignments.CrsCod",
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
break;
|
||||
case Hie_Lvl_INS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||
"SELECT COUNT(*)," // row[0]
|
||||
"SUM(assignments.NumNotif)" // row[1]
|
||||
"SUM(asg_assignments.NumNotif)" // row[1]
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"assignments"
|
||||
"asg_assignments"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
break;
|
||||
case Hie_Lvl_CTR:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||
"SELECT COUNT(*),"
|
||||
"SUM(assignments.NumNotif)"
|
||||
"SUM(asg_assignments.NumNotif)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"assignments"
|
||||
"asg_assignments"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
break;
|
||||
case Hie_Lvl_DEG:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||
"SELECT COUNT(*),"
|
||||
"SUM(assignments.NumNotif)"
|
||||
"SUM(asg_assignments.NumNotif)"
|
||||
" FROM crs_courses,"
|
||||
"assignments"
|
||||
"asg_assignments"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=assignments.CrsCod",
|
||||
" AND crs_courses.CrsCod=asg_assignments.CrsCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
break;
|
||||
case Hie_Lvl_CRS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||
"SELECT COUNT(*),"
|
||||
"SUM(NumNotif)"
|
||||
" FROM assignments"
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
break;
|
||||
|
@ -2026,9 +2052,10 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
|
|||
unsigned Asg_GetNumAssignmentsInCrs (long CrsCod)
|
||||
{
|
||||
/***** Get number of assignments in a course from database *****/
|
||||
return
|
||||
(unsigned) DB_QueryCOUNT ("can not get number of assignments in course",
|
||||
"SELECT COUNT(*) FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
CrsCod);
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of assignments in course",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM asg_assignments"
|
||||
" 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.
|
||||
*/
|
||||
#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 JS_FILE "swad20.6.2.js"
|
||||
/*
|
||||
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)
|
||||
1 change necessary in database:
|
||||
RENAME TABLE announcements TO ann_announcements;
|
||||
|
|
|
@ -214,25 +214,9 @@ mysql> DESCRIBE ann_seen;
|
|||
"UsrCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(AnnCod,UsrCod))");
|
||||
|
||||
/***** Table asg_grp *****/
|
||||
/***** Table asg_assignments *****/
|
||||
/*
|
||||
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 assignments *****/
|
||||
/*
|
||||
mysql> DESCRIBE assignments;
|
||||
mysql> DESCRIBE asg_assignments;
|
||||
+-----------+----------------+------+-----+---------+----------------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+-----------+----------------+------+-----+---------+----------------+
|
||||
|
@ -249,7 +233,7 @@ mysql> DESCRIBE assignments;
|
|||
+-----------+----------------+------+-----+---------+----------------+
|
||||
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,"
|
||||
"CrsCod INT NOT NULL DEFAULT -1,"
|
||||
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||
|
@ -263,6 +247,22 @@ mysql> DESCRIBE assignments;
|
|||
"UNIQUE INDEX(AsgCod),"
|
||||
"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 *****/
|
||||
/*
|
||||
mysql> DESCRIBE att_events;
|
||||
|
|
|
@ -2729,12 +2729,22 @@ static void Brw_CreateFoldersAssignmentsIfNotExist (long ZoneUsrCod)
|
|||
|
||||
/***** Get assignment folders from database *****/
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get folders of assignments",
|
||||
"SELECT Folder FROM assignments"
|
||||
" WHERE CrsCod=%ld AND Hidden='N' AND Folder<>''"
|
||||
" 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))",
|
||||
"SELECT Folder" // row[0]
|
||||
" FROM asg_assignments"
|
||||
" WHERE CrsCod=%ld"
|
||||
" AND Hidden='N'"
|
||||
" AND Folder<>''"
|
||||
" 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);
|
||||
|
||||
/***** 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
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
|
||||
" to be notified",
|
||||
"(SELECT crs_usr.UsrCod"
|
||||
" FROM assignments,crs_usr"
|
||||
" WHERE assignments.AsgCod=%ld"
|
||||
" AND assignments.AsgCod NOT IN"
|
||||
" (SELECT AsgCod FROM asg_grp WHERE AsgCod=%ld)"
|
||||
" AND assignments.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod<>%ld)"
|
||||
"(SELECT crs_usr.UsrCod" // row[0]
|
||||
" FROM asg_assignments,"
|
||||
"crs_usr"
|
||||
" WHERE asg_assignments.AsgCod=%ld"
|
||||
" AND asg_assignments.AsgCod NOT IN"
|
||||
" (SELECT AsgCod"
|
||||
" FROM asg_grp"
|
||||
" WHERE AsgCod=%ld)"
|
||||
" AND asg_assignments.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod<>%ld)"
|
||||
" UNION "
|
||||
"(SELECT DISTINCT crs_grp_usr.UsrCod"
|
||||
" FROM asg_grp,crs_grp_usr"
|
||||
" WHERE asg_grp.AsgCod=%ld"
|
||||
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
|
||||
" AND crs_grp_usr.UsrCod<>%ld)",
|
||||
" FROM asg_grp,"
|
||||
"crs_grp_usr"
|
||||
" WHERE asg_grp.AsgCod=%ld"
|
||||
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
|
||||
" AND crs_grp_usr.UsrCod<>%ld)",
|
||||
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue