Version 17.15

This commit is contained in:
Antonio Cañas Vargas 2017-10-02 19:34:31 +02:00
parent 58f0b2c660
commit 99fd832c1e
7 changed files with 146 additions and 96 deletions

View File

@ -686,7 +686,7 @@ function expandTextarea (textareaElem,idButton,rows) {
function toggleProject (prjID) { function toggleProject (prjID) {
toggleDisplay('prj_exp_' + prjID); toggleDisplay('prj_exp_' + prjID);
toggleDisplay('prj_con_' + prjID); toggleDisplay('prj_con_' + prjID);
toggleDisplay('prj_sta_' + prjID); toggleDisplay('prj_pro_' + prjID);
toggleDisplay('prj_dsc_' + prjID); toggleDisplay('prj_dsc_' + prjID);
toggleDisplay('prj_knw_' + prjID); toggleDisplay('prj_knw_' + prjID);
toggleDisplay('prj_mtr_' + prjID); toggleDisplay('prj_mtr_' + prjID);

View File

@ -947,7 +947,7 @@ CREATE TABLE IF NOT EXISTS projects (
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, NumStds INT NOT NULL DEFAULT 1,
Status ENUM('new','reproposed') NOT NULL DEFAULT 'new', Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',
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,13 +252,20 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.14 (2017-10-02)" #define Log_PLATFORM_VERSION "SWAD 17.15 (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.15.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.15: Oct 02, 2017 Status in projects changed for proposal. (231985 lines)
4 changes necessary in database:
ALTER TABLE projects ADD COLUMN Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new' AFTER Status;
UPDATE projects SET Proposal='new' WHERE Status='new';
UPDATE projects SET Proposal='unmodified' WHERE Status='reproposed';
ALTER TABLE projects DROP COLUMN Status;
Version 17.14: Oct 02, 2017 New field number of students in projects. (231937 lines) Version 17.14: Oct 02, 2017 New field number of students in projects. (231937 lines)
1 change necessary in database: 1 change necessary in database:
ALTER TABLE projects ADD COLUMN NumStds INT NOT NULL DEFAULT 1 AFTER Preassigned; ALTER TABLE projects ADD COLUMN NumStds INT NOT NULL DEFAULT 1 AFTER Preassigned;

View File

@ -2006,24 +2006,24 @@ mysql> DESCRIBE prj_usr;
/***** Table projects *****/ /***** Table projects *****/
/* /*
mysql> DESCRIBE projects; mysql> DESCRIBE projects;
+-------------+--------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+-------------+--------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
| PrjCod | int(11) | NO | PRI | NULL | auto_increment | | PrjCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | | | CrsCod | int(11) | NO | MUL | -1 | |
| 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 | | | NumStds | int(11) | NO | | 1 | |
| Status | enum('new','reproposed') | NO | | new | | | Proposal | enum('new','modified','unmodified') | NO | | new | |
| 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 | |
| Description | text | NO | | NULL | | | Description | text | NO | | NULL | |
| Knowledge | text | NO | | NULL | | | Knowledge | text | NO | | NULL | |
| Materials | text | NO | | NULL | | | Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | | | URL | varchar(255) | NO | | NULL | |
+-------------+--------------------------+------+-----+---------+----------------+ +-------------+-------------------------------------+------+-----+---------+----------------+
14 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 ("
@ -2033,7 +2033,7 @@ mysql> DESCRIBE projects;
"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," "NumStds INT NOT NULL DEFAULT 1,"
"Status ENUM('new','reproposed') NOT NULL DEFAULT 'new'," "Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',"
"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

@ -69,10 +69,11 @@ const Prj_RoleInProject_t Prj_RolesToShow[] =
}; };
const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / sizeof (Prj_RolesToShow[0]); const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / sizeof (Prj_RolesToShow[0]);
const char *Prj_Status_DB[Prj_NUM_STATUS] = const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
{ {
"new", // Prj_STATUS_NEW "new", // Prj_PROPOSAL_NEW
"reproposed", // Prj_STATUS_REPROPOSED "modified", // Prj_PROPOSAL_MODIFIED
"unmodified", // Prj_PROPOSAL_UNMODIFIED
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -421,7 +422,7 @@ static void Prj_ShowTableAllProjectsHead (void)
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_Number_of_students; 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_Proposal;
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;
@ -453,7 +454,7 @@ static void Prj_ShowTableAllProjectsHead (void)
"<th class=\"LEFT_TOP DAT_N\">%s</th>" "<th class=\"LEFT_TOP DAT_N\">%s</th>"
"<th class=\"LEFT_TOP DAT_N\">%s</th>" "<th class=\"LEFT_TOP DAT_N\">%s</th>"
"<th class=\"LEFT_TOP DAT_N\">%s</th>", "<th class=\"LEFT_TOP DAT_N\">%s</th>",
Txt_Status, Txt_Proposal,
Txt_Description, Txt_Description,
Txt_Required_knowledge, Txt_Required_knowledge,
Txt_Required_materials, Txt_Required_materials,
@ -595,8 +596,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
extern const char *Txt_Number_of_students; 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_Proposal;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
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;
@ -736,9 +737,9 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"</tr>"); "</tr>");
} }
/***** Status *****/ /***** Proposal *****/
if (ProjectView == Prj_LIST_PROJECTS) if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out,"<tr id=\"prj_sta_%u\" style=\"display:none;\">" fprintf (Gbl.F.Out,"<tr id=\"prj_pro_%u\" style=\"display:none;\">"
"<td colspan=\"3\" class=\"RIGHT_TOP COLOR%u", "<td colspan=\"3\" class=\"RIGHT_TOP COLOR%u",
UniqueId,Gbl.RowEvenOdd); UniqueId,Gbl.RowEvenOdd);
else else
@ -750,7 +751,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"<td colspan=\"2\" class=\"LEFT_TOP", "<td colspan=\"2\" class=\"LEFT_TOP",
Prj->Hidden ? "ASG_LABEL_LIGHT" : Prj->Hidden ? "ASG_LABEL_LIGHT" :
"ASG_LABEL", "ASG_LABEL",
Txt_Status); Txt_Proposal);
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," %s\">" fprintf (Gbl.F.Out," %s\">"
@ -759,7 +760,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"</tr>", "</tr>",
Prj->Hidden ? "DAT_LIGHT" : Prj->Hidden ? "DAT_LIGHT" :
"DAT", "DAT",
Txt_PROJECT_STATUS[Prj->Status]); Txt_PROJECT_STATUS[Prj->Proposal]);
/***** Write rows of data of this project *****/ /***** Write rows of data of this project *****/
/* Description of the project */ /* Description of the project */
@ -807,7 +808,7 @@ 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_PROJECT_STATUS[Prj_NUM_STATUS]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
unsigned NumRoleToShow; unsigned NumRoleToShow;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
@ -888,14 +889,14 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
NumRoleToShow++) NumRoleToShow++)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]); Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
/***** Status *****/ /***** Proposal *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">"
"%s" "%s"
"</td>", "</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Prj->Hidden ? "DAT_LIGHT" : Prj->Hidden ? "DAT_LIGHT" :
"DAT", "DAT",
Txt_PROJECT_STATUS[Prj->Status]); Txt_PROJECT_STATUS[Prj->Proposal]);
/***** Write rows of data of this project *****/ /***** Write rows of data of this project *****/
/* Description of the project */ /* Description of the project */
@ -1885,7 +1886,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,NumStds,Status," sprintf (Query,"SELECT PrjCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"UNIX_TIMESTAMP(StartTime)," "UNIX_TIMESTAMP(StartTime),"
"UNIX_TIMESTAMP(EndTime)," "UNIX_TIMESTAMP(EndTime),"
"NOW() BETWEEN StartTime AND EndTime," "NOW() BETWEEN StartTime AND EndTime,"
@ -1899,7 +1900,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
row[ 2]: Hidden row[ 2]: Hidden
row[ 3]: Preassigned row[ 3]: Preassigned
row[ 4]: NumStds row[ 4]: NumStds
row[ 5]: Status row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime) row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(EndTime) row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: NOW() BETWEEN StartTime AND EndTime row[ 8]: NOW() BETWEEN StartTime AND EndTime
@ -1930,7 +1931,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; long NumLong;
Prj_Status_t Status; Prj_Proposal_t Proposal;
/***** Clear all project data *****/ /***** Clear all project data *****/
Prj_ResetProject (Prj); Prj_ResetProject (Prj);
@ -1946,7 +1947,7 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
row[ 2]: Hidden row[ 2]: Hidden
row[ 3]: Preassigned row[ 3]: Preassigned
row[ 4]: NumStds row[ 4]: NumStds
row[ 5]: Status row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime) row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(EndTime) row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: NOW() BETWEEN StartTime AND EndTime row[ 8]: NOW() BETWEEN StartTime AND EndTime
@ -1978,13 +1979,13 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
Prj->NumStds = 1; Prj->NumStds = 1;
/* Get project status (row[5]) */ /* Get project status (row[5]) */
Prj->Status = Prj_STATUS_DEFAULT; Prj->Proposal = Prj_PROPOSAL_DEFAULT;
for (Status = (Prj_Status_t) 0; for (Proposal = (Prj_Proposal_t) 0;
Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1); Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Status++) Proposal++)
if (!strcmp (Prj_Status_DB[Status],row[5])) if (!strcmp (Prj_Proposal_DB[Proposal],row[5]))
{ {
Prj->Status = Status; Prj->Proposal = Proposal;
break; break;
} }
@ -2033,7 +2034,7 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->Hidden = false; Prj->Hidden = false;
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT; Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
Prj->NumStds = 1; Prj->NumStds = 1;
Prj->Status = Prj_STATUS_DEFAULT; Prj->Proposal = Prj_PROPOSAL_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;
Prj->Open = false; Prj->Open = false;
@ -2336,8 +2337,8 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
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_Number_of_students;
extern const char *Txt_Status; extern const char *Txt_Proposal;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
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;
@ -2347,7 +2348,7 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
extern const char *Txt_Create_project; extern const char *Txt_Create_project;
extern const char *Txt_Save; extern const char *Txt_Save;
extern const char *Txt_Members; extern const char *Txt_Members;
Prj_Status_t Status; Prj_Proposal_t Proposal;
unsigned NumRoleToShow; unsigned NumRoleToShow;
/***** Start project box *****/ /***** Start project box *****/
@ -2458,24 +2459,24 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
Txt_Number_of_students, Txt_Number_of_students,
Prj->NumStds); Prj->NumStds);
/* Status */ /* Proposal */
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">" "<td class=\"%s RIGHT_MIDDLE\">"
"%s:" "%s:"
"</td>" "</td>"
"<td class=\"LEFT_MIDDLE\">" "<td class=\"LEFT_MIDDLE\">"
"<select name=\"Status\">", "<select name=\"Proposal\">",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Status); Txt_Proposal);
for (Status = (Prj_Status_t) 0; for (Proposal = (Prj_Proposal_t) 0;
Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1); Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Status++) Proposal++)
{ {
fprintf (Gbl.F.Out,"<option value=\"%u\"", fprintf (Gbl.F.Out,"<option value=\"%u\"",
(unsigned) Status); (unsigned) Proposal);
if (Prj->Status == Status) if (Prj->Proposal == Proposal)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",Txt_PROJECT_STATUS[Status]); fprintf (Gbl.F.Out,">%s</option>",Txt_PROJECT_STATUS[Proposal]);
} }
fprintf (Gbl.F.Out,"</select>" fprintf (Gbl.F.Out,"</select>"
"</td>" "</td>"
@ -2650,11 +2651,11 @@ void Prj_RecFormProject (void)
1); 1);
/* Get status */ /* Get status */
Prj.Status = (Prj_Status_t) Prj.Proposal = (Prj_Proposal_t)
Par_GetParToUnsignedLong ("Status", Par_GetParToUnsignedLong ("Proposal",
0, 0,
Prj_NUM_STATUS - 1, Prj_NUM_PROPOSAL_TYPES - 1,
(unsigned long) Prj_STATUS_DEFAULT); (unsigned long) Prj_PROPOSAL_DEFAULT);
/* Get project description, required knowledge and required materials */ /* Get project description, required knowledge and required materials */
Par_GetParToHTML ("Description",Prj.Description,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous) Par_GetParToHTML ("Description",Prj.Description,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
@ -2723,7 +2724,7 @@ 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,DptCod,Hidden,Preassigned,NumStds,Status," " (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"StartTime,EndTime," "StartTime,EndTime,"
"Title,Description,Knowledge,Materials,URL)" "Title,Description,Knowledge,Materials,URL)"
" VALUES" " VALUES"
@ -2737,7 +2738,7 @@ static void Prj_CreateProject (struct Project *Prj)
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds, Prj->NumStds,
Prj_Status_DB[Prj->Status], Prj_Proposal_DB[Prj->Proposal],
Prj->TimeUTC[Dat_START_TIME], Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ], Prj->TimeUTC[Dat_END_TIME ],
Prj->Title, Prj->Title,
@ -2771,7 +2772,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',NumStds=%u,Status='%s'," "DptCod=%ld,Hidden='%c',Preassigned='%c',NumStds=%u,Proposal='%s',"
"StartTime=FROM_UNIXTIME(%ld)," "StartTime=FROM_UNIXTIME(%ld),"
"EndTime=FROM_UNIXTIME(%ld)," "EndTime=FROM_UNIXTIME(%ld),"
"Title='%s'," "Title='%s',"
@ -2783,7 +2784,7 @@ static void Prj_UpdateProject (struct Project *Prj)
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds, Prj->NumStds,
Prj_Status_DB[Prj->Status], Prj_Proposal_DB[Prj->Proposal],
Prj->TimeUTC[Dat_START_TIME], Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ], Prj->TimeUTC[Dat_END_TIME ],
Prj->Title, Prj->Title,

View File

@ -47,13 +47,14 @@ typedef enum
} Prj_Preassigned_t; } Prj_Preassigned_t;
#define Prj_PREASSIGNED_DEFAULT Prj_NOT_PREASSIGNED #define Prj_PREASSIGNED_DEFAULT Prj_NOT_PREASSIGNED
#define Prj_NUM_STATUS 2 #define Prj_NUM_PROPOSAL_TYPES 3
typedef enum typedef enum
{ {
Prj_STATUS_NEW, Prj_PROPOSAL_NEW,
Prj_STATUS_REPROPOSED, Prj_PROPOSAL_MODIFIED,
} Prj_Status_t; Prj_PROPOSAL_UNMODIFIED,
#define Prj_STATUS_DEFAULT Prj_STATUS_NEW } Prj_Proposal_t;
#define Prj_PROPOSAL_DEFAULT Prj_PROPOSAL_NEW
// Related with user's roles in a project // Related with user's roles in a project
// Don't change these numbers! They are used in database // Don't change these numbers! They are used in database
@ -72,7 +73,7 @@ struct Project
bool Hidden; bool Hidden;
Prj_Preassigned_t Preassigned; Prj_Preassigned_t Preassigned;
unsigned NumStds; unsigned NumStds;
Prj_Status_t Status; Prj_Proposal_t Proposal;
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];

View File

@ -31248,46 +31248,66 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
#endif #endif
}; };
const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS] = const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
{ {
#if L==1 // Prj_STATUS_NEW #if L==1 // Prj_PROPOSAL_NEW
"Projecte nou, proposat per primera vegada" "Projecte nou"
#elif L==2 #elif L==2
"Neues Projekt, das zum ersten Mal vorgeschlagen wurde" "Neues Projekt"
#elif L==3 #elif L==3
"New project, proposed for the first time" "New project"
#elif L==4 #elif L==4
"Proyecto nuevo, propuesto por primera vez" "Proyecto nuevo"
#elif L==5 #elif L==5
"Nouveau projet, propos&eacute; pour la premi&egrave;re fois" "Projet nouveau"
#elif L==6 #elif L==6
"Proyecto nuevo, propuesto por primera vez" // Okoteve traducción "Proyecto nuevo" // Okoteve traducción
#elif L==7 #elif L==7
"Nuovo progetto, proposto per la prima volta" "Progetto nuovo"
#elif L==8 #elif L==8
"Nowy projekt, zaproponowany po raz pierwszy" "Nowy projekt"
#elif L==9 #elif L==9
"Novo projeto, proposto pela primeira vez" "Projeto novo"
#endif #endif
, ,
#if L==1 // Prj_STATUS_REPROPOSED #if L==1 // Prj_PROPOSAL_MODIFIED
"Projecte ja proposat en convocat&ograve;ries anteriors" "Projecte ja proposat en convocat&ograve;ries anteriors, amb modificacions"
#elif L==2 #elif L==2
"Projekt bereits in fr&uuml;heren Anrufen vorgeschlagen" "Projekt in fr&uuml;heren Anrufen vorgeschlagen, mit &Auml;nderungen"
#elif L==3 #elif L==3
"Project already proposed in previous calls" "Project proposed in previous calls, with modifications"
#elif L==4 #elif L==4
"Proyecto ya propuesto en convocatorias anteriores" "Proyecto propuesto en convocatorias anteriores, con modificaciones"
#elif L==5 #elif L==5
"Projet d&eacute;j&agrave; propos&eacute; dans les appels pr&eacute;c&eacute;dents" "Projet propos&eacute; dans les appels pr&eacute;c&eacute;dents, avec modifications"
#elif L==6 #elif L==6
"Proyecto ya propuesto en convocatorias anteriores" // Okoteve traducción "Proyecto propuesto en convocatorias anteriores, con modificaciones" // Okoteve traducción
#elif L==7 #elif L==7
"Progetto gi&agrave; proposto nelle chiamate precedenti" "Progetto proposto nelle chiamate precedenti, con modifiche"
#elif L==8 #elif L==8
"Projekt ju&zdot; zaproponowa&lstrok; w poprzednich rozmowach" "Proponowany projekt we wcze&sacute;niejszych rozmowach z modyfikacjami"
#elif L==9 #elif L==9
"Projeto j&aacute; proposto em chamadas anteriores" "Projeto proposto em chamadas anteriores, com modifica&ccedil;&otilde;es"
#endif
,
#if L==1 // Prj_PROPOSAL_UNMODIFIED
"Projecte ja proposat en convocat&ograve;ries anteriors, sense modificacions"
#elif L==2
"Projekt in fr&uuml;heren Anrufen vorgeschlagen, ohne &Auml;nderungen"
#elif L==3
"Project proposed in previous calls, without modifications"
#elif L==4
"Proyecto propuesto en convocatorias anteriores, sin modificaciones"
#elif L==5
"Projet propos&eacute; dans les appels pr&eacute;c&eacute;dents, sans modifications"
#elif L==6
"Proyecto propuesto en convocatorias anteriores, sin modificaciones" // Okoteve traducción
#elif L==7
"Progetto proposto nelle chiamate precedenti, senza modifiche"
#elif L==8
"Proponowany projekt we wcze&sacute;niejszych rozmowach bez modyfikacji"
#elif L==9
"Projeto proposto em chamadas anteriores, sem modifica&ccedil;&otilde;es"
#endif #endif
}; };
@ -31355,6 +31375,27 @@ const char *Txt_Projects =
"Projetos (projetos de fim de grau, tese&hellip;)"; "Projetos (projetos de fim de grau, tese&hellip;)";
#endif #endif
const char *Txt_Proposal =
#if L==1
"Proposta";
#elif L==2
"Vorschlag";
#elif L==3
"Proposal";
#elif L==4
"Propuesta";
#elif L==5
"Proposition";
#elif L==6
"Propuesta"; // Okoteve traducción
#elif L==7
"Proposta";
#elif L==8
"Wniosek";
#elif L==9
"Proposta";
#endif
const char *Txt_Public_agenda_USER = // Warning: it is very important to include %s in the following sentences const char *Txt_Public_agenda_USER = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Agenda p&uacute;blica de %s"; "Agenda p&uacute;blica de %s";