diff --git a/swad_changelog.h b/swad_changelog.h
index 8816bb633..17d7ee98b 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -490,7 +490,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.54.3 (2019-11-06)"
+#define Log_PLATFORM_VERSION "SWAD 19.54.4 (2019-11-06)"
#define CSS_FILE "swad19.47.css"
#define JS_FILE "swad19.39.js"
/*
@@ -498,6 +498,7 @@ ps2pdf source.ps destination.pdf
// TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: Importante: filtrar proyectos por usuarios (igual que en trabajos o en asistencia)
+ Version 19.54.4: Nov 05, 2019 Code refactoring in HTML select options. (246023 lines)
Version 19.54.3: Nov 05, 2019 Code refactoring in HTML select options. (246050 lines)
Version 19.54.2: Nov 06, 2019 Fixed bug in dates form. (246055 lines)
Version 19.54.1: Nov 05, 2019 Fixed bug in assignments, reported by Eva Martínez Ortigosa. (246054 lines)
diff --git a/swad_country.c b/swad_country.c
index 1933533ce..b9d0160ea 100644
--- a/swad_country.c
+++ b/swad_country.c
@@ -1234,11 +1234,8 @@ void Cty_WriteSelectorOfCountry (void)
Frm_StartFormGoTo (ActSeeIns);
HTM_SELECT_Begin (true,
"id=\"cty\" name=\"cty\" class=\"HIE_SEL\"");
- fprintf (Gbl.F.Out,"",
- Txt_Country);
+ HTM_OPTION (HTM_Type_STRING,(void *) "",Gbl.Hierarchy.Cty.CtyCod < 0,true,
+ "[%s]",Txt_Country);
/***** Get countries from database *****/
NumCtys = (unsigned) DB_QuerySELECT (&mysql_res,"can not get countries",
@@ -1261,10 +1258,9 @@ void Cty_WriteSelectorOfCountry (void)
Lay_ShowErrorAndExit ("Wrong code of country.");
/* Write option */
- fprintf (Gbl.F.Out,"",row[1]);
+ HTM_OPTION (HTM_Type_LONG,(void *) &CtyCod,
+ CtyCod == Gbl.Hierarchy.Cty.CtyCod,false,
+ "%s",row[1]);
}
/***** Free structure that stores the query result *****/
diff --git a/swad_course.c b/swad_course.c
index 4ea8c90a2..871e9b2aa 100644
--- a/swad_course.c
+++ b/swad_course.c
@@ -259,11 +259,9 @@ static void Crs_Configuration (bool PrintView)
for (NumDeg = 0;
NumDeg < Gbl.Hierarchy.Ctr.Degs.Num;
NumDeg++)
- fprintf (Gbl.F.Out,"",
- Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod,
- Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod == Gbl.Hierarchy.Deg.DegCod ? " selected=\"selected\"" :
- "",
- Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].ShrtName);
+ HTM_OPTION (HTM_Type_LONG,(void *) &Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod,
+ Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod == Gbl.Hierarchy.Deg.DegCod,false,
+ "%s",Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].ShrtName);
HTM_SELECT_End ();
Frm_EndForm ();
@@ -348,11 +346,9 @@ static void Crs_Configuration (bool PrintView)
for (Year = 0;
Year <= Deg_MAX_YEARS_PER_DEGREE;
Year++)
- fprintf (Gbl.F.Out,"",
- Year,
- Year == Gbl.Hierarchy.Crs.Year ? " selected=\"selected\"" :
- "",
- Txt_YEAR_OF_DEGREE[Year]);
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &Year,
+ Year == Gbl.Hierarchy.Crs.Year,false,
+ "%s",Txt_YEAR_OF_DEGREE[Year]);
HTM_SELECT_End ();
Frm_EndForm ();
}
@@ -891,11 +887,8 @@ void Crs_WriteSelectorOfCourse (void)
HTM_SELECT_Begin (false,
"id=\"crs\" name=\"crs\" class=\"HIE_SEL\""
" disabled=\"disabled\"");
- fprintf (Gbl.F.Out,"",
- Txt_Course);
+ HTM_OPTION (HTM_Type_STRING,(void *) "",Gbl.Hierarchy.Crs.CrsCod < 0,true,
+ "[%s]",Txt_Course);
if (Gbl.Hierarchy.Deg.DegCod > 0)
{
@@ -920,11 +913,10 @@ void Crs_WriteSelectorOfCourse (void)
Lay_ShowErrorAndExit ("Wrong course.");
/* Write option */
- fprintf (Gbl.F.Out,"",row[1]);
+ HTM_OPTION (HTM_Type_LONG,(void *) &CrsCod,
+ Gbl.Hierarchy.Level == Hie_CRS && // Course selected
+ CrsCod == Gbl.Hierarchy.Crs.CrsCod,false,
+ "%s",row[1]);
}
/***** Free structure that stores the query result *****/
@@ -1062,11 +1054,8 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void)
/***** Write an option when no course selected *****/
if (Gbl.Hierarchy.Crs.CrsCod <= 0) // No course selected
- fprintf (Gbl.F.Out,"",
- Txt_Course);
+ HTM_OPTION (HTM_Type_STRING,(void *) "-1",true,true,
+ "%s",Txt_Course);
if (Gbl.Usrs.Me.MyCrss.Num)
{
@@ -1088,11 +1077,9 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void)
LastDegCod = DegCod;
}
- fprintf (Gbl.F.Out,"",CrsShortName);
+ HTM_OPTION (HTM_Type_LONG,(void *) &Gbl.Usrs.Me.MyCrss.Crss[NumMyCrs].CrsCod,
+ CrsCod == Gbl.Hierarchy.Crs.CrsCod,false, // Course selected
+ "%s",CrsShortName);
}
if (LastDegCod > 0)
@@ -1103,12 +1090,8 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void)
when I don't belong to it *****/
if (Gbl.Hierarchy.Level == Hie_CRS && // Course selected
!Gbl.Usrs.Me.IBelongToCurrentCrs) // I do not belong to it
- fprintf (Gbl.F.Out,"",
- Gbl.Hierarchy.Crs.CrsCod,
- Gbl.Hierarchy.Crs.ShrtName);
+ HTM_OPTION (HTM_Type_LONG,(void *) &Gbl.Hierarchy.Crs.CrsCod,true,true,
+ "%s",Gbl.Hierarchy.Crs.ShrtName);
/***** End form *****/
HTM_SELECT_End ();
@@ -1424,6 +1407,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
struct UsrData UsrDat;
bool ICanEdit;
Crs_StatusTxt_t StatusTxt;
+ unsigned Status;
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat);
@@ -1485,11 +1469,9 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
for (YearAux = 0;
YearAux <= Deg_MAX_YEARS_PER_DEGREE;
YearAux++) // All the years are permitted because it's possible to move this course to another degree (with other active years)
- fprintf (Gbl.F.Out,"",
- YearAux,
- YearAux == Crs->Year ? " selected=\"selected\"" :
- "",
- Txt_YEAR_OF_DEGREE[YearAux]);
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &YearAux,
+ YearAux == Crs->Year,false,
+ "%s",Txt_YEAR_OF_DEGREE[YearAux]);
HTM_SELECT_End ();
Frm_EndForm ();
}
@@ -1553,12 +1535,15 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
Crs_PutParamOtherCrsCod (Crs->CrsCod);
HTM_SELECT_Begin (true,
"name=\"Status\" class=\"INPUT_STATUS\"");
- fprintf (Gbl.F.Out,""
- "",
- (unsigned) Crs_GetStatusBitsFromStatusTxt (Crs_STATUS_PENDING),
- Txt_COURSE_STATUS[Crs_STATUS_PENDING],
- (unsigned) Crs_GetStatusBitsFromStatusTxt (Crs_STATUS_ACTIVE),
- Txt_COURSE_STATUS[Crs_STATUS_ACTIVE]);
+
+ Status = (unsigned) Crs_GetStatusBitsFromStatusTxt (Crs_STATUS_PENDING);
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &Status,true,false,
+ "%s",Txt_COURSE_STATUS[Crs_STATUS_PENDING]);
+
+ Status = (unsigned) Crs_GetStatusBitsFromStatusTxt (Crs_STATUS_ACTIVE);
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &Status,false,false,
+ "%s",Txt_COURSE_STATUS[Crs_STATUS_ACTIVE]);
+
HTM_SELECT_End ();
Frm_EndForm ();
}
@@ -1677,11 +1662,9 @@ static void Crs_PutFormToCreateCourse (void)
for (Year = 0;
Year <= Deg_MAX_YEARS_PER_DEGREE;
Year++)
- fprintf (Gbl.F.Out,"",
- Year,
- Year == Crs_EditingCrs->Year ? " selected=\"selected\"" :
- "",
- Txt_YEAR_OF_DEGREE[Year]);
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &Year,
+ Year == Crs_EditingCrs->Year,false,
+ "%s",Txt_YEAR_OF_DEGREE[Year]);
HTM_SELECT_End ();
HTM_TD_End ();
@@ -3292,12 +3275,9 @@ void Crs_AskRemoveOldCrss (void)
for (i = Crs_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS;
i <= Crs_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS;
i++)
- {
- fprintf (Gbl.F.Out,"",i);
- }
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &i,
+ i == MonthsWithoutAccess,false,
+ "%u",i);
HTM_SELECT_End ();
fprintf (Gbl.F.Out," ");
fprintf (Gbl.F.Out,Txt_Eliminate_all_courses_whithout_users_PART_2_OF_2,
diff --git a/swad_language.c b/swad_language.c
index 4cd259851..95ec90d45 100644
--- a/swad_language.c
+++ b/swad_language.c
@@ -114,6 +114,7 @@ void Lan_PutSelectorToSelectLanguage (void)
{
extern const char *Txt_STR_LANG_NAME[1 + Lan_NUM_LANGUAGES];
Lan_Language_t Lan;
+ unsigned LanUnsigned;
Frm_StartForm (ActReqChgLan);
HTM_SELECT_Begin (true,
@@ -122,10 +123,10 @@ void Lan_PutSelectorToSelectLanguage (void)
Lan <= Lan_NUM_LANGUAGES;
Lan++)
{
- fprintf (Gbl.F.Out,"",Txt_STR_LANG_NAME[Lan]);
+ LanUnsigned = (unsigned) Lan;
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &LanUnsigned,
+ Lan == Gbl.Prefs.Language,false,
+ "%s",Txt_STR_LANG_NAME[Lan]);
}
HTM_SELECT_End ();
Frm_EndForm ();
diff --git a/swad_message.c b/swad_message.c
index c40f3c1b1..e12d9fe61 100644
--- a/swad_message.c
+++ b/swad_message.c
@@ -2618,21 +2618,17 @@ void Msg_ShowFormSelectCourseSentOrRecMsgs (void)
fprintf (Gbl.F.Out,"%s ",TxtSelector[Gbl.Msg.TypeOfMessages]);
HTM_SELECT_Begin (false,
"name=\"FilterCrsCod\"");
- fprintf (Gbl.F.Out,"",Txt_any_course);
+ HTM_OPTION (HTM_Type_STRING,(void *) "",
+ Gbl.Msg.FilterCrsCod < 0,false,
+ "%s",Txt_any_course);
- /***** Write an option for each user's course *****/
+ /***** Write an option for each origin course *****/
for (NumOriginCrs = 0;
NumOriginCrs < Gbl.Msg.NumCourses;
NumOriginCrs++)
- {
- fprintf (Gbl.F.Out,"",Gbl.Msg.Courses[NumOriginCrs].ShrtName);
- }
+ HTM_OPTION (HTM_Type_LONG,(void *) &Gbl.Msg.Courses[NumOriginCrs].CrsCod,
+ Gbl.Msg.Courses[NumOriginCrs].CrsCod == Gbl.Msg.FilterCrsCod,false,
+ "%s",Gbl.Msg.Courses[NumOriginCrs].ShrtName);
HTM_SELECT_End ();
HTM_LABEL_End ();
}
diff --git a/swad_project.c b/swad_project.c
index af086cd5d..613a8a685 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -3343,17 +3343,10 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
HTM_TD_Begin ("class=\"LM\"");
HTM_SELECT_Begin (false,
"name=\"Assigned\"");
-
- fprintf (Gbl.F.Out,"",Txt_Yes);
-
- fprintf (Gbl.F.Out,"",Txt_No);
-
+ HTM_OPTION (HTM_Type_STRING,(void *) "Y",Prj->Assigned == Prj_ASSIGNED,false,
+ "%s",Txt_Yes);
+ HTM_OPTION (HTM_Type_STRING,(void *) "N",Prj->Assigned == Prj_NONASSIG,false,
+ "%s",Txt_No);
HTM_SELECT_End ();
HTM_TD_End ();
diff --git a/swad_role.c b/swad_role.c
index 45c678e48..de8bc3b30 100644
--- a/swad_role.c
+++ b/swad_role.c
@@ -471,6 +471,7 @@ void Rol_PutFormToChangeMyRole (const char *ClassSelect)
{
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
Rol_Role_t Role;
+ unsigned RoleUnsigned;
bool PutClassSelect;
Frm_StartForm (ActChgMyRol);
@@ -489,11 +490,10 @@ void Rol_PutFormToChangeMyRole (const char *ClassSelect)
Role++)
if (Gbl.Usrs.Me.Role.Available & (1 << Role))
{
- fprintf (Gbl.F.Out,"",
- Txt_ROLES_SINGUL_Abc[Role][Gbl.Usrs.Me.UsrDat.Sex]);
+ RoleUnsigned = (unsigned) Role;
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &RoleUnsigned,
+ Role == Gbl.Usrs.Me.Role.Logged,false,
+ "%s",Txt_ROLES_SINGUL_Abc[Role][Gbl.Usrs.Me.UsrDat.Sex]);
}
HTM_SELECT_End ();
Frm_EndForm ();
diff --git a/swad_scope.c b/swad_scope.c
index 02a307e40..fbbfbc9ee 100644
--- a/swad_scope.c
+++ b/swad_scope.c
@@ -72,6 +72,7 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
extern const char *Txt_Degree;
extern const char *Txt_Course;
Hie_Level_t Scope;
+ unsigned ScopeUnsigned;
bool WriteScope;
HTM_SELECT_Begin (SendOnChange,
@@ -117,46 +118,55 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
if (WriteScope)
{
/***** Write allowed option *****/
- fprintf (Gbl.F.Out,"");
}
}
diff --git a/swad_search.c b/swad_search.c
index f6ede1709..95e65973d 100644
--- a/swad_search.c
+++ b/swad_search.c
@@ -132,6 +132,7 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (Act_Action_t Action,Hie
Txt_my_documents, // Sch_SEARCH_MY_DOCUMENTS
};
Sch_WhatToSearch_t WhatToSearch;
+ unsigned WTS;
/***** Begin box *****/
HTM_DIV_Begin ("class=\"CM\"");
@@ -171,12 +172,10 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (Act_Action_t Action,Hie
WhatToSearch++)
if (Sch_CheckIfIHavePermissionToSearch (WhatToSearch))
{
- fprintf (Gbl.F.Out,"",
- Titles[WhatToSearch]);
+ WTS = (unsigned) WhatToSearch;
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &WTS,
+ Gbl.Search.WhatToSearch == WhatToSearch,false,
+ "%s",Titles[WhatToSearch]);
}
HTM_SELECT_End ();
HTM_LABEL_End ();
diff --git a/swad_user.c b/swad_user.c
index 386254e8e..308da050d 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -8945,12 +8945,9 @@ void Usr_PutSelectorNumColsClassPhoto (void)
for (Cols = 1;
Cols <= Usr_CLASS_PHOTO_COLS_MAX;
Cols++)
- {
- fprintf (Gbl.F.Out,"",Cols);
- }
+ HTM_OPTION (HTM_Type_UNSIGNED,(void *) &Cols,
+ Cols == Gbl.Usrs.ClassPhoto.Cols,false,
+ "%u",Cols);
/***** End selector *****/
HTM_SELECT_End ();