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