diff --git a/swad_changelog.h b/swad_changelog.h
index d781e43ae..a41c26108 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -487,14 +487,15 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
-#define Log_PLATFORM_VERSION "SWAD 19.36 (2019-10-15)"
+#define Log_PLATFORM_VERSION "SWAD 19.37 (2019-10-16)"
#define CSS_FILE "swad19.36.css"
#define JS_FILE "swad19.35.js"
/*
// TODO: Perico: poner un candado de bloqueo de creación/edición de proyectos (por ejemplo en asignaturas obsoletas)
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
- Version 19.36: Oct 15, 2019 Some CSS styles converted to CSS classes. (245424 lines)
+ Version 19.37: Oct 16, 2019 New filter to select projects with problems. Not yet filtered. (245543 lines)
+ Version 19.36: Oct 16, 2019 Some CSS styles converted to CSS classes. (245424 lines)
Version 19.35: Oct 15, 2019 Changes in CSS. (245373 lines)
Version 19.34.2: Oct 14, 2019 Fixed bug in IDs.
Fixed bug in timetable.
diff --git a/swad_project.c b/swad_project.c
index 8171797de..de65b475d 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -61,6 +61,7 @@ extern struct Globals Gbl;
#define Prj_PARAM_MY__ALL_NAME "My_All"
#define Prj_PARAM_PRE_NON_NAME "PreNon"
#define Prj_PARAM_HID_VIS_NAME "HidVis"
+#define Prj_PARAM_FAULTIN_NAME "Faulti"
/***** Type of view when writing one project *****/
typedef enum
@@ -121,16 +122,19 @@ static void Prj_ShowProjectsInCurrentPage (void);
static void Prj_ShowFormToFilterByMy_All (void);
static void Prj_ShowFormToFilterByPreassignedNonPreassig (void);
static void Prj_ShowFormToFilterByHidden (void);
+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_PutHiddenParamPreNon (unsigned PreNon);
static void Prj_PutHiddenParamHidVis (unsigned HidVis);
+static void Prj_PutHiddenParamFaulti (unsigned Faulti);
static void Prj_PutHiddenParamDptCod (long DptCod);
static void Prj_GetHiddenParamMy_All (void);
static void Prj_GetHiddenParamPreNon (void);
static void Prj_GetHiddenParamHidVis (void);
+static void Prj_GetHiddenParamFaulti (void);
static void Prj_GetHiddenParamDptCod (void);
static void Prj_GetParams (void);
@@ -312,7 +316,9 @@ static void Prj_ShowProjectsInCurrentPage (void)
default: // Students will see only visible projects
break;
}
+ Prj_ShowFormToFilterByWarning ();
Set_EndSettingsHead ();
+
/* 2nd. row */
Prj_ShowFormToFilterByDpt ();
@@ -411,6 +417,7 @@ static void Prj_ShowFormToFilterByMy_All (void)
Filter.My_All = My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon;
Filter.HidVis = Gbl.Prjs.Filter.HidVis;
+ Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter,
Gbl.Prjs.SelectedOrder,
@@ -446,6 +453,7 @@ static void Prj_ShowFormToFilterByPreassignedNonPreassig (void)
Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon ^ (1 << PreNon); // Toggle
Filter.HidVis = Gbl.Prjs.Filter.HidVis;
+ Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter,
Gbl.Prjs.SelectedOrder,
@@ -486,6 +494,7 @@ static void Prj_ShowFormToFilterByHidden (void)
Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon;
Filter.HidVis = Gbl.Prjs.Filter.HidVis ^ (1 << HidVis); // Toggle
+ Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter,
Gbl.Prjs.SelectedOrder,
@@ -499,6 +508,47 @@ static void Prj_ShowFormToFilterByHidden (void)
Set_EndOneSettingSelector ();
}
+/*****************************************************************************/
+/************** Show form to select faulty/faultless projects ****************/
+/*****************************************************************************/
+
+static void Prj_ShowFormToFilterByWarning (void)
+ {
+ extern const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS];
+ struct Prj_Filter Filter;
+ Prj_Faultiness_t Faultiness;
+ static const char *FaultinessIcon[Prj_NUM_FAULTINESS] =
+ {
+ "exclamation-triangle.svg", // Prj_FAULTY
+ "check-circle.svg", // Prj_FAULTLESS
+ };
+
+ Set_StartOneSettingSelector ();
+ for (Faultiness = (Prj_Faultiness_t) 0;
+ Faultiness <= (Prj_Faultiness_t) (Prj_NUM_FAULTINESS - 1);
+ Faultiness++)
+ {
+ fprintf (Gbl.F.Out,"
",
+ (Gbl.Prjs.Filter.Faulti & (1 << Faultiness)) ? "PREF_ON" :
+ "PREF_OFF");
+ Frm_StartForm (ActSeePrj);
+ Filter.My_All = Gbl.Prjs.Filter.My_All;
+ Filter.PreNon = Gbl.Prjs.Filter.PreNon;
+ Filter.HidVis = Gbl.Prjs.Filter.HidVis;
+ Filter.Faulti = Gbl.Prjs.Filter.Faulti ^ (1 << Faultiness); // Toggle
+ Filter.DptCod = Gbl.Prjs.Filter.DptCod;
+ Prj_PutParams (&Filter,
+ Gbl.Prjs.SelectedOrder,
+ Gbl.Prjs.CurrentPage,
+ -1L);
+ Ico_PutSettingIconLink (FaultinessIcon[Faultiness],
+ Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Faultiness]);
+ Frm_EndForm ();
+ fprintf (Gbl.F.Out,"
");
+ }
+ Set_EndOneSettingSelector ();
+ }
+
/*****************************************************************************/
/*************** Show form to filter projects by department ******************/
/*****************************************************************************/
@@ -514,6 +564,7 @@ static void Prj_ShowFormToFilterByDpt (void)
Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon;
Filter.HidVis = Gbl.Prjs.Filter.HidVis;
+ Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Prj_FILTER_DPT_DEFAULT; // Do not put department parameter here
Prj_PutParams (&Filter,
Gbl.Prjs.SelectedOrder,
@@ -566,6 +617,10 @@ void Prj_PutParams (struct Prj_Filter *Filter,
(unsigned) Prj_FILTER_VISIBL_DEFAULT))
Prj_PutHiddenParamHidVis (Filter->HidVis);
+ if (Filter->Faulti != ((unsigned) Prj_FILTER_FAULTY_DEFAULT |
+ (unsigned) Prj_FILTER_FAULTLESS_DEFAULT))
+ Prj_PutHiddenParamFaulti (Filter->Faulti);
+
if (Filter->DptCod != Prj_FILTER_DPT_DEFAULT)
Prj_PutHiddenParamDptCod (Filter->DptCod);
@@ -605,6 +660,11 @@ static void Prj_PutHiddenParamHidVis (unsigned HidVis)
Par_PutHiddenParamUnsigned (Prj_PARAM_HID_VIS_NAME,HidVis);
}
+static void Prj_PutHiddenParamFaulti (unsigned Faulti)
+ {
+ Par_PutHiddenParamUnsigned (Prj_PARAM_FAULTIN_NAME,Faulti);
+ }
+
static void Prj_PutHiddenParamDptCod (long DptCod)
{
Par_PutHiddenParamUnsigned (Dpt_PARAM_DPT_COD_NAME,DptCod);
@@ -655,6 +715,16 @@ static void Prj_GetHiddenParamHidVis (void)
}
}
+static void Prj_GetHiddenParamFaulti (void)
+ {
+ Gbl.Prjs.Filter.Faulti = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_FAULTIN_NAME,
+ 0,
+ (1 << Prj_FAULTY) |
+ (1 << Prj_FAULTLESS),
+ (unsigned) Prj_FILTER_FAULTY_DEFAULT |
+ (unsigned) Prj_FILTER_FAULTLESS_DEFAULT);
+ }
+
static void Prj_GetHiddenParamDptCod (void)
{
Gbl.Prjs.Filter.DptCod = Par_GetParToLong (Dpt_PARAM_DPT_COD_NAME);
@@ -670,6 +740,7 @@ static void Prj_GetParams (void)
Prj_GetHiddenParamMy_All ();
Prj_GetHiddenParamPreNon ();
Prj_GetHiddenParamHidVis ();
+ Prj_GetHiddenParamFaulti ();
Prj_GetHiddenParamDptCod ();
/***** Get order and page *****/
diff --git a/swad_project.h b/swad_project.h
index 6a1d71677..4eac261b7 100644
--- a/swad_project.h
+++ b/swad_project.h
@@ -76,6 +76,16 @@ typedef enum
#define Prj_FILTER_HIDDEN_DEFAULT (1 << Prj_HIDDEN) // on
#define Prj_FILTER_VISIBL_DEFAULT (1 << Prj_VISIBL) // on
+/* Faulty/faultless project */
+#define Prj_NUM_FAULTINESS 2
+typedef enum
+ {
+ Prj_FAULTY = 0,
+ Prj_FAULTLESS = 1,
+ } Prj_Faultiness_t;
+#define Prj_FILTER_FAULTY_DEFAULT (1 << Prj_FAULTY) // on
+#define Prj_FILTER_FAULTLESS_DEFAULT (1 << Prj_FAULTLESS) // on
+
/* Project department */
#define Prj_FILTER_DPT_DEFAULT -1L // Any department
@@ -85,6 +95,7 @@ struct Prj_Filter
Prj_WhoseProjects_t My_All; // Show my / all projects
unsigned PreNon; // Show preassigned / non preassigned projects
unsigned HidVis; // Show hidden / visible projects
+ unsigned Faulti; // Show faulty / faultless projects
long DptCod; // Show projects of this department
};
diff --git a/swad_text.c b/swad_text.c
index 863b0ef91..1474a16e1 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -30859,7 +30859,6 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#endif
};
-
const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
{
#if L==1 // ca // Prj_PROPOSAL_NEW
@@ -30923,6 +30922,51 @@ const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
#endif
};
+const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS] =
+ {
+ // Prj_FAULTY
+#if L==1 // ca
+ "Projectes defectuosos"
+#elif L==2 // de
+ "Fehlerhafte Projekte"
+#elif L==3 // en
+ "Faulty projects"
+#elif L==4 // es
+ "Proyectos defectuosos"
+#elif L==5 // fr
+ "Projets défectueux"
+#elif L==6 // gn
+ "Proyectos defectuosos" // Okoteve traducción
+#elif L==7 // it
+ "Progetti difettosi"
+#elif L==8 // pl
+ "Wadliwe projekty"
+#elif L==9 // pt
+ "Projetos defeituosos"
+#endif
+ ,
+ // Prj_FAULTLESS
+#if L==1 // ca
+ "Projectes correctos"
+#elif L==2 // de
+ "Fehlerfreie Projekte"
+#elif L==3 // en
+ "Faultless projects"
+#elif L==4 // es
+ "Proyectos correctos"
+#elif L==5 // fr
+ "Projets sans faille"
+#elif L==6 // gn
+ "Proyectos correctos" // Okoteve traducción
+#elif L==7 // it
+ "Progetti corretti"
+#elif L==8 // pl
+ "Bezbłędne projekty"
+#elif L==9 // pt
+ "Projetos sem falhas"
+#endif
+ };
+
const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] =
{
// Prj_MY__PROJECTS