Version 23.87: Jul 16, 2024 Changes in layout of project filters.

This commit is contained in:
acanas 2024-07-16 14:59:55 +02:00
parent 3bdb133611
commit eabfd1716f
8 changed files with 324 additions and 224 deletions

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#define Log_PLATFORM_VERSION "SWAD 23.86 (2024-07-15)"
#define Log_PLATFORM_VERSION "SWAD 23.87 (2024-07-16)"
#define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.79.js"
/*
Version 23.87: Jul 16, 2024 Changes in layout of project filters. (335321 lines)
Version 23.86: Jul 15, 2024 Fixed bug in list of centers.
Changes in selection of users in projects.
Code refactoring in projects. (335225 lines)

View File

@ -4295,10 +4295,7 @@ void Grp_ShowFormToSelWhichGrps (Act_Action_t Action,
extern const char *Txt_GROUP_WHICH_GROUPS[2];
Grp_WhichGroups_t WhichGrps;
/***** Begin setting selector *****/
Set_BeginOneSettingSelector ();
/***** Put icons to select which groups *****/
for (WhichGrps = Grp_MY_GROUPS;
WhichGrps <= Grp_ALL_GROUPS;
WhichGrps++)
@ -4314,8 +4311,6 @@ void Grp_ShowFormToSelWhichGrps (Act_Action_t Action,
Frm_EndForm ();
Set_EndPref ();
}
/***** End setting selector *****/
Set_EndOneSettingSelector ();
}

View File

@ -2542,9 +2542,7 @@ static void Mch_ShowFormColumns (const struct Mch_Match *Match)
"4col.png", // 4 columns
};
/***** Begin selector *****/
Set_BeginOneSettingSelector ();
for (NumCols = 1;
NumCols <= Mch_MAX_COLS;
NumCols++)
@ -2573,8 +2571,6 @@ static void Mch_ShowFormColumns (const struct Mch_Match *Match)
/* End container for this option */
HTM_DIV_End ();
}
/***** End selector *****/
Set_EndOneSettingSelector ();
}

View File

@ -204,9 +204,9 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects);
static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByAssignation (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByFaultiness (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects);
@ -542,12 +542,23 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
extern const char *Hlp_ASSESSMENT_Projects;
extern const char *Txt_Projects;
extern const char *Txt_Filters;
extern const char *Txt_Users;
extern const char *Txt_Roles;
extern const char *Txt_Assignation;
extern const char *Txt_Visibility;
extern const char *Txt_Faultiness;
extern const char *Txt_Review;
extern const char *Txt_Department;
extern const char *Txt_No_projects;
struct Pag_Pagination Pagination;
unsigned NumPrj;
if (Projects)
{
/***** Students will see only visible projects *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
((struct Prj_Projects *) Projects)->Filter.Hidden &= ~(1 << HidVis_HIDDEN);
/***** Get list of projects *****/
Prj_GetListProjects ((struct Prj_Projects *) Projects);
@ -566,29 +577,81 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
HTM_FIELDSET_Begin (NULL);
HTM_LEGEND (Txt_Filters);
/* 1st. row */
Set_BeginSettingsHead ();
HTM_TABLE_BeginPadding (2);
// TODO: Put the following in a loop
/***** Users *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Users);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByMy_All ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Roles in project *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Roles);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByRoleInPrj ((struct Prj_Projects *) Projects);
Prj_ShowFormToFilterByAssign ((struct Prj_Projects *) Projects);
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Assignation to students *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Assignation);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByAssignation ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Hidden/visible projects *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Visibility);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByHidden ((struct Prj_Projects *) Projects);
break;
default: // Students will see only visible projects
break;
}
Prj_ShowFormToFilterByWarning ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Faultiness *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Faultiness);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByFaultiness ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Review status *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Review);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByReview ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
Set_EndSettingsHead ();
/* 2nd. row */
/***** Department *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Department);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByDpt ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
HTM_TABLE_End ();
/* End fieldset */
HTM_FIELDSET_End ();
@ -670,7 +733,6 @@ static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects)
1 << Usr_WHO_SELECTED |
1 << Usr_WHO_ALL;
Set_BeginOneSettingSelector ();
for (Who = (Usr_Who_t) 1;
Who <= (Usr_Who_t) (Usr_NUM_WHO - 1);
Who++)
@ -696,7 +758,6 @@ static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects)
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
@ -709,7 +770,6 @@ static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects
struct Prj_Filter Filter;
Prj_RoleInProject_t RoleInPrj;
Set_BeginOneSettingSelector ();
for (RoleInPrj = (Prj_RoleInProject_t) 0;
RoleInPrj <= (Prj_RoleInProject_t) (Prj_NUM_ROLES_IN_PROJECT - 1);
RoleInPrj++)
@ -733,20 +793,18 @@ static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
/*********** Show form to select assigned / non-assigned projects ************/
/*****************************************************************************/
static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects)
static void Prj_ShowFormToFilterByAssignation (const struct Prj_Projects *Projects)
{
extern const char *Txt_PROJECT_NONASSIGNED_ASSIGNED_PLURAL[Prj_NUM_ASSIGNED];
struct Prj_Filter Filter;
Prj_Assigned_t Assign;
Set_BeginOneSettingSelector ();
for (Assign = (Prj_Assigned_t) 0;
Assign <= (Prj_Assigned_t) (Prj_NUM_ASSIGNED - 1);
Assign++)
@ -770,7 +828,6 @@ static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects)
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
@ -792,7 +849,6 @@ static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects)
[HidVis_VISIBLE] = {"eye.svg" ,Ico_GREEN},
};
Set_BeginOneSettingSelector ();
for (HidVis = (HidVis_HiddenOrVisible_t) 0;
HidVis <= (HidVis_HiddenOrVisible_t) (HidVis_NUM_HIDDEN_VISIBLE - 1);
HidVis++)
@ -817,14 +873,13 @@ static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects)
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
/************** Show form to select faulty/faultless projects ****************/
/*****************************************************************************/
static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
static void Prj_ShowFormToFilterByFaultiness (const struct Prj_Projects *Projects)
{
extern const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS];
struct Prj_Filter Filter;
@ -839,7 +894,6 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
[Prj_FAULTLESS] = {"check-circle.svg" ,Ico_GREEN },
};
Set_BeginOneSettingSelector ();
for (Faultiness = (Prj_Faultiness_t) 0;
Faultiness <= (Prj_Faultiness_t) (Prj_NUM_FAULTINESS - 1);
Faultiness++)
@ -864,7 +918,6 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
@ -877,7 +930,6 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
struct Prj_Filter Filter;
Prj_ReviewStatus_t ReviewStatus;
Set_BeginOneSettingSelector ();
for (ReviewStatus = (Prj_ReviewStatus_t) 0;
ReviewStatus <= (Prj_ReviewStatus_t) (Prj_NUM_REVIEW_STATUS - 1);
ReviewStatus++)
@ -902,7 +954,6 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
Frm_EndForm ();
Set_EndPref ();
}
Set_EndOneSettingSelector ();
}
/*****************************************************************************/
@ -916,7 +967,6 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
char *SelectClass;
/***** Begin form *****/
HTM_DIV_Begin (NULL);
Frm_BeginForm (ActSeeAllPrj);
Filter.Who = Projects->Filter.Who;
Filter.RolPrj = Projects->Filter.RolPrj;
@ -932,8 +982,7 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
Usr_USE_LIST_SELECTED_USERS);
/***** Write selector with departments *****/
if (asprintf (&SelectClass,"Frm_C2_INPUT INPUT_%s",
The_GetSuffix ()) < 0)
if (asprintf (&SelectClass,"Frm_C2_INPUT INPUT_%s",The_GetSuffix ()) < 0)
Err_NotEnoughMemoryExit ();
Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[Hie_INS].HieCod, // Departments in current institution
Projects->Filter.DptCod, // Selected department
@ -946,7 +995,6 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
/***** End form *****/
Frm_EndForm ();
HTM_DIV_End ();
}
/*****************************************************************************/
@ -1169,13 +1217,6 @@ static unsigned Prj_GetParAssign (void)
static unsigned Prj_GetParHidden (void)
{
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD: // Students can view only visible projects
return (unsigned) (1 << HidVis_VISIBLE); // Only visible projects
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
return (unsigned)
Par_GetParUnsignedLong (Prj_PAR_FILTER_HID_VIS_NAME,
0,
@ -1183,10 +1224,6 @@ static unsigned Prj_GetParHidden (void)
(1 << HidVis_VISIBLE),
(unsigned) Prj_FILTER_HIDDEN_DEFAULT |
(unsigned) Prj_FILTER_VISIBL_DEFAULT);
default:
Err_WrongRoleExit ();
return Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT; // Not reached
}
}
static unsigned Prj_GetParFaulti (void)

View File

@ -519,27 +519,6 @@ unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE:
Ale_ShowAlert (Ale_INFO,
"SELECT prj_projects.PrjCod"
" FROM prj_projects LEFT JOIN prj_users"
" ON prj_projects.PrjCod=prj_users.PrjCod"
" WHERE prj_projects.CrsCod=%ld"
"%s"
"%s"
"%s"
"%s"
"%s"
" ORDER BY %s",
Gbl.Hierarchy.Node[Hie_CRS].HieCod,
AssignSubQuery,
HidVisSubQuery,
ReviewSubQuery,
DptCodSubQuery,
RolPrjSubQuery[Projects->Filter.RolPrj],
OrderBySubQuery[Projects->SelectedOrder]);
NumPrjsFromDB = (unsigned)
DB_QuerySELECT (mysql_res,"can not get projects",
"SELECT prj_projects.PrjCod"

View File

@ -2804,6 +2804,29 @@ const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME] =
#endif
};
const char *Txt_Assignation = // Project assigned/non-assigned to students
#if L==1 // ca
"Assignaci&oacute;";
#elif L==2 // de
"Zuweisung";
#elif L==3 // en
"Assignation";
#elif L==4 // es
"Asignaci&oacute;n";
#elif L==5 // fr
"Assignation";
#elif L==6 // gn
"Assignaci&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Assegnazione";
#elif L==8 // pl
"Ustalenie";
#elif L==9 // pt
"Atribui&ccedil;&atilde,o";
#elif L==10 // tr
"Atama";
#endif
const char *Txt_Assignments_area =
#if L==1 // ca
"Zona d'activitats";
@ -12445,6 +12468,29 @@ const char *Txt_Failed_email_confirmation_key =
"Failed email confirmation key."; // Çeviri lazim!
#endif
const char *Txt_Faultiness = // In projects
#if L==1 // ca
"Defectuositat";
#elif L==2 // de
"Mangelhaftigkeit";
#elif L==3 // en
"Faultiness";
#elif L==4 // es
"Defectuosos";
#elif L==5 // fr
"D&eacute;fectueux";
#elif L==6 // gn
"Defectuosos"; // Okoteve traducción
#elif L==7 // it
"Difettosi";
#elif L==8 // pl
"Wadliwo&sacute;&cacute;";
#elif L==9 // pt
"Defeituosos";
#elif L==10 // tr
"Kusurlu";
#endif
const char *Txt_Feedback =
#if L==1 // ca
"Realimentaci&oacute;";
@ -34775,7 +34821,7 @@ const char *Txt_Review =
#elif L==5 // fr
"Examen";
#elif L==6 // gn
"Revisi&oacute;n"; // Okoteve traducción
"Hechajey";
#elif L==7 // it
"Revisione";
#elif L==8 // pl
@ -34798,7 +34844,7 @@ const char *Txt_Role =
#elif L==5 // fr
"R&ocirc;le";
#elif L==6 // gn
"Rol"; // Okoteve traducción
"Kuatia";
#elif L==7 // it
"Ruolo";
#elif L==8 // pl
@ -34806,7 +34852,30 @@ const char *Txt_Role =
#elif L==9 // pt
"Papel";
#elif L==10 // tr
"Role"; // Çeviri lazim!
"Rol";
#endif
const char *Txt_Roles =
#if L==1 // ca
"Rols";
#elif L==2 // de
"Rollen";
#elif L==3 // en
"Roles";
#elif L==4 // es
"Roles";
#elif L==5 // fr
"R&ocirc;les";
#elif L==6 // gn
"Kuatia";
#elif L==7 // it
"Ruoli";
#elif L==8 // pl
"Role";
#elif L==9 // pt
"Pap&eacute;is";
#elif L==10 // tr
"Roller";
#endif
const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] =
@ -56841,6 +56910,29 @@ const char *Txt_View_homework =
"View homework"; // Çeviri lazim!
#endif
const char *Txt_Visibility =
#if L==1 // ca
"Visibilitat";
#elif L==2 // de
"Sichtweite";
#elif L==3 // en
"Visibility";
#elif L==4 // es
"Visibilidad";
#elif L==5 // fr
"Visibilit&eacute;";
#elif L==6 // gn
"Visibilidad"; // Okoteve traducción
#elif L==7 // it
"Visibilit&agrave;";
#elif L==8 // pl
"Widoczno&sacute;&cacute;";
#elif L==9 // pt
"Visibilidade";
#elif L==10 // tr
"G&ouml;r&uuml;n&uuml;rl&uuml;&gbreve;&uuml;k";
#endif
const char *Txt_Visible =
#if L==1 // ca
"Visible";
@ -56853,7 +56945,7 @@ const char *Txt_Visible =
#elif L==5 // fr
"Visible";
#elif L==6 // gn
"Visible"; // Okoteve traducción
"Ojehecha";
#elif L==7 // it
"Visibile";
#elif L==8 // pl