mirror of https://github.com/acanas/swad-core.git
Version 21.77.2: Dec 29, 2021 Changing Str_BuildString for asprintf.
This commit is contained in:
parent
0d86af745e
commit
f8391edd6c
|
@ -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);
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
10
swad_date.c
10
swad_date.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
Loading…
Reference in New Issue