mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-10 10:45:23 +02:00
Version 23.9.7: Sep 19, 2023 Code refactoring in hierarchy.
This commit is contained in:
parent
4dd1e6edfd
commit
98039765e6
|
@ -632,10 +632,11 @@ TODO: Francisco Javier Fern
|
||||||
Me sale este error, no sé si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así?
|
Me sale este error, no sé si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así?
|
||||||
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 23.9.6 (2023-09-19)"
|
#define Log_PLATFORM_VERSION "SWAD 23.9.7 (2023-09-19)"
|
||||||
#define CSS_FILE "swad22.120.4.css"
|
#define CSS_FILE "swad22.120.4.css"
|
||||||
#define JS_FILE "swad22.49.js"
|
#define JS_FILE "swad22.49.js"
|
||||||
/*
|
/*
|
||||||
|
Version 23.9.7: Sep 19, 2023 Code refactoring in hierarchy. (337352 lines)
|
||||||
Version 23.9.6: Sep 19, 2023 Code refactoring in hierarchy. (337410 lines)
|
Version 23.9.6: Sep 19, 2023 Code refactoring in hierarchy. (337410 lines)
|
||||||
Version 23.9.5: Sep 19, 2023 Code refactoring in hierarchy. (337441 lines)
|
Version 23.9.5: Sep 19, 2023 Code refactoring in hierarchy. (337441 lines)
|
||||||
Version 23.9.4: Sep 19, 2023 Code refactoring in calls for exams. (337504 lines)
|
Version 23.9.4: Sep 19, 2023 Code refactoring in calls for exams. (337504 lines)
|
||||||
|
|
|
@ -366,13 +366,13 @@ static void CtyCfg_MapImage (bool PrintView,bool PutLink)
|
||||||
|
|
||||||
static void CtyCfg_Platform (bool PrintView)
|
static void CtyCfg_Platform (bool PrintView)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Platform;
|
extern const char *Txt_System;
|
||||||
|
|
||||||
/***** Institution *****/
|
/***** Institution *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
/* Label */
|
/* Label */
|
||||||
Frm_LabelColumn ("RT",NULL,Txt_Platform);
|
Frm_LabelColumn ("RT",NULL,Txt_System);
|
||||||
|
|
||||||
/* Data */
|
/* Data */
|
||||||
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
|
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
|
||||||
|
|
|
@ -364,11 +364,17 @@ void DegCfg_ChangeDegCtr (void)
|
||||||
Ctr_GetCenterDataByCod (&NewCtr);
|
Ctr_GetCenterDataByCod (&NewCtr);
|
||||||
|
|
||||||
/***** Check if it already exists a degree with the same name in the new center *****/
|
/***** Check if it already exists a degree with the same name in the new center *****/
|
||||||
if (Deg_DB_CheckIfDegNameExistsInCtr ("ShortName",Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,NewCtr.Cod))
|
if (Deg_DB_CheckIfDegNameExistsInCtr ("ShortName",
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
|
||||||
|
NewCtr.Cod))
|
||||||
Ale_CreateAlert (Ale_WARNING,
|
Ale_CreateAlert (Ale_WARNING,
|
||||||
Txt_The_degree_X_already_exists,
|
Txt_The_degree_X_already_exists,
|
||||||
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
|
Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
|
||||||
else if (Deg_DB_CheckIfDegNameExistsInCtr ("FullName",Gbl.Hierarchy.Node[HieLvl_DEG].FullName,Gbl.Hierarchy.Node[HieLvl_DEG].Cod,NewCtr.Cod))
|
else if (Deg_DB_CheckIfDegNameExistsInCtr ("FullName",
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_DEG].FullName,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
|
||||||
|
NewCtr.Cod))
|
||||||
Ale_CreateAlert (Ale_WARNING,
|
Ale_CreateAlert (Ale_WARNING,
|
||||||
Txt_The_degree_X_already_exists,
|
Txt_The_degree_X_already_exists,
|
||||||
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
|
Gbl.Hierarchy.Node[HieLvl_DEG].FullName);
|
||||||
|
|
|
@ -148,7 +148,8 @@ void Dpt_SeeAllDepts (void)
|
||||||
Dpt_GetListDepartments (&Departments,Gbl.Hierarchy.Node[HieLvl_INS].Cod);
|
Dpt_GetListDepartments (&Departments,Gbl.Hierarchy.Node[HieLvl_INS].Cod);
|
||||||
|
|
||||||
/***** Begin box and table *****/
|
/***** Begin box and table *****/
|
||||||
if (asprintf (&Title,Txt_Departments_of_INSTITUTION_X,Gbl.Hierarchy.Node[HieLvl_INS].FullName) < 0)
|
if (asprintf (&Title,Txt_Departments_of_INSTITUTION_X,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_INS].FullName) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
Box_BoxTableBegin (NULL,Title,
|
Box_BoxTableBegin (NULL,Title,
|
||||||
Dpt_PutIconToEditDpts,NULL,
|
Dpt_PutIconToEditDpts,NULL,
|
||||||
|
@ -317,7 +318,8 @@ static void Dpt_EditDepartmentsInternal (void)
|
||||||
Dpt_GetListDepartments (&Departments,Gbl.Hierarchy.Node[HieLvl_INS].Cod);
|
Dpt_GetListDepartments (&Departments,Gbl.Hierarchy.Node[HieLvl_INS].Cod);
|
||||||
|
|
||||||
/***** Begin box *****/
|
/***** Begin box *****/
|
||||||
if (asprintf (&Title,Txt_Departments_of_INSTITUTION_X,Gbl.Hierarchy.Node[HieLvl_INS].FullName) < 0)
|
if (asprintf (&Title,Txt_Departments_of_INSTITUTION_X,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_INS].FullName) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
Box_BoxBegin (NULL,Title,
|
Box_BoxBegin (NULL,Title,
|
||||||
Dpt_PutIconToViewDpts,NULL,
|
Dpt_PutIconToViewDpts,NULL,
|
||||||
|
@ -522,7 +524,7 @@ static void Dpt_ListDepartmentsForEdition (const struct Dpt_Departments *Departm
|
||||||
InsInLst = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns];
|
InsInLst = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns];
|
||||||
HTM_OPTION (HTM_Type_LONG,&InsInLst->Cod,
|
HTM_OPTION (HTM_Type_LONG,&InsInLst->Cod,
|
||||||
InsInLst->Cod == DptInLst->InsCod ? HTM_OPTION_SELECTED :
|
InsInLst->Cod == DptInLst->InsCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",InsInLst->ShrtName);
|
"%s",InsInLst->ShrtName);
|
||||||
}
|
}
|
||||||
|
@ -850,7 +852,7 @@ static void Dpt_PutFormToCreateDepartment (void)
|
||||||
InsInLst = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns];
|
InsInLst = &Gbl.Hierarchy.List[HieLvl_CTY].Lst[NumIns];
|
||||||
HTM_OPTION (HTM_Type_LONG,&InsInLst->Cod,
|
HTM_OPTION (HTM_Type_LONG,&InsInLst->Cod,
|
||||||
InsInLst->Cod == Dpt_EditingDpt->InsCod ? HTM_OPTION_SELECTED :
|
InsInLst->Cod == Dpt_EditingDpt->InsCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",InsInLst->ShrtName);
|
"%s",InsInLst->ShrtName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1405,9 +1405,9 @@ bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
|
||||||
OptionsShown = true;
|
OptionsShown = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Remove user as an administrator of the center *****/
|
/***** Remove user as an administrator of the center *****/
|
||||||
if (UsrIsCtrAdmin &&
|
if (UsrIsCtrAdmin &&
|
||||||
(MeOrOther == Usr_ME || Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM))
|
(MeOrOther == Usr_ME || Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM))
|
||||||
{
|
{
|
||||||
Enr_PutActionRemUsrAsCtrAdm (&OptionChecked,MeOrOther);
|
Enr_PutActionRemUsrAsCtrAdm (&OptionChecked,MeOrOther);
|
||||||
OptionsShown = true;
|
OptionsShown = true;
|
||||||
|
@ -1456,7 +1456,8 @@ static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
|
||||||
};
|
};
|
||||||
|
|
||||||
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_MODIFY_ONE_USR_IN_CRS,OptionChecked);
|
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_MODIFY_ONE_USR_IN_CRS,OptionChecked);
|
||||||
HTM_TxtF (Txt[UsrBelongsToCrs][MeOrOther],Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
HTM_TxtF (Txt[UsrBelongsToCrs][MeOrOther],
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
||||||
Enr_RegRemOneUsrActionEnd ();
|
Enr_RegRemOneUsrActionEnd ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1957,12 +1958,13 @@ void Enr_AskIfRejectSignUp (void)
|
||||||
{
|
{
|
||||||
/* User already belongs to this course */
|
/* User already belongs to this course */
|
||||||
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_CRS].FullName);
|
||||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||||
|
|
||||||
/* Remove inscription request because it has not sense */
|
/* Remove inscription request because it has not sense */
|
||||||
Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod,
|
Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||||
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
|
Gbl.Hierarchy.Node[HieLvl_CRS].Cod);
|
||||||
}
|
}
|
||||||
else // User does not belong to this course
|
else // User does not belong to this course
|
||||||
{
|
{
|
||||||
|
|
|
@ -1531,7 +1531,8 @@ static void ExaSet_ChangeValidityQst (Qst_Validity_t Validity)
|
||||||
QstCod = ParCod_GetAndCheckPar (ParCod_Qst);
|
QstCod = ParCod_GetAndCheckPar (ParCod_Qst);
|
||||||
|
|
||||||
/***** Validate/unvalidate question *****/
|
/***** Validate/unvalidate question *****/
|
||||||
Exa_DB_ChangeValidityQst (QstCod,Set.SetCod,Exams.Exam.ExaCod,Gbl.Hierarchy.Node[HieLvl_CRS].Cod,
|
Exa_DB_ChangeValidityQst (QstCod,Set.SetCod,Exams.Exam.ExaCod,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_CRS].Cod,
|
||||||
Validity);
|
Validity);
|
||||||
|
|
||||||
/***** Show current exam and its sets *****/
|
/***** Show current exam and its sets *****/
|
||||||
|
|
|
@ -202,7 +202,8 @@ void Frm_SetParsForm (char ParsStr[Frm_MAX_BYTES_PARAMS_STR + 1],
|
||||||
snprintf (ParSession,sizeof (ParSession),
|
snprintf (ParSession,sizeof (ParSession),
|
||||||
"<input type=\"hidden\" name=\"ses\" value=\"%s\" />",
|
"<input type=\"hidden\" name=\"ses\" value=\"%s\" />",
|
||||||
Gbl.Session.Id);
|
Gbl.Session.Id);
|
||||||
else if (PutParLocationIfNoSession && Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].Cod > 0)
|
else if (PutParLocationIfNoSession &&
|
||||||
|
Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].Cod > 0)
|
||||||
// Extra parameters necessary when there's no open session
|
// Extra parameters necessary when there's no open session
|
||||||
/* If session is open, course/degree/... code will be get from session data,
|
/* If session is open, course/degree/... code will be get from session data,
|
||||||
but if there is not an open session, and next action is known,
|
but if there is not an open session, and next action is known,
|
||||||
|
|
|
@ -56,7 +56,7 @@ extern struct Globals Gbl;
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** Private prototypes ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Hie_DrawLogo (const char *ShrtText);
|
static void Hie_DrawLogo (void);
|
||||||
|
|
||||||
static Hie_StatusTxt_t Hie_GetStatusTxtFromStatusBits (Hie_Status_t Status);
|
static Hie_StatusTxt_t Hie_GetStatusTxtFromStatusBits (Hie_Status_t Status);
|
||||||
static Hie_Status_t Hie_GetStatusBitsFromStatusTxt (Hie_StatusTxt_t StatusTxt);
|
static Hie_Status_t Hie_GetStatusBitsFromStatusTxt (Hie_StatusTxt_t StatusTxt);
|
||||||
|
@ -427,24 +427,6 @@ void Hie_WriteBigNameCtyInsCtrDegCrs (void)
|
||||||
[HieLvl_DEG] = TabDeg,
|
[HieLvl_DEG] = TabDeg,
|
||||||
[HieLvl_CRS] = TabCrs,
|
[HieLvl_CRS] = TabCrs,
|
||||||
};
|
};
|
||||||
const char *FullText[HieLvl_NUM_LEVELS] =
|
|
||||||
{
|
|
||||||
[HieLvl_SYS] = Cfg_PLATFORM_SHORT_NAME,
|
|
||||||
[HieLvl_CTY] = Gbl.Hierarchy.Node[HieLvl_CTY].FullName,
|
|
||||||
[HieLvl_INS] = Gbl.Hierarchy.Node[HieLvl_INS].FullName,
|
|
||||||
[HieLvl_CTR] = Gbl.Hierarchy.Node[HieLvl_CTR].FullName,
|
|
||||||
[HieLvl_DEG] = Gbl.Hierarchy.Node[HieLvl_DEG].FullName,
|
|
||||||
[HieLvl_CRS] = Gbl.Hierarchy.Node[HieLvl_CRS].FullName,
|
|
||||||
};
|
|
||||||
const char *ShrtText[HieLvl_NUM_LEVELS] =
|
|
||||||
{
|
|
||||||
[HieLvl_SYS] = Cfg_PLATFORM_SHORT_NAME,
|
|
||||||
[HieLvl_CTY] = Gbl.Hierarchy.Node[HieLvl_CTY].FullName,
|
|
||||||
[HieLvl_INS] = Gbl.Hierarchy.Node[HieLvl_INS].ShrtName,
|
|
||||||
[HieLvl_CTR] = Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName,
|
|
||||||
[HieLvl_DEG] = Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName,
|
|
||||||
[HieLvl_CRS] = Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName,
|
|
||||||
};
|
|
||||||
|
|
||||||
HTM_TxtF ("<h1 id=\"main_title\" class=\"MAIN_TITLE_%s\">",
|
HTM_TxtF ("<h1 id=\"main_title\" class=\"MAIN_TITLE_%s\">",
|
||||||
The_GetSuffix ());
|
The_GetSuffix ());
|
||||||
|
@ -454,17 +436,17 @@ void Hie_WriteBigNameCtyInsCtrDegCrs (void)
|
||||||
|
|
||||||
Frm_BeginForm (ActMnu);
|
Frm_BeginForm (ActMnu);
|
||||||
Par_PutParUnsigned (NULL,"NxtTab",(unsigned) NextTab[Gbl.Hierarchy.Level]);
|
Par_PutParUnsigned (NULL,"NxtTab",(unsigned) NextTab[Gbl.Hierarchy.Level]);
|
||||||
HTM_BUTTON_Submit_Begin (ShrtText[Gbl.Hierarchy.Level],
|
HTM_BUTTON_Submit_Begin (Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].ShrtName,
|
||||||
"class=\"BT_LINK ICO_HIGHLIGHT\"");
|
"class=\"BT_LINK ICO_HIGHLIGHT\"");
|
||||||
|
|
||||||
HTM_DIV_Begin ("id=\"big_full_name\""); // Full name
|
HTM_DIV_Begin ("id=\"big_full_name\""); // Full name
|
||||||
Hie_DrawLogo (ShrtText[Gbl.Hierarchy.Level]);
|
Hie_DrawLogo ();
|
||||||
HTM_Txt (FullText[Gbl.Hierarchy.Level]);
|
HTM_Txt (Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].FullName);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
HTM_DIV_Begin ("id=\"big_short_name\""); // Short name
|
HTM_DIV_Begin ("id=\"big_short_name\""); // Short name
|
||||||
Hie_DrawLogo (ShrtText[Gbl.Hierarchy.Level]);
|
Hie_DrawLogo ();
|
||||||
HTM_Txt (ShrtText[Gbl.Hierarchy.Level]);
|
HTM_Txt (Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].ShrtName);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
HTM_BUTTON_End ();
|
HTM_BUTTON_End ();
|
||||||
|
@ -479,7 +461,7 @@ void Hie_WriteBigNameCtyInsCtrDegCrs (void)
|
||||||
/********************** Draw logo in the top of the page *********************/
|
/********************** Draw logo in the top of the page *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Hie_DrawLogo (const char *ShrtText)
|
static void Hie_DrawLogo (void)
|
||||||
{
|
{
|
||||||
static HieLvl_Level_t LogoScope[HieLvl_NUM_LEVELS] =
|
static HieLvl_Level_t LogoScope[HieLvl_NUM_LEVELS] =
|
||||||
{
|
{
|
||||||
|
@ -493,14 +475,15 @@ static void Hie_DrawLogo (const char *ShrtText)
|
||||||
[HieLvl_INS] = &Gbl.Hierarchy.Node[HieLvl_INS].Cod,
|
[HieLvl_INS] = &Gbl.Hierarchy.Node[HieLvl_INS].Cod,
|
||||||
[HieLvl_CTR] = &Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
|
[HieLvl_CTR] = &Gbl.Hierarchy.Node[HieLvl_CTR].Cod,
|
||||||
[HieLvl_DEG] = &Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
|
[HieLvl_DEG] = &Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
|
||||||
[HieLvl_CRS] = &Gbl.Hierarchy.Node[HieLvl_DEG].Cod,
|
[HieLvl_CRS] = &Gbl.Hierarchy.Node[HieLvl_DEG].Cod, // Degree code
|
||||||
};
|
};
|
||||||
|
|
||||||
/***** Logo *****/
|
/***** Logo *****/
|
||||||
switch (Gbl.Hierarchy.Level)
|
switch (Gbl.Hierarchy.Level)
|
||||||
{
|
{
|
||||||
case HieLvl_SYS: // System
|
case HieLvl_SYS: // System
|
||||||
Ico_PutIcon ("swad64x64.png",Ico_UNCHANGED,ShrtText,"TOP_LOGO");
|
Ico_PutIcon ("swad64x64.png",Ico_UNCHANGED,
|
||||||
|
Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].ShrtName,"TOP_LOGO");
|
||||||
break;
|
break;
|
||||||
case HieLvl_CTY: // Country
|
case HieLvl_CTY: // Country
|
||||||
Cty_DrawCountryMap (&Gbl.Hierarchy.Node[HieLvl_CTY],"TOP_LOGO");
|
Cty_DrawCountryMap (&Gbl.Hierarchy.Node[HieLvl_CTY],"TOP_LOGO");
|
||||||
|
@ -508,7 +491,7 @@ static void Hie_DrawLogo (const char *ShrtText)
|
||||||
default:
|
default:
|
||||||
Lgo_DrawLogo (LogoScope[Gbl.Hierarchy.Level],
|
Lgo_DrawLogo (LogoScope[Gbl.Hierarchy.Level],
|
||||||
*LogoCode[Gbl.Hierarchy.Level],
|
*LogoCode[Gbl.Hierarchy.Level],
|
||||||
ShrtText,
|
Gbl.Hierarchy.Node[Gbl.Hierarchy.Level].ShrtName,
|
||||||
40,"TOP_LOGO");
|
40,"TOP_LOGO");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -580,37 +563,45 @@ void Hie_InitHierarchy (void)
|
||||||
if (!Cty_GetBasicCountryDataByCod (&Gbl.Hierarchy.Node[HieLvl_CTY])) // Country not found
|
if (!Cty_GetBasicCountryDataByCod (&Gbl.Hierarchy.Node[HieLvl_CTY])) // Country not found
|
||||||
Hie_ResetHierarchy ();
|
Hie_ResetHierarchy ();
|
||||||
|
|
||||||
|
/***** Set system data *****/
|
||||||
|
Str_Copy (Gbl.Hierarchy.Node[HieLvl_SYS].ShrtName,Cfg_PLATFORM_SHORT_NAME,
|
||||||
|
sizeof (Gbl.Hierarchy.Node[HieLvl_SYS].ShrtName) - 1);
|
||||||
|
Str_Copy (Gbl.Hierarchy.Node[HieLvl_SYS].FullName,Cfg_PLATFORM_FULL_NAME ,
|
||||||
|
sizeof (Gbl.Hierarchy.Node[HieLvl_SYS].FullName) - 1);
|
||||||
|
Str_Copy (Gbl.Hierarchy.Node[HieLvl_SYS].WWW ,Cfg_URL_SWAD_PUBLIC ,
|
||||||
|
sizeof (Gbl.Hierarchy.Node[HieLvl_SYS].WWW ) - 1);
|
||||||
|
|
||||||
/***** Set current hierarchy level and code
|
/***** Set current hierarchy level and code
|
||||||
depending on course code, degree code, etc. *****/
|
depending on course code, degree code, etc. *****/
|
||||||
if (Gbl.Hierarchy.Node[HieLvl_CRS].Cod > 0) // Course selected
|
if (Gbl.Hierarchy.Node[HieLvl_CRS].Cod > 0) // Course selected
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_CRS;
|
Gbl.Hierarchy.Level = HieLvl_CRS;
|
||||||
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CRS].Cod;
|
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CRS].Cod;
|
||||||
}
|
}
|
||||||
else if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) // Degree selected
|
else if (Gbl.Hierarchy.Node[HieLvl_DEG].Cod > 0) // Degree selected
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_DEG;
|
Gbl.Hierarchy.Level = HieLvl_DEG;
|
||||||
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
|
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
|
||||||
}
|
}
|
||||||
else if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0) // Center selected
|
else if (Gbl.Hierarchy.Node[HieLvl_CTR].Cod > 0) // Center selected
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_CTR;
|
Gbl.Hierarchy.Level = HieLvl_CTR;
|
||||||
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
|
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
|
||||||
}
|
}
|
||||||
else if (Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0) // Institution selected
|
else if (Gbl.Hierarchy.Node[HieLvl_INS].Cod > 0) // Institution selected
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_INS;
|
Gbl.Hierarchy.Level = HieLvl_INS;
|
||||||
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_INS].Cod;
|
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_INS].Cod;
|
||||||
}
|
}
|
||||||
else if (Gbl.Hierarchy.Node[HieLvl_CTY].Cod > 0) // Country selected
|
else if (Gbl.Hierarchy.Node[HieLvl_CTY].Cod > 0) // Country selected
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_CTY;
|
Gbl.Hierarchy.Level = HieLvl_CTY;
|
||||||
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CTY].Cod;
|
Gbl.Hierarchy.Cod = Gbl.Hierarchy.Node[HieLvl_CTY].Cod;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Gbl.Hierarchy.Level = HieLvl_SYS;
|
Gbl.Hierarchy.Level = HieLvl_SYS;
|
||||||
Gbl.Hierarchy.Cod = -1L;
|
Gbl.Hierarchy.Cod = -1L;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Initialize paths *****/
|
/***** Initialize paths *****/
|
||||||
|
|
|
@ -1512,14 +1512,10 @@ static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status)
|
||||||
/* Set institution country */
|
/* Set institution country */
|
||||||
Ins_EditingIns->PrtCod = Gbl.Hierarchy.Node[HieLvl_CTY].Cod;
|
Ins_EditingIns->PrtCod = Gbl.Hierarchy.Node[HieLvl_CTY].Cod;
|
||||||
|
|
||||||
/* Get institution short name */
|
/* Get institution short name, full name and WWW */
|
||||||
Par_GetParText ("ShortName",Ins_EditingIns->ShrtName,Cns_HIERARCHY_MAX_BYTES_SHRT_NAME);
|
Par_GetParText ("ShortName",Ins_EditingIns->ShrtName,Cns_HIERARCHY_MAX_BYTES_SHRT_NAME);
|
||||||
|
Par_GetParText ("FullName" ,Ins_EditingIns->FullName,Cns_HIERARCHY_MAX_BYTES_FULL_NAME);
|
||||||
/* Get institution full name */
|
Par_GetParText ("WWW" ,Ins_EditingIns->WWW ,Cns_MAX_BYTES_WWW);
|
||||||
Par_GetParText ("FullName",Ins_EditingIns->FullName,Cns_HIERARCHY_MAX_BYTES_FULL_NAME);
|
|
||||||
|
|
||||||
/* Get institution WWW */
|
|
||||||
Par_GetParText ("WWW",Ins_EditingIns->WWW,Cns_MAX_BYTES_WWW);
|
|
||||||
|
|
||||||
if (Ins_EditingIns->ShrtName[0] &&
|
if (Ins_EditingIns->ShrtName[0] &&
|
||||||
Ins_EditingIns->FullName[0]) // If there's a institution name
|
Ins_EditingIns->FullName[0]) // If there's a institution name
|
||||||
|
|
|
@ -378,7 +378,8 @@ static void InsCfg_FullName (bool PutForm)
|
||||||
|
|
||||||
static void InsCfg_ShrtName (bool PutForm)
|
static void InsCfg_ShrtName (bool PutForm)
|
||||||
{
|
{
|
||||||
HieCfg_ShrtName (PutForm,ActRenInsShoCfg,Gbl.Hierarchy.Node[HieLvl_INS].ShrtName);
|
HieCfg_ShrtName (PutForm,ActRenInsShoCfg,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_INS].ShrtName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -387,7 +388,8 @@ static void InsCfg_ShrtName (bool PutForm)
|
||||||
|
|
||||||
static void InsCfg_WWW (bool PrintView,bool PutForm)
|
static void InsCfg_WWW (bool PrintView,bool PutForm)
|
||||||
{
|
{
|
||||||
HieCfg_WWW (PrintView,PutForm,ActChgInsWWWCfg,Gbl.Hierarchy.Node[HieLvl_INS].WWW);
|
HieCfg_WWW (PrintView,PutForm,ActChgInsWWWCfg,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_INS].WWW);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -556,7 +558,7 @@ void InsCfg_ChangeInsCty (void)
|
||||||
/***** Update the table changing the country of the institution *****/
|
/***** Update the table changing the country of the institution *****/
|
||||||
Ins_DB_UpdateInsCty (Gbl.Hierarchy.Node[HieLvl_INS].Cod,NewCty.Cod);
|
Ins_DB_UpdateInsCty (Gbl.Hierarchy.Node[HieLvl_INS].Cod,NewCty.Cod);
|
||||||
Gbl.Hierarchy.Node[HieLvl_INS].PrtCod =
|
Gbl.Hierarchy.Node[HieLvl_INS].PrtCod =
|
||||||
Gbl.Hierarchy.Node[HieLvl_CTY].Cod = NewCty.Cod;
|
Gbl.Hierarchy.Node[HieLvl_CTY].Cod = NewCty.Cod;
|
||||||
|
|
||||||
/***** Initialize again current course, degree, center... *****/
|
/***** Initialize again current course, degree, center... *****/
|
||||||
Hie_InitHierarchy ();
|
Hie_InitHierarchy ();
|
||||||
|
@ -603,7 +605,8 @@ void InsCfg_ChangeInsWWW (void)
|
||||||
{
|
{
|
||||||
/***** Update database changing old WWW by new WWW *****/
|
/***** Update database changing old WWW by new WWW *****/
|
||||||
Ins_DB_UpdateInsWWW (Gbl.Hierarchy.Node[HieLvl_INS].Cod,NewWWW);
|
Ins_DB_UpdateInsWWW (Gbl.Hierarchy.Node[HieLvl_INS].Cod,NewWWW);
|
||||||
Str_Copy (Gbl.Hierarchy.Node[HieLvl_INS].WWW,NewWWW,sizeof (Gbl.Hierarchy.Node[HieLvl_INS].WWW) - 1);
|
Str_Copy (Gbl.Hierarchy.Node[HieLvl_INS].WWW,NewWWW,
|
||||||
|
sizeof (Gbl.Hierarchy.Node[HieLvl_INS].WWW) - 1);
|
||||||
|
|
||||||
/***** Write message to show the change made *****/
|
/***** Write message to show the change made *****/
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_web_address_is_X,
|
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_web_address_is_X,
|
||||||
|
|
|
@ -455,8 +455,7 @@ static void Lay_WritePageTitle (void)
|
||||||
HTM_TxtF (" > %s",Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
HTM_TxtF (" > %s",Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
HTM_TxtF ("%s: %s",
|
HTM_TxtF ("%s: %s",Cfg_PLATFORM_SHORT_NAME,Txt_TAGLINE);
|
||||||
Cfg_PLATFORM_SHORT_NAME,Txt_TAGLINE);
|
|
||||||
|
|
||||||
HTM_TITLE_End ();
|
HTM_TITLE_End ();
|
||||||
}
|
}
|
||||||
|
|
122
swad_logo.c
122
swad_logo.c
|
@ -43,6 +43,17 @@
|
||||||
#include "swad_scope.h"
|
#include "swad_scope.h"
|
||||||
#include "swad_theme.h"
|
#include "swad_theme.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**************************** Private constants ******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static const char *Lgo_Folder[HieLvl_NUM_LEVELS] =
|
||||||
|
{
|
||||||
|
[HieLvl_INS] = Cfg_FOLDER_INS,
|
||||||
|
[HieLvl_CTR] = Cfg_FOLDER_CTR,
|
||||||
|
[HieLvl_DEG] = Cfg_FOLDER_DEG,
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************** External global variables from others modules ****************/
|
/************** External global variables from others modules ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -214,53 +225,36 @@ void Lgo_RequestLogo (HieLvl_Level_t Level)
|
||||||
extern const char *Txt_Logo;
|
extern const char *Txt_Logo;
|
||||||
extern const char *Txt_You_can_send_a_file_with_an_image_in_PNG_format_transparent_background_and_size_X_Y;
|
extern const char *Txt_You_can_send_a_file_with_an_image_in_PNG_format_transparent_background_and_size_X_Y;
|
||||||
extern const char *Txt_File_with_the_logo;
|
extern const char *Txt_File_with_the_logo;
|
||||||
long Cod;
|
static Act_Action_t ActionRec[HieLvl_NUM_LEVELS] =
|
||||||
const char *Folder;
|
|
||||||
Act_Action_t ActionRec;
|
|
||||||
void (*FunctionToDrawContextualIcons) (void *Args);
|
|
||||||
char PathLogo[PATH_MAX + 1];
|
|
||||||
|
|
||||||
/***** Set action depending on scope *****/
|
|
||||||
switch (Level)
|
|
||||||
{
|
{
|
||||||
case HieLvl_INS:
|
[HieLvl_INS] = ActRecInsLog,
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_INS].Cod;
|
[HieLvl_CTR] = ActRecCtrLog,
|
||||||
Folder = Cfg_FOLDER_INS;
|
[HieLvl_DEG] = ActRecDegLog,
|
||||||
ActionRec = ActRecInsLog;
|
};
|
||||||
FunctionToDrawContextualIcons = Lgo_PutIconToRemoveLogoIns;
|
static void (*FunctionToDrawContextualIcons[HieLvl_NUM_LEVELS]) (void *Args) =
|
||||||
break;
|
{
|
||||||
case HieLvl_CTR:
|
[HieLvl_INS] = Lgo_PutIconToRemoveLogoIns,
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
|
[HieLvl_CTR] = Lgo_PutIconToRemoveLogoCtr,
|
||||||
Folder = Cfg_FOLDER_CTR;
|
[HieLvl_DEG] = Lgo_PutIconToRemoveLogoDeg,
|
||||||
ActionRec = ActRecCtrLog;
|
};
|
||||||
FunctionToDrawContextualIcons = Lgo_PutIconToRemoveLogoCtr;
|
long Cod = Gbl.Hierarchy.Node[Level].Cod;
|
||||||
break;
|
char PathLogo[PATH_MAX + 1];
|
||||||
case HieLvl_DEG:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
|
|
||||||
Folder = Cfg_FOLDER_DEG;
|
|
||||||
ActionRec = ActRecDegLog;
|
|
||||||
FunctionToDrawContextualIcons = Lgo_PutIconToRemoveLogoDeg;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return; // Nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Check if logo exists *****/
|
/***** Check if logo exists *****/
|
||||||
snprintf (PathLogo,sizeof (PathLogo),"%s/%s/%02u/%u/logo/%u.png",
|
snprintf (PathLogo,sizeof (PathLogo),"%s/%s/%02u/%u/logo/%u.png",
|
||||||
Cfg_PATH_SWAD_PUBLIC,Folder,
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100),
|
(unsigned) (Cod % 100),
|
||||||
(unsigned) Cod,
|
(unsigned) Cod,
|
||||||
(unsigned) Cod);
|
(unsigned) Cod);
|
||||||
if (!Fil_CheckIfPathExists (PathLogo))
|
|
||||||
FunctionToDrawContextualIcons = NULL;
|
|
||||||
|
|
||||||
/***** Begin box *****/
|
/***** Begin box *****/
|
||||||
Box_BoxBegin (NULL,Txt_Logo,
|
Box_BoxBegin (NULL,Txt_Logo,
|
||||||
FunctionToDrawContextualIcons,NULL,
|
Fil_CheckIfPathExists (PathLogo) ? FunctionToDrawContextualIcons[Level] :
|
||||||
|
NULL,NULL,
|
||||||
NULL,Box_NOT_CLOSABLE);
|
NULL,Box_NOT_CLOSABLE);
|
||||||
|
|
||||||
/***** Begin form to upload logo *****/
|
/***** Begin form to upload logo *****/
|
||||||
Frm_BeginForm (ActionRec);
|
Frm_BeginForm (ActionRec[Level]);
|
||||||
|
|
||||||
/***** Write help message *****/
|
/***** Write help message *****/
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_You_can_send_a_file_with_an_image_in_PNG_format_transparent_background_and_size_X_Y,
|
Ale_ShowAlert (Ale_INFO,Txt_You_can_send_a_file_with_an_image_in_PNG_format_transparent_background_and_size_X_Y,
|
||||||
|
@ -314,8 +308,7 @@ static void Lgo_PutIconToRemoveLogo (Act_Action_t ActionRem)
|
||||||
void Lgo_ReceiveLogo (HieLvl_Level_t Level)
|
void Lgo_ReceiveLogo (HieLvl_Level_t Level)
|
||||||
{
|
{
|
||||||
extern const char *Txt_The_file_is_not_X;
|
extern const char *Txt_The_file_is_not_X;
|
||||||
long Cod;
|
long Cod = Gbl.Hierarchy.Node[Level].Cod;
|
||||||
const char *Folder;
|
|
||||||
char Path[PATH_MAX + 1];
|
char Path[PATH_MAX + 1];
|
||||||
struct Par_Param *Par;
|
struct Par_Param *Par;
|
||||||
char FileNameLogoSrc[PATH_MAX + 1];
|
char FileNameLogoSrc[PATH_MAX + 1];
|
||||||
|
@ -323,36 +316,21 @@ void Lgo_ReceiveLogo (HieLvl_Level_t Level)
|
||||||
char FileNameLogo[PATH_MAX + 1]; // Full name (including path and .png) of the destination file
|
char FileNameLogo[PATH_MAX + 1]; // Full name (including path and .png) of the destination file
|
||||||
bool WrongType = false;
|
bool WrongType = false;
|
||||||
|
|
||||||
/***** Set variables depending on scope *****/
|
|
||||||
switch (Level)
|
|
||||||
{
|
|
||||||
case HieLvl_INS:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_INS].Cod;
|
|
||||||
Folder = Cfg_FOLDER_INS;
|
|
||||||
break;
|
|
||||||
case HieLvl_CTR:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
|
|
||||||
Folder = Cfg_FOLDER_CTR;
|
|
||||||
break;
|
|
||||||
case HieLvl_DEG:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
|
|
||||||
Folder = Cfg_FOLDER_DEG;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return; // Nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Creates directories if not exist *****/
|
/***** Creates directories if not exist *****/
|
||||||
snprintf (Path,sizeof (Path),"%s/%s",Cfg_PATH_SWAD_PUBLIC,Folder);
|
snprintf (Path,sizeof (Path),"%s/%s",
|
||||||
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level]);
|
||||||
Fil_CreateDirIfNotExists (Path);
|
Fil_CreateDirIfNotExists (Path);
|
||||||
snprintf (Path,sizeof (Path),"%s/%s/%02u",Cfg_PATH_SWAD_PUBLIC,Folder,
|
snprintf (Path,sizeof (Path),"%s/%s/%02u",
|
||||||
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100));
|
(unsigned) (Cod % 100));
|
||||||
Fil_CreateDirIfNotExists (Path);
|
Fil_CreateDirIfNotExists (Path);
|
||||||
snprintf (Path,sizeof (Path),"%s/%s/%02u/%u",Cfg_PATH_SWAD_PUBLIC,Folder,
|
snprintf (Path,sizeof (Path),"%s/%s/%02u/%u",
|
||||||
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100),
|
(unsigned) (Cod % 100),
|
||||||
(unsigned) Cod);
|
(unsigned) Cod);
|
||||||
Fil_CreateDirIfNotExists (Path);
|
Fil_CreateDirIfNotExists (Path);
|
||||||
snprintf (Path,sizeof (Path),"%s/%s/%02u/%u/logo",Cfg_PATH_SWAD_PUBLIC,Folder,
|
snprintf (Path,sizeof (Path),"%s/%s/%02u/%u/logo",
|
||||||
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100),
|
(unsigned) (Cod % 100),
|
||||||
(unsigned) Cod);
|
(unsigned) Cod);
|
||||||
Fil_CreateDirIfNotExists (Path);
|
Fil_CreateDirIfNotExists (Path);
|
||||||
|
@ -375,7 +353,7 @@ void Lgo_ReceiveLogo (HieLvl_Level_t Level)
|
||||||
{
|
{
|
||||||
/* End the reception of logo in a temporary file */
|
/* End the reception of logo in a temporary file */
|
||||||
snprintf (FileNameLogo,sizeof (FileNameLogo),"%s/%s/%02u/%u/logo/%u.png",
|
snprintf (FileNameLogo,sizeof (FileNameLogo),"%s/%s/%02u/%u/logo/%u.png",
|
||||||
Cfg_PATH_SWAD_PUBLIC,Folder,
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100),
|
(unsigned) (Cod % 100),
|
||||||
(unsigned) Cod,
|
(unsigned) Cod,
|
||||||
(unsigned) Cod);
|
(unsigned) Cod);
|
||||||
|
@ -390,32 +368,12 @@ void Lgo_ReceiveLogo (HieLvl_Level_t Level)
|
||||||
|
|
||||||
void Lgo_RemoveLogo (HieLvl_Level_t Level)
|
void Lgo_RemoveLogo (HieLvl_Level_t Level)
|
||||||
{
|
{
|
||||||
long Cod;
|
long Cod = Gbl.Hierarchy.Node[Level].Cod;
|
||||||
const char *Folder;
|
|
||||||
char FileNameLogo[PATH_MAX + 1]; // Full name (including path and .png) of the destination file
|
char FileNameLogo[PATH_MAX + 1]; // Full name (including path and .png) of the destination file
|
||||||
|
|
||||||
/***** Set variables depending on scope *****/
|
|
||||||
switch (Level)
|
|
||||||
{
|
|
||||||
case HieLvl_INS:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_INS].Cod;
|
|
||||||
Folder = Cfg_FOLDER_INS;
|
|
||||||
break;
|
|
||||||
case HieLvl_CTR:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_CTR].Cod;
|
|
||||||
Folder = Cfg_FOLDER_CTR;
|
|
||||||
break;
|
|
||||||
case HieLvl_DEG:
|
|
||||||
Cod = Gbl.Hierarchy.Node[HieLvl_DEG].Cod;
|
|
||||||
Folder = Cfg_FOLDER_DEG;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return; // Nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Remove logo *****/
|
/***** Remove logo *****/
|
||||||
snprintf (FileNameLogo,sizeof (FileNameLogo),"%s/%s/%02u/%u/logo/%u.png",
|
snprintf (FileNameLogo,sizeof (FileNameLogo),"%s/%s/%02u/%u/logo/%u.png",
|
||||||
Cfg_PATH_SWAD_PUBLIC,Folder,
|
Cfg_PATH_SWAD_PUBLIC,Lgo_Folder[Level],
|
||||||
(unsigned) (Cod % 100),
|
(unsigned) (Cod % 100),
|
||||||
(unsigned) Cod,
|
(unsigned) Cod,
|
||||||
(unsigned) Cod);
|
(unsigned) Cod);
|
||||||
|
|
|
@ -696,7 +696,8 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Mch_Match
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
HTM_TxtF ("%s %s",Txt_The_whole_course,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
||||||
|
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
@ -1308,7 +1309,8 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
|
||||||
"MchCod",
|
"MchCod",
|
||||||
MchCod) ? "" :
|
MchCod) ? "" :
|
||||||
" checked=\"checked\"");
|
" checked=\"checked\"");
|
||||||
HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
HTM_TxtF ("%s %s",Txt_The_whole_course,
|
||||||
|
Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
||||||
HTM_LABEL_End ();
|
HTM_LABEL_End ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -527,7 +527,7 @@ static void Msg_WriteFormUsrsIDsOrNicksOtherRecipients (void)
|
||||||
extern const char *Txt_nicks_emails_or_IDs_separated_by_commas;
|
extern const char *Txt_nicks_emails_or_IDs_separated_by_commas;
|
||||||
char Nickname[Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1];
|
char Nickname[Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1];
|
||||||
unsigned ColSpan;
|
unsigned ColSpan;
|
||||||
bool StdsAndTchsWritten = Gbl.Hierarchy.Level == HieLvl_CRS && // Course selected
|
bool StdsAndTchsWritten = Gbl.Hierarchy.Level == HieLvl_CRS && // Course selected
|
||||||
(Gbl.Usrs.Me.IBelongToCurrentCrs || // I belong to it
|
(Gbl.Usrs.Me.IBelongToCurrentCrs || // I belong to it
|
||||||
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM);
|
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM);
|
||||||
|
|
||||||
|
|
|
@ -719,13 +719,6 @@ void Par_GetMainPars (void)
|
||||||
char Nick[Nck_MAX_BYTES_NICK_WITH_ARROBA + 1];
|
char Nick[Nck_MAX_BYTES_NICK_WITH_ARROBA + 1];
|
||||||
char LongStr[Cns_MAX_DECIMAL_DIGITS_LONG + 1];
|
char LongStr[Cns_MAX_DECIMAL_DIGITS_LONG + 1];
|
||||||
|
|
||||||
/***** Reset codes of country, institution, center, degree and course *****/
|
|
||||||
Gbl.Hierarchy.Node[HieLvl_CTY].Cod =
|
|
||||||
Gbl.Hierarchy.Node[HieLvl_INS].Cod =
|
|
||||||
Gbl.Hierarchy.Node[HieLvl_CTR].Cod =
|
|
||||||
Gbl.Hierarchy.Node[HieLvl_DEG].Cod =
|
|
||||||
Gbl.Hierarchy.Node[HieLvl_CRS].Cod = -1L;
|
|
||||||
|
|
||||||
// First of all, get action, and session identifier.
|
// First of all, get action, and session identifier.
|
||||||
// So, if other parameters have been stored in the database, there will be no problems to get them.
|
// So, if other parameters have been stored in the database, there will be no problems to get them.
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ static void Rep_WriteHeader (const struct Rep_Report *Report)
|
||||||
/***** Begin header *****/
|
/***** Begin header *****/
|
||||||
fprintf (Rep_File,"<header>"
|
fprintf (Rep_File,"<header>"
|
||||||
"<h1>");
|
"<h1>");
|
||||||
fprintf (Rep_File,Txt_Report_of_use_of_PLATFORM,Cfg_PLATFORM_SHORT_NAME);
|
fprintf (Rep_File,Txt_Report_of_use_of_PLATFORM,Cfg_PLATFORM_SHORT_NAME);
|
||||||
fprintf (Rep_File,"</h1>"
|
fprintf (Rep_File,"</h1>"
|
||||||
"<ul>");
|
"<ul>");
|
||||||
|
|
||||||
|
|
12
swad_scope.c
12
swad_scope.c
|
@ -64,15 +64,6 @@ void Sco_PutSelectorScope (const char *ParName,HTM_SubmitOnChange_t SubmitOnChan
|
||||||
[HieLvl_DEG] = &Txt_Degree,
|
[HieLvl_DEG] = &Txt_Degree,
|
||||||
[HieLvl_CRS] = &Txt_Course,
|
[HieLvl_CRS] = &Txt_Course,
|
||||||
};
|
};
|
||||||
const char *TxtName[HieLvl_NUM_LEVELS] =
|
|
||||||
{
|
|
||||||
[HieLvl_SYS] = Cfg_PLATFORM_SHORT_NAME,
|
|
||||||
[HieLvl_CTY] = Gbl.Hierarchy.Node[HieLvl_CTY].FullName,
|
|
||||||
[HieLvl_INS] = Gbl.Hierarchy.Node[HieLvl_INS].ShrtName,
|
|
||||||
[HieLvl_CTR] = Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName,
|
|
||||||
[HieLvl_DEG] = Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName,
|
|
||||||
[HieLvl_CRS] = Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName,
|
|
||||||
};
|
|
||||||
|
|
||||||
HTM_SELECT_Begin (SubmitOnChange,NULL,
|
HTM_SELECT_Begin (SubmitOnChange,NULL,
|
||||||
"id=\"%s\" name=\"%s\" class=\"INPUT_%s\"",
|
"id=\"%s\" name=\"%s\" class=\"INPUT_%s\"",
|
||||||
|
@ -123,7 +114,8 @@ void Sco_PutSelectorScope (const char *ParName,HTM_SubmitOnChange_t SubmitOnChan
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s: %s",
|
"%s: %s",
|
||||||
*TxtScope[Level],TxtName[Level]);
|
*TxtScope[Level],
|
||||||
|
Gbl.Hierarchy.Node[Level].ShrtName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -397,6 +397,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
|
||||||
extern const char *Txt_Number_of_questions;
|
extern const char *Txt_Number_of_questions;
|
||||||
extern const char *Txt_Number_of_users;
|
extern const char *Txt_Number_of_users;
|
||||||
extern const char *Txt_Scope;
|
extern const char *Txt_Scope;
|
||||||
|
extern const char *Txt_System;
|
||||||
extern const char *Txt_Country;
|
extern const char *Txt_Country;
|
||||||
extern const char *Txt_Institution;
|
extern const char *Txt_Institution;
|
||||||
extern const char *Txt_Center;
|
extern const char *Txt_Center;
|
||||||
|
@ -410,6 +411,15 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
|
||||||
extern const char *HidVis_TitleClass[HidVis_NUM_HIDDEN_VISIBLE];
|
extern const char *HidVis_TitleClass[HidVis_NUM_HIDDEN_VISIBLE];
|
||||||
extern const char *HidVis_GroupClass[HidVis_NUM_HIDDEN_VISIBLE];
|
extern const char *HidVis_GroupClass[HidVis_NUM_HIDDEN_VISIBLE];
|
||||||
extern const char *HidVis_DataClass[HidVis_NUM_HIDDEN_VISIBLE];
|
extern const char *HidVis_DataClass[HidVis_NUM_HIDDEN_VISIBLE];
|
||||||
|
static const char **TxtScope[HieLvl_NUM_LEVELS] =
|
||||||
|
{
|
||||||
|
[HieLvl_SYS] = &Txt_System,
|
||||||
|
[HieLvl_CTY] = &Txt_Country,
|
||||||
|
[HieLvl_INS] = &Txt_Institution,
|
||||||
|
[HieLvl_CTR] = &Txt_Center,
|
||||||
|
[HieLvl_DEG] = &Txt_Degree,
|
||||||
|
[HieLvl_CRS] = &Txt_Course,
|
||||||
|
};
|
||||||
char *Anchor = NULL;
|
char *Anchor = NULL;
|
||||||
static unsigned UniqueId = 0;
|
static unsigned UniqueId = 0;
|
||||||
char *Id;
|
char *Id;
|
||||||
|
@ -418,6 +428,8 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
|
||||||
|
|
||||||
/***** Get data of this survey *****/
|
/***** Get data of this survey *****/
|
||||||
Svy_GetSurveyDataByCod (&Surveys->Svy);
|
Svy_GetSurveyDataByCod (&Surveys->Svy);
|
||||||
|
if (Surveys->Svy.Level == HieLvl_UNK)
|
||||||
|
Err_WrongHierarchyLevelExit ();
|
||||||
|
|
||||||
/***** Begin box *****/
|
/***** Begin box *****/
|
||||||
if (ShowOnlyThisSvyComplete)
|
if (ShowOnlyThisSvyComplete)
|
||||||
|
@ -596,30 +608,8 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
|
||||||
HidVis_GroupClass[Surveys->Svy.Status.HiddenOrVisible],
|
HidVis_GroupClass[Surveys->Svy.Status.HiddenOrVisible],
|
||||||
The_GetSuffix ());
|
The_GetSuffix ());
|
||||||
HTM_TxtColonNBSP (Txt_Scope);
|
HTM_TxtColonNBSP (Txt_Scope);
|
||||||
switch (Surveys->Svy.Level)
|
HTM_TxtF ("%s %s",*TxtScope[Surveys->Svy.Level],
|
||||||
{
|
Gbl.Hierarchy.Node[Surveys->Svy.Level].ShrtName);
|
||||||
case HieLvl_UNK: // Unknown
|
|
||||||
Err_WrongHierarchyLevelExit ();
|
|
||||||
break;
|
|
||||||
case HieLvl_SYS: // System
|
|
||||||
HTM_Txt (Cfg_PLATFORM_SHORT_NAME);
|
|
||||||
break;
|
|
||||||
case HieLvl_CTY: // Country
|
|
||||||
HTM_TxtF ("%s %s",Txt_Country,Gbl.Hierarchy.Node[HieLvl_CTY].FullName);
|
|
||||||
break;
|
|
||||||
case HieLvl_INS: // Institution
|
|
||||||
HTM_TxtF ("%s %s",Txt_Institution,Gbl.Hierarchy.Node[HieLvl_INS].ShrtName);
|
|
||||||
break;
|
|
||||||
case HieLvl_CTR: // Center
|
|
||||||
HTM_TxtF ("%s %s",Txt_Center,Gbl.Hierarchy.Node[HieLvl_CTR].ShrtName);
|
|
||||||
break;
|
|
||||||
case HieLvl_DEG: // Degree
|
|
||||||
HTM_TxtF ("%s %s",Txt_Degree,Gbl.Hierarchy.Node[HieLvl_DEG].ShrtName);
|
|
||||||
break;
|
|
||||||
case HieLvl_CRS: // Course
|
|
||||||
HTM_TxtF ("%s %s",Txt_Course,Gbl.Hierarchy.Node[HieLvl_CRS].ShrtName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
/* Users' roles who can answer the survey */
|
/* Users' roles who can answer the survey */
|
||||||
|
|
|
@ -257,18 +257,18 @@ static void SysCfg_Map (void)
|
||||||
|
|
||||||
static void SysCfg_Platform (void)
|
static void SysCfg_Platform (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Platform;
|
extern const char *Txt_System;
|
||||||
|
|
||||||
/***** Institution *****/
|
/***** Institution *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
/* Label */
|
/* Label */
|
||||||
Frm_LabelColumn ("RT",NULL,Txt_Platform);
|
Frm_LabelColumn ("RT",NULL,Txt_System);
|
||||||
|
|
||||||
/* Data */
|
/* Data */
|
||||||
HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"",The_GetSuffix ());
|
HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"",The_GetSuffix ());
|
||||||
HTM_Txt (Cfg_PLATFORM_SHORT_NAME);
|
HTM_Txt (Cfg_PLATFORM_SHORT_NAME);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
}
|
}
|
||||||
|
|
48
swad_text.c
48
swad_text.c
|
@ -29735,29 +29735,6 @@ const char *Txt_PLACES_ORDER[Plc_NUM_ORDERS] =
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *Txt_Platform =
|
|
||||||
#if L==1 // ca
|
|
||||||
"Plataforma";
|
|
||||||
#elif L==2 // de
|
|
||||||
"Plattform";
|
|
||||||
#elif L==3 // en
|
|
||||||
"Platform";
|
|
||||||
#elif L==4 // es
|
|
||||||
"Plataforma";
|
|
||||||
#elif L==5 // fr
|
|
||||||
"Plate-forme";
|
|
||||||
#elif L==6 // gn
|
|
||||||
"Plataforma"; // Okoteve traducción
|
|
||||||
#elif L==7 // it
|
|
||||||
"Piattaforma";
|
|
||||||
#elif L==8 // pl
|
|
||||||
"Platforma";
|
|
||||||
#elif L==9 // pt
|
|
||||||
"Plataforma";
|
|
||||||
#elif L==10 // tr
|
|
||||||
"Platformu";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *Txt_Play = // To play a game match
|
const char *Txt_Play = // To play a game match
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Jugar";
|
"Jugar";
|
||||||
|
@ -45722,7 +45699,30 @@ const char *Txt_System =
|
||||||
#elif L==10 // tr
|
#elif L==10 // tr
|
||||||
"Platformu";
|
"Platformu";
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
const char *Txt_Platform =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Plataforma";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Plattform";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Platform";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Plataforma";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Plate-forme";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Plataforma"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Piattaforma";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Platforma";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Plataforma";
|
||||||
|
#elif L==10 // tr
|
||||||
|
"Platformu";
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
const char *Txt_TABLE_Footer =
|
const char *Txt_TABLE_Footer =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Peu";
|
"Peu";
|
||||||
|
|
Loading…
Reference in New Issue
Block a user