Version 21.77.2: Dec 29, 2021 Changing Str_BuildString for asprintf.

This commit is contained in:
acanas 2021-12-29 21:31:49 +01:00
parent 0d86af745e
commit f8391edd6c
14 changed files with 173 additions and 134 deletions

View File

@ -25,6 +25,8 @@
/*********************************** Headers *********************************/ /*********************************** Headers *********************************/
/*****************************************************************************/ /*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include <string.h> // For string functions #include <string.h> // For string functions
#include "swad_account.h" #include "swad_account.h"
@ -436,13 +438,13 @@ void Acc_ShowFormGoToRequestNewAccount (void)
extern const char *Hlp_PROFILE_SignUp; extern const char *Hlp_PROFILE_SignUp;
extern const char *Txt_New_on_PLATFORM_Sign_up; extern const char *Txt_New_on_PLATFORM_Sign_up;
extern const char *Txt_Create_account; extern const char *Txt_Create_account;
char *Title;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_New_on_PLATFORM_Sign_up, if (asprintf (&Title,Txt_New_on_PLATFORM_Sign_up,Cfg_PLATFORM_SHORT_NAME) < 0)
Cfg_PLATFORM_SHORT_NAME), Err_NotEnoughMemoryExit ();
NULL,NULL, Box_BoxBegin (NULL,Title,NULL,NULL,Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE);
Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE); free (Title);
Str_FreeStrings ();
/***** Button to go to request the creation of a new account *****/ /***** Button to go to request the creation of a new account *****/
Frm_BeginForm (ActFrmMyAcc); Frm_BeginForm (ActFrmMyAcc);

View File

@ -391,6 +391,8 @@ void Agd_ShowUsrAgenda (void)
extern const char *Txt_Public_agenda_USER; extern const char *Txt_Public_agenda_USER;
struct Agd_Agenda Agenda; struct Agd_Agenda Agenda;
bool Error = true; bool Error = true;
bool ItsMe;
char *Title;
/***** Get user *****/ /***** Get user *****/
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
@ -402,17 +404,18 @@ void Agd_ShowUsrAgenda (void)
Agd_ResetAgenda (&Agenda); Agd_ResetAgenda (&Agenda);
/***** Begin box *****/ /***** Begin box *****/
if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)) ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, if (asprintf (&Title,Txt_Public_agenda_USER,
Gbl.Usrs.Me.UsrDat.FullName), ItsMe ? Gbl.Usrs.Me.UsrDat.FullName :
Agd_PutIconsMyPublicAgenda,Gbl.Usrs.Me.UsrDat.EnUsrCod, Gbl.Usrs.Other.UsrDat.FullName) < 0)
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Err_NotEnoughMemoryExit ();
else Box_BoxBegin ("100%",Title,
Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, ItsMe ? Agd_PutIconsMyPublicAgenda :
Gbl.Usrs.Other.UsrDat.FullName), Agd_PutIconsOtherPublicAgenda,
Agd_PutIconsOtherPublicAgenda,Gbl.Usrs.Other.UsrDat.EnUsrCod, ItsMe ? Gbl.Usrs.Me.UsrDat.EnUsrCod :
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Gbl.Usrs.Other.UsrDat.EnUsrCod,
Str_FreeStrings (); Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE);
free (Title);
/***** Show the current events in the user's agenda *****/ /***** Show the current events in the user's agenda *****/
Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY);
@ -439,6 +442,8 @@ void Agd_ShowOtherAgendaAfterLogIn (void)
extern const char *Txt_Public_agenda_USER; extern const char *Txt_Public_agenda_USER;
extern const char *Txt_Switching_to_LANGUAGE[1 + Lan_NUM_LANGUAGES]; extern const char *Txt_Switching_to_LANGUAGE[1 + Lan_NUM_LANGUAGES];
struct Agd_Agenda Agenda; struct Agd_Agenda Agenda;
bool ItsMe;
char *Title;
if (Gbl.Usrs.Me.Logged) if (Gbl.Usrs.Me.Logged)
{ {
@ -454,17 +459,18 @@ void Agd_ShowOtherAgendaAfterLogIn (void)
Agd_ResetAgenda (&Agenda); Agd_ResetAgenda (&Agenda);
/***** Begin box *****/ /***** Begin box *****/
if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)) ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, if (asprintf (&Title,Txt_Public_agenda_USER,
Gbl.Usrs.Me.UsrDat.FullName), ItsMe ? Gbl.Usrs.Me.UsrDat.FullName :
Agd_PutIconToViewEditMyFullAgenda,Gbl.Usrs.Me.UsrDat.EnUsrCod, Gbl.Usrs.Other.UsrDat.FullName) < 0)
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Err_NotEnoughMemoryExit ();
else Box_BoxBegin ("100%",Title,
Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, ItsMe ? Agd_PutIconToViewEditMyFullAgenda :
Gbl.Usrs.Other.UsrDat.FullName), Agd_PutIconsOtherPublicAgenda,
Agd_PutIconsOtherPublicAgenda,Gbl.Usrs.Other.UsrDat.EnUsrCod, ItsMe ? Gbl.Usrs.Me.UsrDat.EnUsrCod :
Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); Gbl.Usrs.Other.UsrDat.EnUsrCod,
Str_FreeStrings (); Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE);
free (Title);
/***** Show the current events in the user's agenda *****/ /***** Show the current events in the user's agenda *****/
Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY);
@ -1638,13 +1644,13 @@ void Agd_ReceiveFormEvent (void)
void Agd_PrintAgdQRCode (void) void Agd_PrintAgdQRCode (void)
{ {
extern const char *Txt_Where_s_USER; extern const char *Txt_Where_s_USER;
char *Title;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Where_s_USER, if (asprintf (&Title,Txt_Where_s_USER,Gbl.Usrs.Me.UsrDat.FullName) < 0)
Gbl.Usrs.Me.UsrDat.FullName), Err_NotEnoughMemoryExit ();
NULL,NULL, Box_BoxBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE);
NULL,Box_NOT_CLOSABLE); free (Title);
Str_FreeStrings ();
/***** Print QR code ****/ /***** Print QR code ****/
QR_PrintQRCode (); QR_PrintQRCode ();

View File

@ -1924,6 +1924,7 @@ void Att_RegisterMeAsStdInAttEvent (void)
struct Att_Events Events; struct Att_Events Events;
struct Att_Event Event; struct Att_Event Event;
bool Present; bool Present;
char *ParamName;
char CommentStd[Cns_MAX_BYTES_TEXT + 1]; char CommentStd[Cns_MAX_BYTES_TEXT + 1];
char CommentTch[Cns_MAX_BYTES_TEXT + 1]; char CommentTch[Cns_MAX_BYTES_TEXT + 1];
@ -1940,10 +1941,10 @@ void Att_RegisterMeAsStdInAttEvent (void)
/***** Get comments for this student *****/ /***** Get comments for this student *****/
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,Gbl.Usrs.Me.UsrDat.UsrCod, Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,Gbl.Usrs.Me.UsrDat.UsrCod,
CommentStd,CommentTch); CommentStd,CommentTch);
Par_GetParToHTML (Str_BuildString ("CommentStd%s", if (asprintf (&ParamName,"CommentStd%s",Gbl.Usrs.Me.UsrDat.EnUsrCod) < 0)
Gbl.Usrs.Me.UsrDat.EnUsrCod), Err_NotEnoughMemoryExit ();
CommentStd,Cns_MAX_BYTES_TEXT); Par_GetParToHTML (ParamName,CommentStd,Cns_MAX_BYTES_TEXT);
Str_FreeStrings (); free (ParamName);
if (Present || if (Present ||
CommentStd[0] || CommentStd[0] ||
@ -1986,6 +1987,7 @@ void Att_RegisterStudentsInAttEvent (void)
unsigned NumUsr; unsigned NumUsr;
const char *Ptr; const char *Ptr;
bool Present; bool Present;
char *ParamName;
unsigned NumStdsPresent; unsigned NumStdsPresent;
unsigned NumStdsAbsent; unsigned NumStdsAbsent;
struct UsrData UsrData; struct UsrData UsrData;
@ -2056,11 +2058,15 @@ void Att_RegisterStudentsInAttEvent (void)
NumUsr++) NumUsr++)
{ {
/***** Get comments for this student *****/ /***** Get comments for this student *****/
Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].UsrCod,CommentStd,CommentTch); Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,
Par_GetParToHTML (Str_BuildString ("CommentTch%s", Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].UsrCod,
Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].EnUsrCod), CommentStd,
CommentTch,Cns_MAX_BYTES_TEXT); CommentTch);
Str_FreeStrings (); if (asprintf (&ParamName,"CommentTch%s",
Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].EnUsrCod) < 0)
Err_NotEnoughMemoryExit ();
Par_GetParToHTML (ParamName,CommentTch,Cns_MAX_BYTES_TEXT);
free (ParamName);
Present = !Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].Remove; Present = !Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].Remove;

View File

@ -9805,6 +9805,7 @@ void Brw_ListDocsFound (MYSQL_RES **mysql_res,unsigned NumDocs,
extern const char *Txt_hidden_document; extern const char *Txt_hidden_document;
extern const char *Txt_hidden_documents; extern const char *Txt_hidden_documents;
MYSQL_ROW row; MYSQL_ROW row;
char *Title;
unsigned NumDoc; unsigned NumDoc;
unsigned NumDocsNotHidden = 0; unsigned NumDocsNotHidden = 0;
unsigned NumDocsHidden; unsigned NumDocsHidden;
@ -9814,13 +9815,11 @@ void Brw_ListDocsFound (MYSQL_RES **mysql_res,unsigned NumDocs,
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
/* Number of documents found */ /* Number of documents found */
Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", if (asprintf (&Title,"%u %s",NumDocs,NumDocs == 1 ? TitleSingular :
NumDocs, TitlePlural) < 0)
(NumDocs == 1) ? TitleSingular : Err_NotEnoughMemoryExit ();
TitlePlural), Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2);
NULL,NULL, free (Title);
NULL,Box_NOT_CLOSABLE,2);
Str_FreeStrings ();
/***** Write heading *****/ /***** Write heading *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -25,12 +25,15 @@
/********************************* Headers ***********************************/ /********************************* Headers ***********************************/
/*****************************************************************************/ /*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include <string.h> // For string functions #include <string.h> // For string functions
#include "swad_box.h" #include "swad_box.h"
#include "swad_calendar.h" #include "swad_calendar.h"
#include "swad_call_for_exam.h" #include "swad_call_for_exam.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_error.h"
#include "swad_figure.h" #include "swad_figure.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
@ -116,6 +119,7 @@ void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,
extern const char *Txt_First_day_of_the_week_X; 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 *Title;
char Icon[32 + 1]; char Icon[32 + 1];
Set_BeginOneSettingSelector (); Set_BeginOneSettingSelector ();
@ -134,10 +138,11 @@ void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,
if (FuncParams) // Extra parameters depending on the action if (FuncParams) // Extra parameters depending on the action
FuncParams (Args); FuncParams (Args);
snprintf (Icon,sizeof (Icon),"first-day-of-week-%u.png",FirstDayOfWeek); snprintf (Icon,sizeof (Icon),"first-day-of-week-%u.png",FirstDayOfWeek);
Ico_PutSettingIconLink (Icon,Ico_BLACK, if (asprintf (&Title,Txt_First_day_of_the_week_X,
Str_BuildString (Txt_First_day_of_the_week_X, Txt_DAYS_SMALL[FirstDayOfWeek]) < 0)
Txt_DAYS_SMALL[FirstDayOfWeek])); Err_NotEnoughMemoryExit ();
Str_FreeStrings (); Ico_PutSettingIconLink (Icon,Ico_BLACK,Title);
free (Title);
Frm_EndForm (); Frm_EndForm ();
HTM_DIV_End (); HTM_DIV_End ();
} }

View File

@ -25,8 +25,10 @@
/********************************* Headers ***********************************/ /********************************* Headers ***********************************/
/*****************************************************************************/ /*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdbool.h> // For boolean type #include <stdbool.h> // For boolean type
#include <stddef.h> // For NULL #include <stddef.h> // For NULL
#include <stdio.h> // For asprintf
#include <stdlib.h> // For free #include <stdlib.h> // For free
#include <string.h> // For string functions #include <string.h> // For string functions
@ -242,14 +244,15 @@ static void Ctr_ListCenters (void)
extern const char *Txt_No_centers; extern const char *Txt_No_centers;
extern const char *Txt_Create_another_center; extern const char *Txt_Create_another_center;
extern const char *Txt_Create_center; extern const char *Txt_Create_center;
char *Title;
unsigned NumCtr; unsigned NumCtr;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Centers_of_INSTITUTION_X, if (asprintf (&Title,Txt_Centers_of_INSTITUTION_X,Gbl.Hierarchy.Ins.FullName) < 0)
Gbl.Hierarchy.Ins.FullName), Err_NotEnoughMemoryExit ();
Ctr_PutIconsListingCenters,NULL, Box_BoxBegin (NULL,Title,Ctr_PutIconsListingCenters,NULL,
Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE); Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
if (Gbl.Hierarchy.Ctrs.Num) // There are centers in the current institution if (Gbl.Hierarchy.Ctrs.Num) // There are centers in the current institution
{ {
@ -434,6 +437,7 @@ static void Ctr_EditCentersInternal (void)
extern const char *Hlp_INSTITUTION_Centers; extern const char *Hlp_INSTITUTION_Centers;
extern const char *Txt_Centers_of_INSTITUTION_X; extern const char *Txt_Centers_of_INSTITUTION_X;
struct Plc_Places Places; struct Plc_Places Places;
char *Title;
/***** Reset places context *****/ /***** Reset places context *****/
Plc_ResetPlaces (&Places); Plc_ResetPlaces (&Places);
@ -451,11 +455,11 @@ static void Ctr_EditCentersInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Centers_of_INSTITUTION_X, if (asprintf (&Title,Txt_Centers_of_INSTITUTION_X,Gbl.Hierarchy.Ins.FullName) < 0)
Gbl.Hierarchy.Ins.FullName), Err_NotEnoughMemoryExit ();
Ctr_PutIconsEditingCenters,NULL, Box_BoxBegin (NULL,Title,Ctr_PutIconsEditingCenters,NULL,
Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE); Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
/***** Put a form to create a new center *****/ /***** Put a form to create a new center *****/
Ctr_PutFormToCreateCenter (&Places); Ctr_PutFormToCreateCenter (&Places);
@ -1834,6 +1838,7 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs)
extern const char *Txt_center; extern const char *Txt_center;
extern const char *Txt_centers; extern const char *Txt_centers;
unsigned NumCtr; unsigned NumCtr;
char *Title;
struct Ctr_Center Ctr; struct Ctr_Center Ctr;
/***** Query database *****/ /***** Query database *****/
@ -1841,19 +1846,18 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
/* Number of centers found */ /* Number of centers found */
Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", if (asprintf (&Title,"%u %s",NumCtrs,
NumCtrs, NumCtrs == 1 ? Txt_center :
(NumCtrs == 1) ? Txt_center : Txt_centers) < 0)
Txt_centers), Err_NotEnoughMemoryExit ();
NULL,NULL, Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2);
NULL,Box_NOT_CLOSABLE,2); free (Title);
Str_FreeStrings ();
/***** Write heading *****/ /***** Write heading *****/
Ctr_PutHeadCentersForSeeing (false); // Order not selectable Ctr_PutHeadCentersForSeeing (false); // Order not selectable
/***** List the centers (one row per center) *****/ /***** List the centers (one row per center) *****/
for (NumCtr = 1; for (NumCtr = 1;
NumCtr <= NumCtrs; NumCtr <= NumCtrs;
NumCtr++) NumCtr++)
{ {

View File

@ -762,6 +762,7 @@ static void CtrCfg_NumDegs (void)
extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *The_ClassDat[The_NUM_THEMES];
extern const char *Txt_Degrees; extern const char *Txt_Degrees;
extern const char *Txt_Degrees_of_CENTER_X; extern const char *Txt_Degrees_of_CENTER_X;
char *Title;
/***** Number of degrees *****/ /***** Number of degrees *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -773,10 +774,10 @@ static void CtrCfg_NumDegs (void)
HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]); HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]);
Frm_BeginFormGoTo (ActSeeDeg); Frm_BeginFormGoTo (ActSeeDeg);
Ctr_PutParamCtrCod (Gbl.Hierarchy.Ctr.CtrCod); Ctr_PutParamCtrCod (Gbl.Hierarchy.Ctr.CtrCod);
HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Degrees_of_CENTER_X, if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0)
Gbl.Hierarchy.Ctr.ShrtName), Err_NotEnoughMemoryExit ();
"BT_LINK",NULL); HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL);
Str_FreeStrings (); free (Title);
HTM_Unsigned (Deg_GetCachedNumDegsInCtr (Gbl.Hierarchy.Ctr.CtrCod)); HTM_Unsigned (Deg_GetCachedNumDegsInCtr (Gbl.Hierarchy.Ctr.CtrCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -602,10 +602,11 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/ */
#define Log_PLATFORM_VERSION "SWAD 21.77.1 (2021-12-29)" #define Log_PLATFORM_VERSION "SWAD 21.77.2 (2021-12-29)"
#define CSS_FILE "swad21.77.1.css" #define CSS_FILE "swad21.77.1.css"
#define JS_FILE "swad21.67.4.js" #define JS_FILE "swad21.67.4.js"
/* /*
Version 21.77.2: Dec 29, 2021 Changing Str_BuildString for asprintf. (322199 lines)
Version 21.77.1: Dec 29, 2021 Working on design of dark theme. (322161 lines) Version 21.77.1: Dec 29, 2021 Working on design of dark theme. (322161 lines)
Version 21.77: Dec 29, 2021 Animated recycle icon is changed by static icon. (322250 lines) Version 21.77: Dec 29, 2021 Animated recycle icon is changed by static icon. (322250 lines)
Version 21.76.5: Dec 29, 2021 Working on design of dark theme. (322313 lines) Version 21.76.5: Dec 29, 2021 Working on design of dark theme. (322313 lines)

View File

@ -543,18 +543,17 @@ void Cty_DrawCountryMapAndNameWithLink (struct Cty_Countr *Cty,Act_Action_t Acti
void Cty_DrawCountryMap (struct Cty_Countr *Cty,const char *Class) void Cty_DrawCountryMap (struct Cty_Countr *Cty,const char *Class)
{ {
char *URL; char *URL;
char *Icon;
/***** Draw country map *****/ /***** Draw country map *****/
if (Cty_CheckIfCountryPhotoExists (Cty)) if (Cty_CheckIfCountryPhotoExists (Cty))
{ {
if (asprintf (&URL,"%s/%s", if (asprintf (&URL,"%s/%s",Cfg_URL_ICON_COUNTRIES_PUBLIC,Cty->Alpha2) < 0)
Cfg_URL_ICON_COUNTRIES_PUBLIC,
Cty->Alpha2) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_IMG (URL,Str_BuildString ("%s.png",Cty->Alpha2), if (asprintf (&Icon,"%s.png",Cty->Alpha2) < 0)
Cty->Name[Gbl.Prefs.Language], Err_NotEnoughMemoryExit ();
"class=\"%s\"",Class); HTM_IMG (URL,Icon,Cty->Name[Gbl.Prefs.Language],"class=\"%s\"",Class);
Str_FreeStrings (); free (Icon);
free (URL); free (URL);
} }
else else
@ -1811,6 +1810,7 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys)
{ {
extern const char *Txt_country; extern const char *Txt_country;
extern const char *Txt_countries; extern const char *Txt_countries;
char *Title;
unsigned NumCty; unsigned NumCty;
struct Cty_Countr Cty; struct Cty_Countr Cty;
@ -1819,13 +1819,14 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
/* Number of countries found */ /* Number of countries found */
Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", if (asprintf (&Title,"%u %s",NumCtys,
NumCtys, NumCtys == 1 ? Txt_country :
NumCtys == 1 ? Txt_country : Txt_countries) < 0)
Txt_countries), Err_NotEnoughMemoryExit ();
Box_BoxTableBegin (NULL,Title,
NULL,NULL, NULL,NULL,
NULL,Box_NOT_CLOSABLE,2); NULL,Box_NOT_CLOSABLE,2);
Str_FreeStrings (); free (Title);
/***** Write heading *****/ /***** Write heading *****/
Cty_PutHeadCountriesForSeeing (false); // Order not selectable Cty_PutHeadCountriesForSeeing (false); // Order not selectable

View File

@ -471,6 +471,7 @@ static void CtyCfg_NumInss (void)
extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *The_ClassDat[The_NUM_THEMES];
extern const char *Txt_Institutions; extern const char *Txt_Institutions;
extern const char *Txt_Institutions_of_COUNTRY_X; extern const char *Txt_Institutions_of_COUNTRY_X;
char *Title;
/***** Number of institutions ******/ /***** Number of institutions ******/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -482,10 +483,11 @@ static void CtyCfg_NumInss (void)
HTM_TD_Begin ("class=\"%s LT\"",The_ClassDat[Gbl.Prefs.Theme]); HTM_TD_Begin ("class=\"%s LT\"",The_ClassDat[Gbl.Prefs.Theme]);
Frm_BeginFormGoTo (ActSeeIns); Frm_BeginFormGoTo (ActSeeIns);
Cty_PutParamCtyCod (Gbl.Hierarchy.Cty.CtyCod); Cty_PutParamCtyCod (Gbl.Hierarchy.Cty.CtyCod);
HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Institutions_of_COUNTRY_X, if (asprintf (&Title,Txt_Institutions_of_COUNTRY_X,
Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]) < 0)
"BT_LINK",NULL); Err_NotEnoughMemoryExit ();
Str_FreeStrings (); HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL);
free (Title);
HTM_Unsigned (Ins_GetCachedNumInssInCty (Gbl.Hierarchy.Cty.CtyCod)); HTM_Unsigned (Ins_GetCachedNumInssInCty (Gbl.Hierarchy.Cty.CtyCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();

View File

@ -836,14 +836,15 @@ static void Crs_ListCourses (void)
extern const char *Txt_No_courses; extern const char *Txt_No_courses;
extern const char *Txt_Create_another_course; extern const char *Txt_Create_another_course;
extern const char *Txt_Create_course; extern const char *Txt_Create_course;
char *Title;
unsigned Year; unsigned Year;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Courses_of_DEGREE_X, if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0)
Gbl.Hierarchy.Deg.ShrtName), Err_NotEnoughMemoryExit ();
Crs_PutIconsListCourses,NULL, Box_BoxBegin (NULL,Title,Crs_PutIconsListCourses,NULL,
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
if (Gbl.Hierarchy.Crss.Num) // There are courses in the current degree if (Gbl.Hierarchy.Crss.Num) // There are courses in the current degree
{ {
@ -1041,6 +1042,7 @@ static void Crs_EditCoursesInternal (void)
{ {
extern const char *Hlp_DEGREE_Courses; extern const char *Hlp_DEGREE_Courses;
extern const char *Txt_Courses_of_DEGREE_X; extern const char *Txt_Courses_of_DEGREE_X;
char *Title;
/***** Get list of degrees in this center *****/ /***** Get list of degrees in this center *****/
Deg_GetListDegsInCurrentCtr (); Deg_GetListDegsInCurrentCtr ();
@ -1052,11 +1054,11 @@ static void Crs_EditCoursesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Courses_of_DEGREE_X, if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0)
Gbl.Hierarchy.Deg.ShrtName), Err_NotEnoughMemoryExit ();
Crs_PutIconsEditingCourses,NULL, Box_BoxBegin (NULL,Title,Crs_PutIconsEditingCourses,NULL,
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
/***** Put a form to create or request a new course *****/ /***** Put a form to create or request a new course *****/
Crs_PutFormToCreateCourse (); Crs_PutFormToCreateCourse ();
@ -2155,15 +2157,17 @@ static void Crs_PutButtonToGoToCrs (void)
static void Crs_PutButtonToRegisterInCrs (void) static void Crs_PutButtonToRegisterInCrs (void)
{ {
extern const char *Txt_Register_me_in_X; extern const char *Txt_Register_me_in_X;
char *TxtButton;
Frm_BeginForm (ActReqSignUp); Frm_BeginForm (ActReqSignUp);
// 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_BuildString (Txt_Register_me_in_X, if (asprintf (&TxtButton,Txt_Register_me_in_X,Crs_EditingCrs->ShrtName) < 0)
Crs_EditingCrs->ShrtName)); Err_NotEnoughMemoryExit ();
Str_FreeStrings (); Btn_PutCreateButton (TxtButton);
free (TxtButton);
Frm_EndForm (); Frm_EndForm ();
} }
@ -2265,6 +2269,7 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumCrss; unsigned NumCrss;
unsigned NumCrs; unsigned NumCrs;
char *Txt;
/***** Get courses of a user from database *****/ /***** Get courses of a user from database *****/
NumCrss = Crs_DB_GetCrssOfAUsr (&mysql_res,UsrDat->UsrCod,Role); NumCrss = Crs_DB_GetCrssOfAUsr (&mysql_res,UsrDat->UsrCod,Role);
@ -2281,10 +2286,12 @@ 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_TxtColon (Str_BuildString (Txt_USER_in_COURSE, if (asprintf (&Txt,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]) < 0)
Str_FreeStrings (); Err_NotEnoughMemoryExit ();
HTM_TxtColon (Txt);
free (Txt);
HTM_TH_End (); HTM_TH_End ();
HTM_TR_End (); HTM_TR_End ();
@ -2334,6 +2341,7 @@ void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss)
extern const char *Txt_Year_OF_A_DEGREE; extern const char *Txt_Year_OF_A_DEGREE;
extern const char *Txt_Course; extern const char *Txt_Course;
extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES]; extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES];
char *Title;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumCrs; unsigned NumCrs;
@ -2342,13 +2350,12 @@ void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
/* Number of courses found */ /* Number of courses found */
Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", if (asprintf (&Title,"%u %s",NumCrss,
NumCrss, NumCrss == 1 ? Txt_course :
(NumCrss == 1) ? Txt_course : Txt_courses) < 0)
Txt_courses), Err_NotEnoughMemoryExit ();
NULL,NULL, Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2);
NULL,Box_NOT_CLOSABLE,2); free (Title);
Str_FreeStrings ();
/***** Heading row *****/ /***** Heading row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -192,12 +192,14 @@ void Dat_PutSpanDateFormat (Dat_Format_t Format)
void Dat_PutScriptDateFormat (Dat_Format_t Format) void Dat_PutScriptDateFormat (Dat_Format_t Format)
{ {
Dat_WriteLocalDateHMSFromUTC (Str_BuildString ("date_format_%u", char *Id;
(unsigned) Format),
Gbl.StartExecutionTimeUTC, if (asprintf (&Id,"date_format_%u",(unsigned) Format) < 0)
Err_NotEnoughMemoryExit ();
Dat_WriteLocalDateHMSFromUTC (Id,Gbl.StartExecutionTimeUTC,
Format,Dat_SEPARATOR_NONE, Format,Dat_SEPARATOR_NONE,
false,true,false,0x0); false,true,false,0x0);
Str_FreeStrings (); free (Id);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -709,14 +709,15 @@ static void Deg_ListDegrees (void)
extern const char *Txt_No_degrees; extern const char *Txt_No_degrees;
extern const char *Txt_Create_another_degree; extern const char *Txt_Create_another_degree;
extern const char *Txt_Create_degree; extern const char *Txt_Create_degree;
char *Title;
unsigned NumDeg; unsigned NumDeg;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Degrees_of_CENTER_X, if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0)
Gbl.Hierarchy.Ctr.ShrtName), Err_NotEnoughMemoryExit ();
Deg_PutIconsListingDegrees,NULL, Box_BoxBegin (NULL,Title,Deg_PutIconsListingDegrees,NULL,
Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); Hlp_CENTER_Degrees,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
if (Gbl.Hierarchy.Degs.Num) // There are degrees in the current center if (Gbl.Hierarchy.Degs.Num) // There are degrees in the current center
{ {
@ -894,6 +895,7 @@ static void Deg_EditDegreesInternal (void)
extern const char *Hlp_CENTER_Degrees; extern const char *Hlp_CENTER_Degrees;
extern const char *Txt_Degrees_of_CENTER_X; extern const char *Txt_Degrees_of_CENTER_X;
extern const char *Txt_No_types_of_degree; extern const char *Txt_No_types_of_degree;
char *Title;
/***** Get list of degrees in the current center *****/ /***** Get list of degrees in the current center *****/
Deg_GetListDegsInCurrentCtr (); Deg_GetListDegsInCurrentCtr ();
@ -905,11 +907,11 @@ static void Deg_EditDegreesInternal (void)
Hie_WriteMenuHierarchy (); Hie_WriteMenuHierarchy ();
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Str_BuildString (Txt_Degrees_of_CENTER_X, if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0)
Gbl.Hierarchy.Ctr.ShrtName), Err_NotEnoughMemoryExit ();
Deg_PutIconsEditingDegrees,NULL, Box_BoxBegin (NULL,Title,Deg_PutIconsEditingDegrees,NULL,
Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); Hlp_CENTER_Degrees,Box_NOT_CLOSABLE);
Str_FreeStrings (); free (Title);
if (Gbl.DegTypes.Num) if (Gbl.DegTypes.Num)
{ {
@ -1803,6 +1805,7 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs)
{ {
extern const char *Txt_degree; extern const char *Txt_degree;
extern const char *Txt_degrees; extern const char *Txt_degrees;
char *Title;
unsigned NumDeg; unsigned NumDeg;
struct Deg_Degree Deg; struct Deg_Degree Deg;
@ -1811,13 +1814,12 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs)
{ {
/***** Begin box and table *****/ /***** Begin box and table *****/
/* Number of degrees found */ /* Number of degrees found */
Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", if (asprintf (&Title,"%u %s",NumDegs,
NumDegs, NumDegs == 1 ? Txt_degree :
(NumDegs == 1) ? Txt_degree : Txt_degrees) < 0)
Txt_degrees), Err_NotEnoughMemoryExit ();
NULL,NULL, Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2);
NULL,Box_NOT_CLOSABLE,2); free (Title);
Str_FreeStrings ();
/***** Write heading *****/ /***** Write heading *****/
Deg_PutHeadDegreesForSeeing (); Deg_PutHeadDegreesForSeeing ();

View File

@ -318,6 +318,7 @@ static void DegCfg_NumCrss (void)
extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *The_ClassDat[The_NUM_THEMES];
extern const char *Txt_Courses; extern const char *Txt_Courses;
extern const char *Txt_Courses_of_DEGREE_X; extern const char *Txt_Courses_of_DEGREE_X;
char *Title;
/***** Number of courses *****/ /***** Number of courses *****/
/* Begin table row */ /* Begin table row */
@ -330,10 +331,10 @@ static void DegCfg_NumCrss (void)
HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]); HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]);
Frm_BeginFormGoTo (ActSeeCrs); Frm_BeginFormGoTo (ActSeeCrs);
Deg_PutParamDegCod (Gbl.Hierarchy.Deg.DegCod); Deg_PutParamDegCod (Gbl.Hierarchy.Deg.DegCod);
HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Courses_of_DEGREE_X, if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0)
Gbl.Hierarchy.Deg.ShrtName), Err_NotEnoughMemoryExit ();
"BT_LINK",NULL); HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL);
Str_FreeStrings (); free (Title);
HTM_Unsigned (Crs_GetCachedNumCrssInDeg (Gbl.Hierarchy.Deg.DegCod)); HTM_Unsigned (Crs_GetCachedNumCrssInDeg (Gbl.Hierarchy.Deg.DegCod));
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();