Version 17.3.9

This commit is contained in:
Antonio Cañas Vargas 2017-09-19 18:13:52 +02:00
parent 99890d6351
commit aa799cee5d
5 changed files with 54 additions and 71 deletions

View File

@ -945,7 +945,6 @@ CREATE TABLE IF NOT EXISTS projects (
CrsCod INT NOT NULL DEFAULT -1, CrsCod INT NOT NULL DEFAULT -1,
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N', Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N', Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
UsrCod INT NOT NULL,
StartTime DATETIME NOT NULL, StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL, EndTime DATETIME NOT NULL,
Title VARCHAR(2047) NOT NULL, Title VARCHAR(2047) NOT NULL,

View File

@ -252,14 +252,19 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.3.8 (2017-09-19)" #define Log_PLATFORM_VERSION "SWAD 17.3.9 (2017-09-19)"
#define CSS_FILE "swad17.0.css" #define CSS_FILE "swad17.0.css"
#define JS_FILE "swad16.206.3.js" #define JS_FILE "swad16.206.3.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.3.8: Sep 19, 2017 Table for users in projects. (230000 lines) Version 17.3.9: Sep 19, 2017 Tutor code moved from table projects to table prj_grp. (229987 lines)
1 change necessary in database:
ALTER TABLE projects DROP COLUMN UsrCod;
Version 17.3.8: Sep 19, 2017 Table for users in projects. (230001 lines)
2 changes necessary in database:
DROP TABLE IF EXISTS prj_grp; DROP TABLE IF EXISTS prj_grp;
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)); 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));

View File

@ -2013,7 +2013,6 @@ mysql> DESCRIBE projects;
| CrsCod | int(11) | NO | MUL | -1 | | | CrsCod | int(11) | NO | MUL | -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 | |
| UsrCod | int(11) | NO | | NULL | |
| StartTime | datetime | NO | | NULL | | | StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | | | EndTime | datetime | NO | | NULL | |
| Title | varchar(2047) | NO | | NULL | | | Title | varchar(2047) | NO | | NULL | |
@ -2022,14 +2021,13 @@ mysql> DESCRIBE projects;
| Materials | text | NO | | NULL | | | Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | | | URL | varchar(255) | NO | | NULL | |
+-------------+---------------+------+-----+---------+----------------+ +-------------+---------------+------+-----+---------+----------------+
12 rows in set (0,01 sec) 11 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,"
"CrsCod INT NOT NULL DEFAULT -1," "CrsCod INT NOT NULL DEFAULT -1,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N'," "Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N'," "Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
"UsrCod INT NOT NULL,"
"StartTime DATETIME NOT NULL," "StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL," "EndTime DATETIME NOT NULL,"
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_PROJECT_TITLE "Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_PROJECT_TITLE

View File

@ -80,7 +80,6 @@ static void Prj_PutIconToCreateNewPrj (void);
static void Prj_PutButtonToCreateNewPrj (void); static void Prj_PutButtonToCreateNewPrj (void);
static void Prj_ShowOneProject (struct Project *Prj,bool PrintView); static void Prj_ShowOneProject (struct Project *Prj,bool PrintView);
static void Prj_WriteUsrs (long PrjCod,Prj_RoleInProject_t RoleInProject); static void Prj_WriteUsrs (long PrjCod,Prj_RoleInProject_t RoleInProject);
static void Prj_WritePrjAuthor (struct Project *Prj);
static void Prj_GetParamPrjOrder (void); static void Prj_GetParamPrjOrder (void);
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden); static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden);
@ -354,7 +353,7 @@ static void Prj_ShowOneProject (struct Project *Prj,bool PrintView)
/***** Write first row of data of this project *****/ /***** Write first row of data of this project *****/
/* Forms to remove/edit this project */ /* Forms to remove/edit this project */
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td rowspan=\"6\" class=\"CONTEXT_COL"); "<td rowspan=\"5\" class=\"CONTEXT_COL");
if (PrintView) if (PrintView)
fprintf (Gbl.F.Out,"\">"); fprintf (Gbl.F.Out,"\">");
else else
@ -434,17 +433,6 @@ static void Prj_ShowOneProject (struct Project *Prj,bool PrintView)
Txt_No); Txt_No);
/***** Write second row of data of this project *****/ /***** Write second row of data of this project *****/
fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"2\" class=\"LEFT_TOP");
if (!PrintView)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
/* Author of the project */
Prj_WritePrjAuthor (Prj);
fprintf (Gbl.F.Out,"</td>");
/* Description of the project */ /* Description of the project */
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
Prj->Description,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML Prj->Description,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
@ -655,15 +643,6 @@ static void Prj_WriteUsrs (long PrjCod,Prj_RoleInProject_t RoleInProject)
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
} }
/*****************************************************************************/
/*********************** Write the author of a project ***********************/
/*****************************************************************************/
static void Prj_WritePrjAuthor (struct Project *Prj)
{
Usr_WriteAuthor1Line (Prj->UsrCod,Prj->Hidden);
}
/*****************************************************************************/ /*****************************************************************************/
/********* Get parameter with the type or order in list of projects **********/ /********* Get parameter with the type or order in list of projects **********/
/*****************************************************************************/ /*****************************************************************************/
@ -815,7 +794,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
if (Prj->PrjCod > 0) if (Prj->PrjCod > 0)
{ {
/***** Build query *****/ /***** Build query *****/
sprintf (Query,"SELECT PrjCod,Hidden,Preassigned,UsrCod," sprintf (Query,"SELECT PrjCod,Hidden,Preassigned,"
"UNIX_TIMESTAMP(StartTime)," "UNIX_TIMESTAMP(StartTime),"
"UNIX_TIMESTAMP(EndTime)," "UNIX_TIMESTAMP(EndTime),"
"NOW() BETWEEN StartTime AND EndTime," "NOW() BETWEEN StartTime AND EndTime,"
@ -827,15 +806,14 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
row[ 0]: PrjCod row[ 0]: PrjCod
row[ 1]: Hidden row[ 1]: Hidden
row[ 2]: Preassigned row[ 2]: Preassigned
row[ 3]: UsrCod row[ 3]: UNIX_TIMESTAMP(StartTime)
row[ 4]: UNIX_TIMESTAMP(StartTime) row[ 4]: UNIX_TIMESTAMP(EndTime)
row[ 5]: UNIX_TIMESTAMP(EndTime) row[ 5]: NOW() BETWEEN StartTime AND EndTime
row[ 6]: NOW() BETWEEN StartTime AND EndTime row[ 6]: Title
row[ 7]: Title row[ 7]: Description
row[ 8]: Description row[ 8]: Knowledge
row[ 9]: Knowledge row[ 9]: Materials
row[10]: Materials row[10]: URL
row[11]: URL
*/ */
/***** Get data of project *****/ /***** Get data of project *****/
@ -870,15 +848,14 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
row[ 0]: PrjCod row[ 0]: PrjCod
row[ 1]: Hidden row[ 1]: Hidden
row[ 2]: Preassigned row[ 2]: Preassigned
row[ 3]: UsrCod row[ 3]: UNIX_TIMESTAMP(StartTime)
row[ 4]: UNIX_TIMESTAMP(StartTime) row[ 4]: UNIX_TIMESTAMP(EndTime)
row[ 5]: UNIX_TIMESTAMP(EndTime) row[ 5]: NOW() BETWEEN StartTime AND EndTime
row[ 6]: NOW() BETWEEN StartTime AND EndTime row[ 6]: Title
row[ 7]: Title row[ 7]: Description
row[ 8]: Description row[ 8]: Knowledge
row[ 9]: Knowledge row[ 9]: Materials
row[10]: Materials row[10]: URL
row[11]: URL
*/ */
/* Get code of the project (row[0]) */ /* Get code of the project (row[0]) */
@ -891,36 +868,33 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
Prj->Preassigned = (row[2][0] == 'Y') ? Prj_PREASSIGNED : Prj->Preassigned = (row[2][0] == 'Y') ? Prj_PREASSIGNED :
Prj_NOT_PREASSIGNED; Prj_NOT_PREASSIGNED;
/* Get author of the project (row[3]) */ /* Get start date (row[3] holds the start UTC time) */
Prj->UsrCod = Str_ConvertStrCodToLongCod (row[3]); Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
/* Get start date (row[4] holds the start UTC time) */ /* Get end date (row[4] holds the end UTC time) */
Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[4]); Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
/* Get end date (row[5] holds the end UTC time) */ /* Get whether the project is open or closed (row[5]) */
Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[5]); Prj->Open = (row[5][0] == '1');
/* Get whether the project is open or closed (row(6)) */ /* Get the title of the project (row[6]) */
Prj->Open = (row[6][0] == '1'); Str_Copy (Prj->Title,row[6],
/* Get the title of the project (row[7]) */
Str_Copy (Prj->Title,row[7],
Prj_MAX_BYTES_PROJECT_TITLE); Prj_MAX_BYTES_PROJECT_TITLE);
/* Get the description of the project (row[8]) */ /* Get the description of the project (row[7]) */
Str_Copy (Prj->Description,row[8], Str_Copy (Prj->Description,row[7],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the required knowledge for the project (row[9]) */ /* Get the required knowledge for the project (row[8]) */
Str_Copy (Prj->Knowledge,row[9], Str_Copy (Prj->Knowledge,row[8],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the required materials for the project (row[10]) */ /* Get the required materials for the project (row[9]) */
Str_Copy (Prj->Materials,row[10], Str_Copy (Prj->Materials,row[9],
Cns_MAX_BYTES_TEXT); Cns_MAX_BYTES_TEXT);
/* Get the URL of the project (row[11]) */ /* Get the URL of the project (row[10]) */
Str_Copy (Prj->URL,row[11], Str_Copy (Prj->URL,row[10],
Cns_MAX_BYTES_WWW); Cns_MAX_BYTES_WWW);
} }
@ -938,7 +912,6 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->PrjCod = -1L; Prj->PrjCod = -1L;
Prj->Hidden = false; Prj->Hidden = false;
Prj->Preassigned = Prj_NOT_PREASSIGNED; Prj->Preassigned = Prj_NOT_PREASSIGNED;
Prj->UsrCod = -1L;
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;
Prj->Open = false; Prj->Open = false;
@ -1478,17 +1451,16 @@ static void Prj_CreateProject (struct Project *Prj)
/***** Create a new project *****/ /***** Create a new project *****/
sprintf (Query,"INSERT INTO projects" sprintf (Query,"INSERT INTO projects"
" (CrsCod,Hidden,Preassigned,UsrCod,StartTime,EndTime," " (CrsCod,Hidden,Preassigned,StartTime,EndTime,"
"Title,Description,Knowledge,Materials,URL)" "Title,Description,Knowledge,Materials,URL)"
" VALUES" " VALUES"
" (%ld,'%c','%c',%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld)," " (%ld,'%c','%c',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->Hidden ? 'Y' : Prj->Hidden ? 'Y' :
'N', 'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N', 'N',
Gbl.Usrs.Me.UsrDat.UsrCod,
Prj->TimeUTC[Dat_START_TIME], Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ], Prj->TimeUTC[Dat_END_TIME ],
Prj->Title, Prj->Title,
@ -1497,6 +1469,16 @@ static void Prj_CreateProject (struct Project *Prj)
Prj->Materials, Prj->Materials,
Prj->URL); Prj->URL);
Prj->PrjCod = DB_QueryINSERTandReturnCode (Query,"can not create new project"); Prj->PrjCod = DB_QueryINSERTandReturnCode (Query,"can not create new project");
/***** Insert creator as first tutor *****/
sprintf (Query,"INSERT INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
Prj->PrjCod,
(unsigned) Prj_ROLE_TUT,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryINSERT (Query,"can not add tutor");
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -51,7 +51,6 @@ struct Project
long PrjCod; long PrjCod;
bool Hidden; bool Hidden;
Prj_Preassigned_t Preassigned; Prj_Preassigned_t Preassigned;
long UsrCod;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open; bool Open;
char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1]; char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1];