diff --git a/swad_HTML.c b/swad_HTML.c index 92a742aa..f4d35d13 100644 --- a/swad_HTML.c +++ b/swad_HTML.c @@ -1188,11 +1188,15 @@ void HTM_INPUT_BUTTON (const char *Name,const char *Value,const char *Attr) Name,Value,Attr); } -void HTM_INPUT_IMAGE (const char *ImgFile,const char *Title,const char *Class) +void HTM_INPUT_IMAGE (const char *URL,const char *Icon,const char *Title,const char *Class) { - fprintf (Gbl.F.Out,"", - Cfg_URL_ICON_PUBLIC,ImgFile, + fprintf (Gbl.F.Out,"", Title,Title,Class); } diff --git a/swad_HTML.h b/swad_HTML.h index 413dbe75..d04757ab 100644 --- a/swad_HTML.h +++ b/swad_HTML.h @@ -123,7 +123,7 @@ void HTM_INPUT_URL (const char *Name,const char *Value,bool SubmitOnChange, void HTM_INPUT_FILE (const char *Name,const char *Accept,bool SubmitOnChange, const char *fmt,...); void HTM_INPUT_BUTTON (const char *Name,const char *Value,const char *Attr); -void HTM_INPUT_IMAGE (const char *ImgFile,const char *Title,const char *Class); +void HTM_INPUT_IMAGE (const char *URL,const char *Icon,const char *Title,const char *Class); void HTM_INPUT_PASSWORD (const char *Name,const char *PlaceHolder, const char *AutoComplete,bool Required); void HTM_INPUT_NUMBER (const char *Name,long Min,long Max,long Value,bool Disabled); diff --git a/swad_changelog.h b/swad_changelog.h index 869a46fa..7b0b4892 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -487,7 +487,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.63.2 (2019-11-11)" +#define Log_PLATFORM_VERSION "SWAD 19.64 (2019-11-11)" #define CSS_FILE "swad19.47.css" #define JS_FILE "swad19.39.js" /* @@ -496,6 +496,7 @@ ps2pdf source.ps destination.pdf // TODO: Importante: filtrar proyectos por usuarios (igual que en trabajos o en asistencia) // TODO: Code refactoring in HTML h1, title, meta, video, p, iframe, input hidden, area + Version 19.64: Nov 11, 2019 Changes in selection of me / all users. (246459 lines) Version 19.63.2: Nov 11, 2019 Fixed bug showing dates. (246386 lines) Version 19.63.1: Nov 11, 2019 Fixed bug in lists, reported by Javier Fernández Baldomero. (246381 lines) Version 19.63: Nov 11, 2019 Code refactoring in HTML. (246384 lines) diff --git a/swad_icon.c b/swad_icon.c index 145e109f..46479e33 100644 --- a/swad_icon.c +++ b/swad_icon.c @@ -363,7 +363,7 @@ void Ico_PutDivIconLink (const char *DivClass,const char *Icon,const char *Title void Ico_PutIconLink (const char *Icon,const char *Title) { - HTM_INPUT_IMAGE (Icon,Title,"CONTEXT_OPT ICO_HIGHLIGHT CONTEXT_ICO_16x16"); + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Icon,Title,"CONTEXT_OPT ICO_HIGHLIGHT CONTEXT_ICO_16x16"); } /*****************************************************************************/ @@ -385,7 +385,7 @@ void Ico_PutIconTextLink (const char *Icon,const char *Text) void Ico_PutSettingIconLink (const char *Icon,const char *Title) { - HTM_INPUT_IMAGE (Icon,Title,"ICO_HIGHLIGHT ICOx20"); + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Icon,Title,"ICO_HIGHLIGHT ICOx20"); } /*****************************************************************************/ diff --git a/swad_project.c b/swad_project.c index f467e749..76183036 100644 --- a/swad_project.c +++ b/swad_project.c @@ -58,7 +58,7 @@ extern struct Globals Gbl; /*****************************************************************************/ /***** Parameters used to filter listing of projects *****/ -#define Prj_PARAM_MY__ALL_NAME "My_All" +#define Prj_PARAM_WHO_NAME "Who" #define Prj_PARAM_PRE_NON_NAME "PreNon" #define Prj_PARAM_HID_VIS_NAME "HidVis" #define Prj_PARAM_FAULTIN_NAME "Faulti" @@ -134,7 +134,7 @@ static void Prj_ShowFormToFilterByWarning (void); static void Prj_ShowFormToFilterByDpt (void); static void Prj_PutCurrentParams (void); -static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All); +static void Prj_PutHiddenParamWho (Usr_Who_t Who); static void Prj_PutHiddenParamAssign (unsigned Assign); static void Prj_PutHiddenParamHidden (unsigned Hidden); static void Prj_PutHiddenParamFaulti (unsigned Faulti); @@ -407,7 +407,7 @@ static void Prj_ShowProjectsInCurrentPage (void) /*****************************************************************************/ /*** Show form to choice whether to show only my projects or all projects ****/ /*****************************************************************************/ - +/* static void Prj_ShowFormToFilterByMy_All (void) { extern const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS]; @@ -444,6 +444,39 @@ static void Prj_ShowFormToFilterByMy_All (void) } Set_EndOneSettingSelector (); } +*/ + +static void Prj_ShowFormToFilterByMy_All (void) + { + struct Prj_Filter Filter; + Usr_Who_t Who; + + Set_StartOneSettingSelector (); + for (Who = (Usr_Who_t) 0; + Who <= (Usr_Who_t) (Usr_NUM_WHO - 1); + Who++) + { + HTM_DIV_Begin ("class=\"%s\"", + (Gbl.Prjs.Filter.Who == Who) ? "PREF_ON" : + "PREF_OFF"); + Frm_StartForm (ActSeePrj); + Filter.Who = Who; + Filter.Assign = Gbl.Prjs.Filter.Assign; + Filter.Hidden = Gbl.Prjs.Filter.Hidden; + Filter.Faulti = Gbl.Prjs.Filter.Faulti; + Filter.DptCod = Gbl.Prjs.Filter.DptCod; + Prj_PutParams (&Filter, + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + -1L); + + Usr_PutWhoIcon (Who); + + Frm_EndForm (); + HTM_DIV_End (); + } + Set_EndOneSettingSelector (); + } /*****************************************************************************/ /*********** Show form to select assigned / non-assigned projects ************/ @@ -464,7 +497,7 @@ static void Prj_ShowFormToFilterByAssign (void) (Gbl.Prjs.Filter.Assign & (1 << Assign)) ? "PREF_ON" : "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.My_All = Gbl.Prjs.Filter.My_All; + Filter.Who = Gbl.Prjs.Filter.Who; Filter.Assign = Gbl.Prjs.Filter.Assign ^ (1 << Assign); // Toggle Filter.Hidden = Gbl.Prjs.Filter.Hidden; Filter.Faulti = Gbl.Prjs.Filter.Faulti; @@ -505,7 +538,7 @@ static void Prj_ShowFormToFilterByHidden (void) (Gbl.Prjs.Filter.Hidden & (1 << HidVis)) ? "PREF_ON" : "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.My_All = Gbl.Prjs.Filter.My_All; + Filter.Who = Gbl.Prjs.Filter.Who; Filter.Assign = Gbl.Prjs.Filter.Assign; Filter.Hidden = Gbl.Prjs.Filter.Hidden ^ (1 << HidVis); // Toggle Filter.Faulti = Gbl.Prjs.Filter.Faulti; @@ -546,7 +579,7 @@ static void Prj_ShowFormToFilterByWarning (void) (Gbl.Prjs.Filter.Faulti & (1 << Faultiness)) ? "PREF_ON" : "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.My_All = Gbl.Prjs.Filter.My_All; + Filter.Who = Gbl.Prjs.Filter.Who; Filter.Assign = Gbl.Prjs.Filter.Assign; Filter.Hidden = Gbl.Prjs.Filter.Hidden; Filter.Faulti = Gbl.Prjs.Filter.Faulti ^ (1 << Faultiness); // Toggle @@ -575,7 +608,7 @@ static void Prj_ShowFormToFilterByDpt (void) /***** Begin form *****/ HTM_DIV_Begin (NULL); Frm_StartForm (ActSeePrj); - Filter.My_All = Gbl.Prjs.Filter.My_All; + Filter.Who = Gbl.Prjs.Filter.Who; Filter.Assign = Gbl.Prjs.Filter.Assign; Filter.Hidden = Gbl.Prjs.Filter.Hidden; Filter.Faulti = Gbl.Prjs.Filter.Faulti; @@ -620,8 +653,8 @@ void Prj_PutParams (struct Prj_Filter *Filter, long PrjCod) { /***** Put filter parameters (which projects to show) *****/ - if (Filter->My_All != Prj_FILTER_WHOSE_PROJECTS_DEFAULT) - Prj_PutHiddenParamMy_All (Filter->My_All); + if (Filter->Who != Prj_FILTER_WHOSE_PROJECTS_DEFAULT) + Prj_PutHiddenParamWho (Filter->Who); if (Filter->Assign != ((unsigned) Prj_FILTER_ASSIGNED_DEFAULT | (unsigned) Prj_FILTER_NONASSIG_DEFAULT)) @@ -659,9 +692,9 @@ void Prj_PutParams (struct Prj_Filter *Filter, /*********************** Put hidden params for projects **********************/ /*****************************************************************************/ -static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All) +static void Prj_PutHiddenParamWho (Usr_Who_t Who) { - Par_PutHiddenParamUnsigned (NULL,Prj_PARAM_MY__ALL_NAME,(unsigned) My_All); + Par_PutHiddenParamUnsigned (NULL,Prj_PARAM_WHO_NAME,(unsigned) Who); } static void Prj_PutHiddenParamAssign (unsigned Assign) @@ -690,10 +723,10 @@ static void Prj_PutHiddenParamDptCod (long DptCod) static void Prj_GetHiddenParamMy_All (void) { - Gbl.Prjs.Filter.My_All = (Prj_WhoseProjects_t) Par_GetParToUnsignedLong (Prj_PARAM_MY__ALL_NAME, - 0, - Prj_NUM_WHOSE_PROJECTS - 1, - Prj_FILTER_WHOSE_PROJECTS_DEFAULT); + Gbl.Prjs.Filter.Who = (Usr_Who_t) Par_GetParToUnsignedLong (Prj_PARAM_WHO_NAME, + 0, + Usr_NUM_WHO - 1, + Prj_FILTER_WHOSE_PROJECTS_DEFAULT); } static void Prj_GetHiddenParamPreNon (void) @@ -2674,70 +2707,76 @@ void Prj_GetListProjects (void) } /* Query */ - if (Gbl.Prjs.Filter.My_All == Prj_MY__PROJECTS) - switch (Gbl.Prjs.SelectedOrder) - { - case Prj_ORDER_START_TIME: - case Prj_ORDER_END_TIME: - case Prj_ORDER_TITLE: - NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", - "SELECT projects.PrjCod" - " FROM projects,prj_usr" - " WHERE projects.CrsCod=%ld" - "%s%s%s" - " AND projects.PrjCod=prj_usr.PrjCod" - " AND prj_usr.UsrCod=%ld" - " ORDER BY %s", - Gbl.Hierarchy.Crs.CrsCod, - PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); - break; - case Prj_ORDER_DEPARTMENT: - NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", - "SELECT projects.PrjCod" - " FROM prj_usr,projects LEFT JOIN departments" - " ON projects.DptCod=departments.DptCod" - " WHERE projects.CrsCod=%ld" - "%s%s%s" - " AND projects.PrjCod=prj_usr.PrjCod" - " AND prj_usr.UsrCod=%ld" - " ORDER BY %s", - Gbl.Hierarchy.Crs.CrsCod, - PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); - break; - } - else // Gbl.Prjs.My_All == Prj_ALL_PROJECTS - switch (Gbl.Prjs.SelectedOrder) - { - case Prj_ORDER_START_TIME: - case Prj_ORDER_END_TIME: - case Prj_ORDER_TITLE: - NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", - "SELECT projects.PrjCod" - " FROM projects" - " WHERE projects.CrsCod=%ld" - "%s%s%s" - " ORDER BY %s", - Gbl.Hierarchy.Crs.CrsCod, - PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); - break; - case Prj_ORDER_DEPARTMENT: - NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", - "SELECT projects.PrjCod" - " FROM projects LEFT JOIN departments" - " ON projects.DptCod=departments.DptCod" - " WHERE projects.CrsCod=%ld" - "%s%s%s" - " ORDER BY %s", - Gbl.Hierarchy.Crs.CrsCod, - PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); - break; - } + switch (Gbl.Prjs.Filter.Who) + { + case Usr_WHO_ME: + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + case Prj_ORDER_TITLE: + NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", + "SELECT projects.PrjCod" + " FROM projects,prj_usr" + " WHERE projects.CrsCod=%ld" + "%s%s%s" + " AND projects.PrjCod=prj_usr.PrjCod" + " AND prj_usr.UsrCod=%ld" + " ORDER BY %s", + Gbl.Hierarchy.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + break; + case Prj_ORDER_DEPARTMENT: + NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", + "SELECT projects.PrjCod" + " FROM prj_usr,projects LEFT JOIN departments" + " ON projects.DptCod=departments.DptCod" + " WHERE projects.CrsCod=%ld" + "%s%s%s" + " AND projects.PrjCod=prj_usr.PrjCod" + " AND prj_usr.UsrCod=%ld" + " ORDER BY %s", + Gbl.Hierarchy.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + break; + } + break; + case Usr_WHO_SOME: + case Usr_WHO_ALL: + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + case Prj_ORDER_TITLE: + NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", + "SELECT projects.PrjCod" + " FROM projects" + " WHERE projects.CrsCod=%ld" + "%s%s%s" + " ORDER BY %s", + Gbl.Hierarchy.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, + OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + break; + case Prj_ORDER_DEPARTMENT: + NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", + "SELECT projects.PrjCod" + " FROM projects LEFT JOIN departments" + " ON projects.DptCod=departments.DptCod" + " WHERE projects.CrsCod=%ld" + "%s%s%s" + " ORDER BY %s", + Gbl.Hierarchy.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, + OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + break; + } + break; + } /* Free allocated memory for subqueries */ free (PreNonSubQuery); diff --git a/swad_project.h b/swad_project.h index 18d043af..16946265 100644 --- a/swad_project.h +++ b/swad_project.h @@ -40,14 +40,8 @@ #define Prj_EDITABLE_DEFAULT true /***** Filters to list projects *****/ -/* My projects / all projects */ -#define Prj_NUM_WHOSE_PROJECTS 2 -typedef enum - { - Prj_MY__PROJECTS, - Prj_ALL_PROJECTS, - } Prj_WhoseProjects_t; -#define Prj_FILTER_WHOSE_PROJECTS_DEFAULT Prj_MY__PROJECTS +/* My projects / selected users' projects / all projects */ +#define Prj_FILTER_WHOSE_PROJECTS_DEFAULT Usr_WHO_ME /* Assigned projects / non-assigned projects */ #define Prj_NUM_ASSIGNED_NONASSIG 2 @@ -95,7 +89,8 @@ typedef enum /* Struct with all filters */ struct Prj_Filter { - Prj_WhoseProjects_t My_All; // Show my / all projects + // Prj_WhoseProjects_t My_All; // Show my / all projects + Usr_Who_t Who; // Show my / some / all projects unsigned Assign; // Show assigned / non assigned projects unsigned Hidden; // Show hidden / visible projects unsigned Faulti; // Show faulty / faultless projects diff --git a/swad_text.c b/swad_text.c index 4994f7eb..8971cf9c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -30944,7 +30944,7 @@ const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS] = "Projetos sem falhas" #endif }; - +/* const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] = { // Prj_MY__PROJECTS @@ -30989,7 +30989,7 @@ const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] = "Todos os projetos" #endif }; - +*/ const char *Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Prj_NUM_ASSIGNED_NONASSIG] = { // Prj_ASSIGNED diff --git a/swad_user.c b/swad_user.c index aa725473..30d26229 100644 --- a/swad_user.c +++ b/swad_user.c @@ -9725,3 +9725,31 @@ void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows) HTM_TD_End (); } +/*****************************************************************************/ +/********** Show a setting selector for me / selected users / all ************/ +/*****************************************************************************/ + +void Usr_PutWhoIcon (Usr_Who_t Who) + { + switch (Who) + { + case Usr_WHO_ME: + HTM_INPUT_IMAGE (Gbl.Usrs.Me.PhotoURL[0] ? Gbl.Usrs.Me.PhotoURL : + Cfg_URL_ICON_PUBLIC, + Gbl.Usrs.Me.PhotoURL[0] ? NULL : + "usr_bl.jpg", + "Yo", // TODO: Need translation!!!! + "ICO_HIGHLIGHT PHOTO15x20"); + break; + case Usr_WHO_SOME: + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg", + "Usuarios seleccionados", // TODO: Need translation!!!! + "ICO_HIGHLIGHT ICOx20"); + break; + case Usr_WHO_ALL: + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"users.svg", + "Todos", // TODO: Need translation!!!! + "ICO_HIGHLIGHT ICOx20"); + break; + } + } diff --git a/swad_user.h b/swad_user.h index 6e6ea135..faab7f1c 100644 --- a/swad_user.h +++ b/swad_user.h @@ -142,6 +142,15 @@ typedef enum Usr_OTHER, } Usr_MeOrOther_t; +#define Usr_NUM_WHO 3 +typedef enum + { + Usr_WHO_ME, + Usr_WHO_SOME, + Usr_WHO_ALL, + } Usr_Who_t; +#define Usr_WHO_DEFAULT Usr_WHO_ALL + // Related with user's data struct UsrData { @@ -487,4 +496,6 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden); void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows); +void Usr_PutWhoIcon (Usr_Who_t Who); + #endif