From 986b7e6d1112e0eb021ad4804bf9423c339c80c0 Mon Sep 17 00:00:00 2001 From: acanas Date: Tue, 16 Mar 2021 00:58:21 +0100 Subject: [PATCH] Version 20.50.3: Mar 16, 2021 Assignments database table renamed. --- sql/swad.sql | 18 +-- swad_assignment.c | 323 ++++++++++++++++++++++++-------------------- swad_changelog.h | 6 +- swad_database.c | 38 +++--- swad_file_browser.c | 22 ++- swad_notification.c | 26 ++-- 6 files changed, 239 insertions(+), 194 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index d3437ef30..e687083c7 100644 --- a/sql/swad.sql +++ b/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 ( diff --git a/swad_assignment.c b/swad_assignment.c index 37b41ea47..635a2d1d7 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -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); } diff --git a/swad_changelog.h b/swad_changelog.h index ba23d7c47..e902ce7fb 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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; diff --git a/swad_database.c b/swad_database.c index 03dd632da..6141348a8 100644 --- a/swad_database.c +++ b/swad_database.c @@ -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; diff --git a/swad_file_browser.c b/swad_file_browser.c index 41ec7d88f..98d5836ba 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -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 *****/ diff --git a/swad_notification.c b/swad_notification.c index e318cad7f..011f57b06 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -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;