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\"" "
%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,"\"%s\"", - 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