Version 20.51.18: Mar 19, 2021 Projects database table renamed.

This commit is contained in:
acanas 2021-03-19 01:23:17 +01:00
parent 5d03ffc421
commit d67a3c1e06
5 changed files with 214 additions and 183 deletions

View File

@ -1211,17 +1211,9 @@ CREATE TABLE IF NOT EXISTS prj_config (
Editable ENUM('N','Y') NOT NULL DEFAULT 'Y', Editable ENUM('N','Y') NOT NULL DEFAULT 'Y',
UNIQUE INDEX(CrsCod)); UNIQUE INDEX(CrsCod));
-- --
-- Table prj_usr: stores the users inside projects -- Table prj_projects: stores the projects proposed by the teachers to their students
-- --
CREATE TABLE IF NOT EXISTS prj_usr ( CREATE TABLE IF NOT EXISTS prj_projects (
PrjCod INT NOT NULL,
RoleInProject TINYINT NOT NULL DEFAULT 0,
UsrCod INT NOT NULL,
UNIQUE INDEX(PrjCod,RoleInProject,UsrCod));
--
-- Table projects: stores the projects proposed by the teachers to their students
--
CREATE TABLE IF NOT EXISTS projects (
PrjCod INT NOT NULL AUTO_INCREMENT, PrjCod INT NOT NULL AUTO_INCREMENT,
CrsCod INT NOT NULL DEFAULT -1, CrsCod INT NOT NULL DEFAULT -1,
DptCod INT NOT NULL DEFAULT -1, DptCod INT NOT NULL DEFAULT -1,
@ -1243,6 +1235,14 @@ CREATE TABLE IF NOT EXISTS projects (
INDEX(CrsCod,ModifTime), INDEX(CrsCod,ModifTime),
INDEX(CrsCod,DptCod)); INDEX(CrsCod,DptCod));
-- --
-- Table prj_usr: stores the users inside projects
--
CREATE TABLE IF NOT EXISTS prj_usr (
PrjCod INT NOT NULL,
RoleInProject TINYINT NOT NULL DEFAULT 0,
UsrCod INT NOT NULL,
UNIQUE INDEX(PrjCod,RoleInProject,UsrCod));
--
-- Table rooms: stores the rooms associated to each center -- Table rooms: stores the rooms associated to each center
-- --
CREATE TABLE IF NOT EXISTS rooms ( CREATE TABLE IF NOT EXISTS rooms (

View File

@ -600,13 +600,17 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.51.17 (2021-03-19)" #define Log_PLATFORM_VERSION "SWAD 20.51.18 (2021-03-19)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.51.18: Mar 19, 2021 Projects database table renamed. (307992 lines)
1 change necessary in database:
RENAME TABLE projects TO prj_projects;
Version 20.51.17: Mar 19, 2021 Mail domains database table renamed. (307992 lines) Version 20.51.17: Mar 19, 2021 Mail domains database table renamed. (307992 lines)
1 change necessary in database: 1 change necessary in database:
RENAME TABLE mail_domains TO ntf_mail_domains; RENAME TABLE mail_domains TO ntf_mail_domains;

View File

@ -2528,27 +2528,9 @@ mysql> DESCRIBE prj_config;
"Editable ENUM('N','Y') NOT NULL DEFAULT 'Y'," "Editable ENUM('N','Y') NOT NULL DEFAULT 'Y',"
"UNIQUE INDEX(CrsCod))"); "UNIQUE INDEX(CrsCod))");
/***** Table prj_usr *****/ /***** Table prj_projects *****/
/* /*
mysql> DESCRIBE prj_usr; mysql> DESCRIBE prj_projects;
+---------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| PrjCod | int(11) | NO | PRI | NULL | |
| RoleInProject | tinyint(4) | NO | PRI | 0 | |
| UsrCod | int(11) | NO | PRI | NULL | |
+---------------+------------+------+-----+---------+-------+
3 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_usr ("
"PrjCod INT NOT NULL,"
"RoleInProject TINYINT NOT NULL DEFAULT 0,"
"UsrCod INT NOT NULL,"
"UNIQUE INDEX(PrjCod,RoleInProject,UsrCod))");
/***** Table projects *****/
/*
mysql> DESCRIBE projects;
+-------------+-------------------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+-------------+-------------------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
@ -2570,7 +2552,7 @@ mysql> DESCRIBE projects;
+-------------+-------------------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
15 rows in set (0.00 sec) 15 rows in set (0.00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_projects ("
"PrjCod INT NOT NULL AUTO_INCREMENT," "PrjCod INT NOT NULL AUTO_INCREMENT,"
"CrsCod INT NOT NULL DEFAULT -1," "CrsCod INT NOT NULL DEFAULT -1,"
"DptCod INT NOT NULL DEFAULT -1," "DptCod INT NOT NULL DEFAULT -1,"
@ -2592,6 +2574,24 @@ mysql> DESCRIBE projects;
"INDEX(CrsCod,ModifTime)," "INDEX(CrsCod,ModifTime),"
"INDEX(CrsCod,DptCod))"); "INDEX(CrsCod,DptCod))");
/***** Table prj_usr *****/
/*
mysql> DESCRIBE prj_usr;
+---------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| PrjCod | int(11) | NO | PRI | NULL | |
| RoleInProject | tinyint(4) | NO | PRI | 0 | |
| UsrCod | int(11) | NO | PRI | NULL | |
+---------------+------------+------+-----+---------+-------+
3 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_usr ("
"PrjCod INT NOT NULL,"
"RoleInProject TINYINT NOT NULL DEFAULT 0,"
"UsrCod INT NOT NULL,"
"UNIQUE INDEX(PrjCod,RoleInProject,UsrCod))");
/***** Table rooms *****/ /***** Table rooms *****/
/* /*
mysql> DESCRIBE rooms; mysql> DESCRIBE rooms;

View File

@ -4382,7 +4382,9 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
CrsCod); CrsCod);
/***** Build subquery for projects *****/ /***** Build subquery for projects *****/
sprintf (SubqueryPrj,"(SELECT PrjCod FROM projects WHERE CrsCod=%ld)", sprintf (SubqueryPrj,"(SELECT PrjCod"
" FROM prj_projects"
" WHERE CrsCod=%ld)",
CrsCod); CrsCod);
/***** Remove format of files of marks *****/ /***** Remove format of files of marks *****/

View File

@ -1578,7 +1578,7 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults)
"NumStds," // row[1] = "NumStds," // row[1] =
"Title<>''," // row[2] = 0 / 1 "Title<>''," // row[2] = 0 / 1
"Description<>''" // row[3] = 0 / 1 "Description<>''" // row[3] = 0 / 1
" FROM projects" " FROM prj_projects"
" WHERE PrjCod=%ld", " WHERE PrjCod=%ld",
PrjCod)) // Project found... PrjCod)) // Project found...
{ {
@ -2823,19 +2823,19 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
char *DptCodSubQuery; char *DptCodSubQuery;
static const char *OrderBySubQuery[Prj_NUM_ORDERS] = static const char *OrderBySubQuery[Prj_NUM_ORDERS] =
{ {
[Prj_ORDER_START_TIME] = "projects.CreatTime DESC," [Prj_ORDER_START_TIME] = "prj_projects.CreatTime DESC,"
"projects.ModifTime DESC," "prj_projects.ModifTime DESC,"
"projects.Title", "prj_projects.Title",
[Prj_ORDER_END_TIME ] = "projects.ModifTime DESC," [Prj_ORDER_END_TIME ] = "prj_projects.ModifTime DESC,"
"projects.CreatTime DESC," "prj_projects.CreatTime DESC,"
"projects.Title", "prj_projects.Title",
[Prj_ORDER_TITLE ] = "projects.Title," [Prj_ORDER_TITLE ] = "prj_projects.Title,"
"projects.CreatTime DESC," "prj_projects.CreatTime DESC,"
"projects.ModifTime DESC", "prj_projects.ModifTime DESC",
[Prj_ORDER_DEPARTMENT] = "dpt_departments.FullName," [Prj_ORDER_DEPARTMENT] = "dpt_departments.FullName,"
"projects.CreatTime DESC," "prj_projects.CreatTime DESC,"
"projects.ModifTime DESC," "prj_projects.ModifTime DESC,"
"projects.Title", "prj_projects.Title",
}; };
MYSQL_RES *mysql_res = NULL; // Initialized to avoid freeing when not assigned MYSQL_RES *mysql_res = NULL; // Initialized to avoid freeing when not assigned
MYSQL_ROW row; MYSQL_ROW row;
@ -2861,11 +2861,11 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
switch (Projects->Filter.Assign) switch (Projects->Filter.Assign)
{ {
case (1 << Prj_ASSIGNED): // Assigned projects case (1 << Prj_ASSIGNED): // Assigned projects
if (asprintf (&PreNonSubQuery," AND projects.Assigned='Y'") < 0) if (asprintf (&PreNonSubQuery," AND prj_projects.Assigned='Y'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
case (1 << Prj_NONASSIG): // Non-assigned projects case (1 << Prj_NONASSIG): // Non-assigned projects
if (asprintf (&PreNonSubQuery," AND projects.Assigned='N'") < 0) if (asprintf (&PreNonSubQuery," AND prj_projects.Assigned='N'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
default: // All projects default: // All projects
@ -2878,7 +2878,7 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: // Students can view only visible projects case Rol_STD: // Students can view only visible projects
if (asprintf (&HidVisSubQuery," AND projects.Hidden='N'") < 0) if (asprintf (&HidVisSubQuery," AND prj_projects.Hidden='N'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
case Rol_NET: case Rol_NET:
@ -2887,11 +2887,11 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
switch (Projects->Filter.Hidden) switch (Projects->Filter.Hidden)
{ {
case (1 << Prj_HIDDEN): // Hidden projects case (1 << Prj_HIDDEN): // Hidden projects
if (asprintf (&HidVisSubQuery," AND projects.Hidden='Y'") < 0) if (asprintf (&HidVisSubQuery," AND prj_projects.Hidden='Y'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
case (1 << Prj_VISIBL): // Visible projects case (1 << Prj_VISIBL): // Visible projects
if (asprintf (&HidVisSubQuery," AND projects.Hidden='N'") < 0) if (asprintf (&HidVisSubQuery," AND prj_projects.Hidden='N'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
default: // All projects default: // All projects
@ -2908,7 +2908,7 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
/* Department subquery */ /* Department subquery */
if (Projects->Filter.DptCod >= 0) if (Projects->Filter.DptCod >= 0)
{ {
if (asprintf (&DptCodSubQuery," AND projects.DptCod=%ld", if (asprintf (&DptCodSubQuery," AND prj_projects.DptCod=%ld",
Projects->Filter.DptCod) < 0) Projects->Filter.DptCod) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
@ -2929,14 +2929,14 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
case Prj_ORDER_END_TIME: case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE: case Prj_ORDER_TITLE:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM projects," " FROM prj_projects,"
"prj_usr" "prj_usr"
" WHERE projects.CrsCod=%ld" " WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod" " AND prj_projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld" " AND prj_usr.UsrCod=%ld"
" GROUP BY projects.PrjCod" // To not repeat projects (DISTINCT can not be used) " GROUP BY prj_projects.PrjCod" // To not repeat projects (DISTINCT can not be used)
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
@ -2945,15 +2945,15 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
break; break;
case Prj_ORDER_DEPARTMENT: case Prj_ORDER_DEPARTMENT:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM prj_usr," " FROM prj_projects LEFT JOIN dpt_departments,"
"projects LEFT JOIN dpt_departments" "prj_usr"
" ON projects.DptCod=dpt_departments.DptCod" " ON prj_projects.DptCod=dpt_departments.DptCod"
" WHERE projects.CrsCod=%ld" " WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod" " AND prj_projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld" " AND prj_usr.UsrCod=%ld"
" GROUP BY projects.PrjCod" // To not repeat projects (DISTINCT can not be used) " GROUP BY prj_projects.PrjCod" // To not repeat projects (DISTINCT can not be used)
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
@ -2982,13 +2982,14 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
case Prj_ORDER_END_TIME: case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE: case Prj_ORDER_TITLE:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM projects,prj_usr" " FROM prj_projects,"
" WHERE projects.CrsCod=%ld" "prj_usr"
" WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod" " AND prj_projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod IN (%s)" " AND prj_usr.UsrCod IN (%s)"
" GROUP BY projects.PrjCod" // To not repeat projects (DISTINCT can not be used) " GROUP BY prj_projects.PrjCod" // To not repeat projects (DISTINCT can not be used)
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
@ -2997,15 +2998,15 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
break; break;
case Prj_ORDER_DEPARTMENT: case Prj_ORDER_DEPARTMENT:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM prj_usr," " FROM prj_projects LEFT JOIN dpt_departments,"
"projects LEFT JOIN dpt_departments" "prj_usr"
" ON projects.DptCod=dpt_departments.DptCod" " ON prj_projects.DptCod=dpt_departments.DptCod"
" WHERE projects.CrsCod=%ld" " WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod" " AND prj_projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod IN (%s)" " AND prj_usr.UsrCod IN (%s)"
" GROUP BY projects.PrjCod" // To not repeat projects (DISTINCT can not be used) " GROUP BY prj_projects.PrjCod" // To not repeat projects (DISTINCT can not be used)
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
@ -3031,9 +3032,9 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
case Prj_ORDER_END_TIME: case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE: case Prj_ORDER_TITLE:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM projects" " FROM prj_projects"
" WHERE projects.CrsCod=%ld" " WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -3042,10 +3043,10 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
break; break;
case Prj_ORDER_DEPARTMENT: case Prj_ORDER_DEPARTMENT:
NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", NumRows = DB_QuerySELECT (&mysql_res,"can not get projects",
"SELECT projects.PrjCod" "SELECT prj_projects.PrjCod"
" FROM projects LEFT JOIN dpt_departments" " FROM prj_projects LEFT JOIN dpt_departments"
" ON projects.DptCod=dpt_departments.DptCod" " ON prj_projects.DptCod=dpt_departments.DptCod"
" WHERE projects.CrsCod=%ld" " WHERE prj_projects.CrsCod=%ld"
"%s%s%s" "%s%s%s"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -3124,7 +3125,9 @@ long Prj_GetCourseOfProject (long PrjCod)
{ {
/***** Get course code from database *****/ /***** Get course code from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get project course", if (DB_QuerySELECT (&mysql_res,"can not get project course",
"SELECT CrsCod FROM projects WHERE PrjCod=%ld", "SELECT CrsCod" // row[0]
" FROM prj_projects"
" WHERE PrjCod=%ld",
PrjCod)) // Project found... PrjCod)) // Project found...
{ {
/* Get row */ /* Get row */
@ -3174,8 +3177,9 @@ void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj)
"Knowledge," // row[12] "Knowledge," // row[12]
"Materials," // row[13] "Materials," // row[13]
"URL" // row[14] "URL" // row[14]
" FROM projects" " FROM prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " WHERE PrjCod=%ld"
" AND CrsCod=%ld",
Prj->PrjCod, Prj->PrjCod,
Gbl.Hierarchy.Crs.CrsCod)) // Project found... Gbl.Hierarchy.Crs.CrsCod)) // Project found...
{ {
@ -3378,19 +3382,25 @@ void Prj_RemoveProject (void)
{ {
/***** Remove users in project *****/ /***** Remove users in project *****/
DB_QueryDELETE ("can not remove project", DB_QueryDELETE ("can not remove project",
"DELETE FROM prj_usr USING projects,prj_usr" "DELETE FROM prj_usr"
" WHERE projects.PrjCod=%ld AND projects.CrsCod=%ld" " USING prj_projects,"
"prj_usr"
" WHERE projects.PrjCod=%ld"
" AND projects.CrsCod=%ld"
" AND projects.PrjCod=prj_usr.PrjCod", " AND projects.PrjCod=prj_usr.PrjCod",
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); Prj.PrjCod,
Gbl.Hierarchy.Crs.CrsCod);
/***** Flush cache *****/ /***** Flush cache *****/
Prj_FlushCacheMyRolesInProject (); Prj_FlushCacheMyRolesInProject ();
/***** Remove project *****/ /***** Remove project *****/
DB_QueryDELETE ("can not remove project", DB_QueryDELETE ("can not remove project",
"DELETE FROM projects" "DELETE FROM prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " WHERE PrjCod=%ld"
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); " AND CrsCod=%ld",
Prj.PrjCod,
Gbl.Hierarchy.Crs.CrsCod);
/***** Remove information related to files in project *****/ /***** Remove information related to files in project *****/
Brw_RemovePrjFilesFromDB (Prj.PrjCod); Brw_RemovePrjFilesFromDB (Prj.PrjCod);
@ -3441,9 +3451,12 @@ void Prj_HideProject (void)
if (Prj_CheckIfICanEditProject (&Prj)) if (Prj_CheckIfICanEditProject (&Prj))
/***** Hide project *****/ /***** Hide project *****/
DB_QueryUPDATE ("can not hide project", DB_QueryUPDATE ("can not hide project",
"UPDATE projects SET Hidden='Y'" "UPDATE prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " SET Hidden='Y'"
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); " WHERE PrjCod=%ld"
" AND CrsCod=%ld",
Prj.PrjCod,
Gbl.Hierarchy.Crs.CrsCod);
else else
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -3480,9 +3493,12 @@ void Prj_UnhideProject (void)
if (Prj_CheckIfICanEditProject (&Prj)) if (Prj_CheckIfICanEditProject (&Prj))
/***** Show project *****/ /***** Show project *****/
DB_QueryUPDATE ("can not show project", DB_QueryUPDATE ("can not show project",
"UPDATE projects SET Hidden='N'" "UPDATE prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " SET Hidden='N'"
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); " WHERE PrjCod=%ld"
" AND CrsCod=%ld",
Prj.PrjCod,
Gbl.Hierarchy.Crs.CrsCod);
else else
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -3962,7 +3978,7 @@ static void Prj_CreateProject (struct Prj_Project *Prj)
/***** Create a new project *****/ /***** Create a new project *****/
Prj->PrjCod = Prj->PrjCod =
DB_QueryINSERTandReturnCode ("can not create new project", DB_QueryINSERTandReturnCode ("can not create new project",
"INSERT INTO projects" "INSERT INTO prj_projects"
" (CrsCod,DptCod,Hidden,Assigned,NumStds,Proposal," " (CrsCod,DptCod,Hidden,Assigned,NumStds,Proposal,"
"CreatTime,ModifTime," "CreatTime,ModifTime,"
"Title,Description,Knowledge,Materials,URL)" "Title,Description,Knowledge,Materials,URL)"
@ -4011,7 +4027,7 @@ static void Prj_UpdateProject (struct Prj_Project *Prj)
/***** Update the data of the project *****/ /***** Update the data of the project *****/
DB_QueryUPDATE ("can not update project", DB_QueryUPDATE ("can not update project",
"UPDATE projects" "UPDATE prj_projects"
" SET DptCod=%ld," " SET DptCod=%ld,"
"Hidden='%c'," "Hidden='%c',"
"Assigned='%c'," "Assigned='%c',"
@ -4023,7 +4039,8 @@ static void Prj_UpdateProject (struct Prj_Project *Prj)
"Knowledge='%s'," "Knowledge='%s',"
"Materials='%s'," "Materials='%s',"
"URL='%s'" "URL='%s'"
" WHERE PrjCod=%ld AND CrsCod=%ld", " WHERE PrjCod=%ld"
" AND CrsCod=%ld",
Prj->DptCod, Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' : Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N', 'N',
@ -4467,8 +4484,10 @@ void Prj_LockProjectEdition (void)
static void Prj_LockProjectEditionInDB (long PrjCod) static void Prj_LockProjectEditionInDB (long PrjCod)
{ {
DB_QueryUPDATE ("can not lock project edition", DB_QueryUPDATE ("can not lock project edition",
"UPDATE projects SET Locked='Y'" "UPDATE prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " SET Locked='Y'"
" WHERE PrjCod=%ld"
" AND CrsCod=%ld",
PrjCod,Gbl.Hierarchy.Crs.CrsCod); PrjCod,Gbl.Hierarchy.Crs.CrsCod);
} }
@ -4514,8 +4533,10 @@ void Prj_UnloProjectEdition (void)
static void Prj_UnlockProjectEditionInDB (long PrjCod) static void Prj_UnlockProjectEditionInDB (long PrjCod)
{ {
DB_QueryUPDATE ("can not lock project edition", DB_QueryUPDATE ("can not lock project edition",
"UPDATE projects SET Locked='N'" "UPDATE prj_projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " SET Locked='N'"
" WHERE PrjCod=%ld"
" AND CrsCod=%ld",
PrjCod,Gbl.Hierarchy.Crs.CrsCod); PrjCod,Gbl.Hierarchy.Crs.CrsCod);
} }
@ -4527,9 +4548,11 @@ void Prj_RemoveCrsProjects (long CrsCod)
{ {
/***** Remove users in projects of the course *****/ /***** Remove users in projects of the course *****/
DB_QueryDELETE ("can not remove all the projects of a course", DB_QueryDELETE ("can not remove all the projects of a course",
"DELETE FROM prj_usr USING projects,prj_usr" "DELETE FROM prj_usr"
" WHERE projects.CrsCod=%ld" " USING prj_projects,"
" AND projects.PrjCod=prj_usr.PrjCod", "prj_usr"
" WHERE prj_projects.CrsCod=%ld"
" AND prj_projects.PrjCod=prj_usr.PrjCod",
CrsCod); CrsCod);
/***** Flush cache *****/ /***** Flush cache *****/
@ -4542,7 +4565,8 @@ void Prj_RemoveCrsProjects (long CrsCod)
/***** Remove projects *****/ /***** Remove projects *****/
DB_QueryDELETE ("can not remove all the projects of a course", DB_QueryDELETE ("can not remove all the projects of a course",
"DELETE FROM projects WHERE CrsCod=%ld", "DELETE FROM prj_projects"
" WHERE CrsCod=%ld",
CrsCod); CrsCod);
} }
@ -4556,7 +4580,8 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
/***** Remove user from projects *****/ /***** Remove user from projects *****/
DB_QueryDELETE ("can not remove user from projects", DB_QueryDELETE ("can not remove user from projects",
"DELETE FROM prj_usr WHERE UsrCod=%ld", "DELETE FROM prj_usr"
" WHERE UsrCod=%ld",
UsrCod); UsrCod);
/***** Flush cache *****/ /***** Flush cache *****/
@ -4580,66 +4605,66 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM projects" " FROM prj_projects"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT projects.CrsCod)" "SELECT COUNT(DISTINCT prj_projects.CrsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS: case Hie_Lvl_INS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT projects.CrsCod)" "SELECT COUNT(DISTINCT prj_projects.CrsCod)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT projects.CrsCod)" "SELECT COUNT(DISTINCT prj_projects.CrsCod)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT projects.CrsCod)" "SELECT COUNT(DISTINCT prj_projects.CrsCod)"
" FROM crs_courses," " FROM crs_courses,"
"projects" "prj_projects"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with projects", DB_QueryCOUNT ("can not get number of courses with projects",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM projects" " FROM prj_projects"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
@ -4662,7 +4687,7 @@ unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of projects", DB_QueryCOUNT ("can not get number of projects",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM projects" " FROM prj_projects"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
@ -4673,12 +4698,12 @@ unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
@ -4688,11 +4713,11 @@ unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
@ -4701,10 +4726,10 @@ unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"projects" "prj_projects"
" 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=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
@ -4712,16 +4737,16 @@ unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
DB_QueryCOUNT ("can not get number of projects", DB_QueryCOUNT ("can not get number of projects",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM crs_courses," " FROM crs_courses,"
"projects" "prj_projects"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=projects.CrsCod", " AND crs_courses.CrsCod=prj_projects.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of projects", DB_QueryCOUNT ("can not get number of projects",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM projects" " FROM prj_projects"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;