mirror of https://github.com/acanas/swad-core.git
Version 17.2.3
This commit is contained in:
parent
44d65b3b91
commit
6fa1b01f4b
Binary file not shown.
After Width: | Height: | Size: 1021 B |
Binary file not shown.
After Width: | Height: | Size: 959 B |
|
@ -943,12 +943,11 @@ 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',
|
||||||
NumNotif INT NOT NULL DEFAULT 0,
|
|
||||||
UsrCod INT NOT NULL,
|
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,
|
||||||
Folder VARBINARY(255) NOT NULL,
|
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||||
Txt TEXT NOT NULL,
|
Txt TEXT NOT NULL,
|
||||||
UNIQUE INDEX(PrjCod),
|
UNIQUE INDEX(PrjCod),
|
||||||
INDEX(CrsCod,Hidden));
|
INDEX(CrsCod,Hidden));
|
||||||
|
|
|
@ -679,7 +679,7 @@ static void Agd_PutIconsOtherPublicAgenda (void)
|
||||||
&Gbl.Usrs.Other.UsrDat))
|
&Gbl.Usrs.Other.UsrDat))
|
||||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
||||||
Usr_PutParamOtherUsrCodEncrypted,
|
Usr_PutParamOtherUsrCodEncrypted,
|
||||||
"usr64x64.gif",
|
"usr64x64.png",
|
||||||
Txt_Another_user_s_profile,NULL,
|
Txt_Another_user_s_profile,NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
|
|
@ -831,7 +831,7 @@ static void Asg_ResetAssignment (struct Assignment *Asg)
|
||||||
Asg->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
Asg->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||||
Asg->Open = false;
|
Asg->Open = false;
|
||||||
Asg->Title[0] = '\0';
|
Asg->Title[0] = '\0';
|
||||||
Asg->SendWork = false;
|
Asg->SendWork = Asg_DO_NOT_SEND_WORK;
|
||||||
Asg->Folder[0] = '\0';
|
Asg->Folder[0] = '\0';
|
||||||
Asg->IBelongToCrsOrGrps = false;
|
Asg->IBelongToCrsOrGrps = false;
|
||||||
}
|
}
|
||||||
|
@ -1145,7 +1145,7 @@ void Asg_RequestCreatOrEditAsg (void)
|
||||||
Asg.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
Asg.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||||
Asg.Open = true;
|
Asg.Open = true;
|
||||||
Asg.Title[0] = '\0';
|
Asg.Title[0] = '\0';
|
||||||
Asg.SendWork = false;
|
Asg.SendWork = Asg_DO_NOT_SEND_WORK;
|
||||||
Asg.Folder[0] = '\0';
|
Asg.Folder[0] = '\0';
|
||||||
Asg.IBelongToCrsOrGrps = false;
|
Asg.IBelongToCrsOrGrps = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,14 +252,22 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 17.2.1 (2017-09-17)"
|
#define Log_PLATFORM_VERSION "SWAD 17.2.3 (2017-09-17)"
|
||||||
#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.2.2: Sep 17, 2017 New option for projects. Not finished. (? lines)
|
Version 17.2.3: Sep 17, 2017 New option for projects. Not finished. (229906 lines)
|
||||||
|
3 changes necessary in database:
|
||||||
|
ALTER TABLE projects DROP COLUMN NumNotif;
|
||||||
|
ALTER TABLE projects DROP COLUMN Folder;
|
||||||
|
ALTER TABLE projects ADD COLUMN Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER Title;
|
||||||
|
Copy the following icons to icon public directory:
|
||||||
|
sudo cp icon/usr64x64.png /var/www/html/swad/icon/
|
||||||
|
|
||||||
|
Version 17.2.2: Sep 17, 2017 New option for projects. Not finished. (229964 lines)
|
||||||
Version 17.2.1: Sep 17, 2017 New option for projects. Not finished. (229884 lines)
|
Version 17.2.1: Sep 17, 2017 New option for projects. Not finished. (229884 lines)
|
||||||
Version 17.2: Sep 17, 2017 New option for projects. Not finished. (229575 lines)
|
Version 17.2: Sep 17, 2017 New option for projects. Not finished. (229575 lines)
|
||||||
12 changes necessary in database:
|
12 changes necessary in database:
|
||||||
|
|
|
@ -2004,33 +2004,31 @@ mysql> DESCRIBE prj_grp;
|
||||||
/***** 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 | |
|
||||||
| Hidden | enum('N','Y') | NO | | N | |
|
| Hidden | enum('N','Y') | NO | | N | |
|
||||||
| NumNotif | int(11) | NO | | 0 | |
|
| UsrCod | int(11) | NO | | NULL | |
|
||||||
| 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 | |
|
| Preassigned | enum('N','Y') | NO | | N | |
|
||||||
| Folder | varbinary(255) | NO | | NULL | |
|
| Txt | text | NO | | NULL | |
|
||||||
| Txt | text | NO | | NULL | |
|
+-------------+---------------+------+-----+---------+----------------+
|
||||||
+-----------+----------------+------+-----+---------+----------------+
|
9 rows in set (0,00 sec)
|
||||||
10 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',"
|
||||||
"NumNotif INT NOT NULL DEFAULT 0,"
|
|
||||||
"UsrCod INT NOT NULL,"
|
"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_ASSIGNMENT_TITLE
|
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_CHARS_PROJECT_TITLE
|
||||||
"Folder VARBINARY(255) NOT NULL," // Brw_MAX_BYTES_FOLDER
|
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||||
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||||
"UNIQUE INDEX(PrjCod),"
|
"UNIQUE INDEX(PrjCod),"
|
||||||
"INDEX(CrsCod,Hidden))");
|
"INDEX(CrsCod,Hidden))");
|
||||||
|
|
||||||
|
|
|
@ -941,7 +941,7 @@ static void Fol_PutInactiveIconToFollowUnfollow (void)
|
||||||
{
|
{
|
||||||
/***** Inactive icon to follow/unfollow *****/
|
/***** Inactive icon to follow/unfollow *****/
|
||||||
fprintf (Gbl.F.Out,"<div class=\"FOLLOW_USR_ICO ICO_HIDDEN\">"
|
fprintf (Gbl.F.Out,"<div class=\"FOLLOW_USR_ICO ICO_HIDDEN\">"
|
||||||
"<img src=\"%s/usr64x64.gif\""
|
"<img src=\"%s/usr64x64.png\""
|
||||||
" alt=\"\""
|
" alt=\"\""
|
||||||
" class=\"ICO20x20\" />"
|
" class=\"ICO20x20\" />"
|
||||||
"</div>",
|
"</div>",
|
||||||
|
|
|
@ -131,7 +131,7 @@ void Prf_PutLinkMyPublicProfile (void)
|
||||||
extern const char *Txt_My_public_profile;
|
extern const char *Txt_My_public_profile;
|
||||||
|
|
||||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,Usr_PutParamMyUsrCodEncrypted,
|
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,Usr_PutParamMyUsrCodEncrypted,
|
||||||
"usr64x64.gif",
|
"usr64x64.png",
|
||||||
Txt_My_public_profile,Txt_My_public_profile,
|
Txt_My_public_profile,Txt_My_public_profile,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ void Prf_PutLinkRequestAnotherUserProfile (void)
|
||||||
extern const char *Txt_Another_user_s_profile;
|
extern const char *Txt_Another_user_s_profile;
|
||||||
|
|
||||||
Lay_PutContextualLink (ActReqOthPubPrf,NULL,NULL,
|
Lay_PutContextualLink (ActReqOthPubPrf,NULL,NULL,
|
||||||
"usr64x64.gif",
|
"usr64x64.png",
|
||||||
Txt_Another_user_s_profile,Txt_Another_user_s_profile,
|
Txt_Another_user_s_profile,Txt_Another_user_s_profile,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
257
swad_project.c
257
swad_project.c
|
@ -74,7 +74,6 @@ static void Prj_PutFormToSelectWhichGroupsToShow (void);
|
||||||
static void Prj_ParamsWhichGroupsToShow (void);
|
static void Prj_ParamsWhichGroupsToShow (void);
|
||||||
static void Prj_ShowOneProject (long PrjCod,bool PrintView);
|
static void Prj_ShowOneProject (long PrjCod,bool PrintView);
|
||||||
static void Prj_WritePrjAuthor (struct Project *Prj);
|
static void Prj_WritePrjAuthor (struct Project *Prj);
|
||||||
static void Prj_WriteProjectFolder (struct Project *Prj,bool PrintView);
|
|
||||||
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);
|
||||||
|
@ -191,8 +190,7 @@ static void Prj_PutHeadForSeeing (bool PrintView)
|
||||||
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
|
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
|
||||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||||
extern const char *Txt_Project;
|
extern const char *Txt_Project;
|
||||||
extern const char *Txt_Upload_files_QUESTION;
|
extern const char *Txt_Preassigned_QUESTION;
|
||||||
extern const char *Txt_Folder;
|
|
||||||
Dat_StartEndTime_t Order;
|
Dat_StartEndTime_t Order;
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
@ -230,13 +228,9 @@ static void Prj_PutHeadForSeeing (bool PrintView)
|
||||||
"<th class=\"CENTER_MIDDLE\">"
|
"<th class=\"CENTER_MIDDLE\">"
|
||||||
"%s"
|
"%s"
|
||||||
"</th>"
|
"</th>"
|
||||||
"<th class=\"LEFT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</th>"
|
|
||||||
"</tr>",
|
"</tr>",
|
||||||
Txt_Project,
|
Txt_Project,
|
||||||
Txt_Upload_files_QUESTION,
|
Txt_Preassigned_QUESTION);
|
||||||
Txt_Folder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -331,11 +325,11 @@ void Prj_PrintOneProject (void)
|
||||||
|
|
||||||
/***** Table head *****/
|
/***** Table head *****/
|
||||||
Tbl_StartTableWideMargin (2);
|
Tbl_StartTableWideMargin (2);
|
||||||
Prj_PutHeadForSeeing (true); // Print view
|
Prj_PutHeadForSeeing (true); // Print view
|
||||||
|
|
||||||
/***** Write project *****/
|
/***** Write project *****/
|
||||||
Prj_ShowOneProject (PrjCod,
|
Prj_ShowOneProject (PrjCod,
|
||||||
true); // Print view
|
true); // Print view
|
||||||
|
|
||||||
/***** End table *****/
|
/***** End table *****/
|
||||||
Tbl_EndTable ();
|
Tbl_EndTable ();
|
||||||
|
@ -348,7 +342,7 @@ void Prj_PrintOneProject (void)
|
||||||
static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Today;
|
extern const char *Txt_Today;
|
||||||
extern const char *Txt_ASSIGNMENT_TYPES[Prj_NUM_TYPES_SEND_WORK];
|
extern const char *Txt_PREASSIGNED_TYPES[Prj_NUM_TYPES_PREASSIGNED];
|
||||||
extern const char *Txt_Yes;
|
extern const char *Txt_Yes;
|
||||||
extern const char *Txt_No;
|
extern const char *Txt_No;
|
||||||
static unsigned UniqueId = 0;
|
static unsigned UniqueId = 0;
|
||||||
|
@ -421,34 +415,25 @@ static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
||||||
Prj.Title);
|
Prj.Title);
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
|
||||||
/* Send work? */
|
/* Preassigned? */
|
||||||
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP",
|
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP",
|
||||||
(Prj.SendWork == Prj_SEND_WORK) ? "DAT_N" :
|
(Prj.Preassigned == Prj_PREASSIGNED) ? "DAT_N" :
|
||||||
"DAT");
|
"DAT");
|
||||||
if (!PrintView)
|
if (!PrintView)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">"
|
fprintf (Gbl.F.Out,"\">"
|
||||||
"<img src=\"%s/%s16x16.gif\""
|
"<img src=\"%s/%s64x64.png\""
|
||||||
" alt=\"%s\" title=\"%s\" class=\"ICO20x20\" />"
|
" alt=\"%s\" title=\"%s\" class=\"ICO20x20\" />"
|
||||||
"<br />%s"
|
"<br />%s"
|
||||||
"</td>",
|
"</td>"
|
||||||
|
"</tr>",
|
||||||
Gbl.Prefs.IconsURL,
|
Gbl.Prefs.IconsURL,
|
||||||
(Prj.SendWork == Prj_SEND_WORK) ? "file_on" :
|
(Prj.Preassigned == Prj_PREASSIGNED) ? "usr" :
|
||||||
"file_off",
|
"usr_off",
|
||||||
Txt_ASSIGNMENT_TYPES[Prj.SendWork],
|
Txt_PREASSIGNED_TYPES[Prj.Preassigned],
|
||||||
Txt_ASSIGNMENT_TYPES[Prj.SendWork],
|
Txt_PREASSIGNED_TYPES[Prj.Preassigned],
|
||||||
(Prj.SendWork == Prj_SEND_WORK) ? Txt_Yes :
|
(Prj.Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
|
||||||
Txt_No);
|
Txt_No);
|
||||||
|
|
||||||
/* Project folder */
|
|
||||||
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP");
|
|
||||||
if (!PrintView)
|
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
|
||||||
fprintf (Gbl.F.Out,"\">");
|
|
||||||
if (Prj.SendWork == Prj_SEND_WORK)
|
|
||||||
Prj_WriteProjectFolder (&Prj,PrintView);
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
|
||||||
"</tr>");
|
|
||||||
|
|
||||||
/***** Write second row of data of this project *****/
|
/***** Write second row of data of this project *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
@ -467,7 +452,7 @@ static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
||||||
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
|
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
|
||||||
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
|
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
|
||||||
Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
|
Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
|
||||||
fprintf (Gbl.F.Out,"<td colspan=\"3\" class=\"LEFT_TOP");
|
fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"LEFT_TOP");
|
||||||
if (!PrintView)
|
if (!PrintView)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">");
|
fprintf (Gbl.F.Out,"\">");
|
||||||
|
@ -496,51 +481,6 @@ static void Prj_WritePrjAuthor (struct Project *Prj)
|
||||||
Usr_WriteAuthor1Line (Prj->UsrCod,Prj->Hidden);
|
Usr_WriteAuthor1Line (Prj->UsrCod,Prj->Hidden);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*********************** Write the folder of a project ***********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void Prj_WriteProjectFolder (struct Project *Prj,bool PrintView)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Upload_file_or_create_folder_in_FOLDER;
|
|
||||||
extern const char *Txt_Folder;
|
|
||||||
bool ICanSendFiles = !Prj->Hidden && // It's visible (not hidden)
|
|
||||||
Prj->Open && // It's open (inside dates)
|
|
||||||
Prj->IBelongToCrsOrGrps && // I belong to course or groups
|
|
||||||
Gbl.Usrs.Me.Role.Logged == Rol_STD; // I am a student
|
|
||||||
|
|
||||||
/***** Folder icon *****/
|
|
||||||
if (!PrintView && // Not print view
|
|
||||||
ICanSendFiles) // I can send files to this project folder
|
|
||||||
{
|
|
||||||
/* Form to create a new file or folder */
|
|
||||||
Act_FormStart (ActFrmCreAsgUsr); // TODO: Remove this feature
|
|
||||||
Brw_PutParamsFileBrowser (ActUnk,
|
|
||||||
Brw_INTERNAL_NAME_ROOT_FOLDER_ASSIGNMENTS,
|
|
||||||
Prj->Folder,
|
|
||||||
Brw_IS_FOLDER,-1L);
|
|
||||||
sprintf (Gbl.Title,Txt_Upload_file_or_create_folder_in_FOLDER,
|
|
||||||
Prj->Folder);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\""
|
|
||||||
" src=\"%s/folder-open-plus16x16.gif\""
|
|
||||||
" alt=\"%s\" title=\"%s\" class=\"ICO20x20\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Gbl.Title,
|
|
||||||
Gbl.Title);
|
|
||||||
Act_FormEnd ();
|
|
||||||
}
|
|
||||||
else // I can't send files to this project folder
|
|
||||||
fprintf (Gbl.F.Out,"<img src=\"%s/%s\" alt=\"%s\" title=\"%s\""
|
|
||||||
" class=\"ICO20x20\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
ICanSendFiles ? "folder-open16x16.gif" :
|
|
||||||
"folder-closed16x16.gif",
|
|
||||||
Txt_Folder,Txt_Folder);
|
|
||||||
|
|
||||||
/***** Folder name *****/
|
|
||||||
fprintf (Gbl.F.Out,"%s",Prj->Folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********* Get parameter with the type or order in list of projects **********/
|
/********* Get parameter with the type or order in list of projects **********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -710,7 +650,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
"UNIX_TIMESTAMP(StartTime),"
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
"UNIX_TIMESTAMP(EndTime),"
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
"NOW() BETWEEN StartTime AND EndTime,"
|
||||||
"Title,Folder"
|
"Title,Preassigned"
|
||||||
" FROM projects"
|
" FROM projects"
|
||||||
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
||||||
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
|
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
|
@ -726,37 +666,6 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/***************** Get project data using its folder name ********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Prj_GetDataOfProjectByFolder (struct Project *Prj)
|
|
||||||
{
|
|
||||||
char Query[1024 + Brw_MAX_BYTES_FOLDER];
|
|
||||||
|
|
||||||
if (Prj->Folder[0])
|
|
||||||
{
|
|
||||||
/***** Query database *****/
|
|
||||||
sprintf (Query,"SELECT PrjCod,Hidden,UsrCod,"
|
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
|
||||||
"Title,Folder"
|
|
||||||
" FROM projects"
|
|
||||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,Prj->Folder);
|
|
||||||
|
|
||||||
/***** Get data of project *****/
|
|
||||||
Prj_GetDataOfProject (Prj,Query);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/***** Clear all project data *****/
|
|
||||||
Prj->PrjCod = -1L;
|
|
||||||
Prj_ResetProject (Prj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**************************** Get project data *******************************/
|
/**************************** Get project data *******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -795,12 +704,11 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
|
||||||
|
|
||||||
/* Get the title of the project (row[6]) */
|
/* Get the title of the project (row[6]) */
|
||||||
Str_Copy (Prj->Title,row[6],
|
Str_Copy (Prj->Title,row[6],
|
||||||
Prj_MAX_BYTES_ASSIGNMENT_TITLE);
|
Prj_MAX_BYTES_PROJECT_TITLE);
|
||||||
|
|
||||||
/* Get the folder for the project files (row[7]) */
|
/* Get the folder for the project files (row[7]) */
|
||||||
Str_Copy (Prj->Folder,row[7],
|
Prj->Preassigned = (row[7][0] == 'Y') ? Prj_PREASSIGNED :
|
||||||
Brw_MAX_BYTES_FOLDER);
|
Prj_NOT_PREASSIGNED;
|
||||||
Prj->SendWork = (Prj->Folder[0] != '\0');
|
|
||||||
|
|
||||||
/* Can I do this project? */
|
/* Can I do this project? */
|
||||||
Prj->IBelongToCrsOrGrps = Prj_CheckIfIBelongToCrsOrGrpsThisProject (Prj->PrjCod);
|
Prj->IBelongToCrsOrGrps = Prj_CheckIfIBelongToCrsOrGrpsThisProject (Prj->PrjCod);
|
||||||
|
@ -825,8 +733,7 @@ static void Prj_ResetProject (struct Project *Prj)
|
||||||
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||||
Prj->Open = false;
|
Prj->Open = false;
|
||||||
Prj->Title[0] = '\0';
|
Prj->Title[0] = '\0';
|
||||||
Prj->SendWork = false;
|
Prj->Preassigned = Prj_NOT_PREASSIGNED;
|
||||||
Prj->Folder[0] = '\0';
|
|
||||||
Prj->IBelongToCrsOrGrps = false;
|
Prj->IBelongToCrsOrGrps = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -951,10 +858,6 @@ void Prj_RemoveProject (void)
|
||||||
/***** Get data of the project from database *****/
|
/***** Get data of the project from database *****/
|
||||||
Prj_GetDataOfProjectByCod (&Prj); // Inside this function, the course is checked to be the current one
|
Prj_GetDataOfProjectByCod (&Prj); // Inside this function, the course is checked to be the current one
|
||||||
|
|
||||||
/***** Remove all the folders associated to this project *****/
|
|
||||||
if (Prj.Folder[0])
|
|
||||||
Brw_RemoveFoldersAssignmentsIfExistForAllUsrs (Prj.Folder);
|
|
||||||
|
|
||||||
/***** Remove all the groups of this project *****/
|
/***** Remove all the groups of this project *****/
|
||||||
Prj_RemoveAllTheGrpsAssociatedToAProject (Prj.PrjCod);
|
Prj_RemoveAllTheGrpsAssociatedToAProject (Prj.PrjCod);
|
||||||
|
|
||||||
|
@ -1043,7 +946,7 @@ void Prj_ShowProject (void)
|
||||||
|
|
||||||
static bool Prj_CheckIfSimilarProjectsExists (const char *Field,const char *Value,long PrjCod)
|
static bool Prj_CheckIfSimilarProjectsExists (const char *Field,const char *Value,long PrjCod)
|
||||||
{
|
{
|
||||||
char Query[256 + Prj_MAX_BYTES_ASSIGNMENT_TITLE];
|
char Query[256 + Prj_MAX_BYTES_PROJECT_TITLE];
|
||||||
|
|
||||||
/***** Get number of projects with a field value from database *****/
|
/***** Get number of projects with a field value from database *****/
|
||||||
sprintf (Query,"SELECT COUNT(*) FROM projects"
|
sprintf (Query,"SELECT COUNT(*) FROM projects"
|
||||||
|
@ -1064,8 +967,9 @@ void Prj_RequestCreatOrEditPrj (void)
|
||||||
extern const char *Txt_New_project;
|
extern const char *Txt_New_project;
|
||||||
extern const char *Txt_Edit_project;
|
extern const char *Txt_Edit_project;
|
||||||
extern const char *Txt_Title;
|
extern const char *Txt_Title;
|
||||||
extern const char *Txt_Upload_files_QUESTION;
|
extern const char *Txt_Preassigned_QUESTION;
|
||||||
extern const char *Txt_Folder;
|
extern const char *Txt_No;
|
||||||
|
extern const char *Txt_Yes;
|
||||||
extern const char *Txt_Description;
|
extern const char *Txt_Description;
|
||||||
extern const char *Txt_Create_project;
|
extern const char *Txt_Create_project;
|
||||||
extern const char *Txt_Save;
|
extern const char *Txt_Save;
|
||||||
|
@ -1090,8 +994,7 @@ void Prj_RequestCreatOrEditPrj (void)
|
||||||
Prj.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
Prj.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||||
Prj.Open = true;
|
Prj.Open = true;
|
||||||
Prj.Title[0] = '\0';
|
Prj.Title[0] = '\0';
|
||||||
Prj.SendWork = false;
|
Prj.Preassigned = Prj_NOT_PREASSIGNED;
|
||||||
Prj.Folder[0] = '\0';
|
|
||||||
Prj.IBelongToCrsOrGrps = false;
|
Prj.IBelongToCrsOrGrps = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1136,27 +1039,34 @@ void Prj_RequestCreatOrEditPrj (void)
|
||||||
"</td>"
|
"</td>"
|
||||||
"</tr>",
|
"</tr>",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Title,
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Title,
|
||||||
Prj_MAX_CHARS_ASSIGNMENT_TITLE,Prj.Title);
|
Prj_MAX_CHARS_PROJECT_TITLE,Prj.Title);
|
||||||
|
|
||||||
/***** Project start and end dates *****/
|
/***** Project start and end dates *****/
|
||||||
Dat_PutFormStartEndClientLocalDateTimes (Prj.TimeUTC,Dat_FORM_SECONDS_ON);
|
Dat_PutFormStartEndClientLocalDateTimes (Prj.TimeUTC,Dat_FORM_SECONDS_ON);
|
||||||
|
|
||||||
/***** Send work? *****/
|
/***** Preassigned? *****/
|
||||||
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\">"
|
||||||
"<label class=\"DAT\">%s:"
|
"<select name=\"Preassigned\">",
|
||||||
"<input type=\"text\" name=\"Folder\""
|
|
||||||
" size=\"30\" maxlength=\"%u\" value=\"%s\" />"
|
|
||||||
"</label>"
|
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Txt_Upload_files_QUESTION,
|
Txt_Preassigned_QUESTION);
|
||||||
Txt_Folder,
|
|
||||||
Brw_MAX_CHARS_FOLDER,Prj.Folder);
|
fprintf (Gbl.F.Out,"<option value=\"N\"");
|
||||||
|
if (Prj.Preassigned == Prj_NOT_PREASSIGNED)
|
||||||
|
fprintf (Gbl.F.Out," selected=\"selected\"");
|
||||||
|
fprintf (Gbl.F.Out,">%s</option>",Txt_No);
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"<option value=\"Y\"");
|
||||||
|
if (Prj.Preassigned == Prj_PREASSIGNED)
|
||||||
|
fprintf (Gbl.F.Out," selected=\"selected\"");
|
||||||
|
fprintf (Gbl.F.Out,">%s</option>",Txt_Yes);
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"</select>"
|
||||||
|
"</td>"
|
||||||
|
"</tr>");
|
||||||
|
|
||||||
/***** Project text *****/
|
/***** Project text *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
@ -1256,11 +1166,9 @@ static void Prj_ShowLstGrpsToEditProject (long PrjCod)
|
||||||
void Prj_RecFormProject (void)
|
void Prj_RecFormProject (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Already_existed_a_project_with_the_title_X;
|
extern const char *Txt_Already_existed_a_project_with_the_title_X;
|
||||||
extern const char *Txt_Already_existed_a_project_with_the_folder_X;
|
|
||||||
extern const char *Txt_You_must_specify_the_title_of_the_project;
|
extern const char *Txt_You_must_specify_the_title_of_the_project;
|
||||||
extern const char *Txt_Created_new_project_X;
|
extern const char *Txt_Created_new_project_X;
|
||||||
extern const char *Txt_The_project_has_been_modified;
|
extern const char *Txt_The_project_has_been_modified;
|
||||||
extern const char *Txt_You_can_not_disable_file_uploading_once_folders_have_been_created;
|
|
||||||
struct Project OldPrj; // Current assigment data in database
|
struct Project OldPrj; // Current assigment data in database
|
||||||
struct Project NewPrj; // Project data received from form
|
struct Project NewPrj; // Project data received from form
|
||||||
bool ItsANewProject;
|
bool ItsANewProject;
|
||||||
|
@ -1289,12 +1197,11 @@ void Prj_RecFormProject (void)
|
||||||
NewPrj.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
NewPrj.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||||
|
|
||||||
/***** Get project title *****/
|
/***** Get project title *****/
|
||||||
Par_GetParToText ("Title",NewPrj.Title,Prj_MAX_BYTES_ASSIGNMENT_TITLE);
|
Par_GetParToText ("Title",NewPrj.Title,Prj_MAX_BYTES_PROJECT_TITLE);
|
||||||
|
|
||||||
/***** Get folder name where to send works of the project *****/
|
/***** Get folder name where to send works of the project *****/
|
||||||
Par_GetParToText ("Folder",NewPrj.Folder,Brw_MAX_BYTES_FOLDER);
|
NewPrj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED :
|
||||||
NewPrj.SendWork = (NewPrj.Folder[0]) ? Prj_SEND_WORK :
|
Prj_NOT_PREASSIGNED;
|
||||||
Prj_DO_NOT_SEND_WORK;
|
|
||||||
|
|
||||||
/***** Get project text *****/
|
/***** Get project text *****/
|
||||||
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
||||||
|
@ -1316,38 +1223,6 @@ void Prj_RecFormProject (void)
|
||||||
NewPrj.Title);
|
NewPrj.Title);
|
||||||
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
|
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
|
||||||
}
|
}
|
||||||
else // Title is correct
|
|
||||||
{
|
|
||||||
if (NewPrj.SendWork == Prj_SEND_WORK)
|
|
||||||
{
|
|
||||||
if (Str_ConvertFilFolLnkNameToValid (NewPrj.Folder)) // If folder name is valid...
|
|
||||||
{
|
|
||||||
if (Prj_CheckIfSimilarProjectsExists ("Folder",NewPrj.Folder,NewPrj.PrjCod)) // If folder of project was in database...
|
|
||||||
{
|
|
||||||
NewProjectIsCorrect = false;
|
|
||||||
sprintf (Gbl.Alert.Txt,Txt_Already_existed_a_project_with_the_folder_X,
|
|
||||||
NewPrj.Folder);
|
|
||||||
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // Folder name not valid
|
|
||||||
{
|
|
||||||
NewProjectIsCorrect = false;
|
|
||||||
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // NewPrj.SendWork == Prj_DO_NOT_SEND_WORK
|
|
||||||
{
|
|
||||||
if (OldPrj.SendWork == Prj_SEND_WORK)
|
|
||||||
{
|
|
||||||
if (Brw_CheckIfExistsFolderAssigmentForAnyUsr (OldPrj.Folder))
|
|
||||||
{
|
|
||||||
NewProjectIsCorrect = false;
|
|
||||||
Ale_ShowAlert (Ale_WARNING,Txt_You_can_not_disable_file_uploading_once_folders_have_been_created);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else // If there is not a project title
|
else // If there is not a project title
|
||||||
{
|
{
|
||||||
|
@ -1369,19 +1244,13 @@ void Prj_RecFormProject (void)
|
||||||
sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,NewPrj.Title);
|
sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,NewPrj.Title);
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
||||||
}
|
}
|
||||||
else
|
else if (NewProjectIsCorrect)
|
||||||
{
|
{
|
||||||
if (OldPrj.Folder[0] && NewPrj.Folder[0])
|
Prj_UpdateProject (&NewPrj,Txt);
|
||||||
if (strcmp (OldPrj.Folder,NewPrj.Folder)) // Folder name has changed
|
|
||||||
NewProjectIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldPrj.Folder,NewPrj.Folder);
|
|
||||||
if (NewProjectIsCorrect)
|
|
||||||
{
|
|
||||||
Prj_UpdateProject (&NewPrj,Txt);
|
|
||||||
|
|
||||||
/***** 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);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Free memory for list of selected groups */
|
/* Free memory for list of selected groups */
|
||||||
Grp_FreeListCodSelectedGrps ();
|
Grp_FreeListCodSelectedGrps ();
|
||||||
|
@ -1401,21 +1270,22 @@ void Prj_RecFormProject (void)
|
||||||
static void Prj_CreateProject (struct Project *Prj,const char *Txt)
|
static void Prj_CreateProject (struct Project *Prj,const char *Txt)
|
||||||
{
|
{
|
||||||
char Query[1024 +
|
char Query[1024 +
|
||||||
Prj_MAX_BYTES_ASSIGNMENT_TITLE +
|
Prj_MAX_BYTES_PROJECT_TITLE +
|
||||||
Cns_MAX_BYTES_TEXT];
|
Cns_MAX_BYTES_TEXT];
|
||||||
|
|
||||||
/***** Create a new project *****/
|
/***** Create a new project *****/
|
||||||
sprintf (Query,"INSERT INTO projects"
|
sprintf (Query,"INSERT INTO projects"
|
||||||
" (CrsCod,UsrCod,StartTime,EndTime,Title,Folder,Txt)"
|
" (CrsCod,UsrCod,StartTime,EndTime,Title,Preassigned,Txt)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
||||||
"'%s','%s','%s')",
|
"'%s','%c','%s')",
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,
|
Gbl.CurrentCrs.Crs.CrsCod,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
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,
|
||||||
Prj->Folder,
|
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
|
||||||
|
'N',
|
||||||
Txt);
|
Txt);
|
||||||
Prj->PrjCod = DB_QueryINSERTandReturnCode (Query,"can not create new project");
|
Prj->PrjCod = DB_QueryINSERTandReturnCode (Query,"can not create new project");
|
||||||
|
|
||||||
|
@ -1431,19 +1301,20 @@ static void Prj_CreateProject (struct Project *Prj,const char *Txt)
|
||||||
static void Prj_UpdateProject (struct Project *Prj,const char *Txt)
|
static void Prj_UpdateProject (struct Project *Prj,const char *Txt)
|
||||||
{
|
{
|
||||||
char Query[1024 +
|
char Query[1024 +
|
||||||
Prj_MAX_BYTES_ASSIGNMENT_TITLE +
|
Prj_MAX_BYTES_PROJECT_TITLE +
|
||||||
Cns_MAX_BYTES_TEXT];
|
Cns_MAX_BYTES_TEXT];
|
||||||
|
|
||||||
/***** Update the data of the project *****/
|
/***** Update the data of the project *****/
|
||||||
sprintf (Query,"UPDATE projects SET "
|
sprintf (Query,"UPDATE projects SET "
|
||||||
"StartTime=FROM_UNIXTIME(%ld),"
|
"StartTime=FROM_UNIXTIME(%ld),"
|
||||||
"EndTime=FROM_UNIXTIME(%ld),"
|
"EndTime=FROM_UNIXTIME(%ld),"
|
||||||
"Title='%s',Folder='%s',Txt='%s'"
|
"Title='%s',Preassigned='%c',Txt='%s'"
|
||||||
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
||||||
Prj->TimeUTC[Dat_START_TIME],
|
Prj->TimeUTC[Dat_START_TIME],
|
||||||
Prj->TimeUTC[Dat_END_TIME ],
|
Prj->TimeUTC[Dat_END_TIME ],
|
||||||
Prj->Title,
|
Prj->Title,
|
||||||
Prj->Folder,
|
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
|
||||||
|
'N',
|
||||||
Txt,
|
Txt,
|
||||||
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
|
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
DB_QueryUPDATE (Query,"can not update project");
|
DB_QueryUPDATE (Query,"can not update project");
|
||||||
|
|
|
@ -36,15 +36,15 @@
|
||||||
/************************** Public types and constants ***********************/
|
/************************** Public types and constants ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Prj_MAX_CHARS_ASSIGNMENT_TITLE (128 - 1) // 127
|
#define Prj_MAX_CHARS_PROJECT_TITLE (128 - 1) // 127
|
||||||
#define Prj_MAX_BYTES_ASSIGNMENT_TITLE ((Prj_MAX_CHARS_ASSIGNMENT_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
|
#define Prj_MAX_BYTES_PROJECT_TITLE ((Prj_MAX_CHARS_PROJECT_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
|
||||||
|
|
||||||
#define Prj_NUM_TYPES_SEND_WORK 2
|
#define Prj_NUM_TYPES_PREASSIGNED 2
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Prj_DO_NOT_SEND_WORK = 0,
|
Prj_NOT_PREASSIGNED = 0,
|
||||||
Prj_SEND_WORK = 1,
|
Prj_PREASSIGNED = 1,
|
||||||
} Prj_SendWork_t;
|
} Prj_Preassigned_t;
|
||||||
|
|
||||||
struct Project
|
struct Project
|
||||||
{
|
{
|
||||||
|
@ -53,9 +53,8 @@ struct Project
|
||||||
long UsrCod;
|
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_ASSIGNMENT_TITLE + 1];
|
char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1];
|
||||||
Prj_SendWork_t SendWork;
|
Prj_Preassigned_t Preassigned;
|
||||||
char Folder[Brw_MAX_BYTES_FOLDER + 1];
|
|
||||||
bool IBelongToCrsOrGrps; // I can do this assignment
|
bool IBelongToCrsOrGrps; // I can do this assignment
|
||||||
// (it is associated to no groups
|
// (it is associated to no groups
|
||||||
// or, if associated to groups,
|
// or, if associated to groups,
|
||||||
|
@ -75,7 +74,6 @@ void Prj_PutHiddenParamPrjOrder (void);
|
||||||
void Prj_RequestCreatOrEditPrj (void);
|
void Prj_RequestCreatOrEditPrj (void);
|
||||||
void Prj_GetListProjects (void);
|
void Prj_GetListProjects (void);
|
||||||
void Prj_GetDataOfProjectByCod (struct Project *Prj);
|
void Prj_GetDataOfProjectByCod (struct Project *Prj);
|
||||||
void Prj_GetDataOfProjectByFolder (struct Project *Prj);
|
|
||||||
void Prj_FreeListProjects (void);
|
void Prj_FreeListProjects (void);
|
||||||
|
|
||||||
long Prj_GetParamPrjCod (void);
|
long Prj_GetParamPrjCod (void);
|
||||||
|
|
|
@ -2570,7 +2570,7 @@ static void Rec_PutIconsCommands (void)
|
||||||
/***** Button to view user's profile *****/
|
/***** Button to view user's profile *****/
|
||||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
||||||
Rec_PutParamUsrCodEncrypted,
|
Rec_PutParamUsrCodEncrypted,
|
||||||
"usr64x64.gif",
|
"usr64x64.png",
|
||||||
ItsMe ? Txt_My_public_profile :
|
ItsMe ? Txt_My_public_profile :
|
||||||
Txt_Another_user_s_profile,NULL,
|
Txt_Another_user_s_profile,NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
|
@ -7025,7 +7025,6 @@ static void Sta_GetAndShowGamesStats (void)
|
||||||
extern const char *Txt_Number_of_BR_courses_with_BR_games;
|
extern const char *Txt_Number_of_BR_courses_with_BR_games;
|
||||||
extern const char *Txt_Average_number_BR_of_games_BR_per_course;
|
extern const char *Txt_Average_number_BR_of_games_BR_per_course;
|
||||||
unsigned NumGames;
|
unsigned NumGames;
|
||||||
unsigned NumNotif;
|
|
||||||
unsigned NumCoursesWithGames = 0;
|
unsigned NumCoursesWithGames = 0;
|
||||||
float NumGamesPerCourse = 0.0;
|
float NumGamesPerCourse = 0.0;
|
||||||
|
|
||||||
|
|
69
swad_text.c
69
swad_text.c
|
@ -83,6 +83,7 @@
|
||||||
#include "swad_menu.h"
|
#include "swad_menu.h"
|
||||||
#include "swad_notification.h"
|
#include "swad_notification.h"
|
||||||
#include "swad_photo.h"
|
#include "swad_photo.h"
|
||||||
|
#include "swad_project.h"
|
||||||
#include "swad_QR.h"
|
#include "swad_QR.h"
|
||||||
#include "swad_record.h"
|
#include "swad_record.h"
|
||||||
#include "swad_social.h"
|
#include "swad_social.h"
|
||||||
|
@ -30409,6 +30410,70 @@ const char *Txt_Post_unbanned =
|
||||||
"Post unbanned."; // Necessita de tradução
|
"Post unbanned."; // Necessita de tradução
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Preassigned_QUESTION =
|
||||||
|
#if L==1
|
||||||
|
"Preassignat?";
|
||||||
|
#elif L==2
|
||||||
|
"Vorzugeordnet?";
|
||||||
|
#elif L==3
|
||||||
|
"Preassigned?";
|
||||||
|
#elif L==4
|
||||||
|
"¿Preasignado?";
|
||||||
|
#elif L==5
|
||||||
|
"Préassigné?";
|
||||||
|
#elif L==6
|
||||||
|
"¿Preasignado?"; // Okoteve traducción
|
||||||
|
#elif L==7
|
||||||
|
"Preassegnato?";
|
||||||
|
#elif L==8
|
||||||
|
"Zadany?";
|
||||||
|
#elif L==9
|
||||||
|
"Pré-atribuído?";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_PREASSIGNED_TYPES[Prj_NUM_TYPES_PREASSIGNED] =
|
||||||
|
{
|
||||||
|
#if L==1
|
||||||
|
"No preassignat"
|
||||||
|
#elif L==2
|
||||||
|
"Nicht vorzugeordnet"
|
||||||
|
#elif L==3
|
||||||
|
"Not preassigned"
|
||||||
|
#elif L==4
|
||||||
|
"No preasignado"
|
||||||
|
#elif L==5
|
||||||
|
"Non préassigné"
|
||||||
|
#elif L==6
|
||||||
|
"No preasignado" // Okoteve traducción
|
||||||
|
#elif L==7
|
||||||
|
"Non preassegnato"
|
||||||
|
#elif L==8
|
||||||
|
"Nieprzypisane"
|
||||||
|
#elif L==9
|
||||||
|
"Não pré-atribuído"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
#if L==1
|
||||||
|
"Preassignat"
|
||||||
|
#elif L==2
|
||||||
|
"Vorzugeordnet"
|
||||||
|
#elif L==3
|
||||||
|
"Preassigned"
|
||||||
|
#elif L==4
|
||||||
|
"Preasignado"
|
||||||
|
#elif L==5
|
||||||
|
"Préassigné"
|
||||||
|
#elif L==6
|
||||||
|
"Preasignado" // Okoteve traducción
|
||||||
|
#elif L==7
|
||||||
|
"Preassegnato"
|
||||||
|
#elif L==8
|
||||||
|
"Zadany"
|
||||||
|
#elif L==9
|
||||||
|
"Pré-atribuído"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
const char *Txt_Preferences =
|
const char *Txt_Preferences =
|
||||||
#if L==1
|
#if L==1
|
||||||
"Preferències";
|
"Preferències";
|
||||||
|
@ -46511,7 +46576,7 @@ const char *Txt_The_project_has_been_modified =
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"The project has been modified.";
|
"The project has been modified.";
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Le projet ha sido modificado.";
|
"El proyecto ha sido modificado.";
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Le projet a été modifié.";
|
"Le projet a été modifié.";
|
||||||
#elif L==6
|
#elif L==6
|
||||||
|
@ -52569,7 +52634,7 @@ const char *Txt_Welcome_X_and_happy_birthday[Usr_NUM_SEXS] = // Warning: it is v
|
||||||
|
|
||||||
const char *Txt_What_would_you_like_to_do =
|
const char *Txt_What_would_you_like_to_do =
|
||||||
#if L==1
|
#if L==1
|
||||||
"Què voleu fer?";
|
"¿Què voleu fer?";
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Was würden Sie tun?";
|
"Was würden Sie tun?";
|
||||||
#elif L==3
|
#elif L==3
|
||||||
|
|
Loading…
Reference in New Issue