Version19.108.5

This commit is contained in:
Antonio Cañas Vargas 2019-12-30 18:49:52 +01:00
parent 78b1aca65a
commit 359dd28b28
31 changed files with 282 additions and 277 deletions

View File

@ -649,10 +649,10 @@ static void ID_ShowFormChangeUsrID (const struct UsrData *UsrDat,
HTM_SPAN_Begin ("class=\"%s\" title=\"%s\"", HTM_SPAN_Begin ("class=\"%s\" title=\"%s\"",
UsrDat->IDs.List[NumID].Confirmed ? "USR_ID_C" : UsrDat->IDs.List[NumID].Confirmed ? "USR_ID_C" :
"USR_ID_NC", "USR_ID_NC",
Str_BuildStrMsg (UsrDat->IDs.List[NumID].Confirmed ? Txt_ID_X_confirmed : Str_BuildMsgStr (UsrDat->IDs.List[NumID].Confirmed ? Txt_ID_X_confirmed :
Txt_ID_X_not_confirmed, Txt_ID_X_not_confirmed,
UsrDat->IDs.List[NumID].ID)); UsrDat->IDs.List[NumID].ID));
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_Txt (UsrDat->IDs.List[NumID].ID); HTM_Txt (UsrDat->IDs.List[NumID].ID);
HTM_Txt (UsrDat->IDs.List[NumID].Confirmed ? "✓" : HTM_Txt (UsrDat->IDs.List[NumID].Confirmed ? "✓" :
""); "");

View File

@ -420,10 +420,10 @@ void Acc_ShowFormGoToRequestNewAccount (void)
extern const char *Txt_Create_account; extern const char *Txt_Create_account;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_New_on_PLATFORM_Sign_up, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_New_on_PLATFORM_Sign_up,
Cfg_PLATFORM_SHORT_NAME),NULL, Cfg_PLATFORM_SHORT_NAME),NULL,
Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE); Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Button to go to request the creation of a new account *****/ /***** Button to go to request the creation of a new account *****/
Frm_StartForm (ActFrmMyAcc); Frm_StartForm (ActFrmMyAcc);

View File

@ -357,12 +357,12 @@ void Agd_ShowUsrAgenda (void)
/***** Begin box *****/ /***** Begin box *****/
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
Box_BoxBegin ("100%",Str_BuildStrMsg (Txt_Public_agenda_USER, Box_BoxBegin ("100%",Str_BuildMsgStr (Txt_Public_agenda_USER,
Gbl.Usrs.Other.UsrDat.FullName), Gbl.Usrs.Other.UsrDat.FullName),
ItsMe ? Agd_PutIconsMyPublicAgenda : ItsMe ? Agd_PutIconsMyPublicAgenda :
Agd_PutIconsOtherPublicAgenda, Agd_PutIconsOtherPublicAgenda,
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Show the current events in the user's agenda *****/ /***** Show the current events in the user's agenda *****/
Agd_ShowEventsToday (Agd_ANOTHER_AGENDA_TODAY); Agd_ShowEventsToday (Agd_ANOTHER_AGENDA_TODAY);
@ -400,12 +400,12 @@ void Agd_ShowOtherAgendaAfterLogIn (void)
{ {
/***** Begin box *****/ /***** Begin box *****/
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
Box_BoxBegin ("100%",Str_BuildStrMsg (Txt_Public_agenda_USER, Box_BoxBegin ("100%",Str_BuildMsgStr (Txt_Public_agenda_USER,
Gbl.Usrs.Other.UsrDat.FullName), Gbl.Usrs.Other.UsrDat.FullName),
ItsMe ? Agd_PutIconToViewEditMyFullAgenda : ItsMe ? Agd_PutIconToViewEditMyFullAgenda :
Agd_PutIconsOtherPublicAgenda, Agd_PutIconsOtherPublicAgenda,
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Show the current events in the user's agenda *****/ /***** Show the current events in the user's agenda *****/
Agd_ShowEventsToday (Agd_ANOTHER_AGENDA_TODAY); Agd_ShowEventsToday (Agd_ANOTHER_AGENDA_TODAY);
@ -1900,10 +1900,10 @@ void Agd_PrintAgdQRCode (void)
extern const char *Txt_Where_s_USER; extern const char *Txt_Where_s_USER;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Where_s_USER, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Where_s_USER,
Gbl.Usrs.Me.UsrDat.FullName),NULL, Gbl.Usrs.Me.UsrDat.FullName),NULL,
NULL,Box_NOT_CLOSABLE); NULL,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Print QR code ****/ /***** Print QR code ****/
QR_PrintQRCode (); QR_PrintQRCode ();

View File

@ -106,7 +106,7 @@ static void Cal_PutIconsFirstDayOfWeek (void)
void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (void)) void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (void))
{ {
extern const char *Txt_First_day_of_the_week; extern const char *Txt_First_day_of_the_week_X;
extern const char *Txt_DAYS_SMALL[7]; extern const char *Txt_DAYS_SMALL[7];
unsigned FirstDayOfWeek; unsigned FirstDayOfWeek;
char Icon[32 + 1]; char Icon[32 + 1];
@ -124,13 +124,13 @@ void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (vo
Par_PutHiddenParamUnsigned (NULL,"FirstDayOfWeek",FirstDayOfWeek); Par_PutHiddenParamUnsigned (NULL,"FirstDayOfWeek",FirstDayOfWeek);
if (FuncParams) // Extra parameters depending on the action if (FuncParams) // Extra parameters depending on the action
FuncParams (); FuncParams ();
snprintf (Gbl.Title,sizeof (Gbl.Title),
"%s: %s",
Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek]);
snprintf (Icon,sizeof (Icon), snprintf (Icon,sizeof (Icon),
"first-day-of-week-%u.png", "first-day-of-week-%u.png",
FirstDayOfWeek); FirstDayOfWeek);
Ico_PutSettingIconLink (Icon,Gbl.Title); Ico_PutSettingIconLink (Icon,
Str_BuildMsgStr (Txt_First_day_of_the_week_X,
Txt_DAYS_SMALL[FirstDayOfWeek]));
Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
HTM_DIV_End (); HTM_DIV_End ();
} }

View File

@ -264,11 +264,11 @@ static void Ctr_ListCentres (void)
unsigned NumCtr; unsigned NumCtr;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Centres_of_INSTITUTION_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Centres_of_INSTITUTION_X,
Gbl.Hierarchy.Ins.FullName), Gbl.Hierarchy.Ins.FullName),
Ctr_PutIconsListingCentres, Ctr_PutIconsListingCentres,
Hlp_INSTITUTION_Centres,Box_NOT_CLOSABLE); Hlp_INSTITUTION_Centres,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
if (Gbl.Hierarchy.Ins.Ctrs.Num) // There are centres in the current institution if (Gbl.Hierarchy.Ins.Ctrs.Num) // There are centres in the current institution
{ {
@ -476,11 +476,11 @@ static void Ctr_EditCentresInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Centres_of_INSTITUTION_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Centres_of_INSTITUTION_X,
Gbl.Hierarchy.Ins.FullName), Gbl.Hierarchy.Ins.FullName),
Ctr_PutIconsEditingCentres, Ctr_PutIconsEditingCentres,
Hlp_INSTITUTION_Centres,Box_NOT_CLOSABLE); Hlp_INSTITUTION_Centres,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Put a form to create a new centre *****/ /***** Put a form to create a new centre *****/
Ctr_PutFormToCreateCentre (); Ctr_PutFormToCreateCentre ();

View File

@ -797,10 +797,10 @@ static void CtrCfg_NumDegs (void)
HTM_TD_Begin ("class=\"LB\""); HTM_TD_Begin ("class=\"LB\"");
Frm_StartFormGoTo (ActSeeDeg); Frm_StartFormGoTo (ActSeeDeg);
Ctr_PutParamCtrCod (Gbl.Hierarchy.Ctr.CtrCod); Ctr_PutParamCtrCod (Gbl.Hierarchy.Ctr.CtrCod);
HTM_BUTTON_SUBMIT_Begin (Str_BuildStrMsg (Txt_Degrees_of_CENTRE_X, HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgStr (Txt_Degrees_of_CENTRE_X,
Gbl.Hierarchy.Ctr.ShrtName), Gbl.Hierarchy.Ctr.ShrtName),
"BT_LINK DAT",NULL); "BT_LINK DAT",NULL);
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_Unsigned (Deg_GetNumDegsInCtr (Gbl.Hierarchy.Ctr.CtrCod)); HTM_Unsigned (Deg_GetNumDegsInCtr (Gbl.Hierarchy.Ctr.CtrCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -492,7 +492,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.108.4 (2019-12-30)" #define Log_PLATFORM_VERSION "SWAD 19.108.5 (2019-12-30)"
#define CSS_FILE "swad19.101.5.css" #define CSS_FILE "swad19.101.5.css"
#define JS_FILE "swad19.91.1.js" #define JS_FILE "swad19.91.1.js"
/* /*
@ -502,6 +502,7 @@ ps2pdf source.ps destination.pdf
Version 19.10x: Dec 30, 2019 Map in country information. (? lines) Version 19.10x: Dec 30, 2019 Map in country information. (? lines)
Version 19.10x: Dec 30, 2019 Map in institution information. (? lines) Version 19.10x: Dec 30, 2019 Map in institution information. (? lines)
Version 19.108.5: Dec 30, 2019 Code refactoring related to printing messages. (249712 lines)
Version 19.108.4: Dec 30, 2019 Code refactoring related to printing messages. (249709 lines) Version 19.108.4: Dec 30, 2019 Code refactoring related to printing messages. (249709 lines)
Version 19.108.3: Dec 30, 2019 Code refactoring related to printing messages. (249725 lines) Version 19.108.3: Dec 30, 2019 Code refactoring related to printing messages. (249725 lines)
Version 19.108.2: Dec 30, 2019 Code refactoring related to printing messages. (249739 lines) Version 19.108.2: Dec 30, 2019 Code refactoring related to printing messages. (249739 lines)

View File

@ -343,10 +343,10 @@ static void CtyCfg_NumInss (void)
HTM_TD_Begin ("class=\"LB\""); HTM_TD_Begin ("class=\"LB\"");
Frm_StartFormGoTo (ActSeeIns); Frm_StartFormGoTo (ActSeeIns);
Cty_PutParamCtyCod (Gbl.Hierarchy.Cty.CtyCod); Cty_PutParamCtyCod (Gbl.Hierarchy.Cty.CtyCod);
HTM_BUTTON_SUBMIT_Begin (Str_BuildStrMsg (Txt_Institutions_of_COUNTRY_X, HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgStr (Txt_Institutions_of_COUNTRY_X,
Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]),
"BT_LINK DAT",NULL); "BT_LINK DAT",NULL);
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_Unsigned (Ins_GetNumInssInCty (Gbl.Hierarchy.Cty.CtyCod)); HTM_Unsigned (Ins_GetNumInssInCty (Gbl.Hierarchy.Cty.CtyCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -743,11 +743,11 @@ static void Crs_ListCourses (void)
unsigned Year; unsigned Year;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Courses_of_DEGREE_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Courses_of_DEGREE_X,
Gbl.Hierarchy.Deg.ShrtName), Gbl.Hierarchy.Deg.ShrtName),
Crs_PutIconsListCourses, Crs_PutIconsListCourses,
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
if (Gbl.Hierarchy.Deg.Crss.Num) // There are courses in the current degree if (Gbl.Hierarchy.Deg.Crss.Num) // There are courses in the current degree
{ {
@ -947,11 +947,11 @@ static void Crs_EditCoursesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Courses_of_DEGREE_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Courses_of_DEGREE_X,
Gbl.Hierarchy.Deg.ShrtName), Gbl.Hierarchy.Deg.ShrtName),
Crs_PutIconsEditingCourses, Crs_PutIconsEditingCourses,
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Put a form to create or request a new course *****/ /***** Put a form to create or request a new course *****/
Crs_PutFormToCreateCourse (); Crs_PutFormToCreateCourse ();
@ -2269,9 +2269,9 @@ static void Crs_PutButtonToRegisterInCrs (void)
// If the course being edited is different to the current one... // If the course being edited is different to the current one...
if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod) if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod)
Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod); Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod);
Btn_PutCreateButton (Str_BuildStrMsg (Txt_Register_me_in_X, Btn_PutCreateButton (Str_BuildMsgStr (Txt_Register_me_in_X,
Crs_EditingCrs->ShrtName)); Crs_EditingCrs->ShrtName));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
} }
@ -2445,10 +2445,10 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TH_Begin (1,7,"LM"); HTM_TH_Begin (1,7,"LM");
HTM_TxtF ("%s:",Str_BuildStrMsg (Txt_USER_in_COURSE, HTM_TxtF ("%s:",Str_BuildMsgStr (Txt_USER_in_COURSE,
Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex])); Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]));
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_TH_End (); HTM_TH_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -763,11 +763,11 @@ static void Deg_ListDegrees (void)
unsigned NumDeg; unsigned NumDeg;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Degrees_of_CENTRE_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Degrees_of_CENTRE_X,
Gbl.Hierarchy.Ctr.ShrtName), Gbl.Hierarchy.Ctr.ShrtName),
Deg_PutIconsListingDegrees, Deg_PutIconsListingDegrees,
Hlp_CENTRE_Degrees,Box_NOT_CLOSABLE); Hlp_CENTRE_Degrees,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
if (Gbl.Hierarchy.Ctr.Degs.Num) // There are degrees in the current centre if (Gbl.Hierarchy.Ctr.Degs.Num) // There are degrees in the current centre
{ {
@ -945,11 +945,11 @@ static void Deg_EditDegreesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Degrees_of_CENTRE_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Degrees_of_CENTRE_X,
Gbl.Hierarchy.Ctr.ShrtName), Gbl.Hierarchy.Ctr.ShrtName),
Deg_PutIconsEditingDegrees, Deg_PutIconsEditingDegrees,
Hlp_CENTRE_Degrees,Box_NOT_CLOSABLE); Hlp_CENTRE_Degrees,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
if (Gbl.DegTypes.Num) if (Gbl.DegTypes.Num)
{ {

View File

@ -334,10 +334,10 @@ static void DegCfg_NumCrss (void)
HTM_TD_Begin ("class=\"LB\""); HTM_TD_Begin ("class=\"LB\"");
Frm_StartFormGoTo (ActSeeCrs); Frm_StartFormGoTo (ActSeeCrs);
Deg_PutParamDegCod (Gbl.Hierarchy.Deg.DegCod); Deg_PutParamDegCod (Gbl.Hierarchy.Deg.DegCod);
HTM_BUTTON_SUBMIT_Begin (Str_BuildStrMsg (Txt_Courses_of_DEGREE_X, HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgStr (Txt_Courses_of_DEGREE_X,
Gbl.Hierarchy.Deg.ShrtName), Gbl.Hierarchy.Deg.ShrtName),
"BT_LINK DAT",NULL); "BT_LINK DAT",NULL);
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_Unsigned (Crs_GetNumCrssInDeg (Gbl.Hierarchy.Deg.DegCod)); HTM_Unsigned (Crs_GetNumCrssInDeg (Gbl.Hierarchy.Deg.DegCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -111,12 +111,12 @@ void Dpt_SeeDepts (void)
Dpt_GetListDepartments (Gbl.Hierarchy.Ins.InsCod); Dpt_GetListDepartments (Gbl.Hierarchy.Ins.InsCod);
/***** Begin box and table *****/ /***** Begin box and table *****/
Box_BoxTableBegin (NULL,Str_BuildStrMsg (Txt_Departments_of_INSTITUTION_X, Box_BoxTableBegin (NULL,Str_BuildMsgStr (Txt_Departments_of_INSTITUTION_X,
Gbl.Hierarchy.Ins.FullName), Gbl.Hierarchy.Ins.FullName),
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ? Dpt_PutIconToEditDpts : Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ? Dpt_PutIconToEditDpts :
NULL, NULL,
Hlp_INSTITUTION_Departments,Box_NOT_CLOSABLE,2); Hlp_INSTITUTION_Departments,Box_NOT_CLOSABLE,2);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Write heading *****/ /***** Write heading *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -266,10 +266,10 @@ static void Dpt_EditDepartmentsInternal (void)
Dpt_GetListDepartments (Gbl.Hierarchy.Ins.InsCod); Dpt_GetListDepartments (Gbl.Hierarchy.Ins.InsCod);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Departments_of_INSTITUTION_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Departments_of_INSTITUTION_X,
Gbl.Hierarchy.Ins.FullName),NULL, Gbl.Hierarchy.Ins.FullName),NULL,
Hlp_INSTITUTION_Departments_edit,Box_NOT_CLOSABLE); Hlp_INSTITUTION_Departments_edit,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Put a form to create a new department *****/ /***** Put a form to create a new department *****/
Dpt_PutFormToCreateDepartment (); Dpt_PutFormToCreateDepartment ();

View File

@ -4921,14 +4921,13 @@ static void Fig_GetAndShowNumUsrsPerFirstDayOfWeek (void)
extern const char *Hlp_ANALYTICS_Figures_calendar; extern const char *Hlp_ANALYTICS_Figures_calendar;
extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES]; extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES];
extern const char *Txt_Calendar; extern const char *Txt_Calendar;
extern const char *Txt_First_day_of_the_week; extern const char *Txt_First_day_of_the_week_X;
extern const char *Txt_DAYS_SMALL[7]; extern const char *Txt_DAYS_SMALL[7];
extern const char *Txt_No_of_users; extern const char *Txt_No_of_users;
extern const char *Txt_PERCENT_of_users; extern const char *Txt_PERCENT_of_users;
unsigned FirstDayOfWeek; unsigned FirstDayOfWeek;
char *SubQuery; char *SubQuery;
char *Icon; char *Icon;
char *Title;
unsigned NumUsrs[7]; // 7: seven days in a week unsigned NumUsrs[7]; // 7: seven days in a week
unsigned NumUsrsTotal = 0; unsigned NumUsrsTotal = 0;
@ -4974,11 +4973,11 @@ static void Fig_GetAndShowNumUsrsPerFirstDayOfWeek (void)
if (asprintf (&Icon,"first-day-of-week-%u.png", if (asprintf (&Icon,"first-day-of-week-%u.png",
FirstDayOfWeek) < 0) FirstDayOfWeek) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
if (asprintf (&Title,"%s: %s", Ico_PutIcon (Icon,
Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek]) < 0) Str_BuildMsgStr (Txt_First_day_of_the_week_X,
Lay_NotEnoughMemoryExit (); Txt_DAYS_SMALL[FirstDayOfWeek]),
Ico_PutIcon (Icon,Title,"ICO40x40"); "ICO40x40");
free (Title); Str_FreeMsg ();
free (Icon); free (Icon);
HTM_TD_End (); HTM_TD_End ();

View File

@ -1234,27 +1234,23 @@ static void For_ShowAForumPost (unsigned PstNum,long PstCod,
Gbl.Forum.ForumSelected.Location, Gbl.Forum.ForumSelected.Location,
Gbl.Forum.ForumSelected.ThrCod, Gbl.Forum.ForumSelected.ThrCod,
PstCod); PstCod);
snprintf (Gbl.Title,sizeof (Gbl.Title),
Enabled ? Txt_FORUM_Post_X_allowed_Click_to_ban_it :
Txt_FORUM_Post_X_banned_Click_to_unban_it,
PstNum);
Ico_PutIconLink (Enabled ? "eye.svg" : Ico_PutIconLink (Enabled ? "eye.svg" :
"eye-slash.svg", "eye-slash.svg",
Gbl.Title); Str_BuildMsgLong (Enabled ? Txt_FORUM_Post_X_allowed_Click_to_ban_it :
Txt_FORUM_Post_X_banned_Click_to_unban_it,
(long) PstNum));
Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
} }
else else
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title),
Enabled ? Txt_FORUM_Post_X_allowed :
Txt_FORUM_Post_X_banned,
PstNum);
HTM_SPAN_Begin ("title=\"%s\"",Gbl.Title); // TODO: Remove?
Ico_PutIcon (Enabled ? "eye.svg" : Ico_PutIcon (Enabled ? "eye.svg" :
"eye-slash.svg", "eye-slash.svg",
Gbl.Title,"ICO_HIDDEN ICO16x16"); Str_BuildMsgLong (Enabled ? Txt_FORUM_Post_X_allowed :
HTM_SPAN_End (); // TODO: Remove? Txt_FORUM_Post_X_banned,
(long) PstNum),
"ICO_HIDDEN ICO16x16");
Str_FreeMsg ();
} }
/***** Form to remove post *****/ /***** Form to remove post *****/

View File

@ -1871,9 +1871,9 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
{ {
Lay_PutContextualLinkOnlyIcon (ActUp_GamQst,NULL,Gam_PutParamsOneQst, Lay_PutContextualLinkOnlyIcon (ActUp_GamQst,NULL,Gam_PutParamsOneQst,
"arrow-up.svg", "arrow-up.svg",
Str_BuildStrMsg (Txt_Move_up_X, Str_BuildMsgStr (Txt_Move_up_X,
StrQstInd)); StrQstInd));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-up.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-up.svg",Txt_Movement_not_allowed);
@ -1883,9 +1883,9 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
{ {
Lay_PutContextualLinkOnlyIcon (ActDwnGamQst,NULL,Gam_PutParamsOneQst, Lay_PutContextualLinkOnlyIcon (ActDwnGamQst,NULL,Gam_PutParamsOneQst,
"arrow-down.svg", "arrow-down.svg",
Str_BuildStrMsg (Txt_Move_down_X, Str_BuildMsgStr (Txt_Move_down_X,
StrQstInd)); StrQstInd));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed);

View File

@ -1509,10 +1509,10 @@ static void Grp_ListGroupsForEdition (void)
Grp_PutParamGrpCod (Grp->GrpCod); Grp_PutParamGrpCod (Grp->GrpCod);
Ico_PutIconLink (Grp->Open ? "unlock.svg" : Ico_PutIconLink (Grp->Open ? "unlock.svg" :
"lock.svg", "lock.svg",
Str_BuildStrMsg (Grp->Open ? Txt_Group_X_open_click_to_close_it : Str_BuildMsgStr (Grp->Open ? Txt_Group_X_open_click_to_close_it :
Txt_Group_X_closed_click_to_open_it, Txt_Group_X_closed_click_to_open_it,
Grp->GrpName)); Grp->GrpName));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
@ -1524,10 +1524,10 @@ static void Grp_ListGroupsForEdition (void)
Grp_PutParamGrpCod (Grp->GrpCod); Grp_PutParamGrpCod (Grp->GrpCod);
Ico_PutIconLink (Grp->FileZones ? "folder-open-green.svg" : Ico_PutIconLink (Grp->FileZones ? "folder-open-green.svg" :
"folder-red.svg", "folder-red.svg",
Str_BuildStrMsg (Grp->FileZones ? Txt_File_zones_of_the_group_X_enabled_click_to_disable_them : Str_BuildMsgStr (Grp->FileZones ? Txt_File_zones_of_the_group_X_enabled_click_to_disable_them :
Txt_File_zones_of_the_group_X_disabled_click_to_enable_them, Txt_File_zones_of_the_group_X_disabled_click_to_enable_them,
Grp->GrpName)); Grp->GrpName));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
@ -2381,10 +2381,10 @@ static void Grp_WriteRowGrp (struct Group *Grp,bool Highlight)
HTM_TD_Begin ("class=\"BM\""); HTM_TD_Begin ("class=\"BM\"");
Ico_PutIconOff (Grp->Open ? "unlock.svg" : Ico_PutIconOff (Grp->Open ? "unlock.svg" :
"lock.svg", "lock.svg",
Str_BuildStrMsg (Grp->Open ? Txt_Group_X_open : Str_BuildMsgStr (Grp->Open ? Txt_Group_X_open :
Txt_Group_X_closed, Txt_Group_X_closed,
Grp->GrpName)); Grp->GrpName));
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_TD_End (); HTM_TD_End ();
/***** Group name *****/ /***** Group name *****/

View File

@ -141,21 +141,21 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
if (ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role] != ActUnk) if (ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role] != ActUnk)
{ {
/* Request my removing from this course */ /* Request my removing from this course */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Txt_Remove_me_from_THE_COURSE_X, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Txt_Remove_me_from_THE_COURSE_X,
Gbl.Hierarchy.Crs.ShrtName), Gbl.Hierarchy.Crs.ShrtName),
ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role], ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role],
Btn_REMOVE_BUTTON,Txt_Remove_me); Btn_REMOVE_BUTTON,Txt_Remove_me);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
} }
else // I do not belong to this course else // I do not belong to this course
{ {
/* Request my registration in this course */ /* Request my registration in this course */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Txt_Register_me_in_X, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Txt_Register_me_in_X,
Gbl.Hierarchy.Crs.ShrtName), Gbl.Hierarchy.Crs.ShrtName),
ActReqSignUp, ActReqSignUp,
Btn_CREATE_BUTTON,Txt_Sign_up); Btn_CREATE_BUTTON,Txt_Sign_up);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
} }
@ -166,11 +166,11 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role == Rol_TCH) // I am a teacher in current course Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role == Rol_TCH) // I am a teacher in current course
{ {
/* Request students enrolment */ /* Request students enrolment */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Txt_Register_students_in_COURSE_X, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Txt_Register_students_in_COURSE_X,
Gbl.Hierarchy.Crs.ShrtName), Gbl.Hierarchy.Crs.ShrtName),
ActReqEnrSevStd, ActReqEnrSevStd,
Btn_CREATE_BUTTON,Txt_Register_students); Btn_CREATE_BUTTON,Txt_Register_students);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
if (Gbl.Action.Act != ActMyCrs) // I am not seeing the action to list my courses if (Gbl.Action.Act != ActMyCrs) // I am not seeing the action to list my courses
@ -183,42 +183,42 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
if (Gbl.Hierarchy.Deg.DegCod > 0) // Degree selected if (Gbl.Hierarchy.Deg.DegCod > 0) // Degree selected
{ {
/* Select a course */ /* Select a course */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Gbl.Hierarchy.Level == Hie_CRS ? Txt_Select_create_course_in_X : Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Gbl.Hierarchy.Level == Hie_CRS ? Txt_Select_create_course_in_X :
Txt_Select_or_create_one_course_in_X, Txt_Select_or_create_one_course_in_X,
Gbl.Hierarchy.Deg.ShrtName), Gbl.Hierarchy.Deg.ShrtName),
ActSeeCrs, ActSeeCrs,
Btn_CONFIRM_BUTTON,Txt_Courses); Btn_CONFIRM_BUTTON,Txt_Courses);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else if (Gbl.Hierarchy.Ctr.CtrCod > 0) // Centre selected else if (Gbl.Hierarchy.Ctr.CtrCod > 0) // Centre selected
{ {
/* Select a degree */ /* Select a degree */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Gbl.Hierarchy.Deg.DegCod > 0 ? Txt_Select_or_create_another_degree_in_X : Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Gbl.Hierarchy.Deg.DegCod > 0 ? Txt_Select_or_create_another_degree_in_X :
Txt_Select_or_create_one_degree_in_X, Txt_Select_or_create_one_degree_in_X,
Gbl.Hierarchy.Ctr.ShrtName), Gbl.Hierarchy.Ctr.ShrtName),
ActSeeDeg, ActSeeDeg,
Btn_CONFIRM_BUTTON,Txt_Degrees); Btn_CONFIRM_BUTTON,Txt_Degrees);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else if (Gbl.Hierarchy.Ins.InsCod > 0) // Institution selected else if (Gbl.Hierarchy.Ins.InsCod > 0) // Institution selected
{ {
/* Select a centre */ /* Select a centre */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Gbl.Hierarchy.Ctr.CtrCod > 0 ? Txt_Select_or_create_another_centre_in_X : Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Gbl.Hierarchy.Ctr.CtrCod > 0 ? Txt_Select_or_create_another_centre_in_X :
Txt_Select_or_create_one_centre_in_X, Txt_Select_or_create_one_centre_in_X,
Gbl.Hierarchy.Ins.ShrtName), Gbl.Hierarchy.Ins.ShrtName),
ActSeeCtr, ActSeeCtr,
Btn_CONFIRM_BUTTON,Txt_Centres); Btn_CONFIRM_BUTTON,Txt_Centres);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else if (Gbl.Hierarchy.Cty.CtyCod > 0) // Country selected else if (Gbl.Hierarchy.Cty.CtyCod > 0) // Country selected
{ {
/* Select an institution */ /* Select an institution */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Gbl.Hierarchy.Ins.InsCod > 0 ? Txt_Select_or_create_another_institution_in_X : Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Gbl.Hierarchy.Ins.InsCod > 0 ? Txt_Select_or_create_another_institution_in_X :
Txt_Select_or_create_one_institution_in_X, Txt_Select_or_create_one_institution_in_X,
Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]),
ActSeeIns, ActSeeIns,
Btn_CONFIRM_BUTTON,Txt_Institutions); Btn_CONFIRM_BUTTON,Txt_Institutions);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
/* Select a country */ /* Select a country */
@ -240,11 +240,11 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
Btn_CONFIRM_BUTTON,Txt_Log_in); Btn_CONFIRM_BUTTON,Txt_Log_in);
/* Sign up */ /* Sign up */
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildStrMsg (Txt_New_on_PLATFORM_Sign_up, Hlp_ShowRowHelpWhatWouldYouLikeToDo (Str_BuildMsgStr (Txt_New_on_PLATFORM_Sign_up,
Cfg_PLATFORM_SHORT_NAME), Cfg_PLATFORM_SHORT_NAME),
ActFrmMyAcc, ActFrmMyAcc,
Btn_CREATE_BUTTON,Txt_Create_account); Btn_CREATE_BUTTON,Txt_Create_account);
Str_FreeStrMsg (); Str_FreeMsg ();
} }
/***** End table and box *****/ /***** End table and box *****/

View File

@ -788,10 +788,10 @@ char *Hie_BuildGoToMsg (const char *Where)
{ {
extern const char *Txt_Go_to_X; extern const char *Txt_Go_to_X;
return Str_BuildStrMsg (Txt_Go_to_X,Where); return Str_BuildMsgStr (Txt_Go_to_X,Where);
} }
void Hie_FreeGoToMsg (void) void Hie_FreeGoToMsg (void)
{ {
Str_FreeStrMsg (); Str_FreeMsg ();
} }

View File

@ -291,11 +291,11 @@ static void Ins_ListInstitutions (void)
unsigned NumIns; unsigned NumIns;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Institutions_of_COUNTRY_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Institutions_of_COUNTRY_X,
Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]),
Ins_PutIconsListingInstitutions, Ins_PutIconsListingInstitutions,
Hlp_COUNTRY_Institutions,Box_NOT_CLOSABLE); Hlp_COUNTRY_Institutions,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
if (Gbl.Hierarchy.Cty.Inss.Num) // There are institutions in the current country if (Gbl.Hierarchy.Cty.Inss.Num) // There are institutions in the current country
{ {
@ -538,11 +538,11 @@ static void Ins_EditInstitutionsInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Institutions_of_COUNTRY_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Institutions_of_COUNTRY_X,
Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]),
Ins_PutIconsEditingInstitutions, Ins_PutIconsEditingInstitutions,
Hlp_COUNTRY_Institutions,Box_NOT_CLOSABLE); Hlp_COUNTRY_Institutions,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Put a form to create a new institution *****/ /***** Put a form to create a new institution *****/
Ins_PutFormToCreateInstitution (); Ins_PutFormToCreateInstitution ();

View File

@ -467,10 +467,10 @@ static void InsCfg_NumCtrs (void)
HTM_TD_Begin ("class=\"LB\""); HTM_TD_Begin ("class=\"LB\"");
Frm_StartFormGoTo (ActSeeCtr); Frm_StartFormGoTo (ActSeeCtr);
Ins_PutParamInsCod (Gbl.Hierarchy.Ins.InsCod); Ins_PutParamInsCod (Gbl.Hierarchy.Ins.InsCod);
HTM_BUTTON_SUBMIT_Begin (Str_BuildStrMsg (Txt_Centres_of_INSTITUTION_X, HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgStr (Txt_Centres_of_INSTITUTION_X,
Gbl.Hierarchy.Ins.ShrtName), Gbl.Hierarchy.Ins.ShrtName),
"BT_LINK DAT",NULL); "BT_LINK DAT",NULL);
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_Unsigned (Ctr_GetNumCtrsInIns (Gbl.Hierarchy.Ins.InsCod)); HTM_Unsigned (Ctr_GetNumCtrsInIns (Gbl.Hierarchy.Ins.InsCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -1309,9 +1309,9 @@ static void Mai_ShowFormChangeUsrEmail (const struct UsrData *UsrDat,bool ItsMe,
if (Confirmed) if (Confirmed)
{ {
Ico_PutIcon ("check-circle.svg", Ico_PutIcon ("check-circle.svg",
Str_BuildStrMsg (Txt_Email_X_confirmed,row[0]), Str_BuildMsgStr (Txt_Email_X_confirmed,row[0]),
"ICO16x16"); "ICO16x16");
Str_FreeStrMsg (); Str_FreeMsg ();
} }
/* Form to change user's email */ /* Form to change user's email */

View File

@ -176,9 +176,9 @@ void McR_ShowMyMchResultsInGam (void)
false); // Do not put form to start new match false); // Do not put form to start new match
/***** List my matches results in game *****/ /***** List my matches results in game *****/
McR_ShowResultsBegin (Str_BuildStrMsg (Txt_Results_of_game_X,Game.Title), McR_ShowResultsBegin (Str_BuildMsgStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select false); // Do not list games to select
Str_FreeStrMsg (); Str_FreeMsg ();
McR_ListMyMchResultsInGam (Game.GamCod); McR_ListMyMchResultsInGam (Game.GamCod);
McR_ShowResultsEnd (); McR_ShowResultsEnd ();
@ -220,9 +220,9 @@ void McR_ShowMyMchResultsInMch (void)
false); // Do not put form to start new match false); // Do not put form to start new match
/***** List my matches results in match *****/ /***** List my matches results in match *****/
McR_ShowResultsBegin (Str_BuildStrMsg (Txt_Results_of_match_X,Match.Title), McR_ShowResultsBegin (Str_BuildMsgStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select false); // Do not list games to select
Str_FreeStrMsg (); Str_FreeMsg ();
McR_ListMyMchResultsInMch (Match.MchCod); McR_ListMyMchResultsInMch (Match.MchCod);
McR_ShowResultsEnd (); McR_ShowResultsEnd ();
@ -320,9 +320,9 @@ void McR_ShowAllMchResultsInGam (void)
false); // Do not put form to start new match false); // Do not put form to start new match
/***** List matches results in game *****/ /***** List matches results in game *****/
McR_ShowResultsBegin (Str_BuildStrMsg (Txt_Results_of_game_X,Game.Title), McR_ShowResultsBegin (Str_BuildMsgStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select false); // Do not list games to select
Str_FreeStrMsg (); Str_FreeMsg ();
McR_ListAllMchResultsInGam (Game.GamCod); McR_ListAllMchResultsInGam (Game.GamCod);
McR_ShowResultsEnd (); McR_ShowResultsEnd ();
@ -405,9 +405,9 @@ void McR_ShowAllMchResultsInMch (void)
false); // Do not put form to start new match false); // Do not put form to start new match
/***** List matches results in match *****/ /***** List matches results in match *****/
McR_ShowResultsBegin (Str_BuildStrMsg (Txt_Results_of_match_X,Match.Title), McR_ShowResultsBegin (Str_BuildMsgStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select false); // Do not list games to select
Str_FreeStrMsg (); Str_FreeMsg ();
McR_ListAllMchResultsInMch (Match.MchCod); McR_ListAllMchResultsInMch (Match.MchCod);
McR_ShowResultsEnd (); McR_ShowResultsEnd ();

View File

@ -2061,9 +2061,9 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter
Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInProject],NULL, Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInProject],NULL,
Prj_PutCurrentParams, Prj_PutCurrentParams,
Str_BuildStrMsg (Txt_Add_USERS, Str_BuildMsgStr (Txt_Add_USERS,
Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject])); Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]));
Str_FreeStrMsg (); Str_FreeMsg ();
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\""); // Column for photo HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\""); // Column for photo
@ -2460,9 +2460,9 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
Frm_StartForm (ActionRemUsr[RoleInProject]); Frm_StartForm (ActionRemUsr[RoleInProject]);
Gbl.Prjs.PrjCod = Prj.PrjCod; Gbl.Prjs.PrjCod = Prj.PrjCod;
Prj_PutCurrentParams (); Prj_PutCurrentParams ();
Btn_PutRemoveButton (Str_BuildStrMsg (Txt_Remove_USER_from_this_project, Btn_PutRemoveButton (Str_BuildMsgStr (Txt_Remove_USER_from_this_project,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex])); Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex]));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
/* End alert */ /* End alert */

View File

@ -158,10 +158,10 @@ void Rep_ReqMyUsageReport (void)
Frm_StartForm (ActSeeMyUsgRep); Frm_StartForm (ActSeeMyUsgRep);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Report_of_use_of_PLATFORM, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Report_of_use_of_PLATFORM,
Cfg_PLATFORM_SHORT_NAME),NULL, Cfg_PLATFORM_SHORT_NAME),NULL,
Hlp_ANALYTICS_Report,Box_NOT_CLOSABLE); Hlp_ANALYTICS_Report,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Header *****/ /***** Header *****/
Rep_TitleReport (NULL); // NULL means do not write date Rep_TitleReport (NULL); // NULL means do not write date
@ -264,10 +264,10 @@ static void Rep_PutLinkToMyUsageReport (struct Rep_Report *Report)
extern const char *Txt_This_link_will_remain_active_as_long_as_your_user_s_account_exists; extern const char *Txt_This_link_will_remain_active_as_long_as_your_user_s_account_exists;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Report_of_use_of_PLATFORM, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Report_of_use_of_PLATFORM,
Cfg_PLATFORM_SHORT_NAME),NULL, Cfg_PLATFORM_SHORT_NAME),NULL,
Hlp_ANALYTICS_Report,Box_NOT_CLOSABLE); Hlp_ANALYTICS_Report,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Header *****/ /***** Header *****/
Rep_TitleReport (&Report->CurrentTimeUTC); Rep_TitleReport (&Report->CurrentTimeUTC);
@ -994,12 +994,12 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
NumCrss = Usr_GetNumCrssOfUsrWithARole (Gbl.Usrs.Me.UsrDat.UsrCod,Role); NumCrss = Usr_GetNumCrssOfUsrWithARole (Gbl.Usrs.Me.UsrDat.UsrCod,Role);
fprintf (Gbl.F.Rep,"<li>%s %u %s", fprintf (Gbl.F.Rep,"<li>%s %u %s",
Str_BuildStrMsg (Txt_USER_in_COURSE, Str_BuildMsgStr (Txt_USER_in_COURSE,
Txt_ROLES_SINGUL_Abc[Role][Gbl.Usrs.Me.UsrDat.Sex]), Txt_ROLES_SINGUL_Abc[Role][Gbl.Usrs.Me.UsrDat.Sex]),
NumCrss, NumCrss,
NumCrss == 1 ? Txt_course : NumCrss == 1 ? Txt_course :
Txt_courses); Txt_courses);
Str_FreeStrMsg (); Str_FreeMsg ();
if (NumCrss) if (NumCrss)
{ {

View File

@ -230,10 +230,10 @@ void Sta_AskShowCrsHits (void)
Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs; Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildStrMsg (Txt_Statistics_of_visits_to_the_course_X, Box_BoxBegin (NULL,Str_BuildMsgStr (Txt_Statistics_of_visits_to_the_course_X,
Gbl.Hierarchy.Crs.ShrtName),NULL, Gbl.Hierarchy.Crs.ShrtName),NULL,
Hlp_ANALYTICS_Visits_visits_to_course,Box_NOT_CLOSABLE); Hlp_ANALYTICS_Visits_visits_to_course,Box_NOT_CLOSABLE);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Show form to select the groups *****/ /***** Show form to select the groups *****/
Grp_ShowFormToSelectSeveralGroups (NULL,Grp_MY_GROUPS); Grp_ShowFormToSelectSeveralGroups (NULL,Grp_MY_GROUPS);
@ -1494,10 +1494,10 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
if (FirstRow > 1) if (FirstRow > 1)
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title), HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgLong (Txt_Show_previous_X_clicks,
Txt_Show_previous_X_clicks, (long) Gbl.Stat.RowsPerPage),
Gbl.Stat.RowsPerPage); "BT_LINK TIT_TBL",NULL);
HTM_BUTTON_SUBMIT_Begin (Gbl.Title,"BT_LINK TIT_TBL",NULL); Str_FreeMsg ();
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
HTM_TxtF ("&lt;%s",Txt_PAGES_Previous); HTM_TxtF ("&lt;%s",Txt_PAGES_Previous);
HTM_STRONG_End (); HTM_STRONG_End ();
@ -1532,10 +1532,10 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
HTM_TD_Begin ("class=\"RM\""); HTM_TD_Begin ("class=\"RM\"");
if (LastRow < NumRows) if (LastRow < NumRows)
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title), HTM_BUTTON_SUBMIT_Begin (Str_BuildMsgLong (Txt_Show_next_X_clicks,
Txt_Show_next_X_clicks, (long) Gbl.Stat.RowsPerPage),
Gbl.Stat.RowsPerPage); "BT_LINK TIT_TBL",NULL);
HTM_BUTTON_SUBMIT_Begin (Gbl.Title,"BT_LINK TIT_TBL",NULL); Str_FreeMsg ();
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
HTM_TxtF ("%s&gt;",Txt_PAGES_Next); HTM_TxtF ("%s&gt;",Txt_PAGES_Next);
HTM_STRONG_End (); HTM_STRONG_End ();

View File

@ -2924,27 +2924,40 @@ void Str_Concat (char *Dst,const char *Src,size_t DstSize)
} }
/*****************************************************************************/ /*****************************************************************************/
/************************** Build a string message ***************************/ /******************* Build and free a message with format ********************/
/*****************************************************************************/ /*****************************************************************************/
static char *Str_Msg = NULL;
// FormatMsg must be a string including "%s" // FormatMsg must be a string including "%s"
// Str_FreeStrMsg() must be called after calling this function // Str_FreeMsg() must be called after calling this function
static char *Str_StrMsg = NULL; char *Str_BuildMsgStr (const char *fmt,const char *Str)
char *Str_BuildStrMsg (const char *FormatMsg,const char *Str)
{ {
Str_FreeStrMsg (); Str_FreeMsg ();
if (asprintf (&Str_StrMsg,FormatMsg,Str) < 0) if (asprintf (&Str_Msg,fmt,Str) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
return Str_StrMsg; return Str_Msg;
} }
void Str_FreeStrMsg (void) // FormatMsg must be a string including "%ld"
// Str_FreeMsg() must be called after calling this function
char *Str_BuildMsgLong (const char *fmt,long Num)
{ {
if (Str_StrMsg != NULL) Str_FreeMsg ();
if (asprintf (&Str_Msg,fmt,Num) < 0)
Lay_NotEnoughMemoryExit ();
return Str_Msg;
}
void Str_FreeMsg (void)
{
if (Str_Msg != NULL)
{ {
free (Str_StrMsg); free (Str_Msg);
Str_StrMsg = NULL; Str_Msg = NULL;
} }
} }

View File

@ -136,7 +136,8 @@ void Str_CreateRandomAlphanumStr (char *Str,size_t Length);
void Str_Copy (char *Dst,const char *Src,size_t DstSize); void Str_Copy (char *Dst,const char *Src,size_t DstSize);
void Str_Concat (char *Dst,const char *Src,size_t DstSize); void Str_Concat (char *Dst,const char *Src,size_t DstSize);
char *Str_BuildStrMsg (const char *FormatMsg,const char *Str); char *Str_BuildMsgStr (const char *fmt,const char *Str);
void Str_FreeStrMsg (void); char *Str_BuildMsgLong (const char *fmt,long Num);
void Str_FreeMsg (void);
#endif #endif

View File

@ -624,10 +624,10 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
ActUp_IteSylPra, ActUp_IteSylPra,
NULL,Syl_PutParamNumItem, NULL,Syl_PutParamNumItem,
"arrow-up.svg", "arrow-up.svg",
Str_BuildStrMsg (LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_up_X_and_its_subsections : Str_BuildMsgStr (LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_up_X_and_its_subsections :
Txt_Move_up_X, Txt_Move_up_X,
StrItemCod)); StrItemCod));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-up.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-up.svg",Txt_Movement_not_allowed);
@ -642,10 +642,10 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
ActDwnIteSylPra, ActDwnIteSylPra,
NULL,Syl_PutParamNumItem, NULL,Syl_PutParamNumItem,
"arrow-down.svg", "arrow-down.svg",
Str_BuildStrMsg (LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_down_X_and_its_subsections : Str_BuildMsgStr (LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_down_X_and_its_subsections :
Txt_Move_down_X, Txt_Move_down_X,
StrItemCod)); StrItemCod));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed);
@ -659,9 +659,9 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
ActRgtIteSylPra, ActRgtIteSylPra,
NULL,Syl_PutParamNumItem, NULL,Syl_PutParamNumItem,
"arrow-left.svg", "arrow-left.svg",
Str_BuildStrMsg (Txt_Increase_level_of_X, Str_BuildMsgStr (Txt_Increase_level_of_X,
StrItemCod)); StrItemCod));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-left.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-left.svg",Txt_Movement_not_allowed);
@ -676,9 +676,9 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
ActLftIteSylPra, ActLftIteSylPra,
NULL,Syl_PutParamNumItem, NULL,Syl_PutParamNumItem,
"arrow-right.svg", "arrow-right.svg",
Str_BuildStrMsg (Txt_Decrease_level_of_X, Str_BuildMsgStr (Txt_Decrease_level_of_X,
StrItemCod)); StrItemCod));
Str_FreeStrMsg (); Str_FreeMsg ();
} }
else else
Ico_PutIconOff ("arrow-right.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-right.svg",Txt_Movement_not_allowed);

View File

@ -1841,9 +1841,9 @@ static void Tst_PutIconEnable (long TagCod,const char *TagTxt)
Frm_StartForm (ActEnableTag); Frm_StartForm (ActEnableTag);
Par_PutHiddenParamLong (NULL,"TagCod",TagCod); Par_PutHiddenParamLong (NULL,"TagCod",TagCod);
Ico_PutIconLink ("eye-slash.svg", Ico_PutIconLink ("eye-slash.svg",
Str_BuildStrMsg (Txt_Tag_X_not_allowed_Click_to_allow_it, Str_BuildMsgStr (Txt_Tag_X_not_allowed_Click_to_allow_it,
TagTxt)); TagTxt));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
} }
@ -1860,9 +1860,9 @@ static void Tst_PutIconDisable (long TagCod,const char *TagTxt)
Frm_StartForm (ActDisableTag); Frm_StartForm (ActDisableTag);
Par_PutHiddenParamLong (NULL,"TagCod",TagCod); Par_PutHiddenParamLong (NULL,"TagCod",TagCod);
Ico_PutIconLink ("eye.svg", Ico_PutIconLink ("eye.svg",
Str_BuildStrMsg (Txt_Tag_X_allowed_Click_to_disable_it, Str_BuildMsgStr (Txt_Tag_X_allowed_Click_to_disable_it,
TagTxt)); TagTxt));
Str_FreeStrMsg (); Str_FreeMsg ();
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
} }
@ -5089,11 +5089,10 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
/***** Begin box *****/ /***** Begin box *****/
if (Gbl.Test.QstCod > 0) // The question already has assigned a code if (Gbl.Test.QstCod > 0) // The question already has assigned a code
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title), Box_BoxBegin (NULL,Str_BuildMsgLong (Txt_Question_code_X,Gbl.Test.QstCod),
Txt_Question_code_X, Tst_PutIconToRemoveOneQst,
Gbl.Test.QstCod);
Box_BoxBegin (NULL,Gbl.Title,Tst_PutIconToRemoveOneQst,
Hlp_ASSESSMENT_Tests_writing_a_question,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Tests_writing_a_question,Box_NOT_CLOSABLE);
Str_FreeMsg ();
} }
else else
Box_BoxBegin (NULL,Txt_New_question,NULL, Box_BoxBegin (NULL,Txt_New_question,NULL,

View File

@ -12464,25 +12464,25 @@ const char *Txt_Filter = // As a noun
"Filtro"; "Filtro";
#endif #endif
const char *Txt_First_day_of_the_week = const char *Txt_First_day_of_the_week_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"Primer dia de la setmana"; "Primer dia de la setmana: %s";
#elif L==2 // de #elif L==2 // de
"Erster Tag der Woche"; "Erster Tag der Woche: %s";
#elif L==3 // en #elif L==3 // en
"First day of the week"; "First day of the week: %s";
#elif L==4 // es #elif L==4 // es
"Primer d&iacute;a de la semana"; "Primer d&iacute;a de la semana: %s";
#elif L==5 // fr #elif L==5 // fr
"Premier jour de la semaine"; "Premier jour de la semaine: %s";
#elif L==6 // gn #elif L==6 // gn
"Primer d&iacute;a de la semana"; // Okoteve traducción "Primer d&iacute;a de la semana: %s"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Primo giorno della settimana"; "Primo giorno della settimana: %s";
#elif L==8 // pl #elif L==8 // pl
"Pierwszy dzie&nacute; tygodnia"; "Pierwszy dzie&nacute; tygodnia: %s";
#elif L==9 // pt #elif L==9 // pt
"Primeiro dia da semana"; "Primeiro dia da semana: %s";
#endif #endif
const char *Txt_First_name = const char *Txt_First_name =
@ -13053,46 +13053,46 @@ const char *Txt_FORUM_posts =
"posts"; "posts";
#endif #endif
const char *Txt_FORUM_Post_X_allowed = // Warning: it is very important to include %u in the following sentences const char *Txt_FORUM_Post_X_allowed = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Comentario %u permitido."; // Necessita traduccio "Comentario %ld permitido."; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Post %u allowed."; // Need Übersetzung "Post %ld allowed."; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Post %u allowed."; "Post %ld allowed.";
#elif L==4 // es #elif L==4 // es
"Comentario %u permitido."; "Comentario %ld permitido.";
#elif L==5 // fr #elif L==5 // fr
"Post %u allowed."; // Besoin de traduction "Post %ld allowed."; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Comentario %u permitido."; // Okoteve traducción "Comentario %ld permitido."; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Post %u autorizzato."; "Post %ld autorizzato.";
#elif L==8 // pl #elif L==8 // pl
"Post %u dozwolone."; "Post %ld dozwolone.";
#elif L==9 // pt #elif L==9 // pt
"Post %u permitido."; "Post %ld permitido.";
#endif #endif
const char *Txt_FORUM_Post_X_allowed_Click_to_ban_it = // Warning: it is very important to include %u in the following sentences const char *Txt_FORUM_Post_X_allowed_Click_to_ban_it = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Comentario %u permitido. Pulse para censurarlo."; // Necessita traduccio "Comentario %ld permitido. Pulse para censurarlo."; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Post %u allowed. Click to ban it."; // Need Übersetzung "Post %ld allowed. Click to ban it."; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Post %u allowed. Click to ban it."; "Post %ld allowed. Click to ban it.";
#elif L==4 // es #elif L==4 // es
"Comentario %u permitido. Pulse para censurarlo."; "Comentario %ld permitido. Pulse para censurarlo.";
#elif L==5 // fr #elif L==5 // fr
"Post %u allowed. Click to ban it."; // Besoin de traduction "Post %ld allowed. Click to ban it."; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Comentario %u permitido. Pulse para censurarlo."; // Okoteve traducción "Comentario %ld permitido. Pulse para censurarlo."; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Post %u autorizzato. Clicca per censurarlo."; "Post %ld autorizzato. Clicca per censurarlo.";
#elif L==8 // pl #elif L==8 // pl
"Post% u dozwolone. Kliknij, aby to zakazac."; "Post %ld dozwolone. Kliknij, aby to zakazac.";
#elif L==9 // pt #elif L==9 // pt
"Post %u permitido. Clique para censur&aacute;-lo."; "Post %ld permitido. Clique para censur&aacute;-lo.";
#endif #endif
const char *Txt_FORUM_Post_and_thread_removed = const char *Txt_FORUM_Post_and_thread_removed =
@ -13137,46 +13137,46 @@ const char *Txt_FORUM_Post_banned =
"Post n&atilde;o permitido."; "Post n&atilde;o permitido.";
#endif #endif
const char *Txt_FORUM_Post_X_banned = // Warning: it is very important to include %u in the following sentences const char *Txt_FORUM_Post_X_banned = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Comentario %u no permitido"; // Necessita traduccio "Comentario %ld no permitido"; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Post %u banned."; // Need Übersetzung "Post %ld banned."; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Post %u banned."; "Post %ld banned.";
#elif L==4 // es #elif L==4 // es
"Comentario %u no permitido"; "Comentario %ld no permitido";
#elif L==5 // fr #elif L==5 // fr
"Post %u banned."; // Besoin de traduction "Post %ld banned."; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Comentario %u no permitido"; // Okoteve traducción "Comentario %ld no permitido"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Post %u censurato."; "Post %ld censurato.";
#elif L==8 // pl #elif L==8 // pl
"Post %u zakazany."; "Post %ld zakazany.";
#elif L==9 // pt #elif L==9 // pt
"Post %u n&atilde;o permitido."; "Post %ld n&atilde;o permitido.";
#endif #endif
const char *Txt_FORUM_Post_X_banned_Click_to_unban_it = // Warning: it is very important to include %u in the following sentences const char *Txt_FORUM_Post_X_banned_Click_to_unban_it = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Comentario %u no permitido. Pulse para permitirlo."; // Necessita traduccio "Comentario %ld no permitido. Pulse para permitirlo."; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Post %u banned. Click to unban it."; // Need Übersetzung "Post %ld banned. Click to unban it."; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Post %u banned. Click to unban it."; "Post %ld banned. Click to unban it.";
#elif L==4 // es #elif L==4 // es
"Comentario %u no permitido. Pulse para permitirlo."; "Comentario %ld no permitido. Pulse para permitirlo.";
#elif L==5 // fr #elif L==5 // fr
"Post %u banned. Click to unban it."; // Besoin de traduction "Post %ld banned. Click to unban it."; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Comentario %u no permitido. Pulse para permitirlo."; // Okoteve traducción "Comentario %ld no permitido. Pulse para permitirlo."; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Post %u censurato. Clicca per autorizzarlo."; "Post %ld censurato. Clicca per autorizzarlo.";
#elif L==8 // pl #elif L==8 // pl
"Post %u zakazany.Kliknij, aby to odbanowac."; "Post %ld zakazany.Kliknij, aby to odbanowac.";
#elif L==9 // pt #elif L==9 // pt
"Post %u n&atilde;o permitido. Clique para permiti-lo."; "Post %ld n&atilde;o permitido. Clique para permiti-lo.";
#endif #endif
const char *Txt_FORUM_Post_sent = const char *Txt_FORUM_Post_sent =
@ -31614,7 +31614,7 @@ const char *Txt_Question =
"Quest&atilde;o"; "Quest&atilde;o";
#endif #endif
const char *Txt_Question_code_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Question_code_X = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Pregunta amb codi %ld"; "Pregunta amb codi %ld";
#elif L==2 // de #elif L==2 // de
@ -38546,25 +38546,25 @@ const char *Txt_See_only_the_latest_COMMENTS =
"Ver apenas os &uacute;ltimos"; "Ver apenas os &uacute;ltimos";
#endif #endif
const char *Txt_See_the_previous_X_COMMENTS = // Warning: it is very important to include %u in the following sentences const char *Txt_See_the_previous_X_COMMENTS = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Veure els %u anteriors"; "Veure els %ld anteriors";
#elif L==2 // de #elif L==2 // de
"Siehe die vorherigen %u"; "Siehe die vorherigen %ld";
#elif L==3 // en #elif L==3 // en
"See the previous %u"; "See the previous %ld";
#elif L==4 // es #elif L==4 // es
"Ver los %u anteriores"; "Ver los %ld anteriores";
#elif L==5 // fr #elif L==5 // fr
"Voir les %u pr&eacute;c&eacute;dents"; "Voir les %ld pr&eacute;c&eacute;dents";
#elif L==6 // gn #elif L==6 // gn
"Ver los %u anteriores"; // Okoteve traducción "Ver los %ld anteriores"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Vedi i precedente %u"; "Vedi i precedente %ld";
#elif L==8 // pl #elif L==8 // pl
"Zobacz poprzednie %u"; "Zobacz poprzednie %ld";
#elif L==9 // pt #elif L==9 // pt
"Ver os %u anteriores"; "Ver os %ld anteriores";
#endif #endif
const char *Txt_Select_another_country = const char *Txt_Select_another_country =
@ -39878,25 +39878,25 @@ const char *Txt_Show_more_recipients =
"Ver mais destinat&aacute;rios"; "Ver mais destinat&aacute;rios";
#endif #endif
const char *Txt_Show_next_X_clicks = // Warning: it is very important to include %lu in the following sentences const char *Txt_Show_next_X_clicks = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Mostrar %lu clics posteriores"; // Necessita traduccio "Mostrar %ld clics posteriores"; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Show next %lu clicks"; // Need Übersetzung "Show next %ld clicks"; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Show next %lu clicks"; "Show next %ld clicks";
#elif L==4 // es #elif L==4 // es
"Mostrar %lu clics posteriores"; "Mostrar %ld clics posteriores";
#elif L==5 // fr #elif L==5 // fr
"Show next %lu clicks"; // Besoin de traduction "Show next %ld clicks"; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Mostrar %lu clics posteriores"; // Okoteve traducción "Mostrar %ld clics posteriores"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Mostra %lu scatti seguenti"; "Mostra %ld scatti seguenti";
#elif L==8 // pl #elif L==8 // pl
"Show next %lu clicks"; // Potrzebujesz tlumaczenie "Show next %ld clicks"; // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Mostrar %lu cliques subsequentes"; "Mostrar %ld cliques subsequentes";
#endif #endif
const char *Txt_Show_office_hours = const char *Txt_Show_office_hours =
@ -39920,25 +39920,25 @@ const char *Txt_Show_office_hours =
"Mostrar hor&aacute;rios tutor"; "Mostrar hor&aacute;rios tutor";
#endif #endif
const char *Txt_Show_previous_X_clicks = // Warning: it is very important to include %u in the following sentences const char *Txt_Show_previous_X_clicks = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Mostrar %u clics anteriores"; // Necessita traduccio "Mostrar %ld clics anteriores"; // Necessita traduccio
#elif L==2 // de #elif L==2 // de
"Show previous %u clicks"; // Need Übersetzung "Show previous %ld clicks"; // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Show previous %u clicks"; "Show previous %ld clicks";
#elif L==4 // es #elif L==4 // es
"Mostrar %u clics anteriores"; "Mostrar %ld clics anteriores";
#elif L==5 // fr #elif L==5 // fr
"Show previous %u clicks"; // Besoin de traduction "Show previous %ld clicks"; // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Mostrar %u clics anteriores"; // Okoteve traducción "Mostrar %ld clics anteriores"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Mostra %u scatti precedenti"; "Mostra %ld scatti precedenti";
#elif L==8 // pl #elif L==8 // pl
"Show previous %u clicks"; // Potrzebujesz tlumaczenie "Show previous %ld clicks"; // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Mostrar %u cliques anteriores"; "Mostrar %ld cliques anteriores";
#endif #endif
const char *Txt_Show_questions = const char *Txt_Show_questions =
@ -50149,25 +50149,25 @@ const char *Txt_TIMELINE_NOTE_Favourite =
"Favorito"; "Favorito";
#endif #endif
const char *Txt_TIMELINE_NOTE_Favourited_by_X_USERS = // Warning: it is very important to include %u in the following sentences const char *Txt_TIMELINE_NOTE_Favourited_by_X_USERS = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Marcat com favorit per %u"; "Marcat com favorit per %ld";
#elif L==2 // de #elif L==2 // de
"Von %u vorgemerkt"; "Von %ld vorgemerkt";
#elif L==3 // en #elif L==3 // en
"Favourited by %u"; "Favourited by %ld";
#elif L==4 // es #elif L==4 // es
"Marcado como favorito por %u"; "Marcado como favorito por %ld";
#elif L==5 // fr #elif L==5 // fr
"Ajout&eacute; aux favoris par %u"; "Ajout&eacute; aux favoris par %ld";
#elif L==6 // gn #elif L==6 // gn
"Marcado como favorito por %u"; // Okoteve traducción "Marcado como favorito por %ld"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Preferiti da %u"; "Preferiti da %ld";
#elif L==8 // pl #elif L==8 // pl
"Dodane do ulubionych przez %u"; "Dodane do ulubionych przez %ld";
#elif L==9 // pt #elif L==9 // pt
"Marcado como favorito por %u"; "Marcado como favorito por %ld";
#endif #endif
const char *Txt_TIMELINE_NOTE_Shared = const char *Txt_TIMELINE_NOTE_Shared =
@ -50191,25 +50191,25 @@ const char *Txt_TIMELINE_NOTE_Shared =
"Compartilhado"; "Compartilhado";
#endif #endif
const char *Txt_TIMELINE_NOTE_Shared_by_X_USERS = // Warning: it is very important to include %u in the following sentences const char *Txt_TIMELINE_NOTE_Shared_by_X_USERS = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Compartit per %u"; "Compartit per %ld";
#elif L==2 // de #elif L==2 // de
"Von %u geteilt"; "Von %ld geteilt";
#elif L==3 // en #elif L==3 // en
"Shared by %u"; "Shared by %ld";
#elif L==4 // es #elif L==4 // es
"Compartido por %u"; "Compartido por %ld";
#elif L==5 // fr #elif L==5 // fr
"Partag&eacute; par %u"; "Partag&eacute; par %ld";
#elif L==6 // gn #elif L==6 // gn
"Compartido por %u"; // Okoteve traducción "Compartido por %ld"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Condiviso da %u"; "Condiviso da %ld";
#elif L==8 // pl #elif L==8 // pl
"Udost&eogon;pnione przez %u"; "Udost&eogon;pnione przez %ld";
#elif L==9 // pt #elif L==9 // pt
"Compartilhado por %u"; "Compartilhado por %ld";
#endif #endif
const char *Txt_TIMELINE_NOTE_Not_favourited_by_anyone = // No longer shared const char *Txt_TIMELINE_NOTE_Not_favourited_by_anyone = // No longer shared

View File

@ -507,10 +507,10 @@ static void TL_ShowTimelineUsrHighlightingNot (long NotCod)
TL_GET_RECENT_TIMELINE); TL_GET_RECENT_TIMELINE);
/***** Show timeline *****/ /***** Show timeline *****/
TL_ShowTimeline (Query,Str_BuildStrMsg (Txt_Timeline_OF_A_USER, TL_ShowTimeline (Query,Str_BuildMsgStr (Txt_Timeline_OF_A_USER,
Gbl.Usrs.Other.UsrDat.FirstName), Gbl.Usrs.Other.UsrDat.FirstName),
NotCod); NotCod);
Str_FreeStrMsg (); Str_FreeMsg ();
/***** Drop temporary tables *****/ /***** Drop temporary tables *****/
TL_DropTemporaryTablesUsedToQueryTimeline (); TL_DropTemporaryTablesUsedToQueryTimeline ();
@ -2776,11 +2776,11 @@ static void TL_FormToShowHiddenComments (Act_Action_t ActionGbl,Act_Action_t Act
} }
/* Put icon and text with link to show the first hidden comments */ /* Put icon and text with link to show the first hidden comments */
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_See_the_previous_X_COMMENTS,
NumInitialComments);
HTM_BUTTON_SUBMIT_Begin (NULL,The_ClassFormLinkInBox[Gbl.Prefs.Theme],NULL); HTM_BUTTON_SUBMIT_Begin (NULL,The_ClassFormLinkInBox[Gbl.Prefs.Theme],NULL);
Ico_PutIconTextLink ("angle-up.svg",Gbl.Title); Ico_PutIconTextLink ("angle-up.svg",
Str_BuildMsgLong (Txt_See_the_previous_X_COMMENTS,
(long) NumInitialComments));
Str_FreeMsg ();
HTM_BUTTON_End (); HTM_BUTTON_End ();
/* End form */ /* End form */
@ -2926,16 +2926,14 @@ static void TL_LinkToShowPreviousComments (const char IdComments[Frm_MAX_BYTES_I
{ {
extern const char *Txt_See_the_previous_X_COMMENTS; extern const char *Txt_See_the_previous_X_COMMENTS;
/***** Build text to show *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_See_the_previous_X_COMMENTS,
NumInitialComments);
/***** Icon and text to show only the latest comments ****/ /***** Icon and text to show only the latest comments ****/
HTM_DIV_Begin ("id=\"exp_%s\" class=\"TL_EXPAND_COM TL_RIGHT_WIDTH\"" HTM_DIV_Begin ("id=\"exp_%s\" class=\"TL_EXPAND_COM TL_RIGHT_WIDTH\""
" style=\"display:none;\"", // Hidden " style=\"display:none;\"", // Hidden
IdComments); IdComments);
TL_PutIconToToggleComments (IdComments,"angle-up.svg",Gbl.Title); TL_PutIconToToggleComments (IdComments,"angle-up.svg",
Str_BuildMsgLong (Txt_See_the_previous_X_COMMENTS,
(long) NumInitialComments));
Str_FreeMsg ();
HTM_DIV_End (); HTM_DIV_End ();
} }
@ -3124,11 +3122,10 @@ static void TL_PutDisabledIconShare (unsigned NumShared)
/***** Disabled icon to share *****/ /***** Disabled icon to share *****/
if (NumShared) if (NumShared)
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_TIMELINE_NOTE_Shared_by_X_USERS,
NumShared);
Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_SHARE, Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_SHARE,
Gbl.Title); Str_BuildMsgLong (Txt_TIMELINE_NOTE_Shared_by_X_USERS,
(long) NumShared));
Str_FreeMsg ();
} }
else else
Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_SHARE, Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_SHARE,
@ -3147,11 +3144,10 @@ static void TL_PutDisabledIconFav (unsigned NumFavs)
/***** Disabled icon to mark as favourite *****/ /***** Disabled icon to mark as favourite *****/
if (NumFavs) if (NumFavs)
{ {
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_TIMELINE_NOTE_Favourited_by_X_USERS,
NumFavs);
Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_FAV, Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_FAV,
Gbl.Title); Str_BuildMsgLong (Txt_TIMELINE_NOTE_Favourited_by_X_USERS,
(long) NumFavs));
Str_FreeMsg ();
} }
else else
Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_FAV, Ico_PutDivIcon ("TL_ICO_DISABLED",TL_ICON_FAV,