diff --git a/swad_assignment.c b/swad_assignment.c index a480b82d5..0744fee10 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -1176,9 +1176,13 @@ void Asg_RequestCreatOrEditAsg (void) Box_StartBoxTable (NULL,Txt_New_assignment,NULL, Hlp_ASSESSMENT_Assignments_new_assignment,Box_NOT_CLOSABLE,2); else - Box_StartBoxTable (NULL,Txt_Edit_assignment,NULL, + Box_StartBoxTable (NULL, + Asg.Title[0] ? Asg.Title : + Txt_Edit_assignment, + NULL, Hlp_ASSESSMENT_Assignments_edit_assignment,Box_NOT_CLOSABLE,2); + /***** Assignment title *****/ fprintf (Gbl.F.Out,"" "" diff --git a/swad_attendance.c b/swad_attendance.c index a84f5a34a..34da1c59a 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1091,7 +1091,10 @@ void Att_RequestCreatOrEditAttEvent (void) Box_StartBoxTable (NULL,Txt_New_event,NULL, Hlp_USERS_Attendance_new_event,Box_NOT_CLOSABLE,2); else - Box_StartBoxTable (NULL,Txt_Edit_event,NULL, + Box_StartBoxTable (NULL, + Att.Title[0] ? Att.Title : + Txt_Edit_event, + NULL, Hlp_USERS_Attendance_edit_event,Box_NOT_CLOSABLE,2); /***** Attendance event title *****/ diff --git a/swad_changelog.h b/swad_changelog.h index 7afb0d5c5..c147158b7 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -252,17 +252,19 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 17.11.4 (2017-09-30)" +#define Log_PLATFORM_VERSION "SWAD 17.11.5 (2017-10-01)" #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.11.4: Sep 29, 2017 Changes in edition of a project. (231521 lines) - Version 17.11.3: Sep 29, 2017 Changes in layout of projects. (231517 lines) - Version 17.11.2: Sep 29, 2017 Changes in layout of projects. (231511 lines) - Version 17.11.1: Sep 29, 2017 Code refactoring in projects. (231510 lines) + Version 17.11.5: Oct 01, 2017 Changes in order of roles in projects. + Changes in edition of assignments, surveys and attendance events. (231536 lines) + Version 17.11.4: Sep 30, 2017 Changes in edition of a project. (231521 lines) + Version 17.11.3: Sep 30, 2017 Changes in layout of projects. (231517 lines) + Version 17.11.2: Sep 30, 2017 Changes in layout of projects. (231511 lines) + Version 17.11.1: Sep 30, 2017 Code refactoring in projects. (231510 lines) Version 17.11: Sep 29, 2017 Select which projects to show: only my projects or all projects. (231531 lines) Version 17.10.7: Sep 29, 2017 Icons to select which projects to show: only my projects or all projects. (231456 lines) Version 17.10.6: Sep 25, 2017 Fixed bug when receiving projects. (231357 lines) diff --git a/swad_project.c b/swad_project.c index 0e8a65ee6..e769b4da7 100644 --- a/swad_project.c +++ b/swad_project.c @@ -61,6 +61,14 @@ typedef enum #define Prj_INTERVAL_DEFAULT ((time_t) 365 * (time_t) 24 * (time_t) 60 * (time_t) 60) // 1 year +const Prj_RoleInProject_t Prj_RolesToShow[] = + { + Prj_ROLE_TUT, // Tutor + Prj_ROLE_STD, // Student + Prj_ROLE_EVA, // Evaluator + }; +const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / sizeof (Prj_RolesToShow[0]); + /*****************************************************************************/ /***************************** Private variables *****************************/ /*****************************************************************************/ @@ -96,15 +104,14 @@ static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, static void Prj_ShowOneProjectURL (const struct Project *Prj, Prj_ProjectView_t ProjectView); static void Prj_ShowTableAllProjectsURL (const struct Project *Prj); -static void Prj_ShowOneProjectUsrs (const struct Project *Prj, - Prj_ProjectView_t ProjectView, - Prj_RoleInProject_t RoleInProject); -static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj, - Prj_RoleInProject_t RoleInProject); -static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView, - Prj_RoleInProject_t RoleInProject); -static void Prj_ShowTableAllProjectsWriteUsrs (long PrjCod, - Prj_RoleInProject_t RoleInProject); +static void Prj_ShowOneProjectMembers (struct Project *Prj, + Prj_ProjectView_t ProjectView); +static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, + Prj_ProjectView_t ProjectView, + Prj_RoleInProject_t RoleInProject); +static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, + Prj_RoleInProject_t RoleInProject); + static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, MYSQL_RES **mysql_res); @@ -408,7 +415,7 @@ static void Prj_ShowTableAllProjectsHead (void) extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT]; Prj_Order_t Order; - Prj_RoleInProject_t RoleInProject; + unsigned NumRoleToShow; fprintf (Gbl.F.Out,""); for (Order = (Prj_Order_t) 0; @@ -428,11 +435,11 @@ static void Prj_ShowTableAllProjectsHead (void) fprintf (Gbl.F.Out,"%s", Txt_Preassigned_QUESTION); - for (RoleInProject = Prj_ROLE_STD; - RoleInProject <= Prj_ROLE_EVA; - RoleInProject++) + for (NumRoleToShow = 0; + NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; + NumRoleToShow++) fprintf (Gbl.F.Out,"%s", - Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); + Txt_PROJECT_ROLES_PLURAL_Abc[Prj_RolesToShow[NumRoleToShow]]); fprintf (Gbl.F.Out,""); } @@ -570,7 +577,6 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie extern const char *Txt_Required_knowledge; extern const char *Txt_Required_materials; extern const char *Txt_Preassigned_QUESTION; - Prj_RoleInProject_t RoleInProject; static unsigned UniqueId = 0; /***** Get data of this project *****/ @@ -579,7 +585,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie /***** Write first row of data of this project *****/ /* Forms to remove/edit this project */ fprintf (Gbl.F.Out,"" - "",Gbl.RowEvenOdd); @@ -591,7 +597,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie /* Start date/time */ UniqueId++; - fprintf (Gbl.F.Out,"Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" : "DATE_RED_LIGHT") : @@ -610,7 +616,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie /* End date/time */ UniqueId++; - fprintf (Gbl.F.Out,"Hidden ? (Prj->Open ? "DATE_GREEN_LIGHT" : "DATE_RED_LIGHT") : @@ -621,7 +627,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie fprintf (Gbl.F.Out,"\">" "" "", UniqueId,Prj->TimeUTC[Dat_END_TIME], @@ -659,7 +665,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie /* Preassigned? */ fprintf (Gbl.F.Out,"" - "" @@ -681,10 +687,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie Txt_No); /* Project members */ - for (RoleInProject = Prj_ROLE_STD; - RoleInProject <= Prj_ROLE_EVA; - RoleInProject++) - Prj_ShowOneProjectUsrs (Prj,ProjectView,RoleInProject); + Prj_ShowOneProjectMembers (Prj,ProjectView); Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd; } @@ -702,7 +705,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) extern const char *Txt_Required_knowledge; extern const char *Txt_Required_materials; extern const char *Txt_Preassigned_QUESTION; - Prj_RoleInProject_t RoleInProject; + unsigned NumRoleToShow; static unsigned UniqueId = 0; /***** Get data of this project *****/ @@ -733,7 +736,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) fprintf (Gbl.F.Out,"" "" "", UniqueId, @@ -781,10 +784,10 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) Txt_No); /* Project members */ - for (RoleInProject = Prj_ROLE_STD; - RoleInProject <= Prj_ROLE_EVA; - RoleInProject++) - Prj_ShowTableAllProjectsUsrs (Prj,RoleInProject); + for (NumRoleToShow = 0; + NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; + NumRoleToShow++) + Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]); /***** End row *****/ fprintf (Gbl.F.Out,""); @@ -862,7 +865,7 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj, /***** Write row with label and text *****/ fprintf (Gbl.F.Out,"" - "" @@ -914,7 +917,7 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj, PutLink = (ProjectView == Prj_LIST_PROJECTS && Prj->URL[0]); fprintf (Gbl.F.Out,"" - "" @@ -954,70 +957,31 @@ static void Prj_ShowTableAllProjectsURL (const struct Project *Prj) Prj->URL); } +/*****************************************************************************/ +/************** Show projects members when showing one project ***************/ +/*****************************************************************************/ + +static void Prj_ShowOneProjectMembers (struct Project *Prj, + Prj_ProjectView_t ProjectView) + { + unsigned NumRoleToShow; + + for (NumRoleToShow = 0; + NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; + NumRoleToShow++) + Prj_ShowOneProjectMembersWithARole (Prj,ProjectView, + Prj_RolesToShow[NumRoleToShow]); + } + /*****************************************************************************/ /************************* Show users row in a project ***********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectUsrs (const struct Project *Prj, - Prj_ProjectView_t ProjectView, - Prj_RoleInProject_t RoleInProject) +static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, + Prj_ProjectView_t ProjectView, + Prj_RoleInProject_t RoleInProject) { extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT]; - - /***** Row with label and listing of users *****/ - fprintf (Gbl.F.Out,""); - switch (ProjectView) - { - case Prj_LIST_PROJECTS: - fprintf (Gbl.F.Out,"%s:" - "", - Gbl.RowEvenOdd, - Prj->Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", - Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject], - Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); - break; - case Prj_PRINT_ONE_PROJECT: - fprintf (Gbl.F.Out,"%s:" - "", - Prj->Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", - Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject], - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); - break; - case Prj_EDIT_ONE_PROJECT: - fprintf (Gbl.F.Out,"%s:" - "", - Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); - break; - } - Prj_ShowOneProjectWriteUsrs (Prj->PrjCod,ProjectView,RoleInProject); - fprintf (Gbl.F.Out,"" - ""); - } - -static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj, - Prj_RoleInProject_t RoleInProject) - { - /***** Listing of users *****/ - fprintf (Gbl.F.Out,"", - Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); - Prj_ShowTableAllProjectsWriteUsrs (Prj->PrjCod,RoleInProject); - fprintf (Gbl.F.Out,""); - } - -/*****************************************************************************/ -/*************** Write list of users with a role in a project ****************/ -/*****************************************************************************/ - -static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView, - Prj_RoleInProject_t RoleInProject) - { extern const char *Txt_Remove; extern const char *Txt_Add_USER; extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT]; @@ -1043,9 +1007,40 @@ static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectVi }; /***** Get users in project from database *****/ - NumUsrs = Prj_GetUsrsInPrj (PrjCod,RoleInProject,&mysql_res); + NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res); - /***** Start table *****/ + /***** Start row with label and listing of users *****/ + fprintf (Gbl.F.Out,""); + switch (ProjectView) + { + case Prj_LIST_PROJECTS: + fprintf (Gbl.F.Out,"%s:" + "", + Gbl.RowEvenOdd, + Prj->Hidden ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", + Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject], + Gbl.RowEvenOdd, + Prj->Hidden ? "DAT_LIGHT" : + "DAT"); + break; + case Prj_PRINT_ONE_PROJECT: + fprintf (Gbl.F.Out,"%s:" + "", + Prj->Hidden ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", + Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject], + Prj->Hidden ? "DAT_LIGHT" : + "DAT"); + break; + case Prj_EDIT_ONE_PROJECT: + fprintf (Gbl.F.Out,"%s:" + "", + Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); + break; + } + + /***** Start table with all members with this role *****/ Tbl_StartTable (2); /***** Write users *****/ @@ -1104,7 +1099,7 @@ static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectVi { fprintf (Gbl.F.Out,"" ""); - Gbl.Prjs.PrjCodToEdit = PrjCod; // Used to pass project code as a parameter + Gbl.Prjs.PrjCodToEdit = Prj->PrjCod; // Used to pass project code as a parameter sprintf (Gbl.Title,Txt_Add_USER,Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]); Lay_PutContextualLink (ActionReqAddUsr[RoleInProject],NULL,Prj_PutParams, "plus64x64.png", @@ -1119,15 +1114,19 @@ static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectVi ""); } - /***** End table *****/ + /***** End table with all members with this role *****/ Tbl_EndTable (); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); + + /***** End row with label and listing of users *****/ + fprintf (Gbl.F.Out,"" + ""); } -static void Prj_ShowTableAllProjectsWriteUsrs (long PrjCod, - Prj_RoleInProject_t RoleInProject) +static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, + Prj_RoleInProject_t RoleInProject) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -1135,13 +1134,19 @@ static void Prj_ShowTableAllProjectsWriteUsrs (long PrjCod, unsigned NumUsrs; /***** Get users in project from database *****/ - NumUsrs = Prj_GetUsrsInPrj (PrjCod,RoleInProject,&mysql_res); + NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res); + + /***** Start column with list of all members with this role *****/ + fprintf (Gbl.F.Out,"", + Gbl.RowEvenOdd, + Prj->Hidden ? "DAT_LIGHT" : + "DAT"); if (NumUsrs) { + /***** Write users *****/ fprintf (Gbl.F.Out,"