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) {
toggleDisplay('prj_exp_' + prjID);
toggleDisplay('prj_con_' + prjID);
toggleDisplay('prj_sta_' + prjID);
toggleDisplay('prj_pro_' + prjID);
toggleDisplay('prj_dsc_' + prjID);
toggleDisplay('prj_knw_' + 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',
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
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,
EndTime DATETIME NOT NULL,
Title VARCHAR(2047) NOT NULL,

View File

@ -252,13 +252,20 @@
/****************************** 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 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:
// 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)
1 change necessary in database:
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 *****/
/*
mysql> DESCRIBE projects;
+-------------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------------------+------+-----+---------+----------------+
| PrjCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | |
| DptCod | int(11) | NO | | -1 | |
| Hidden | enum('N','Y') | NO | | N | |
| Preassigned | enum('N','Y') | NO | | N | |
| NumStds | int(11) | NO | | 1 | |
| Status | enum('new','reproposed') | NO | | new | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
| Title | varchar(2047) | NO | | NULL | |
| Description | text | NO | | NULL | |
| Knowledge | text | NO | | NULL | |
| Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | |
+-------------+--------------------------+------+-----+---------+----------------+
+-------------+-------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------------------------+------+-----+---------+----------------+
| PrjCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | |
| DptCod | int(11) | NO | | -1 | |
| Hidden | enum('N','Y') | NO | | N | |
| Preassigned | enum('N','Y') | NO | | N | |
| NumStds | int(11) | NO | | 1 | |
| Proposal | enum('new','modified','unmodified') | NO | | new | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
| Title | varchar(2047) | NO | | NULL | |
| Description | text | NO | | NULL | |
| Knowledge | text | NO | | NULL | |
| Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | |
+-------------+-------------------------------------+------+-----+---------+----------------+
14 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects ("
@ -2033,7 +2033,7 @@ mysql> DESCRIBE projects;
"Hidden 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',"
"Proposal ENUM('new','modified','unmodified') NOT NULL DEFAULT 'new',"
"StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL,"
"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 char *Prj_Status_DB[Prj_NUM_STATUS] =
const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
{
"new", // Prj_STATUS_NEW
"reproposed", // Prj_STATUS_REPROPOSED
"new", // Prj_PROPOSAL_NEW
"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_Number_of_students;
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_Required_knowledge;
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>",
Txt_Status,
Txt_Proposal,
Txt_Description,
Txt_Required_knowledge,
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_See_more;
extern const char *Txt_See_less;
extern const char *Txt_Status;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS];
extern const char *Txt_Proposal;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
extern const char *Txt_Description;
extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials;
@ -736,9 +737,9 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"</tr>");
}
/***** Status *****/
/***** Proposal *****/
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",
UniqueId,Gbl.RowEvenOdd);
else
@ -750,7 +751,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"<td colspan=\"2\" class=\"LEFT_TOP",
Prj->Hidden ? "ASG_LABEL_LIGHT" :
"ASG_LABEL",
Txt_Status);
Txt_Proposal);
if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out," %s\">"
@ -759,7 +760,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
"</tr>",
Prj->Hidden ? "DAT_LIGHT" :
"DAT",
Txt_PROJECT_STATUS[Prj->Status]);
Txt_PROJECT_STATUS[Prj->Proposal]);
/***** Write rows of data of this 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_Yes;
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;
static unsigned UniqueId = 0;
@ -888,14 +889,14 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
NumRoleToShow++)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
/***** Status *****/
/***** Proposal *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u %s\">"
"%s"
"</td>",
Gbl.RowEvenOdd,
Prj->Hidden ? "DAT_LIGHT" :
"DAT",
Txt_PROJECT_STATUS[Prj->Status]);
Txt_PROJECT_STATUS[Prj->Proposal]);
/***** Write rows of data of this project *****/
/* Description of the project */
@ -1885,7 +1886,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
if (Prj->PrjCod > 0)
{
/***** 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(EndTime),"
"NOW() BETWEEN StartTime AND EndTime,"
@ -1899,7 +1900,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
row[ 2]: Hidden
row[ 3]: Preassigned
row[ 4]: NumStds
row[ 5]: Status
row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(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_ROW row;
long NumLong;
Prj_Status_t Status;
Prj_Proposal_t Proposal;
/***** Clear all project data *****/
Prj_ResetProject (Prj);
@ -1946,7 +1947,7 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
row[ 2]: Hidden
row[ 3]: Preassigned
row[ 4]: NumStds
row[ 5]: Status
row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(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;
/* Get project status (row[5]) */
Prj->Status = Prj_STATUS_DEFAULT;
for (Status = (Prj_Status_t) 0;
Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1);
Status++)
if (!strcmp (Prj_Status_DB[Status],row[5]))
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
for (Proposal = (Prj_Proposal_t) 0;
Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Proposal++)
if (!strcmp (Prj_Proposal_DB[Proposal],row[5]))
{
Prj->Status = Status;
Prj->Proposal = Proposal;
break;
}
@ -2033,7 +2034,7 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->Hidden = false;
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
Prj->NumStds = 1;
Prj->Status = Prj_STATUS_DEFAULT;
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
Prj->TimeUTC[Dat_START_TIME] =
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
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_Preassigned_QUESTION;
extern const char *Txt_Number_of_students;
extern const char *Txt_Status;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS];
extern const char *Txt_Proposal;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
extern const char *Txt_Description;
extern const char *Txt_Required_knowledge;
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_Save;
extern const char *Txt_Members;
Prj_Status_t Status;
Prj_Proposal_t Proposal;
unsigned NumRoleToShow;
/***** Start project box *****/
@ -2458,24 +2459,24 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
Txt_Number_of_students,
Prj->NumStds);
/* Status */
/* Proposal */
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">"
"<select name=\"Status\">",
"<select name=\"Proposal\">",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Status);
for (Status = (Prj_Status_t) 0;
Status <= (Prj_Status_t) (Prj_NUM_STATUS - 1);
Status++)
Txt_Proposal);
for (Proposal = (Prj_Proposal_t) 0;
Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Proposal++)
{
fprintf (Gbl.F.Out,"<option value=\"%u\"",
(unsigned) Status);
if (Prj->Status == Status)
(unsigned) Proposal);
if (Prj->Proposal == Proposal)
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>"
"</td>"
@ -2650,11 +2651,11 @@ void Prj_RecFormProject (void)
1);
/* Get status */
Prj.Status = (Prj_Status_t)
Par_GetParToUnsignedLong ("Status",
0,
Prj_NUM_STATUS - 1,
(unsigned long) Prj_STATUS_DEFAULT);
Prj.Proposal = (Prj_Proposal_t)
Par_GetParToUnsignedLong ("Proposal",
0,
Prj_NUM_PROPOSAL_TYPES - 1,
(unsigned long) Prj_PROPOSAL_DEFAULT);
/* Get project description, required knowledge and required materials */
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 *****/
sprintf (Query,"INSERT INTO projects"
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Status,"
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"StartTime,EndTime,"
"Title,Description,Knowledge,Materials,URL)"
" VALUES"
@ -2737,7 +2738,7 @@ static void Prj_CreateProject (struct Project *Prj)
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Status_DB[Prj->Status],
Prj_Proposal_DB[Prj->Proposal],
Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ],
Prj->Title,
@ -2771,7 +2772,7 @@ static void Prj_UpdateProject (struct Project *Prj)
/***** Update the data of the project *****/
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),"
"EndTime=FROM_UNIXTIME(%ld),"
"Title='%s',"
@ -2783,7 +2784,7 @@ static void Prj_UpdateProject (struct Project *Prj)
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Status_DB[Prj->Status],
Prj_Proposal_DB[Prj->Proposal],
Prj->TimeUTC[Dat_START_TIME],
Prj->TimeUTC[Dat_END_TIME ],
Prj->Title,

View File

@ -47,13 +47,14 @@ typedef enum
} Prj_Preassigned_t;
#define Prj_PREASSIGNED_DEFAULT Prj_NOT_PREASSIGNED
#define Prj_NUM_STATUS 2
#define Prj_NUM_PROPOSAL_TYPES 3
typedef enum
{
Prj_STATUS_NEW,
Prj_STATUS_REPROPOSED,
} Prj_Status_t;
#define Prj_STATUS_DEFAULT Prj_STATUS_NEW
Prj_PROPOSAL_NEW,
Prj_PROPOSAL_MODIFIED,
Prj_PROPOSAL_UNMODIFIED,
} Prj_Proposal_t;
#define Prj_PROPOSAL_DEFAULT Prj_PROPOSAL_NEW
// Related with user's roles in a project
// Don't change these numbers! They are used in database
@ -72,7 +73,7 @@ struct Project
bool Hidden;
Prj_Preassigned_t Preassigned;
unsigned NumStds;
Prj_Status_t Status;
Prj_Proposal_t Proposal;
time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open;
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
};
const char *Txt_PROJECT_STATUS[Prj_NUM_STATUS] =
const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
{
#if L==1 // Prj_STATUS_NEW
"Projecte nou, proposat per primera vegada"
#if L==1 // Prj_PROPOSAL_NEW
"Projecte nou"
#elif L==2
"Neues Projekt, das zum ersten Mal vorgeschlagen wurde"
"Neues Projekt"
#elif L==3
"New project, proposed for the first time"
"New project"
#elif L==4
"Proyecto nuevo, propuesto por primera vez"
"Proyecto nuevo"
#elif L==5
"Nouveau projet, propos&eacute; pour la premi&egrave;re fois"
"Projet nouveau"
#elif L==6
"Proyecto nuevo, propuesto por primera vez" // Okoteve traducción
"Proyecto nuevo" // Okoteve traducción
#elif L==7
"Nuovo progetto, proposto per la prima volta"
"Progetto nuovo"
#elif L==8
"Nowy projekt, zaproponowany po raz pierwszy"
"Nowy projekt"
#elif L==9
"Novo projeto, proposto pela primeira vez"
"Projeto novo"
#endif
,
#if L==1 // Prj_STATUS_REPROPOSED
"Projecte ja proposat en convocat&ograve;ries anteriors"
#if L==1 // Prj_PROPOSAL_MODIFIED
"Projecte ja proposat en convocat&ograve;ries anteriors, amb modificacions"
#elif L==2
"Projekt bereits in fr&uuml;heren Anrufen vorgeschlagen"
"Projekt in fr&uuml;heren Anrufen vorgeschlagen, mit &Auml;nderungen"
#elif L==3
"Project already proposed in previous calls"
"Project proposed in previous calls, with modifications"
#elif L==4
"Proyecto ya propuesto en convocatorias anteriores"
"Proyecto propuesto en convocatorias anteriores, con modificaciones"
#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
"Proyecto ya propuesto en convocatorias anteriores" // Okoteve traducción
"Proyecto propuesto en convocatorias anteriores, con modificaciones" // Okoteve traducción
#elif L==7
"Progetto gi&agrave; proposto nelle chiamate precedenti"
"Progetto proposto nelle chiamate precedenti, con modifiche"
#elif L==8
"Projekt ju&zdot; zaproponowa&lstrok; w poprzednich rozmowach"
"Proponowany projekt we wcze&sacute;niejszych rozmowach z modyfikacjami"
#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
};
@ -31355,6 +31375,27 @@ const char *Txt_Projects =
"Projetos (projetos de fim de grau, tese&hellip;)";
#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
#if L==1
"Agenda p&uacute;blica de %s";