mirror of https://github.com/acanas/swad-core.git
Version 17.21
This commit is contained in:
parent
041faac9ea
commit
2a04ef351d
|
@ -948,8 +948,8 @@ CREATE TABLE IF NOT EXISTS projects (
|
||||||
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
|
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||||
NumStds INT NOT NULL DEFAULT 1,
|
NumStds INT NOT NULL DEFAULT 1,
|
||||||
Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',
|
Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',
|
||||||
StartTime DATETIME NOT NULL,
|
CreatTime DATETIME NOT NULL,
|
||||||
EndTime DATETIME NOT NULL,
|
ModifTime DATETIME NOT NULL,
|
||||||
Title VARCHAR(2047) NOT NULL,
|
Title VARCHAR(2047) NOT NULL,
|
||||||
Description TEXT NOT NULL,
|
Description TEXT NOT NULL,
|
||||||
Knowledge TEXT NOT NULL,
|
Knowledge TEXT NOT NULL,
|
||||||
|
@ -957,7 +957,9 @@ CREATE TABLE IF NOT EXISTS projects (
|
||||||
URL VARCHAR(255) NOT NULL,
|
URL VARCHAR(255) NOT NULL,
|
||||||
UNIQUE INDEX(PrjCod),
|
UNIQUE INDEX(PrjCod),
|
||||||
INDEX(CrsCod,Hidden),
|
INDEX(CrsCod,Hidden),
|
||||||
INDEX(CrsCod,DptCod));
|
INDEX(CrsCod,CreatTime),
|
||||||
|
INDEX(CrsCod,ModifTime),
|
||||||
|
INDEX(CrsCod,DptCod);
|
||||||
--
|
--
|
||||||
-- Table sessions: stores the information of open sessions
|
-- Table sessions: stores the information of open sessions
|
||||||
--
|
--
|
||||||
|
|
|
@ -256,13 +256,27 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 17.20.7 (2017-10-07)"
|
#define Log_PLATFORM_VERSION "SWAD 17.21 (2017-10-07)"
|
||||||
#define CSS_FILE "swad17.0.css"
|
#define CSS_FILE "swad17.0.css"
|
||||||
#define JS_FILE "swad17.17.1.js"
|
#define JS_FILE "swad17.17.1.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.21: Oct 07, 2017 Start and end dates in projects are replaced by time of creation and time of modification. (233106 lines)
|
||||||
|
8 changes necessary in database:
|
||||||
|
ALTER TABLE projects ADD COLUMN CreatTime DATETIME AFTER EndTime;
|
||||||
|
ALTER TABLE projects ADD COLUMN ModifTime DATETIME AFTER CreatTime;
|
||||||
|
UPDATE projects SET CreatTime=StartTime;
|
||||||
|
UPDATE projects SET ModifTime=CreatTime;
|
||||||
|
ALTER TABLE projects CHANGE COLUMN CreatTime CreatTime DATETIME NOT NULL;
|
||||||
|
ALTER TABLE projects CHANGE COLUMN ModifTime ModifTime DATETIME NOT NULL;
|
||||||
|
ALTER TABLE projects ADD INDEX(CrsCod,CreatTime);
|
||||||
|
ALTER TABLE projects ADD INDEX(CrsCod,ModifTime);
|
||||||
|
2 more changes necessary in database:
|
||||||
|
ALTER TABLE projects DROP COLUMN StartTime;
|
||||||
|
ALTER TABLE projects DROP COLUMN EndTime;
|
||||||
|
|
||||||
Version 17.20.7: Oct 07, 2017 Only publishers can remove subtrees in project documents. (233105 lines)
|
Version 17.20.7: Oct 07, 2017 Only publishers can remove subtrees in project documents. (233105 lines)
|
||||||
Version 17.20.6: Oct 07, 2017 Fixed bug in project documents. (233027 lines)
|
Version 17.20.6: Oct 07, 2017 Fixed bug in project documents. (233027 lines)
|
||||||
Version 17.20.5: Oct 07, 2017 Title of project is now a link to show the project and its documents. (233024 lines)
|
Version 17.20.5: Oct 07, 2017 Title of project is now a link to show the project and its documents. (233024 lines)
|
||||||
|
|
|
@ -2016,8 +2016,8 @@ mysql> DESCRIBE projects;
|
||||||
| Preassigned | enum('N','Y') | NO | | N | |
|
| Preassigned | enum('N','Y') | NO | | N | |
|
||||||
| NumStds | int(11) | NO | | 1 | |
|
| NumStds | int(11) | NO | | 1 | |
|
||||||
| Proposal | enum('new','modified','unmodified') | NO | | new | |
|
| Proposal | enum('new','modified','unmodified') | NO | | new | |
|
||||||
| StartTime | datetime | NO | | NULL | |
|
| CreatTime | datetime | NO | | NULL | |
|
||||||
| EndTime | datetime | NO | | NULL | |
|
| ModifTime | datetime | NO | | NULL | |
|
||||||
| Title | varchar(2047) | NO | | NULL | |
|
| Title | varchar(2047) | NO | | NULL | |
|
||||||
| Description | text | NO | | NULL | |
|
| Description | text | NO | | NULL | |
|
||||||
| Knowledge | text | NO | | NULL | |
|
| Knowledge | text | NO | | NULL | |
|
||||||
|
@ -2034,8 +2034,8 @@ mysql> DESCRIBE projects;
|
||||||
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||||
"NumStds INT NOT NULL DEFAULT 1,"
|
"NumStds INT NOT NULL DEFAULT 1,"
|
||||||
"Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',"
|
"Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',"
|
||||||
"StartTime DATETIME NOT NULL,"
|
"CreatTime DATETIME NOT NULL,"
|
||||||
"EndTime DATETIME NOT NULL,"
|
"ModifTime DATETIME NOT NULL,"
|
||||||
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_PROJECT_TITLE
|
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_PROJECT_TITLE
|
||||||
"Description TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
"Description TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||||
"Knowledge TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
"Knowledge TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||||
|
@ -2043,6 +2043,8 @@ mysql> DESCRIBE projects;
|
||||||
"URL VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
|
"URL VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
|
||||||
"UNIQUE INDEX(PrjCod),"
|
"UNIQUE INDEX(PrjCod),"
|
||||||
"INDEX(CrsCod,Hidden),"
|
"INDEX(CrsCod,Hidden),"
|
||||||
|
"INDEX(CrsCod,CreatTime),"
|
||||||
|
"INDEX(CrsCod,ModifTime),"
|
||||||
"INDEX(CrsCod,DptCod))");
|
"INDEX(CrsCod,DptCod))");
|
||||||
|
|
||||||
/***** Table sessions *****/
|
/***** Table sessions *****/
|
||||||
|
|
|
@ -3929,18 +3929,25 @@ static void Brw_PutIconsFileBrowser (void)
|
||||||
break;
|
break;
|
||||||
case Brw_ICON_VIEW:
|
case Brw_ICON_VIEW:
|
||||||
Ico_PutContextualIconToView (Brw_ActFromAdmToSee[Gbl.FileBrowser.Type],
|
Ico_PutContextualIconToView (Brw_ActFromAdmToSee[Gbl.FileBrowser.Type],
|
||||||
Brw_PutHiddenParamFullTreeIfSelected);
|
Brw_PutHiddenParamFullTreeIfSelected);
|
||||||
break;
|
break;
|
||||||
case Brw_ICON_EDIT:
|
case Brw_ICON_EDIT:
|
||||||
Ico_PutContextualIconToEdit (Brw_ActFromSeeToAdm[Gbl.FileBrowser.Type],
|
Ico_PutContextualIconToEdit (Brw_ActFromSeeToAdm[Gbl.FileBrowser.Type],
|
||||||
Brw_PutHiddenParamFullTreeIfSelected);
|
Brw_PutHiddenParamFullTreeIfSelected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Put icon to show a figure *****/
|
/***** Put icon to show a figure *****/
|
||||||
if (Gbl.FileBrowser.Type != Brw_ADMI_WORKS_CRS &&
|
switch (Gbl.FileBrowser.Type)
|
||||||
Gbl.FileBrowser.Type != Brw_ADMI_ASSIG_CRS)
|
{
|
||||||
Brw_PutIconShowFigure ();
|
case Brw_ADMI_WORKS_CRS:
|
||||||
|
case Brw_ADMI_ASSIG_CRS:
|
||||||
|
case Brw_ADMI_DOCUM_PRJ:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Brw_PutIconShowFigure ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Brw_PutIconShowFigure (void)
|
static void Brw_PutIconShowFigure (void)
|
||||||
|
|
186
swad_project.c
186
swad_project.c
|
@ -60,8 +60,6 @@ typedef enum
|
||||||
Prj_EDIT_ONE_PROJECT,
|
Prj_EDIT_ONE_PROJECT,
|
||||||
} Prj_ProjectView_t;
|
} Prj_ProjectView_t;
|
||||||
|
|
||||||
#define Prj_INTERVAL_DEFAULT ((time_t) 365 * (time_t) 24 * (time_t) 60 * (time_t) 60) // 1 year
|
|
||||||
|
|
||||||
const Prj_RoleInProject_t Prj_RolesToShow[] =
|
const Prj_RoleInProject_t Prj_RolesToShow[] =
|
||||||
{
|
{
|
||||||
Prj_ROLE_TUT, // Tutor
|
Prj_ROLE_TUT, // Tutor
|
||||||
|
@ -647,42 +645,38 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
|
||||||
/* Start date/time */
|
/* Creation date/time */
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<td id=\"asg_date_start_%u\" class=\"%s LEFT_TOP",
|
fprintf (Gbl.F.Out,"<td id=\"prj_creat_%u\" class=\"%s LEFT_TOP",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
Prj->Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" :
|
Prj->Hidden ? "DATE_BLUE_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_BLUE");
|
||||||
(Prj->Open ? "DATE_GREEN" :
|
|
||||||
"DATE_RED"));
|
|
||||||
if (ProjectView == Prj_LIST_PROJECTS)
|
if (ProjectView == Prj_LIST_PROJECTS)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">"
|
fprintf (Gbl.F.Out,"\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateHMSFromUTC('asg_date_start_%u',%ld,"
|
"writeLocalDateHMSFromUTC('prj_creat_%u',%ld,"
|
||||||
"%u,'<br />','%s',true,true,0x7);"
|
"%u,'<br />','%s',true,true,0x7);"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,Prj->TimeUTC[Dat_START_TIME],
|
UniqueId,Prj->CreatTime,
|
||||||
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
||||||
|
|
||||||
/* End date/time */
|
/* Modification date/time */
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<td id=\"asg_date_end_%u\" class=\"%s LEFT_TOP",
|
fprintf (Gbl.F.Out,"<td id=\"prj_modif_%u\" class=\"%s LEFT_TOP",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
Prj->Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" :
|
Prj->Hidden ? "DATE_BLUE_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_BLUE");
|
||||||
(Prj->Open ? "DATE_GREEN" :
|
|
||||||
"DATE_RED"));
|
|
||||||
if (ProjectView == Prj_LIST_PROJECTS)
|
if (ProjectView == Prj_LIST_PROJECTS)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">"
|
fprintf (Gbl.F.Out,"\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateHMSFromUTC('asg_date_end_%u',%ld,"
|
"writeLocalDateHMSFromUTC('prj_modif_%u',%ld,"
|
||||||
"%u,'<br />','%s',true,true,0x7);"
|
"%u,'<br />','%s',true,true,0x7);"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,Prj->TimeUTC[Dat_END_TIME],
|
UniqueId,Prj->ModifTime,
|
||||||
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
||||||
|
|
||||||
/* Project title */
|
/* Project title */
|
||||||
|
@ -878,36 +872,32 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
|
||||||
|
|
||||||
/***** Start date/time *****/
|
/***** Start date/time *****/
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<td id=\"asg_date_start_%u\" class=\"LEFT_TOP COLOR%u %s\">"
|
fprintf (Gbl.F.Out,"<td id=\"prj_creat_%u\" class=\"LEFT_TOP COLOR%u %s\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateHMSFromUTC('asg_date_start_%u',%ld,"
|
"writeLocalDateHMSFromUTC('prj_creat_%u',%ld,"
|
||||||
"%u,'<br />','%s',true,true,0x7);"
|
"%u,'<br />','%s',true,true,0x7);"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
Prj->Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" :
|
Prj->Hidden ? "DATE_BLUE_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_BLUE",
|
||||||
(Prj->Open ? "DATE_GREEN" :
|
UniqueId,Prj->CreatTime,
|
||||||
"DATE_RED"),
|
|
||||||
UniqueId,Prj->TimeUTC[Dat_START_TIME],
|
|
||||||
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
||||||
|
|
||||||
/***** End date/time *****/
|
/***** End date/time *****/
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<td id=\"asg_date_end_%u\" class=\"LEFT_TOP COLOR%u %s\">"
|
fprintf (Gbl.F.Out,"<td id=\"prj_modif_%u\" class=\"LEFT_TOP COLOR%u %s\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateHMSFromUTC('asg_date_end_%u',%ld,"
|
"writeLocalDateHMSFromUTC('prj_modif_%u',%ld,"
|
||||||
"%u,'<br />','%s',true,true,0x7);"
|
"%u,'<br />','%s',true,true,0x7);"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
Prj->Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" :
|
Prj->Hidden ? "DATE_BLUE_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_BLUE",
|
||||||
(Prj->Open ? "DATE_GREEN" :
|
UniqueId,Prj->ModifTime,
|
||||||
"DATE_RED"),
|
|
||||||
UniqueId,Prj->TimeUTC[Dat_END_TIME],
|
|
||||||
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
||||||
|
|
||||||
/***** Project title *****/
|
/***** Project title *****/
|
||||||
|
@ -1905,24 +1895,24 @@ void Prj_GetListProjects (void)
|
||||||
switch (Gbl.Prjs.SelectedOrder)
|
switch (Gbl.Prjs.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Prj_ORDER_START_TIME:
|
case Prj_ORDER_START_TIME:
|
||||||
sprintf (OrderBySubQuery,"projects.StartTime DESC,"
|
sprintf (OrderBySubQuery,"projects.CreatTime DESC,"
|
||||||
"projects.EndTime DESC,"
|
"projects.ModifTime DESC,"
|
||||||
"projects.Title");
|
"projects.Title");
|
||||||
break;
|
break;
|
||||||
case Prj_ORDER_END_TIME:
|
case Prj_ORDER_END_TIME:
|
||||||
sprintf (OrderBySubQuery,"projects.EndTime DESC,"
|
sprintf (OrderBySubQuery,"projects.ModifTime DESC,"
|
||||||
"projects.StartTime DESC,"
|
"projects.CreatTime DESC,"
|
||||||
"projects.Title");
|
"projects.Title");
|
||||||
break;
|
break;
|
||||||
case Prj_ORDER_TITLE:
|
case Prj_ORDER_TITLE:
|
||||||
sprintf (OrderBySubQuery,"projects.Title,"
|
sprintf (OrderBySubQuery,"projects.Title,"
|
||||||
"projects.StartTime DESC,"
|
"projects.CreatTime DESC,"
|
||||||
"projects.EndTime DESC");
|
"projects.ModifTime DESC");
|
||||||
break;
|
break;
|
||||||
case Prj_ORDER_DEPARTMENT:
|
case Prj_ORDER_DEPARTMENT:
|
||||||
sprintf (OrderBySubQuery,"departments.FullName,"
|
sprintf (OrderBySubQuery,"departments.FullName,"
|
||||||
"projects.StartTime DESC,"
|
"projects.CreatTime DESC,"
|
||||||
"projects.EndTime DESC,"
|
"projects.ModifTime DESC,"
|
||||||
"projects.Title");
|
"projects.Title");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2054,9 +2044,8 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
|
||||||
{
|
{
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
sprintf (Query,"SELECT PrjCod,CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
|
sprintf (Query,"SELECT PrjCod,CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
"UNIX_TIMESTAMP(CreatTime),"
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
"UNIX_TIMESTAMP(ModifTime),"
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
|
||||||
"Title,Description,Knowledge,Materials,URL"
|
"Title,Description,Knowledge,Materials,URL"
|
||||||
" FROM projects"
|
" FROM projects"
|
||||||
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
||||||
|
@ -2069,14 +2058,13 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
|
||||||
row[ 4]: Preassigned
|
row[ 4]: Preassigned
|
||||||
row[ 5]: NumStds
|
row[ 5]: NumStds
|
||||||
row[ 6]: Proposal
|
row[ 6]: Proposal
|
||||||
row[ 7]: UNIX_TIMESTAMP(StartTime)
|
row[ 7]: UNIX_TIMESTAMP(CreatTime)
|
||||||
row[ 8]: UNIX_TIMESTAMP(EndTime)
|
row[ 8]: UNIX_TIMESTAMP(ModifTime)
|
||||||
row[ 9]: NOW() BETWEEN StartTime AND EndTime
|
row[ 9]: Title
|
||||||
row[10]: Title
|
row[10]: Description
|
||||||
row[11]: Description
|
row[11]: Knowledge
|
||||||
row[12]: Knowledge
|
row[12]: Materials
|
||||||
row[13]: Materials
|
row[13]: URL
|
||||||
row[14]: URL
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/***** Get data of project *****/
|
/***** Get data of project *****/
|
||||||
|
@ -2117,14 +2105,13 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
|
||||||
row[ 4]: Preassigned
|
row[ 4]: Preassigned
|
||||||
row[ 5]: NumStds
|
row[ 5]: NumStds
|
||||||
row[ 6]: Proposal
|
row[ 6]: Proposal
|
||||||
row[ 7]: UNIX_TIMESTAMP(StartTime)
|
row[ 7]: UNIX_TIMESTAMP(CreatTime)
|
||||||
row[ 8]: UNIX_TIMESTAMP(EndTime)
|
row[ 8]: UNIX_TIMESTAMP(ModifTime)
|
||||||
row[ 9]: NOW() BETWEEN StartTime AND EndTime
|
row[ 9]: Title
|
||||||
row[10]: Title
|
row[10]: Description
|
||||||
row[11]: Description
|
row[11]: Knowledge
|
||||||
row[12]: Knowledge
|
row[12]: Materials
|
||||||
row[13]: Materials
|
row[13]: URL
|
||||||
row[14]: URL
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Get code of the project (row[0]) */
|
/* Get code of the project (row[0]) */
|
||||||
|
@ -2161,33 +2148,30 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get start date (row[7] holds the start UTC time) */
|
/* Get creation date/time (row[7] holds the creation UTC time) */
|
||||||
Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[7]);
|
Prj->CreatTime = Dat_GetUNIXTimeFromStr (row[7]);
|
||||||
|
|
||||||
/* Get end date (row[8] holds the end UTC time) */
|
/* Get modification date/time (row[8] holds the modification UTC time) */
|
||||||
Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[8]);
|
Prj->ModifTime = Dat_GetUNIXTimeFromStr (row[8]);
|
||||||
|
|
||||||
/* Get whether the project is open or closed (row[9]) */
|
/* Get the title of the project (row[9]) */
|
||||||
Prj->Open = (row[9][0] == '1');
|
Str_Copy (Prj->Title,row[9],
|
||||||
|
|
||||||
/* Get the title of the project (row[10]) */
|
|
||||||
Str_Copy (Prj->Title,row[10],
|
|
||||||
Prj_MAX_BYTES_PROJECT_TITLE);
|
Prj_MAX_BYTES_PROJECT_TITLE);
|
||||||
|
|
||||||
/* Get the description of the project (row[11]) */
|
/* Get the description of the project (row[10]) */
|
||||||
Str_Copy (Prj->Description,row[11],
|
Str_Copy (Prj->Description,row[10],
|
||||||
Cns_MAX_BYTES_TEXT);
|
Cns_MAX_BYTES_TEXT);
|
||||||
|
|
||||||
/* Get the required knowledge for the project (row[12]) */
|
/* Get the required knowledge for the project (row[11]) */
|
||||||
Str_Copy (Prj->Knowledge,row[12],
|
Str_Copy (Prj->Knowledge,row[11],
|
||||||
Cns_MAX_BYTES_TEXT);
|
Cns_MAX_BYTES_TEXT);
|
||||||
|
|
||||||
/* Get the required materials for the project (row[13]) */
|
/* Get the required materials for the project (row[12]) */
|
||||||
Str_Copy (Prj->Materials,row[13],
|
Str_Copy (Prj->Materials,row[12],
|
||||||
Cns_MAX_BYTES_TEXT);
|
Cns_MAX_BYTES_TEXT);
|
||||||
|
|
||||||
/* Get the URL of the project (row[14]) */
|
/* Get the URL of the project (row[13]) */
|
||||||
Str_Copy (Prj->URL,row[14],
|
Str_Copy (Prj->URL,row[13],
|
||||||
Cns_MAX_BYTES_WWW);
|
Cns_MAX_BYTES_WWW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2208,9 +2192,8 @@ static void Prj_ResetProject (struct Project *Prj)
|
||||||
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
|
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
|
||||||
Prj->NumStds = 1;
|
Prj->NumStds = 1;
|
||||||
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
|
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
|
||||||
Prj->TimeUTC[Dat_START_TIME] =
|
Prj->CreatTime =
|
||||||
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
Prj->ModifTime = (time_t) 0;
|
||||||
Prj->Open = false;
|
|
||||||
Prj->Title[0] = '\0';
|
Prj->Title[0] = '\0';
|
||||||
Prj->DptCod = -1L; // Unknown department
|
Prj->DptCod = -1L; // Unknown department
|
||||||
Prj->Description[0] = '\0';
|
Prj->Description[0] = '\0';
|
||||||
|
@ -2483,10 +2466,8 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod)
|
||||||
{
|
{
|
||||||
/* Initialize to empty project */
|
/* Initialize to empty project */
|
||||||
Prj_ResetProject (&Prj);
|
Prj_ResetProject (&Prj);
|
||||||
Prj.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC;
|
Prj.CreatTime = Gbl.StartExecutionTimeUTC;
|
||||||
Prj.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC +
|
Prj.ModifTime = Gbl.StartExecutionTimeUTC;
|
||||||
Prj_INTERVAL_DEFAULT;
|
|
||||||
Prj.Open = true;
|
|
||||||
Prj.DptCod = Gbl.Usrs.Me.UsrDat.Tch.DptCod; // Default: my department
|
Prj.DptCod = Gbl.Usrs.Me.UsrDat.Tch.DptCod; // Default: my department
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2583,9 +2564,6 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Title,
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Title,
|
||||||
Prj_MAX_CHARS_PROJECT_TITLE,Prj->Title);
|
Prj_MAX_CHARS_PROJECT_TITLE,Prj->Title);
|
||||||
|
|
||||||
/* Project start and end dates */
|
|
||||||
Dat_PutFormStartEndClientLocalDateTimes (Prj->TimeUTC,Dat_FORM_SECONDS_ON);
|
|
||||||
|
|
||||||
/* Department */
|
/* Department */
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"RIGHT_MIDDLE\">"
|
"<td class=\"RIGHT_MIDDLE\">"
|
||||||
|
@ -2804,10 +2782,6 @@ void Prj_RecFormProject (void)
|
||||||
|
|
||||||
if (ICanEditProject)
|
if (ICanEditProject)
|
||||||
{
|
{
|
||||||
/* Get start/end date-times */
|
|
||||||
Prj.TimeUTC[Dat_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
|
||||||
Prj.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
|
||||||
|
|
||||||
/* Get project title */
|
/* Get project title */
|
||||||
Par_GetParToText ("Title",Prj.Title,Prj_MAX_BYTES_PROJECT_TITLE);
|
Par_GetParToText ("Title",Prj.Title,Prj_MAX_BYTES_PROJECT_TITLE);
|
||||||
|
|
||||||
|
@ -2840,13 +2814,6 @@ void Prj_RecFormProject (void)
|
||||||
/* Get degree WWW */
|
/* Get degree WWW */
|
||||||
Par_GetParToText ("URL",Prj.URL,Cns_MAX_BYTES_WWW);
|
Par_GetParToText ("URL",Prj.URL,Cns_MAX_BYTES_WWW);
|
||||||
|
|
||||||
/***** Adjust dates *****/
|
|
||||||
if (Prj.TimeUTC[Dat_START_TIME] == 0)
|
|
||||||
Prj.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC;
|
|
||||||
if (Prj.TimeUTC[Dat_END_TIME] == 0)
|
|
||||||
Prj.TimeUTC[Dat_END_TIME] = Prj.TimeUTC[Dat_START_TIME] +
|
|
||||||
Prj_INTERVAL_DEFAULT;
|
|
||||||
|
|
||||||
/***** Check if title is correct *****/
|
/***** Check if title is correct *****/
|
||||||
if (!Prj.Title[0]) // If there is not a project title
|
if (!Prj.Title[0]) // If there is not a project title
|
||||||
{
|
{
|
||||||
|
@ -2859,17 +2826,19 @@ void Prj_RecFormProject (void)
|
||||||
{
|
{
|
||||||
if (ItsANewProject)
|
if (ItsANewProject)
|
||||||
{
|
{
|
||||||
|
/* Create project */
|
||||||
Prj_CreateProject (&Prj); // Add new project to database
|
Prj_CreateProject (&Prj); // Add new project to database
|
||||||
|
|
||||||
/***** Write success message *****/
|
/* Write success message */
|
||||||
sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,Prj.Title);
|
sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,Prj.Title);
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
||||||
}
|
}
|
||||||
else if (NewProjectIsCorrect)
|
else if (NewProjectIsCorrect)
|
||||||
{
|
{
|
||||||
|
/* Update project */
|
||||||
Prj_UpdateProject (&Prj);
|
Prj_UpdateProject (&Prj);
|
||||||
|
|
||||||
/***** Write success message *****/
|
/* Write success message */
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_project_has_been_modified);
|
Ale_ShowAlert (Ale_SUCCESS,Txt_The_project_has_been_modified);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2897,10 +2866,14 @@ static void Prj_CreateProject (struct Project *Prj)
|
||||||
Cns_MAX_BYTES_TEXT * 3 +
|
Cns_MAX_BYTES_TEXT * 3 +
|
||||||
Cns_MAX_BYTES_WWW];
|
Cns_MAX_BYTES_WWW];
|
||||||
|
|
||||||
|
/***** Set dates to now *****/
|
||||||
|
Prj->CreatTime =
|
||||||
|
Prj->ModifTime = Gbl.StartExecutionTimeUTC;
|
||||||
|
|
||||||
/***** Create a new project *****/
|
/***** Create a new project *****/
|
||||||
sprintf (Query,"INSERT INTO projects"
|
sprintf (Query,"INSERT INTO projects"
|
||||||
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
|
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
|
||||||
"StartTime,EndTime,"
|
"CreatTime,ModifTime,"
|
||||||
"Title,Description,Knowledge,Materials,URL)"
|
"Title,Description,Knowledge,Materials,URL)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%ld,'%c','%c',%u,'%s',"
|
" (%ld,%ld,'%c','%c',%u,'%s',"
|
||||||
|
@ -2914,8 +2887,8 @@ static void Prj_CreateProject (struct Project *Prj)
|
||||||
'N',
|
'N',
|
||||||
Prj->NumStds,
|
Prj->NumStds,
|
||||||
Prj_Proposal_DB[Prj->Proposal],
|
Prj_Proposal_DB[Prj->Proposal],
|
||||||
Prj->TimeUTC[Dat_START_TIME],
|
Prj->CreatTime,
|
||||||
Prj->TimeUTC[Dat_END_TIME ],
|
Prj->ModifTime,
|
||||||
Prj->Title,
|
Prj->Title,
|
||||||
Prj->Description,
|
Prj->Description,
|
||||||
Prj->Knowledge,
|
Prj->Knowledge,
|
||||||
|
@ -2945,11 +2918,13 @@ static void Prj_UpdateProject (struct Project *Prj)
|
||||||
Cns_MAX_BYTES_TEXT*3 +
|
Cns_MAX_BYTES_TEXT*3 +
|
||||||
Cns_MAX_BYTES_WWW];
|
Cns_MAX_BYTES_WWW];
|
||||||
|
|
||||||
|
/***** Adjust date of last edition to now *****/
|
||||||
|
Prj->ModifTime = Gbl.StartExecutionTimeUTC;
|
||||||
|
|
||||||
/***** 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',NumStds=%u,Proposal='%s',"
|
"DptCod=%ld,Hidden='%c',Preassigned='%c',NumStds=%u,Proposal='%s',"
|
||||||
"StartTime=FROM_UNIXTIME(%ld),"
|
"ModifTime=FROM_UNIXTIME(%ld),"
|
||||||
"EndTime=FROM_UNIXTIME(%ld),"
|
|
||||||
"Title='%s',"
|
"Title='%s',"
|
||||||
"Description='%s',Knowledge='%s',Materials='%s',URL='%s'"
|
"Description='%s',Knowledge='%s',Materials='%s',URL='%s'"
|
||||||
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
||||||
|
@ -2960,8 +2935,7 @@ static void Prj_UpdateProject (struct Project *Prj)
|
||||||
'N',
|
'N',
|
||||||
Prj->NumStds,
|
Prj->NumStds,
|
||||||
Prj_Proposal_DB[Prj->Proposal],
|
Prj_Proposal_DB[Prj->Proposal],
|
||||||
Prj->TimeUTC[Dat_START_TIME],
|
Prj->ModifTime,
|
||||||
Prj->TimeUTC[Dat_END_TIME ],
|
|
||||||
Prj->Title,
|
Prj->Title,
|
||||||
Prj->Description,
|
Prj->Description,
|
||||||
Prj->Knowledge,
|
Prj->Knowledge,
|
||||||
|
|
|
@ -75,8 +75,8 @@ struct Project
|
||||||
Prj_Preassigned_t Preassigned;
|
Prj_Preassigned_t Preassigned;
|
||||||
unsigned NumStds;
|
unsigned NumStds;
|
||||||
Prj_Proposal_t Proposal;
|
Prj_Proposal_t Proposal;
|
||||||
time_t TimeUTC[Dat_NUM_START_END_TIME];
|
time_t CreatTime;
|
||||||
bool Open;
|
time_t ModifTime;
|
||||||
char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1];
|
char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1];
|
||||||
long DptCod;
|
long DptCod;
|
||||||
char *Description;
|
char *Description;
|
||||||
|
|
72
swad_text.c
72
swad_text.c
|
@ -30919,44 +30919,44 @@ const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS] =
|
||||||
{
|
{
|
||||||
// Prj_ORDER_START_TIME
|
// Prj_ORDER_START_TIME
|
||||||
#if L==1
|
#if L==1
|
||||||
"Inici"
|
"Data de creació"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Start"
|
"Datum der Erstellung"
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"Start"
|
"Date of creation"
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Inicio"
|
"Fecha de creación"
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Début"
|
"Date de création"
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"Ñepyrũ"
|
"Fecha de creación" // Okoteve traducción
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"Inizio"
|
"Data di creazione"
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"Początek"
|
"Data utworzenia"
|
||||||
#elif L==9
|
#elif L==9
|
||||||
"Início"
|
"Data da criação"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// Prj_ORDER_END_TIME
|
// Prj_ORDER_END_TIME
|
||||||
#if L==1
|
#if L==1
|
||||||
"Final"
|
"Última edició"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Ende"
|
"Letzte Ausgabe"
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"End"
|
"Last edition"
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Final"
|
"Última edición"
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Fin"
|
"Dernière édition"
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"Paha"
|
"Última edición" // Okoteve traducción
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"Fine"
|
"Ultima edizione"
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"Koniec"
|
"Ostatnie wydanie"
|
||||||
#elif L==9
|
#elif L==9
|
||||||
"Fim"
|
"Última edição"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// Prj_ORDER_TITLE
|
// Prj_ORDER_TITLE
|
||||||
|
@ -31006,44 +31006,44 @@ const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS] =
|
||||||
{
|
{
|
||||||
// Prj_ORDER_START_TIME
|
// Prj_ORDER_START_TIME
|
||||||
#if L==1
|
#if L==1
|
||||||
"Ordenar per data de començament"
|
"Ordenar per data de creació"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Sortieren nach Startdatum"
|
"Sortieren nach Erstellungsdatum"
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"Sort by start date"
|
"Sort by date of creation"
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Ordenar por fecha de comienzo"
|
"Ordenar por fecha de creación"
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Trier par date de début"
|
"Trier par date de création"
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"Ordenar por fecha de comienzo" // Okoteve traducción
|
"Ordenar por fecha de creación" // Okoteve traducción
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"Ordina per data di inizio"
|
"Ordina per data di creazione"
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"Sortuj wedlug daty rozpoczecia"
|
"Sortuj według daty utworzenia"
|
||||||
#elif L==9
|
#elif L==9
|
||||||
"Classificar por data de início"
|
"Classificar por data de criação"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// Prj_ORDER_END_TIME
|
// Prj_ORDER_END_TIME
|
||||||
#if L==1
|
#if L==1
|
||||||
"Ordenar per data de finalització"
|
"Ordenar per data de l'última edició"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Sortieren nach Enddatum"
|
"Sortieren nach letzten Ausgabe"
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"Sort by end date"
|
"Sort by date of last edition"
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Ordenar por fecha de finalización"
|
"Ordenar por fecha de última edición"
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Trier par date de fin"
|
"Trier par date de dernière édition"
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"Ordenar por fecha de finalización" // Okoteve traducción
|
"Ordenar por fecha de última edición" // Okoteve traducción
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"Ordina per data di fine"
|
"Ordina per data dell'ultima edizione"
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"Sortuj wedlug daty zakonczenia"
|
"Sortuj według daty ostatniej edycji"
|
||||||
#elif L==9
|
#elif L==9
|
||||||
"Classificar por data de término"
|
"Classificar por data da última edição"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// Prj_ORDER_TITLE
|
// Prj_ORDER_TITLE
|
||||||
|
|
Loading…
Reference in New Issue