diff --git a/icon/usr64x64.png b/icon/usr64x64.png
new file mode 100644
index 00000000..19dacf8d
Binary files /dev/null and b/icon/usr64x64.png differ
diff --git a/icon/usr_off64x64.png b/icon/usr_off64x64.png
new file mode 100644
index 00000000..cf04823b
Binary files /dev/null and b/icon/usr_off64x64.png differ
diff --git a/sql/swad.sql b/sql/swad.sql
index 20624fdf..c98b1dde 100644
--- a/sql/swad.sql
+++ b/sql/swad.sql
@@ -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));
diff --git a/swad_agenda.c b/swad_agenda.c
index 856d5cbe..5e887141 100644
--- a/swad_agenda.c
+++ b/swad_agenda.c
@@ -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);
diff --git a/swad_assignment.c b/swad_assignment.c
index b2ba52ef..c8f0237e 100644
--- a/swad_assignment.c
+++ b/swad_assignment.c
@@ -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;
}
diff --git a/swad_changelog.h b/swad_changelog.h
index c385fba4..e454f724 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -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:
diff --git a/swad_database.c b/swad_database.c
index be2f079a..1ad8030d 100644
--- a/swad_database.c
+++ b/swad_database.c
@@ -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))");
diff --git a/swad_follow.c b/swad_follow.c
index a358f1e4..890a6d4c 100644
--- a/swad_follow.c
+++ b/swad_follow.c
@@ -941,7 +941,7 @@ static void Fol_PutInactiveIconToFollowUnfollow (void)
{
/***** Inactive icon to follow/unfollow *****/
fprintf (Gbl.F.Out,"
"
- "
"
"
",
diff --git a/swad_profile.c b/swad_profile.c
index 536e90a3..1f1620b9 100644
--- a/swad_profile.c
+++ b/swad_profile.c
@@ -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);
}
diff --git a/swad_project.c b/swad_project.c
index 805e61df..bd532423 100644
--- a/swad_project.c
+++ b/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,""
@@ -230,13 +228,9 @@ static void Prj_PutHeadForSeeing (bool PrintView)
""
"%s"
" | "
- ""
- "%s"
- " | "
"
",
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,"");
- /* Send work? */
+ /* Preassigned? */
fprintf (Gbl.F.Out,""
- ""
" %s"
- " | ",
+ ""
+ "",
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,"");
- if (Prj.SendWork == Prj_SEND_WORK)
- Prj_WriteProjectFolder (&Prj,PrintView);
- fprintf (Gbl.F.Out," | "
- "");
+ (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,""
@@ -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,"");
@@ -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,"",
- Gbl.Prefs.IconsURL,
- Gbl.Title,
- Gbl.Title);
- Act_FormEnd ();
- }
- else // I can't send files to this project folder
- fprintf (Gbl.F.Out,"",
- 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)
" | "
"
",
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,""
""
"%s:"
" | "
""
- ""
- " | "
- "
",
+ ""
+ ""
+ "");
/***** Project text *****/
fprintf (Gbl.F.Out,""
@@ -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");
diff --git a/swad_project.h b/swad_project.h
index dbcdb4ef..0ff8662c 100644
--- a/swad_project.h
+++ b/swad_project.h
@@ -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);
diff --git a/swad_record.c b/swad_record.c
index 9d5d63c2..cfb6bf73 100644
--- a/swad_record.c
+++ b/swad_record.c
@@ -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);
diff --git a/swad_statistic.c b/swad_statistic.c
index d23ca46a..df7307d3 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -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;
diff --git a/swad_text.c b/swad_text.c
index 94cdbdd5..27b94927 100644
--- a/swad_text.c
+++ b/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