Version19.64

This commit is contained in:
Antonio Cañas Vargas 2019-11-11 15:46:54 +01:00
parent a13f3ffc8a
commit 458529afcd
9 changed files with 176 additions and 98 deletions

View File

@ -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,"<input type=\"image\" src=\"%s/%s\""
" alt=\"%s\" title=\"%s\" class=\"%s\" />",
Cfg_URL_ICON_PUBLIC,ImgFile,
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s",URL);
if (Icon)
if (Icon[0])
fprintf (Gbl.F.Out,"/%s",Icon);
fprintf (Gbl.F.Out,"\"");
fprintf (Gbl.F.Out," alt=\"%s\" title=\"%s\" class=\"%s\" />",
Title,Title,Class);
}

View File

@ -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);

View File

@ -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)

View File

@ -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");
}
/*****************************************************************************/

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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;
}
}

View File

@ -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