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,
|
||||
CrsCod INT NOT NULL DEFAULT -1,
|
||||
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||
NumNotif INT NOT NULL DEFAULT 0,
|
||||
UsrCod INT NOT NULL,
|
||||
StartTime DATETIME NOT NULL,
|
||||
EndTime DATETIME NOT NULL,
|
||||
Title VARCHAR(2047) NOT NULL,
|
||||
Folder VARBINARY(255) NOT NULL,
|
||||
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||
Txt TEXT NOT NULL,
|
||||
UNIQUE INDEX(PrjCod),
|
||||
INDEX(CrsCod,Hidden));
|
||||
|
|
|
@ -679,7 +679,7 @@ static void Agd_PutIconsOtherPublicAgenda (void)
|
|||
&Gbl.Usrs.Other.UsrDat))
|
||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
||||
Usr_PutParamOtherUsrCodEncrypted,
|
||||
"usr64x64.gif",
|
||||
"usr64x64.png",
|
||||
Txt_Another_user_s_profile,NULL,
|
||||
NULL);
|
||||
|
||||
|
|
|
@ -831,7 +831,7 @@ static void Asg_ResetAssignment (struct Assignment *Asg)
|
|||
Asg->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||
Asg->Open = false;
|
||||
Asg->Title[0] = '\0';
|
||||
Asg->SendWork = false;
|
||||
Asg->SendWork = Asg_DO_NOT_SEND_WORK;
|
||||
Asg->Folder[0] = '\0';
|
||||
Asg->IBelongToCrsOrGrps = false;
|
||||
}
|
||||
|
@ -1145,7 +1145,7 @@ void Asg_RequestCreatOrEditAsg (void)
|
|||
Asg.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||
Asg.Open = true;
|
||||
Asg.Title[0] = '\0';
|
||||
Asg.SendWork = false;
|
||||
Asg.SendWork = Asg_DO_NOT_SEND_WORK;
|
||||
Asg.Folder[0] = '\0';
|
||||
Asg.IBelongToCrsOrGrps = false;
|
||||
}
|
||||
|
|
|
@ -252,14 +252,22 @@
|
|||
/****************************** 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 JS_FILE "swad16.206.3.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.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: Sep 17, 2017 New option for projects. Not finished. (229575 lines)
|
||||
12 changes necessary in database:
|
||||
|
|
|
@ -2004,33 +2004,31 @@ mysql> DESCRIBE prj_grp;
|
|||
/***** 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 | |
|
||||
| Hidden | enum('N','Y') | NO | | N | |
|
||||
| NumNotif | int(11) | NO | | 0 | |
|
||||
| UsrCod | int(11) | NO | | NULL | |
|
||||
| StartTime | datetime | NO | | NULL | |
|
||||
| EndTime | datetime | NO | | NULL | |
|
||||
| Title | varchar(2047) | NO | | NULL | |
|
||||
| Folder | varbinary(255) | NO | | NULL | |
|
||||
| Txt | text | NO | | NULL | |
|
||||
+-----------+----------------+------+-----+---------+----------------+
|
||||
10 rows in set (0,00 sec)
|
||||
+-------------+---------------+------+-----+---------+----------------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+-------------+---------------+------+-----+---------+----------------+
|
||||
| PrjCod | int(11) | NO | PRI | NULL | auto_increment |
|
||||
| CrsCod | int(11) | NO | MUL | -1 | |
|
||||
| Hidden | enum('N','Y') | NO | | N | |
|
||||
| UsrCod | int(11) | NO | | NULL | |
|
||||
| StartTime | datetime | NO | | NULL | |
|
||||
| EndTime | datetime | NO | | NULL | |
|
||||
| Title | varchar(2047) | NO | | NULL | |
|
||||
| Preassigned | enum('N','Y') | NO | | N | |
|
||||
| Txt | text | NO | | NULL | |
|
||||
+-------------+---------------+------+-----+---------+----------------+
|
||||
9 rows in set (0,00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects ("
|
||||
"PrjCod INT NOT NULL AUTO_INCREMENT,"
|
||||
"CrsCod INT NOT NULL DEFAULT -1,"
|
||||
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||
"NumNotif INT NOT NULL DEFAULT 0,"
|
||||
"UsrCod INT NOT NULL,"
|
||||
"StartTime DATETIME NOT NULL,"
|
||||
"EndTime DATETIME NOT NULL,"
|
||||
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_ASSIGNMENT_TITLE
|
||||
"Folder VARBINARY(255) NOT NULL," // Brw_MAX_BYTES_FOLDER
|
||||
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_CHARS_PROJECT_TITLE
|
||||
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||
"UNIQUE INDEX(PrjCod),"
|
||||
"INDEX(CrsCod,Hidden))");
|
||||
|
||||
|
|
|
@ -941,7 +941,7 @@ static void Fol_PutInactiveIconToFollowUnfollow (void)
|
|||
{
|
||||
/***** Inactive icon to follow/unfollow *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"FOLLOW_USR_ICO ICO_HIDDEN\">"
|
||||
"<img src=\"%s/usr64x64.gif\""
|
||||
"<img src=\"%s/usr64x64.png\""
|
||||
" alt=\"\""
|
||||
" class=\"ICO20x20\" />"
|
||||
"</div>",
|
||||
|
|
|
@ -131,7 +131,7 @@ void Prf_PutLinkMyPublicProfile (void)
|
|||
extern const char *Txt_My_public_profile;
|
||||
|
||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,Usr_PutParamMyUsrCodEncrypted,
|
||||
"usr64x64.gif",
|
||||
"usr64x64.png",
|
||||
Txt_My_public_profile,Txt_My_public_profile,
|
||||
NULL);
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ void Prf_PutLinkRequestAnotherUserProfile (void)
|
|||
extern const char *Txt_Another_user_s_profile;
|
||||
|
||||
Lay_PutContextualLink (ActReqOthPubPrf,NULL,NULL,
|
||||
"usr64x64.gif",
|
||||
"usr64x64.png",
|
||||
Txt_Another_user_s_profile,Txt_Another_user_s_profile,
|
||||
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_ShowOneProject (long PrjCod,bool PrintView);
|
||||
static void Prj_WritePrjAuthor (struct Project *Prj);
|
||||
static void Prj_WriteProjectFolder (struct Project *Prj,bool PrintView);
|
||||
static void Prj_GetParamPrjOrder (void);
|
||||
|
||||
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[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Project;
|
||||
extern const char *Txt_Upload_files_QUESTION;
|
||||
extern const char *Txt_Folder;
|
||||
extern const char *Txt_Preassigned_QUESTION;
|
||||
Dat_StartEndTime_t Order;
|
||||
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -230,13 +228,9 @@ static void Prj_PutHeadForSeeing (bool PrintView)
|
|||
"<th class=\"CENTER_MIDDLE\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"LEFT_MIDDLE\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"</tr>",
|
||||
Txt_Project,
|
||||
Txt_Upload_files_QUESTION,
|
||||
Txt_Folder);
|
||||
Txt_Preassigned_QUESTION);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -331,11 +325,11 @@ void Prj_PrintOneProject (void)
|
|||
|
||||
/***** Table head *****/
|
||||
Tbl_StartTableWideMargin (2);
|
||||
Prj_PutHeadForSeeing (true); // Print view
|
||||
Prj_PutHeadForSeeing (true); // Print view
|
||||
|
||||
/***** Write project *****/
|
||||
Prj_ShowOneProject (PrjCod,
|
||||
true); // Print view
|
||||
true); // Print view
|
||||
|
||||
/***** End table *****/
|
||||
Tbl_EndTable ();
|
||||
|
@ -348,7 +342,7 @@ void Prj_PrintOneProject (void)
|
|||
static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
||||
{
|
||||
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_No;
|
||||
static unsigned UniqueId = 0;
|
||||
|
@ -421,34 +415,25 @@ static void Prj_ShowOneProject (long PrjCod,bool PrintView)
|
|||
Prj.Title);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Send work? */
|
||||
/* Preassigned? */
|
||||
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP",
|
||||
(Prj.SendWork == Prj_SEND_WORK) ? "DAT_N" :
|
||||
"DAT");
|
||||
(Prj.Preassigned == Prj_PREASSIGNED) ? "DAT_N" :
|
||||
"DAT");
|
||||
if (!PrintView)
|
||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||
fprintf (Gbl.F.Out,"\">"
|
||||
"<img src=\"%s/%s16x16.gif\""
|
||||
"<img src=\"%s/%s64x64.png\""
|
||||
" alt=\"%s\" title=\"%s\" class=\"ICO20x20\" />"
|
||||
"<br />%s"
|
||||
"</td>",
|
||||
"</td>"
|
||||
"</tr>",
|
||||
Gbl.Prefs.IconsURL,
|
||||
(Prj.SendWork == Prj_SEND_WORK) ? "file_on" :
|
||||
"file_off",
|
||||
Txt_ASSIGNMENT_TYPES[Prj.SendWork],
|
||||
Txt_ASSIGNMENT_TYPES[Prj.SendWork],
|
||||
(Prj.SendWork == Prj_SEND_WORK) ? Txt_Yes :
|
||||
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>");
|
||||
(Prj.Preassigned == Prj_PREASSIGNED) ? "usr" :
|
||||
"usr_off",
|
||||
Txt_PREASSIGNED_TYPES[Prj.Preassigned],
|
||||
Txt_PREASSIGNED_TYPES[Prj.Preassigned],
|
||||
(Prj.Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
|
||||
Txt_No);
|
||||
|
||||
/***** Write second row of data of this project *****/
|
||||
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,
|
||||
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
|
||||
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)
|
||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||
fprintf (Gbl.F.Out,"\">");
|
||||
|
@ -496,51 +481,6 @@ static void Prj_WritePrjAuthor (struct Project *Prj)
|
|||
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 **********/
|
||||
/*****************************************************************************/
|
||||
|
@ -710,7 +650,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
|
|||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"Title,Folder"
|
||||
"Title,Preassigned"
|
||||
" FROM projects"
|
||||
" WHERE PrjCod=%ld AND CrsCod=%ld",
|
||||
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 *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -795,12 +704,11 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
|
|||
|
||||
/* Get the title of the project (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]) */
|
||||
Str_Copy (Prj->Folder,row[7],
|
||||
Brw_MAX_BYTES_FOLDER);
|
||||
Prj->SendWork = (Prj->Folder[0] != '\0');
|
||||
Prj->Preassigned = (row[7][0] == 'Y') ? Prj_PREASSIGNED :
|
||||
Prj_NOT_PREASSIGNED;
|
||||
|
||||
/* Can I do this project? */
|
||||
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->Open = false;
|
||||
Prj->Title[0] = '\0';
|
||||
Prj->SendWork = false;
|
||||
Prj->Folder[0] = '\0';
|
||||
Prj->Preassigned = Prj_NOT_PREASSIGNED;
|
||||
Prj->IBelongToCrsOrGrps = false;
|
||||
}
|
||||
|
||||
|
@ -951,10 +858,6 @@ void Prj_RemoveProject (void)
|
|||
/***** Get data of the project from database *****/
|
||||
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 *****/
|
||||
Prj_RemoveAllTheGrpsAssociatedToAProject (Prj.PrjCod);
|
||||
|
||||
|
@ -1043,7 +946,7 @@ void Prj_ShowProject (void)
|
|||
|
||||
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 *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM projects"
|
||||
|
@ -1064,8 +967,9 @@ void Prj_RequestCreatOrEditPrj (void)
|
|||
extern const char *Txt_New_project;
|
||||
extern const char *Txt_Edit_project;
|
||||
extern const char *Txt_Title;
|
||||
extern const char *Txt_Upload_files_QUESTION;
|
||||
extern const char *Txt_Folder;
|
||||
extern const char *Txt_Preassigned_QUESTION;
|
||||
extern const char *Txt_No;
|
||||
extern const char *Txt_Yes;
|
||||
extern const char *Txt_Description;
|
||||
extern const char *Txt_Create_project;
|
||||
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.Open = true;
|
||||
Prj.Title[0] = '\0';
|
||||
Prj.SendWork = false;
|
||||
Prj.Folder[0] = '\0';
|
||||
Prj.Preassigned = Prj_NOT_PREASSIGNED;
|
||||
Prj.IBelongToCrsOrGrps = false;
|
||||
}
|
||||
else
|
||||
|
@ -1136,27 +1039,34 @@ void Prj_RequestCreatOrEditPrj (void)
|
|||
"</td>"
|
||||
"</tr>",
|
||||
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 *****/
|
||||
Dat_PutFormStartEndClientLocalDateTimes (Prj.TimeUTC,Dat_FORM_SECONDS_ON);
|
||||
|
||||
/***** Send work? *****/
|
||||
/***** Preassigned? *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"%s RIGHT_MIDDLE\">"
|
||||
"%s:"
|
||||
"</td>"
|
||||
"<td class=\"LEFT_MIDDLE\">"
|
||||
"<label class=\"DAT\">%s:"
|
||||
"<input type=\"text\" name=\"Folder\""
|
||||
" size=\"30\" maxlength=\"%u\" value=\"%s\" />"
|
||||
"</label>"
|
||||
"</td>"
|
||||
"</tr>",
|
||||
"<select name=\"Preassigned\">",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_Upload_files_QUESTION,
|
||||
Txt_Folder,
|
||||
Brw_MAX_CHARS_FOLDER,Prj.Folder);
|
||||
Txt_Preassigned_QUESTION);
|
||||
|
||||
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 *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -1256,11 +1166,9 @@ static void Prj_ShowLstGrpsToEditProject (long PrjCod)
|
|||
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_folder_X;
|
||||
extern const char *Txt_You_must_specify_the_title_of_the_project;
|
||||
extern const char *Txt_Created_new_project_X;
|
||||
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 NewPrj; // Project data received from form
|
||||
bool ItsANewProject;
|
||||
|
@ -1289,12 +1197,11 @@ void Prj_RecFormProject (void)
|
|||
NewPrj.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||
|
||||
/***** 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 *****/
|
||||
Par_GetParToText ("Folder",NewPrj.Folder,Brw_MAX_BYTES_FOLDER);
|
||||
NewPrj.SendWork = (NewPrj.Folder[0]) ? Prj_SEND_WORK :
|
||||
Prj_DO_NOT_SEND_WORK;
|
||||
NewPrj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED :
|
||||
Prj_NOT_PREASSIGNED;
|
||||
|
||||
/***** Get project text *****/
|
||||
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
||||
|
@ -1316,38 +1223,6 @@ void Prj_RecFormProject (void)
|
|||
NewPrj.Title);
|
||||
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
|
||||
{
|
||||
|
@ -1369,19 +1244,13 @@ void Prj_RecFormProject (void)
|
|||
sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,NewPrj.Title);
|
||||
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (OldPrj.Folder[0] && NewPrj.Folder[0])
|
||||
if (strcmp (OldPrj.Folder,NewPrj.Folder)) // Folder name has changed
|
||||
NewProjectIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldPrj.Folder,NewPrj.Folder);
|
||||
if (NewProjectIsCorrect)
|
||||
{
|
||||
Prj_UpdateProject (&NewPrj,Txt);
|
||||
else if (NewProjectIsCorrect)
|
||||
{
|
||||
Prj_UpdateProject (&NewPrj,Txt);
|
||||
|
||||
/***** Write success message *****/
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_project_has_been_modified);
|
||||
}
|
||||
}
|
||||
/***** Write success message *****/
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_project_has_been_modified);
|
||||
}
|
||||
|
||||
/* Free memory for list of selected groups */
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
|
@ -1401,21 +1270,22 @@ void Prj_RecFormProject (void)
|
|||
static void Prj_CreateProject (struct Project *Prj,const char *Txt)
|
||||
{
|
||||
char Query[1024 +
|
||||
Prj_MAX_BYTES_ASSIGNMENT_TITLE +
|
||||
Prj_MAX_BYTES_PROJECT_TITLE +
|
||||
Cns_MAX_BYTES_TEXT];
|
||||
|
||||
/***** Create a new project *****/
|
||||
sprintf (Query,"INSERT INTO projects"
|
||||
" (CrsCod,UsrCod,StartTime,EndTime,Title,Folder,Txt)"
|
||||
" (CrsCod,UsrCod,StartTime,EndTime,Title,Preassigned,Txt)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
||||
"'%s','%s','%s')",
|
||||
"'%s','%c','%s')",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Prj->TimeUTC[Dat_START_TIME],
|
||||
Prj->TimeUTC[Dat_END_TIME ],
|
||||
Prj->Title,
|
||||
Prj->Folder,
|
||||
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
|
||||
'N',
|
||||
Txt);
|
||||
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)
|
||||
{
|
||||
char Query[1024 +
|
||||
Prj_MAX_BYTES_ASSIGNMENT_TITLE +
|
||||
Prj_MAX_BYTES_PROJECT_TITLE +
|
||||
Cns_MAX_BYTES_TEXT];
|
||||
|
||||
/***** Update the data of the project *****/
|
||||
sprintf (Query,"UPDATE projects SET "
|
||||
"StartTime=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",
|
||||
Prj->TimeUTC[Dat_START_TIME],
|
||||
Prj->TimeUTC[Dat_END_TIME ],
|
||||
Prj->Title,
|
||||
Prj->Folder,
|
||||
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
|
||||
'N',
|
||||
Txt,
|
||||
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
DB_QueryUPDATE (Query,"can not update project");
|
||||
|
|
|
@ -36,15 +36,15 @@
|
|||
/************************** Public types and constants ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Prj_MAX_CHARS_ASSIGNMENT_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_CHARS_PROJECT_TITLE (128 - 1) // 127
|
||||
#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
|
||||
{
|
||||
Prj_DO_NOT_SEND_WORK = 0,
|
||||
Prj_SEND_WORK = 1,
|
||||
} Prj_SendWork_t;
|
||||
Prj_NOT_PREASSIGNED = 0,
|
||||
Prj_PREASSIGNED = 1,
|
||||
} Prj_Preassigned_t;
|
||||
|
||||
struct Project
|
||||
{
|
||||
|
@ -53,9 +53,8 @@ struct Project
|
|||
long UsrCod;
|
||||
time_t TimeUTC[Dat_NUM_START_END_TIME];
|
||||
bool Open;
|
||||
char Title[Prj_MAX_BYTES_ASSIGNMENT_TITLE + 1];
|
||||
Prj_SendWork_t SendWork;
|
||||
char Folder[Brw_MAX_BYTES_FOLDER + 1];
|
||||
char Title[Prj_MAX_BYTES_PROJECT_TITLE + 1];
|
||||
Prj_Preassigned_t Preassigned;
|
||||
bool IBelongToCrsOrGrps; // I can do this assignment
|
||||
// (it is associated to no groups
|
||||
// or, if associated to groups,
|
||||
|
@ -75,7 +74,6 @@ void Prj_PutHiddenParamPrjOrder (void);
|
|||
void Prj_RequestCreatOrEditPrj (void);
|
||||
void Prj_GetListProjects (void);
|
||||
void Prj_GetDataOfProjectByCod (struct Project *Prj);
|
||||
void Prj_GetDataOfProjectByFolder (struct Project *Prj);
|
||||
void Prj_FreeListProjects (void);
|
||||
|
||||
long Prj_GetParamPrjCod (void);
|
||||
|
|
|
@ -2570,7 +2570,7 @@ static void Rec_PutIconsCommands (void)
|
|||
/***** Button to view user's profile *****/
|
||||
Lay_PutContextualLink (ActSeeOthPubPrf,NULL,
|
||||
Rec_PutParamUsrCodEncrypted,
|
||||
"usr64x64.gif",
|
||||
"usr64x64.png",
|
||||
ItsMe ? Txt_My_public_profile :
|
||||
Txt_Another_user_s_profile,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_Average_number_BR_of_games_BR_per_course;
|
||||
unsigned NumGames;
|
||||
unsigned NumNotif;
|
||||
unsigned NumCoursesWithGames = 0;
|
||||
float NumGamesPerCourse = 0.0;
|
||||
|
||||
|
|
69
swad_text.c
69
swad_text.c
|
@ -83,6 +83,7 @@
|
|||
#include "swad_menu.h"
|
||||
#include "swad_notification.h"
|
||||
#include "swad_photo.h"
|
||||
#include "swad_project.h"
|
||||
#include "swad_QR.h"
|
||||
#include "swad_record.h"
|
||||
#include "swad_social.h"
|
||||
|
@ -30409,6 +30410,70 @@ const char *Txt_Post_unbanned =
|
|||
"Post unbanned."; // Necessita de tradução
|
||||
#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 =
|
||||
#if L==1
|
||||
"Preferències";
|
||||
|
@ -46511,7 +46576,7 @@ const char *Txt_The_project_has_been_modified =
|
|||
#elif L==3
|
||||
"The project has been modified.";
|
||||
#elif L==4
|
||||
"Le projet ha sido modificado.";
|
||||
"El proyecto ha sido modificado.";
|
||||
#elif L==5
|
||||
"Le projet a été modifié.";
|
||||
#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 =
|
||||
#if L==1
|
||||
"Què voleu fer?";
|
||||
"¿Què voleu fer?";
|
||||
#elif L==2
|
||||
"Was würden Sie tun?";
|
||||
#elif L==3
|
||||
|
|
Loading…
Reference in New Issue