Version 17.13

This commit is contained in:
Antonio Cañas Vargas 2017-10-02 02:19:14 +02:00
parent 6ab6a70383
commit 58f0b2c660
5 changed files with 144 additions and 69 deletions

View File

@ -946,6 +946,7 @@ CREATE TABLE IF NOT EXISTS projects (
DptCod INT NOT NULL DEFAULT -1, DptCod INT NOT NULL DEFAULT -1,
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N', Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N', Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
NumStds INT NOT NULL DEFAULT 1,
Status ENUM('new','reproposed') NOT NULL DEFAULT 'new', Status ENUM('new','reproposed') NOT NULL DEFAULT 'new',
StartTime DATETIME NOT NULL, StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL, EndTime DATETIME NOT NULL,

View File

@ -252,13 +252,17 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.13 (2017-10-02)" #define Log_PLATFORM_VERSION "SWAD 17.14 (2017-10-02)"
#define CSS_FILE "swad17.0.css" #define CSS_FILE "swad17.0.css"
#define JS_FILE "swad17.13.js" #define JS_FILE "swad17.13.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 17.14: Oct 02, 2017 New field number of students in projects. (231937 lines)
1 change necessary in database:
ALTER TABLE projects ADD COLUMN NumStds INT NOT NULL DEFAULT 1 AFTER Preassigned;
Version 17.13: Oct 02, 2017 New field status in projects. Version 17.13: Oct 02, 2017 New field status in projects.
Fixed bug in hidden projects. (231867 lines) Fixed bug in hidden projects. (231867 lines)
1 change necessary in database: 1 change necessary in database:

View File

@ -2014,6 +2014,7 @@ mysql> DESCRIBE projects;
| DptCod | int(11) | NO | | -1 | | | DptCod | int(11) | NO | | -1 | |
| Hidden | enum('N','Y') | NO | | N | | | Hidden | enum('N','Y') | NO | | N | |
| Preassigned | enum('N','Y') | NO | | N | | | Preassigned | enum('N','Y') | NO | | N | |
| NumStds | int(11) | NO | | 1 | |
| Status | enum('new','reproposed') | NO | | new | | | Status | enum('new','reproposed') | NO | | new | |
| StartTime | datetime | NO | | NULL | | | StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | | | EndTime | datetime | NO | | NULL | |
@ -2023,7 +2024,7 @@ mysql> DESCRIBE projects;
| Materials | text | NO | | NULL | | | Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | | | URL | varchar(255) | NO | | NULL | |
+-------------+--------------------------+------+-----+---------+----------------+ +-------------+--------------------------+------+-----+---------+----------------+
13 rows in set (0,00 sec) 14 rows in set (0,00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects ("
"PrjCod INT NOT NULL AUTO_INCREMENT," "PrjCod INT NOT NULL AUTO_INCREMENT,"
@ -2031,6 +2032,7 @@ mysql> DESCRIBE projects;
"DptCod INT NOT NULL DEFAULT -1," "DptCod INT NOT NULL DEFAULT -1,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N'," "Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N'," "Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
"NumStds INT NOT NULL DEFAULT 1,"
"Status ENUM('new','reproposed') NOT NULL DEFAULT 'new'," "Status ENUM('new','reproposed') NOT NULL DEFAULT 'new',"
"StartTime DATETIME NOT NULL," "StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL," "EndTime DATETIME NOT NULL,"

View File

@ -419,8 +419,9 @@ static void Prj_ShowTableAllProjectsHead (void)
{ {
extern const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS]; extern const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS];
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_Status; extern const char *Txt_Number_of_students;
extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT]; extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_Status;
extern const char *Txt_Description; extern const char *Txt_Description;
extern const char *Txt_Required_knowledge; extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials; extern const char *Txt_Required_materials;
@ -436,11 +437,10 @@ static void Prj_ShowTableAllProjectsHead (void)
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>",
Txt_PROJECT_ORDER[Order]); Txt_PROJECT_ORDER[Order]);
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>"
Txt_Preassigned_QUESTION); "<th class=\"LEFT_TOP DAT_N\">%s</th>",
Txt_Preassigned_QUESTION,
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", Txt_Number_of_students);
Txt_Status);
for (NumRoleToShow = 0; for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow < Brw_NUM_ROLES_TO_SHOW;
@ -448,13 +448,15 @@ static void Prj_ShowTableAllProjectsHead (void)
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>",
Txt_PROJECT_ROLES_PLURAL_Abc[Prj_RolesToShow[NumRoleToShow]]); Txt_PROJECT_ROLES_PLURAL_Abc[Prj_RolesToShow[NumRoleToShow]]);
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>"
Txt_Description); "<th class=\"LEFT_TOP DAT_N\">%s</th>"
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", "<th class=\"LEFT_TOP DAT_N\">%s</th>"
Txt_Required_knowledge); "<th class=\"LEFT_TOP DAT_N\">%s</th>"
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", "<th class=\"LEFT_TOP DAT_N\">%s</th>",
Txt_Required_materials); Txt_Status,
fprintf (Gbl.F.Out,"<th class=\"LEFT_TOP DAT_N\">%s</th>", Txt_Description,
Txt_Required_knowledge,
Txt_Required_materials,
Txt_URL); Txt_URL);
fprintf (Gbl.F.Out,"</tr>"); fprintf (Gbl.F.Out,"</tr>");
@ -590,6 +592,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_Yes; extern const char *Txt_Yes;
extern const char *Txt_No; extern const char *Txt_No;
extern const char *Txt_Number_of_students;
extern const char *Txt_See_more; extern const char *Txt_See_more;
extern const char *Txt_See_less; extern const char *Txt_See_less;
extern const char *Txt_Status; extern const char *Txt_Status;
@ -667,9 +670,6 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
/* Department */ /* Department */
Prj_ShowOneProjectDepartment (Prj,ProjectView); Prj_ShowOneProjectDepartment (Prj,ProjectView);
/***** Project members *****/
Prj_ShowOneProjectMembers (Prj,ProjectView);
/***** Preassigned? *****/ /***** Preassigned? *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"3\" class=\"RIGHT_TOP"); "<td colspan=\"3\" class=\"RIGHT_TOP");
@ -693,6 +693,31 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : (Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
Txt_No); Txt_No);
/***** Number of students *****/
fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"3\" class=\"RIGHT_TOP");
if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out," %s\">"
"%s:"
"</td>"
"<td colspan=\"2\" class=\"LEFT_TOP",
Prj->Hidden ? "ASG_LABEL_LIGHT" :
"ASG_LABEL",
Txt_Number_of_students);
if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out," %s\">"
"%u"
"</td>"
"</tr>",
Prj->Hidden ? "DAT_LIGHT" :
"DAT",
Prj->NumStds);
/***** Project members *****/
Prj_ShowOneProjectMembers (Prj,ProjectView);
/***** Link to show hidden info *****/ /***** Link to show hidden info *****/
if (ProjectView == Prj_LIST_PROJECTS) if (ProjectView == Prj_LIST_PROJECTS)
{ {
@ -782,10 +807,6 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
extern const char *Txt_Today; extern const char *Txt_Today;
extern const char *Txt_Yes; extern const char *Txt_Yes;
extern const char *Txt_No; extern const char *Txt_No;
extern const char *Txt_Description;
extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials;
extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS];
unsigned NumRoleToShow; unsigned NumRoleToShow;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
@ -852,6 +873,21 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : (Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
Txt_No); Txt_No);
/***** Number of students *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">"
"%u"
"</td>",
Gbl.RowEvenOdd,
Prj->Hidden ? "DAT_LIGHT" :
"DAT",
Prj->NumStds);
/***** Project members *****/
for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW;
NumRoleToShow++)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
/***** Status *****/ /***** Status *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">"
"%s" "%s"
@ -861,12 +897,6 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
"DAT", "DAT",
Txt_PROJECT_STATUS[Prj->Status]); Txt_PROJECT_STATUS[Prj->Status]);
/***** Project members *****/
for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW;
NumRoleToShow++)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
/***** Write rows of data of this project *****/ /***** Write rows of data of this project *****/
/* Description of the project */ /* Description of the project */
Prj_ShowTableAllProjectsTxtField (Prj,Prj->Description); Prj_ShowTableAllProjectsTxtField (Prj,Prj->Description);
@ -1855,7 +1885,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
if (Prj->PrjCod > 0) if (Prj->PrjCod > 0)
{ {
/***** Build query *****/ /***** Build query *****/
sprintf (Query,"SELECT PrjCod,DptCod,Hidden,Preassigned,Status," sprintf (Query,"SELECT PrjCod,DptCod,Hidden,Preassigned,NumStds,Status,"
"UNIX_TIMESTAMP(StartTime)," "UNIX_TIMESTAMP(StartTime),"
"UNIX_TIMESTAMP(EndTime)," "UNIX_TIMESTAMP(EndTime),"
"NOW() BETWEEN StartTime AND EndTime," "NOW() BETWEEN StartTime AND EndTime,"
@ -1868,15 +1898,16 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
row[ 1]: DptCod row[ 1]: DptCod
row[ 2]: Hidden row[ 2]: Hidden
row[ 3]: Preassigned row[ 3]: Preassigned
row[ 4]: Status row[ 4]: NumStds
row[ 5]: UNIX_TIMESTAMP(StartTime) row[ 5]: Status
row[ 6]: UNIX_TIMESTAMP(EndTime) row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: NOW() BETWEEN StartTime AND EndTime row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: Title row[ 8]: NOW() BETWEEN StartTime AND EndTime
row[ 9]: Description row[ 9]: Title
row[10]: Knowledge row[10]: Description
row[11]: Materials row[11]: Knowledge
row[12]: URL row[12]: Materials
row[13]: URL
*/ */
/***** Get data of project *****/ /***** Get data of project *****/
@ -1898,6 +1929,7 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
long NumLong;
Prj_Status_t Status; Prj_Status_t Status;
/***** Clear all project data *****/ /***** Clear all project data *****/
@ -1913,15 +1945,16 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
row[ 1]: DptCod row[ 1]: DptCod
row[ 2]: Hidden row[ 2]: Hidden
row[ 3]: Preassigned row[ 3]: Preassigned
row[ 4]: Status row[ 4]: NumStds
row[ 5]: UNIX_TIMESTAMP(StartTime) row[ 5]: Status
row[ 6]: UNIX_TIMESTAMP(EndTime) row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: NOW() BETWEEN StartTime AND EndTime row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: Title row[ 8]: NOW() BETWEEN StartTime AND EndTime
row[ 9]: Description row[ 9]: Title
row[10]: Knowledge row[10]: Description
row[11]: Materials row[11]: Knowledge
row[12]: URL row[12]: Materials
row[13]: URL
*/ */
/* Get code of the project (row[0]) */ /* Get code of the project (row[0]) */
@ -1937,44 +1970,51 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
Prj->Preassigned = (row[3][0] == 'Y') ? Prj_PREASSIGNED : Prj->Preassigned = (row[3][0] == 'Y') ? Prj_PREASSIGNED :
Prj_NOT_PREASSIGNED; Prj_NOT_PREASSIGNED;
/* Get project status (row[4]) */ /* Get if project is preassigned or not (row[4]) */
NumLong = Str_ConvertStrCodToLongCod (row[4]);
if (NumLong >= 0)
Prj->NumStds = (unsigned) NumLong;
else
Prj->NumStds = 1;
/* Get project status (row[5]) */
Prj->Status = Prj_STATUS_DEFAULT; Prj->Status = Prj_STATUS_DEFAULT;
for (Status = (Prj_Status_t) 0; for (Status = (Prj_Status_t) 0;
Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1); Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1);
Status++) Status++)
if (!strcmp (Prj_Status_DB[Status],row[4])) if (!strcmp (Prj_Status_DB[Status],row[5]))
{ {
Prj->Status = Status; Prj->Status = Status;
break; break;
} }
/* Get start date (row[5] holds the start UTC time) */ /* Get start date (row[6] holds the start UTC time) */
Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[5]); Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[6]);
/* Get end date (row[6] holds the end UTC time) */ /* Get end date (row[7] holds the end UTC time) */
Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[6]); Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[7]);
/* Get whether the project is open or closed (row[7]) */ /* Get whether the project is open or closed (row[8]) */
Prj->Open = (row[7][0] == '1'); Prj->Open = (row[8][0] == '1');
/* Get the title of the project (row[8]) */ /* Get the title of the project (row[9]) */
Str_Copy (Prj->Title,row[8], Str_Copy (Prj->Title,row[9],
Prj_MAX_BYTES_PROJECT_TITLE); Prj_MAX_BYTES_PROJECT_TITLE);
/* Get the description of the project (row[9]) */ /* Get the description of the project (row[10]) */
Str_Copy (Prj->Description,row[9], Str_Copy (Prj->Description,row[10],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the required knowledge for the project (row[10]) */ /* Get the required knowledge for the project (row[11]) */
Str_Copy (Prj->Knowledge,row[10], Str_Copy (Prj->Knowledge,row[11],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the required materials for the project (row[11]) */ /* Get the required materials for the project (row[12]) */
Str_Copy (Prj->Materials,row[11], Str_Copy (Prj->Materials,row[12],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the URL of the project (row[12]) */ /* Get the URL of the project (row[13]) */
Str_Copy (Prj->URL,row[12], Str_Copy (Prj->URL,row[13],
Cns_MAX_BYTES_WWW); Cns_MAX_BYTES_WWW);
} }
@ -1992,6 +2032,7 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->PrjCod = -1L; Prj->PrjCod = -1L;
Prj->Hidden = false; Prj->Hidden = false;
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT; Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
Prj->NumStds = 1;
Prj->Status = Prj_STATUS_DEFAULT; Prj->Status = Prj_STATUS_DEFAULT;
Prj->TimeUTC[Dat_START_TIME] = Prj->TimeUTC[Dat_START_TIME] =
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0; Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
@ -2294,6 +2335,7 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Department; extern const char *Txt_Department;
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_Number_of_students;
extern const char *Txt_Status; extern const char *Txt_Status;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS];
extern const char *Txt_Description; extern const char *Txt_Description;
@ -2402,6 +2444,20 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
"</td>" "</td>"
"</tr>"); "</tr>");
/* Number of students */
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">"
"<input type=\"number\" name=\"NumStds\""
" min=\"0\" value=\"%u\" />"
"</td>"
"</tr>",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Number_of_students,
Prj->NumStds);
/* Status */ /* Status */
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">" "<td class=\"%s RIGHT_MIDDLE\">"
@ -2586,6 +2642,13 @@ void Prj_RecFormProject (void)
Prj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED : Prj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED :
Prj_NOT_PREASSIGNED; Prj_NOT_PREASSIGNED;
/* Get number of students */
Prj.NumStds = (unsigned)
Par_GetParToUnsignedLong ("NumStds",
0,
UINT_MAX,
1);
/* Get status */ /* Get status */
Prj.Status = (Prj_Status_t) Prj.Status = (Prj_Status_t)
Par_GetParToUnsignedLong ("Status", Par_GetParToUnsignedLong ("Status",
@ -2653,17 +2716,19 @@ void Prj_RecFormProject (void)
static void Prj_CreateProject (struct Project *Prj) static void Prj_CreateProject (struct Project *Prj)
{ {
char Query[1024 + char Query[2048 +
Prj_MAX_BYTES_PROJECT_TITLE + Prj_MAX_BYTES_PROJECT_TITLE +
Cns_MAX_BYTES_TEXT*3 + Cns_MAX_BYTES_TEXT*3 +
Cns_MAX_BYTES_WWW]; Cns_MAX_BYTES_WWW];
/***** Create a new project *****/ /***** Create a new project *****/
sprintf (Query,"INSERT INTO projects" sprintf (Query,"INSERT INTO projects"
" (CrsCod,DptCod,Hidden,Preassigned,Status,StartTime,EndTime," " (CrsCod,DptCod,Hidden,Preassigned,NumStds,Status,"
"StartTime,EndTime,"
"Title,Description,Knowledge,Materials,URL)" "Title,Description,Knowledge,Materials,URL)"
" VALUES" " VALUES"
" (%ld,%ld,'%c','%c','%s',FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld)," " (%ld,%ld,'%c','%c',%u,'%s',"
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
"'%s','%s','%s','%s','%s')", "'%s','%s','%s','%s','%s')",
Gbl.CurrentCrs.Crs.CrsCod, Gbl.CurrentCrs.Crs.CrsCod,
Prj->DptCod, Prj->DptCod,
@ -2671,6 +2736,7 @@ static void Prj_CreateProject (struct Project *Prj)
'N', 'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds,
Prj_Status_DB[Prj->Status], Prj_Status_DB[Prj->Status],
Prj->TimeUTC[Dat_START_TIME], Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ], Prj->TimeUTC[Dat_END_TIME ],
@ -2705,7 +2771,7 @@ static void Prj_UpdateProject (struct Project *Prj)
/***** Update the data of the project *****/ /***** Update the data of the project *****/
sprintf (Query,"UPDATE projects SET " sprintf (Query,"UPDATE projects SET "
"DptCod=%ld,Hidden='%c',Preassigned='%c',Status='%s'," "DptCod=%ld,Hidden='%c',Preassigned='%c',NumStds=%u,Status='%s',"
"StartTime=FROM_UNIXTIME(%ld)," "StartTime=FROM_UNIXTIME(%ld),"
"EndTime=FROM_UNIXTIME(%ld)," "EndTime=FROM_UNIXTIME(%ld),"
"Title='%s'," "Title='%s',"
@ -2716,6 +2782,7 @@ static void Prj_UpdateProject (struct Project *Prj)
'N', 'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds,
Prj_Status_DB[Prj->Status], Prj_Status_DB[Prj->Status],
Prj->TimeUTC[Dat_START_TIME], Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ], Prj->TimeUTC[Dat_END_TIME ],

View File

@ -71,6 +71,7 @@ struct Project
long PrjCod; long PrjCod;
bool Hidden; bool Hidden;
Prj_Preassigned_t Preassigned; Prj_Preassigned_t Preassigned;
unsigned NumStds;
Prj_Status_t Status; Prj_Status_t Status;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open; bool Open;