From a436a97d820d789073cb1dc4239314967eec2237 Mon Sep 17 00:00:00 2001 From: acanas Date: Thu, 11 Feb 2021 23:27:48 +0100 Subject: [PATCH] Version20.30 --- swad_API.c | 41 +++++---- swad_changelog.h | 2 +- swad_course.c | 78 ++++++++--------- swad_exam_announcement.c | 21 +++-- swad_file_browser.c | 178 +++++++++++++++++++-------------------- swad_forum.c | 54 ++++++------ swad_hierarchy.c | 28 +++--- swad_institution.c | 4 +- swad_layout.c | 36 ++++---- swad_log.c | 40 +++++---- swad_notification.c | 75 ++++++++--------- swad_system_config.c | 2 +- swad_user.c | 4 +- 13 files changed, 268 insertions(+), 295 deletions(-) diff --git a/swad_API.c b/swad_API.c index 28bd99bc..d40404eb 100644 --- a/swad_API.c +++ b/swad_API.c @@ -3336,10 +3336,7 @@ int swad__getNotifications (struct soap *soap, Ntf_NotifyEvent_t NotifyEvent; long EventTime; char PhotoURL[Cns_MAX_BYTES_WWW + 1]; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; long Cod; struct For_Forum ForumSelected; char ForumName[For_MAX_BYTES_FORUM_NAME + 1]; @@ -3424,13 +3421,13 @@ int swad__getNotifications (struct soap *soap, getNotificationsOut->notificationsArray.__ptr[NumNotif].eventTime = EventTime; /* Get course (row[7]) */ - Crs.CrsCod = Str_ConvertStrCodToLongCod (row[7]); - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Str_ConvertStrCodToLongCod (row[7]); + Crs_GetDataOfCourseByCod (&Hie.Crs); /* Get user's code of the user who caused the event (row[3]) */ Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[3]); - if (API_GetSomeUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Crs.CrsCod)) // Get some user's data from database + if (API_GetSomeUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Hie.Crs.CrsCod)) // Get some user's data from database { getNotificationsOut->notificationsArray.__ptr[NumNotif].userNickname = (char *) soap_malloc (soap,Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA + 1); @@ -3473,16 +3470,16 @@ int swad__getNotifications (struct soap *soap, } /* Get institution (row[4]) */ - Ins.InsCod = Str_ConvertStrCodToLongCod (row[4]); - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[4]); + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /* Get centre (row[5]) */ - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[5]); - Ctr_GetDataOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[5]); + Ctr_GetDataOfCentreByCod (&Hie.Ctr); /* Get degree (row[6]) */ - Deg.DegCod = Str_ConvertStrCodToLongCod (row[6]); - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[6]); + Deg_GetDataOfDegreeByCod (&Hie.Deg); /* Get message/post/... code (row[8]) */ Cod = Str_ConvertStrCodToLongCod (row[8]); @@ -3501,18 +3498,18 @@ int swad__getNotifications (struct soap *soap, sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", Txt_Forum,ForumName); } - else if (Crs.CrsCod > 0) + else if (Hie.Crs.CrsCod > 0) sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", - Txt_Course,Crs.ShrtName); - else if (Deg.DegCod > 0) + Txt_Course,Hie.Crs.ShrtName); + else if (Hie.Deg.DegCod > 0) sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", - Txt_Degree,Deg.ShrtName); - else if (Ctr.CtrCod > 0) + Txt_Degree,Hie.Deg.ShrtName); + else if (Hie.Ctr.CtrCod > 0) sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", - Txt_Centre,Ctr.ShrtName); - else if (Ins.InsCod > 0) + Txt_Centre,Hie.Ctr.ShrtName); + else if (Hie.Ins.InsCod > 0) sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", - Txt_Institution,Ins.ShrtName); + Txt_Institution,Hie.Ins.ShrtName); else Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"-", Ntf_MAX_BYTES_NOTIFY_LOCATION); @@ -3525,7 +3522,7 @@ int swad__getNotifications (struct soap *soap, /* Get summary and content */ ContentStr = NULL; Ntf_GetNotifSummaryAndContent (SummaryStr,&ContentStr,NotifyEvent, - Cod,Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod, + Cod,Hie.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod, true); Length = strlen (SummaryStr); diff --git a/swad_changelog.h b/swad_changelog.h index 219666c9..7d409d3e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -601,7 +601,7 @@ TODO: DNI de un estudiante sale err TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede. TODO: Salvador Romero Cortés: @acanas opción para editar posts - Version 20.30: Feb 11, 2021 Code refactoring in hierarchy. (? lines) + Version 20.30: Feb 11, 2021 Code refactoring in hierarchy. (305853 lines) Version 20.29.3: Feb 11, 2021 Code refactoring in timeline. (305826 lines) Version 20.29.2: Feb 11, 2021 Code refactoring in timeline. (305806 lines) Version 20.29.1: Feb 11, 2021 Code refactoring in timeline. (305780 lines) diff --git a/swad_course.c b/swad_course.c index 55353efa..262ce12c 100644 --- a/swad_course.c +++ b/swad_course.c @@ -155,11 +155,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) extern const char *The_ClassFormLinkInBoxBold[The_NUM_THEMES]; extern const char *Txt_My_courses; extern const char *Txt_System; - struct Cty_Countr Cty; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; bool IsLastItemInLevel[1 + 5]; bool Highlight; // Highlight because degree, course, etc. is selected MYSQL_RES *mysql_resCty; @@ -218,32 +214,32 @@ static void Crs_WriteListMyCoursesToSelectOne (void) row = mysql_fetch_row (mysql_resCty); /***** Get data of this institution *****/ - Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Cty_GetDataOfCountryByCod (&Cty)) + Hie.Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]); + if (!Cty_GetDataOfCountryByCod (&Hie.Cty)) Lay_ShowErrorAndExit ("Country not found."); /***** Write link to country *****/ Highlight = (Gbl.Hierarchy.Ins.InsCod <= 0 && - Gbl.Hierarchy.Cty.CtyCod == Cty.CtyCod); + Gbl.Hierarchy.Cty.CtyCod == Hie.Cty.CtyCod); HTM_LI_Begin ("class=\"%s\"",Highlight ? ClassHighlight : ClassNormal); IsLastItemInLevel[1] = (NumCty == NumCtys - 1); Lay_IndentDependingOnLevel (1,IsLastItemInLevel); Frm_StartForm (ActMyCrs); - Cty_PutParamCtyCod (Cty.CtyCod); + Cty_PutParamCtyCod (Hie.Cty.CtyCod); HTM_BUTTON_SUBMIT_Begin (Act_GetActionText (ActSeeCtyInf), Highlight ? ClassHighlight : ClassNormal, NULL); - Cty_DrawCountryMap (&Cty,"ICO16x16"); - HTM_TxtF (" %s",Cty.Name[Gbl.Prefs.Language]); + Cty_DrawCountryMap (&Hie.Cty,"ICO16x16"); + HTM_TxtF (" %s",Hie.Cty.Name[Gbl.Prefs.Language]); HTM_BUTTON_End (); Frm_EndForm (); HTM_LI_End (); /***** Get my institutions in this country *****/ NumInss = (unsigned) Usr_GetInssFromUsr (Gbl.Usrs.Me.UsrDat.UsrCod, - Cty.CtyCod,&mysql_resIns); + Hie.Cty.CtyCod,&mysql_resIns); for (NumIns = 0; NumIns < NumInss; NumIns++) @@ -252,32 +248,32 @@ static void Crs_WriteListMyCoursesToSelectOne (void) row = mysql_fetch_row (mysql_resIns); /***** Get data of this institution *****/ - Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ins_GetDataOfInstitutionByCod (&Ins)) + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]); + if (!Ins_GetDataOfInstitutionByCod (&Hie.Ins)) Lay_ShowErrorAndExit ("Institution not found."); /***** Write link to institution *****/ Highlight = (Gbl.Hierarchy.Ctr.CtrCod <= 0 && - Gbl.Hierarchy.Ins.InsCod == Ins.InsCod); + Gbl.Hierarchy.Ins.InsCod == Hie.Ins.InsCod); HTM_LI_Begin ("class=\"%s\"",Highlight ? ClassHighlight : ClassNormal); IsLastItemInLevel[2] = (NumIns == NumInss - 1); Lay_IndentDependingOnLevel (2,IsLastItemInLevel); Frm_StartForm (ActMyCrs); - Ins_PutParamInsCod (Ins.InsCod); + Ins_PutParamInsCod (Hie.Ins.InsCod); HTM_BUTTON_SUBMIT_Begin (Act_GetActionText (ActSeeInsInf), Highlight ? ClassHighlight : ClassNormal, NULL); - Lgo_DrawLogo (Hie_Lvl_INS,Ins.InsCod,Ins.ShrtName,16,NULL,true); - HTM_TxtF (" %s",Ins.ShrtName); + Lgo_DrawLogo (Hie_Lvl_INS,Hie.Ins.InsCod,Hie.Ins.ShrtName,16,NULL,true); + HTM_TxtF (" %s",Hie.Ins.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); HTM_LI_End (); /***** Get my centres in this institution *****/ NumCtrs = (unsigned) Usr_GetCtrsFromUsr (Gbl.Usrs.Me.UsrDat.UsrCod, - Ins.InsCod,&mysql_resCtr); + Hie.Ins.InsCod,&mysql_resCtr); for (NumCtr = 0; NumCtr < NumCtrs; NumCtr++) @@ -286,32 +282,32 @@ static void Crs_WriteListMyCoursesToSelectOne (void) row = mysql_fetch_row (mysql_resCtr); /***** Get data of this centre *****/ - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ctr_GetDataOfCentreByCod (&Ctr)) + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[0]); + if (!Ctr_GetDataOfCentreByCod (&Hie.Ctr)) Lay_ShowErrorAndExit ("Centre not found."); /***** Write link to centre *****/ Highlight = (Gbl.Hierarchy.Level == Hie_Lvl_CTR && - Gbl.Hierarchy.Ctr.CtrCod == Ctr.CtrCod); + Gbl.Hierarchy.Ctr.CtrCod == Hie.Ctr.CtrCod); HTM_LI_Begin ("class=\"%s\"",Highlight ? ClassHighlight : ClassNormal); IsLastItemInLevel[3] = (NumCtr == NumCtrs - 1); Lay_IndentDependingOnLevel (3,IsLastItemInLevel); Frm_StartForm (ActMyCrs); - Ctr_PutParamCtrCod (Ctr.CtrCod); + Ctr_PutParamCtrCod (Hie.Ctr.CtrCod); HTM_BUTTON_SUBMIT_Begin (Act_GetActionText (ActSeeCtrInf), Highlight ? ClassHighlight : ClassNormal, NULL); - Lgo_DrawLogo (Hie_Lvl_CTR,Ctr.CtrCod,Ctr.ShrtName,16,NULL,true); - HTM_TxtF (" %s",Ctr.ShrtName); + Lgo_DrawLogo (Hie_Lvl_CTR,Hie.Ctr.CtrCod,Hie.Ctr.ShrtName,16,NULL,true); + HTM_TxtF (" %s",Hie.Ctr.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); HTM_LI_End (); /***** Get my degrees in this centre *****/ NumDegs = (unsigned) Usr_GetDegsFromUsr (Gbl.Usrs.Me.UsrDat.UsrCod, - Ctr.CtrCod,&mysql_resDeg); + Hie.Ctr.CtrCod,&mysql_resDeg); for (NumDeg = 0; NumDeg < NumDegs; NumDeg++) @@ -320,32 +316,32 @@ static void Crs_WriteListMyCoursesToSelectOne (void) row = mysql_fetch_row (mysql_resDeg); /***** Get data of this degree *****/ - Deg.DegCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Deg_GetDataOfDegreeByCod (&Deg)) + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[0]); + if (!Deg_GetDataOfDegreeByCod (&Hie.Deg)) Lay_ShowErrorAndExit ("Degree not found."); /***** Write link to degree *****/ Highlight = (Gbl.Hierarchy.Level == Hie_Lvl_DEG && - Gbl.Hierarchy.Deg.DegCod == Deg.DegCod); + Gbl.Hierarchy.Deg.DegCod == Hie.Deg.DegCod); HTM_LI_Begin ("class=\"%s\"",Highlight ? ClassHighlight : ClassNormal); IsLastItemInLevel[4] = (NumDeg == NumDegs - 1); Lay_IndentDependingOnLevel (4,IsLastItemInLevel); Frm_StartForm (ActMyCrs); - Deg_PutParamDegCod (Deg.DegCod); + Deg_PutParamDegCod (Hie.Deg.DegCod); HTM_BUTTON_SUBMIT_Begin (Act_GetActionText (ActSeeDegInf), Highlight ? ClassHighlight : ClassNormal, NULL); - Lgo_DrawLogo (Hie_Lvl_DEG,Deg.DegCod,Deg.ShrtName,16,NULL,true); - HTM_TxtF (" %s",Deg.ShrtName); + Lgo_DrawLogo (Hie_Lvl_DEG,Hie.Deg.DegCod,Hie.Deg.ShrtName,16,NULL,true); + HTM_TxtF (" %s",Hie.Deg.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); HTM_LI_End (); /***** Get my courses in this degree *****/ NumCrss = (unsigned) Usr_GetCrssFromUsr (Gbl.Usrs.Me.UsrDat.UsrCod, - Deg.DegCod,&mysql_resCrs); + Hie.Deg.DegCod,&mysql_resCrs); for (NumCrs = 0; NumCrs < NumCrss; NumCrs++) @@ -354,31 +350,31 @@ static void Crs_WriteListMyCoursesToSelectOne (void) row = mysql_fetch_row (mysql_resCrs); /***** Get data of this course *****/ - Crs.CrsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Str_ConvertStrCodToLongCod (row[0]); + if (!Crs_GetDataOfCourseByCod (&Hie.Crs)) Lay_ShowErrorAndExit ("Course not found."); /***** Write link to course *****/ Highlight = (Gbl.Hierarchy.Level == Hie_Lvl_CRS && - Gbl.Hierarchy.Crs.CrsCod == Crs.CrsCod); + Gbl.Hierarchy.Crs.CrsCod == Hie.Crs.CrsCod); HTM_LI_Begin ("class=\"%s\"",Highlight ? ClassHighlight : ClassNormal); IsLastItemInLevel[5] = (NumCrs == NumCrss - 1); Lay_IndentDependingOnLevel (5,IsLastItemInLevel); Frm_StartForm (ActMyCrs); - Crs_PutParamCrsCod (Crs.CrsCod); - HTM_BUTTON_SUBMIT_Begin (Hie_BuildGoToMsg (Crs.ShrtName), + Crs_PutParamCrsCod (Hie.Crs.CrsCod); + HTM_BUTTON_SUBMIT_Begin (Hie_BuildGoToMsg (Hie.Crs.ShrtName), Highlight ? ClassHighlight : ClassNormal, NULL); Hie_FreeGoToMsg (); - Ico_PutIcon ("chalkboard-teacher.svg",Crs.FullName,"ICO16x16"); - HTM_TxtF (" %s",Crs.ShrtName); + Ico_PutIcon ("chalkboard-teacher.svg",Hie.Crs.FullName,"ICO16x16"); + HTM_TxtF (" %s",Hie.Crs.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); /***** Put link to register students *****/ - Enr_PutButtonInlineToRegisterStds (Crs.CrsCod); + Enr_PutButtonInlineToRegisterStds (Hie.Crs.CrsCod); HTM_LI_End (); } diff --git a/swad_exam_announcement.c b/swad_exam_announcement.c index 872aa27e..fb97e1aa 100644 --- a/swad_exam_announcement.c +++ b/swad_exam_announcement.c @@ -37,6 +37,7 @@ #include "swad_exam_announcement.h" #include "swad_form.h" #include "swad_global.h" +#include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_logo.h" #include "swad_notification.h" @@ -1762,22 +1763,20 @@ static void ExaAnn_GetNotifContentExamAnn (const struct ExaAnn_ExamAnnouncements extern const char *Txt_EXAM_ANNOUNCEMENT_Material_allowed; extern const char *Txt_EXAM_ANNOUNCEMENT_Other_information; extern const char *Txt_hours_ABBREVIATION; - struct Ins_Instit Ins; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; char StrExamDate[Cns_MAX_BYTES_DATE + 1]; /***** Get data of course *****/ - Crs.CrsCod = ExamAnns->ExamAnn.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = ExamAnns->ExamAnn.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); /***** Get data of degree *****/ - Deg.DegCod = Crs.DegCod; - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Hie.Crs.DegCod; + Deg_GetDataOfDegreeByCod (&Hie.Deg); /***** Get data of institution *****/ - Ins.InsCod = Deg_GetInsCodOfDegreeByCod (Deg.DegCod); - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Deg_GetInsCodOfDegreeByCod (Hie.Deg.DegCod); + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /***** Convert struct date to a date string *****/ Dat_ConvDateToDateStr (&ExamAnns->ExamAnn.ExamDate,StrExamDate); @@ -1798,8 +1797,8 @@ static void ExaAnn_GetNotifContentExamAnn (const struct ExaAnn_ExamAnnouncements "%s: %s
" "%s: %s
" "%s: %s", - Txt_Institution,Ins.FullName, - Txt_Degree,Deg.FullName, + Txt_Institution,Hie.Ins.FullName, + Txt_Degree,Hie.Deg.FullName, Txt_EXAM_ANNOUNCEMENT_Course,ExamAnns->ExamAnn.CrsFullName, Txt_EXAM_ANNOUNCEMENT_Year_or_semester,Txt_YEAR_OF_DEGREE[ExamAnns->ExamAnn.Year], Txt_EXAM_ANNOUNCEMENT_Session,ExamAnns->ExamAnn.Session, diff --git a/swad_file_browser.c b/swad_file_browser.c index 4773b79f..51fd83dd 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -6848,10 +6848,7 @@ static void Brw_WriteCurrentClipboard (void) extern const char *Txt_folder; extern const char *Txt_link; extern const char *Txt_all_files_inside_the_root_folder; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; struct GroupData GrpDat; struct Prj_Project Prj; struct UsrData UsrDat; @@ -6873,151 +6870,151 @@ static void Brw_WriteCurrentClipboard (void) switch (Gbl.FileBrowser.Clipboard.FileBrowser) { case Brw_ADMI_DOC_INS: - Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; + Ins_GetDataOfInstitutionByCod (&Hie.Ins); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_documents_management_area, - Txt_institution,Ins.ShrtName); + Txt_institution,Hie.Ins.ShrtName); break; case Brw_ADMI_SHR_INS: - Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; + Ins_GetDataOfInstitutionByCod (&Hie.Ins); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_shared_files_area, - Txt_institution,Ins.ShrtName); + Txt_institution,Hie.Ins.ShrtName); break; case Brw_ADMI_DOC_CTR: - Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; - Ctr_GetDataOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; + Ctr_GetDataOfCentreByCod (&Hie.Ctr); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_documents_management_area, - Txt_centre,Ctr.ShrtName); + Txt_centre,Hie.Ctr.ShrtName); break; case Brw_ADMI_SHR_CTR: - Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; - Ctr_GetDataOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; + Ctr_GetDataOfCentreByCod (&Hie.Ctr); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_shared_files_area, - Txt_centre,Ctr.ShrtName); + Txt_centre,Hie.Ctr.ShrtName); break; case Brw_ADMI_DOC_DEG: - Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; + Deg_GetDataOfDegreeByCod (&Hie.Deg); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_documents_management_area, - Txt_degree,Deg.ShrtName); + Txt_degree,Hie.Deg.ShrtName); break; case Brw_ADMI_SHR_DEG: - Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; + Deg_GetDataOfDegreeByCod (&Hie.Deg); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_shared_files_area, - Txt_degree,Deg.ShrtName); + Txt_degree,Hie.Deg.ShrtName); break; case Brw_ADMI_DOC_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_documents_management_area, - Txt_course,Crs.ShrtName); + Txt_course,Hie.Crs.ShrtName); break; case Brw_ADMI_DOC_GRP: GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.Cod; Grp_GetDataOfGroupByCod (&GrpDat); - Crs.CrsCod = GrpDat.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = GrpDat.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s %s", Txt_documents_management_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_group,GrpDat.GrpTypName,GrpDat.GrpName); break; case Brw_ADMI_TCH_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_teachers_files_area, - Txt_course,Crs.ShrtName); + Txt_course,Hie.Crs.ShrtName); break; case Brw_ADMI_TCH_GRP: GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.Cod; Grp_GetDataOfGroupByCod (&GrpDat); - Crs.CrsCod = GrpDat.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = GrpDat.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s %s", Txt_teachers_files_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_group,GrpDat.GrpTypName,GrpDat.GrpName); break; case Brw_ADMI_SHR_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_shared_files_area, - Txt_course,Crs.ShrtName); + Txt_course,Hie.Crs.ShrtName); break; case Brw_ADMI_SHR_GRP: GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.Cod; Grp_GetDataOfGroupByCod (&GrpDat); - Crs.CrsCod = GrpDat.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = GrpDat.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s %s", Txt_shared_files_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_group,GrpDat.GrpTypName,GrpDat.GrpName); break; case Brw_ADMI_ASG_USR: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s", Txt_assignments_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_user[Gbl.Usrs.Me.UsrDat.Sex],Gbl.Usrs.Me.UsrDat.FullName); break; case Brw_ADMI_WRK_USR: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s", Txt_works_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_user[Gbl.Usrs.Me.UsrDat.Sex],Gbl.Usrs.Me.UsrDat.FullName); break; case Brw_ADMI_ASG_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); Usr_UsrDataConstructor (&UsrDat); UsrDat.UsrCod = Gbl.FileBrowser.Clipboard.WorksUsrCod; Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s", Txt_assignments_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_user[UsrDat.Sex],UsrDat.FullName); Usr_UsrDataDestructor (&UsrDat); break; case Brw_ADMI_WRK_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); Usr_UsrDataConstructor (&UsrDat); UsrDat.UsrCod = Gbl.FileBrowser.Clipboard.WorksUsrCod; Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s", Txt_works_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_user[UsrDat.Sex],UsrDat.FullName); Usr_UsrDataDestructor (&UsrDat); break; @@ -7026,33 +7023,33 @@ static void Brw_WriteCurrentClipboard (void) Prj_AllocMemProject (&Prj); Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod; Prj_GetDataOfProjectByCod (&Prj); - Crs.CrsCod = Prj.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Prj.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s", Gbl.FileBrowser.Clipboard.FileBrowser == Brw_ADMI_DOC_PRJ ? Txt_project_documents : Txt_project_assessment, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_project,Prj.Title); Prj_FreeMemProject (&Prj); break; case Brw_ADMI_MRK_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_marks_management_area, - Txt_course,Crs.ShrtName); + Txt_course,Hie.Crs.ShrtName); break; case Brw_ADMI_MRK_GRP: GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.Cod; Grp_GetDataOfGroupByCod (&GrpDat); - Crs.CrsCod = GrpDat.CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = GrpDat.CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s, %s %s %s", Txt_marks_management_area, - Txt_course,Crs.ShrtName, + Txt_course,Hie.Crs.ShrtName, Txt_group,GrpDat.GrpTypName,GrpDat.GrpName); break; case Brw_ADMI_BRF_USR: @@ -7864,10 +7861,7 @@ static void Brw_PasteClipboard (void) extern const char *Txt_Links_copied; extern const char *Txt_Folders_copied; extern const char *Txt_You_can_not_paste_file_or_folder_here; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; struct GroupData GrpDat; struct UsrData UsrDat; long PrjCod; @@ -7888,39 +7882,39 @@ static void Brw_PasteClipboard (void) { case Brw_ADMI_DOC_INS: case Brw_ADMI_SHR_INS: - Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; - if (Ins_GetDataOfInstitutionByCod (&Ins)) + Hie.Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; + if (Ins_GetDataOfInstitutionByCod (&Hie.Ins)) snprintf (PathOrg,sizeof (PathOrg), "%s/%02u/%u/%s", Cfg_PATH_INS_PRIVATE, - (unsigned) (Ins.InsCod % 100), - (unsigned) Ins.InsCod, + (unsigned) (Hie.Ins.InsCod % 100), + (unsigned) Hie.Ins.InsCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); else Lay_ShowErrorAndExit ("The copy source does not exist."); break; case Brw_ADMI_DOC_CTR: case Brw_ADMI_SHR_CTR: - Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; - if (Ctr_GetDataOfCentreByCod (&Ctr)) + Hie.Ctr.CtrCod = Gbl.FileBrowser.Clipboard.Cod; + if (Ctr_GetDataOfCentreByCod (&Hie.Ctr)) snprintf (PathOrg,sizeof (PathOrg), "%s/%02u/%u/%s", Cfg_PATH_CTR_PRIVATE, - (unsigned) (Ctr.CtrCod % 100), - (unsigned) Ctr.CtrCod, + (unsigned) (Hie.Ctr.CtrCod % 100), + (unsigned) Hie.Ctr.CtrCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); else Lay_ShowErrorAndExit ("The copy source does not exist."); break; case Brw_ADMI_DOC_DEG: case Brw_ADMI_SHR_DEG: - Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; - if (Deg_GetDataOfDegreeByCod (&Deg)) + Hie.Deg.DegCod = Gbl.FileBrowser.Clipboard.Cod; + if (Deg_GetDataOfDegreeByCod (&Hie.Deg)) snprintf (PathOrg,sizeof (PathOrg), "%s/%02u/%u/%s", Cfg_PATH_DEG_PRIVATE, - (unsigned) (Deg.DegCod % 100), - (unsigned) Deg.DegCod, + (unsigned) (Hie.Deg.DegCod % 100), + (unsigned) Hie.Deg.DegCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); else Lay_ShowErrorAndExit ("The copy source does not exist."); @@ -7929,11 +7923,11 @@ static void Brw_PasteClipboard (void) case Brw_ADMI_TCH_CRS: case Brw_ADMI_SHR_CRS: case Brw_ADMI_MRK_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - if (Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + if (Crs_GetDataOfCourseByCod (&Hie.Crs)) snprintf (PathOrg,sizeof (PathOrg), "%s/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Crs.CrsCod, + Cfg_PATH_CRS_PRIVATE,Hie.Crs.CrsCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); else Lay_ShowErrorAndExit ("The copy source does not exist."); @@ -7944,11 +7938,11 @@ static void Brw_PasteClipboard (void) case Brw_ADMI_MRK_GRP: GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.Cod; Grp_GetDataOfGroupByCod (&GrpDat); - Crs.CrsCod = GrpDat.CrsCod; - if (Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = GrpDat.CrsCod; + if (Crs_GetDataOfCourseByCod (&Hie.Crs)) snprintf (PathOrg,sizeof (PathOrg), "%s/%ld/%s/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_GRP, + Cfg_PATH_CRS_PRIVATE,Hie.Crs.CrsCod,Cfg_FOLDER_GRP, GrpDat.GrpCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); else @@ -7956,15 +7950,15 @@ static void Brw_PasteClipboard (void) break; case Brw_ADMI_ASG_CRS: case Brw_ADMI_WRK_CRS: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - if (Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + if (Crs_GetDataOfCourseByCod (&Hie.Crs)) { Usr_UsrDataConstructor (&UsrDat); UsrDat.UsrCod = Gbl.FileBrowser.Clipboard.WorksUsrCod; Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS); // Check that user exists snprintf (PathOrg,sizeof (PathOrg), "%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_USR, + Cfg_PATH_CRS_PRIVATE,Hie.Crs.CrsCod,Cfg_FOLDER_USR, (unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100), Gbl.FileBrowser.Clipboard.WorksUsrCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); @@ -7975,11 +7969,11 @@ static void Brw_PasteClipboard (void) break; case Brw_ADMI_ASG_USR: case Brw_ADMI_WRK_USR: - Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; - if (Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod; + if (Crs_GetDataOfCourseByCod (&Hie.Crs)) snprintf (PathOrg,sizeof (PathOrg), "%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_USR, + Cfg_PATH_CRS_PRIVATE,Hie.Crs.CrsCod,Cfg_FOLDER_USR, (unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100), Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); @@ -7989,11 +7983,11 @@ static void Brw_PasteClipboard (void) case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: PrjCod = Gbl.FileBrowser.Clipboard.Cod; - Crs.CrsCod = Prj_GetCourseOfProject (PrjCod); - if (Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Prj_GetCourseOfProject (PrjCod); + if (Crs_GetDataOfCourseByCod (&Hie.Crs)) snprintf (PathOrg,sizeof (PathOrg), "%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_PRJ, + Cfg_PATH_CRS_PRIVATE,Hie.Crs.CrsCod,Cfg_FOLDER_PRJ, (unsigned) (PrjCod % 100), PrjCod, Gbl.FileBrowser.Clipboard.FilFolLnk.Full); diff --git a/swad_forum.c b/swad_forum.c index d6e362b9..e933c484 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -41,6 +41,7 @@ #include "swad_form.h" #include "swad_forum.h" #include "swad_global.h" +#include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_layout.h" #include "swad_logo.h" @@ -2168,10 +2169,7 @@ void For_SetForumName (const struct For_Forum *Forum, extern const char *Txt_only_teachers; extern const char *Txt_only_teachers_NO_HTML[1 + Lan_NUM_LANGUAGES]; extern const char *Txt_Unknown_FORUM; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; switch (Forum->Type) { @@ -2199,66 +2197,66 @@ void For_SetForumName (const struct For_Forum *Forum, Txt_only_teachers_NO_HTML[Language]); break; case For_FORUM_INSTIT_USRS: - Ins.InsCod = Forum->Location; - if (!Ins_GetDataOfInstitutionByCod (&Ins)) + Hie.Ins.InsCod = Forum->Location; + if (!Ins_GetDataOfInstitutionByCod (&Hie.Ins)) Lay_ShowErrorAndExit ("Institution not found."); - Str_Copy (ForumName,Ins.ShrtName, + Str_Copy (ForumName,Hie.Ins.ShrtName, For_MAX_BYTES_FORUM_NAME); break; case For_FORUM_INSTIT_TCHS: - Ins.InsCod = Forum->Location; - if (!Ins_GetDataOfInstitutionByCod (&Ins)) + Hie.Ins.InsCod = Forum->Location; + if (!Ins_GetDataOfInstitutionByCod (&Hie.Ins)) Lay_ShowErrorAndExit ("Institution not found."); snprintf (ForumName,For_MAX_BYTES_FORUM_NAME + 1, - "%s%s",Ins.ShrtName, + "%s%s",Hie.Ins.ShrtName, UseHTMLEntities ? Txt_only_teachers : Txt_only_teachers_NO_HTML[Language]); break; case For_FORUM_CENTRE_USRS: - Ctr.CtrCod = Forum->Location; - if (!Ctr_GetDataOfCentreByCod (&Ctr)) + Hie.Ctr.CtrCod = Forum->Location; + if (!Ctr_GetDataOfCentreByCod (&Hie.Ctr)) Lay_ShowErrorAndExit ("Centre not found."); - Str_Copy (ForumName,Ctr.ShrtName, + Str_Copy (ForumName,Hie.Ctr.ShrtName, For_MAX_BYTES_FORUM_NAME); break; case For_FORUM_CENTRE_TCHS: - Ctr.CtrCod = Forum->Location; - if (!Ctr_GetDataOfCentreByCod (&Ctr)) + Hie.Ctr.CtrCod = Forum->Location; + if (!Ctr_GetDataOfCentreByCod (&Hie.Ctr)) Lay_ShowErrorAndExit ("Centre not found."); snprintf (ForumName,For_MAX_BYTES_FORUM_NAME + 1, - "%s%s",Ctr.ShrtName, + "%s%s",Hie.Ctr.ShrtName, UseHTMLEntities ? Txt_only_teachers : Txt_only_teachers_NO_HTML[Language]); break; case For_FORUM_DEGREE_USRS: - Deg.DegCod = Forum->Location; - if (!Deg_GetDataOfDegreeByCod (&Deg)) + Hie.Deg.DegCod = Forum->Location; + if (!Deg_GetDataOfDegreeByCod (&Hie.Deg)) Lay_ShowErrorAndExit ("Degree not found."); - Str_Copy (ForumName,Deg.ShrtName, + Str_Copy (ForumName,Hie.Deg.ShrtName, For_MAX_BYTES_FORUM_NAME); break; case For_FORUM_DEGREE_TCHS: - Deg.DegCod = Forum->Location; - if (!Deg_GetDataOfDegreeByCod (&Deg)) + Hie.Deg.DegCod = Forum->Location; + if (!Deg_GetDataOfDegreeByCod (&Hie.Deg)) Lay_ShowErrorAndExit ("Degree not found."); snprintf (ForumName,For_MAX_BYTES_FORUM_NAME + 1, - "%s%s",Deg.ShrtName, + "%s%s",Hie.Deg.ShrtName, UseHTMLEntities ? Txt_only_teachers : Txt_only_teachers_NO_HTML[Language]); break; case For_FORUM_COURSE_USRS: - Crs.CrsCod = Forum->Location; - if (!Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Forum->Location; + if (!Crs_GetDataOfCourseByCod (&Hie.Crs)) Lay_ShowErrorAndExit ("Course not found."); - Str_Copy (ForumName,Crs.ShrtName, + Str_Copy (ForumName,Hie.Crs.ShrtName, For_MAX_BYTES_FORUM_NAME); break; case For_FORUM_COURSE_TCHS: - Crs.CrsCod = Forum->Location; - if (!Crs_GetDataOfCourseByCod (&Crs)) + Hie.Crs.CrsCod = Forum->Location; + if (!Crs_GetDataOfCourseByCod (&Hie.Crs)) Lay_ShowErrorAndExit ("Course not found."); snprintf (ForumName,For_MAX_BYTES_FORUM_NAME + 1, - "%s%s",Crs.ShrtName, + "%s%s",Hie.Crs.ShrtName, UseHTMLEntities ? Txt_only_teachers : Txt_only_teachers_NO_HTML[Language]); break; diff --git a/swad_hierarchy.c b/swad_hierarchy.c index 1339bb63..cacd8ab1 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -660,9 +660,7 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan) MYSQL_ROW row; unsigned NumRow; unsigned NumRows; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; + struct Hie_Hierarchy Hie; /***** Get institutions, centres, degrees admin by user from database *****/ NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions," @@ -725,38 +723,38 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan) HTM_TxtF (" %s",Txt_all_degrees); break; case Hie_Lvl_INS: // Institution - Ins.InsCod = Str_ConvertStrCodToLongCod (row[1]); - if (Ins.InsCod > 0) + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[1]); + if (Hie.Ins.InsCod > 0) { /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins); + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /* Write institution logo and name */ - Ins_DrawInstitutionLogoAndNameWithLink (&Ins,ActSeeInsInf, + Ins_DrawInstitutionLogoAndNameWithLink (&Hie.Ins,ActSeeInsInf, "BT_LINK DAT_SMALL_NOBR","LT"); } break; case Hie_Lvl_CTR: // Centre - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[1]); - if (Ctr.CtrCod > 0) + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[1]); + if (Hie.Ctr.CtrCod > 0) { /* Get data of centre */ - Ctr_GetDataOfCentreByCod (&Ctr); + Ctr_GetDataOfCentreByCod (&Hie.Ctr); /* Write centre logo and name */ - Ctr_DrawCentreLogoAndNameWithLink (&Ctr,ActSeeCtrInf, + Ctr_DrawCentreLogoAndNameWithLink (&Hie.Ctr,ActSeeCtrInf, "BT_LINK DAT_SMALL_NOBR","LT"); } break; case Hie_Lvl_DEG: // Degree - Deg.DegCod = Str_ConvertStrCodToLongCod (row[1]); - if (Deg.DegCod > 0) + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[1]); + if (Hie.Deg.DegCod > 0) { /* Get data of degree */ - Deg_GetDataOfDegreeByCod (&Deg); + Deg_GetDataOfDegreeByCod (&Hie.Deg); /* Write degree logo and name */ - Deg_DrawDegreeLogoAndNameWithLink (&Deg,ActSeeDegInf, + Deg_DrawDegreeLogoAndNameWithLink (&Hie.Deg,ActSeeDegInf, "BT_LINK DAT_SMALL_NOBR","LT"); } break; diff --git a/swad_institution.c b/swad_institution.c index 5a268a07..2d89bc56 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -647,7 +647,7 @@ void Ins_GetBasicListOfInstitutions (long CtyCod) /***** Create list with institutions *****/ if ((Gbl.Hierarchy.Inss.Lst = (struct Ins_Instit *) - calloc (NumRows,sizeof (struct Ins_Instit))) == NULL) + calloc (NumRows,sizeof (struct Ins_Instit))) == NULL) Lay_NotEnoughMemoryExit (); /***** Get the institutions *****/ @@ -731,7 +731,7 @@ void Ins_GetFullListOfInstitutions (long CtyCod) /***** Create list with institutions *****/ if ((Gbl.Hierarchy.Inss.Lst = (struct Ins_Instit *) - calloc (NumRows,sizeof (struct Ins_Instit))) == NULL) + calloc (NumRows,sizeof (struct Ins_Instit))) == NULL) Lay_NotEnoughMemoryExit (); /***** Get the institutions *****/ diff --git a/swad_layout.c b/swad_layout.c index 7d63daf7..8e357069 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1713,21 +1713,19 @@ static void Lay_WriteFootFromHTMLFile (void) void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, long InsCod,long DegCod,long CrsCod) { - struct Ins_Instit Ins; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; /***** Get data of institution *****/ - Ins.InsCod = InsCod; - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = InsCod; + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /***** Get data of degree *****/ - Deg.DegCod = DegCod; - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = DegCod; + Deg_GetDataOfDegreeByCod (&Hie.Deg); /***** Get data of course *****/ - Crs.CrsCod = CrsCod; - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = CrsCod; + Crs_GetDataOfCourseByCod (&Hie.Crs); /***** Begin table *****/ HTM_TABLE_BeginWidePadding (10); @@ -1738,8 +1736,8 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, if (InsCod > 0) { if (!PrintView) - HTM_A_Begin ("href=\"%s\" target=\"_blank\"",Ins.WWW); - Lgo_DrawLogo (Hie_Lvl_INS,Ins.InsCod,Ins.ShrtName,40,NULL,true); + HTM_A_Begin ("href=\"%s\" target=\"_blank\"",Hie.Ins.WWW); + Lgo_DrawLogo (Hie_Lvl_INS,Hie.Ins.InsCod,Hie.Ins.ShrtName,40,NULL,true); if (!PrintView) HTM_A_End (); } @@ -1751,26 +1749,26 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, { if (!PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"CLASSPHOTO_TITLE\"", - Ins.WWW); - HTM_Txt (Ins.FullName); + Hie.Ins.WWW); + HTM_Txt (Hie.Ins.FullName); if (!PrintView) HTM_A_End (); } if (DegCod > 0) { - if (Ins.InsCod > 0) + if (Hie.Ins.InsCod > 0) HTM_Txt (" - "); if (!PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"CLASSPHOTO_TITLE\"", - Deg.WWW); - HTM_Txt (Deg.FullName); + Hie.Deg.WWW); + HTM_Txt (Hie.Deg.FullName); if (!PrintView) HTM_A_End (); } HTM_BR (); if (CrsCod > 0) { - HTM_Txt (Crs.FullName); + HTM_Txt (Hie.Crs.FullName); if (DrawingClassPhoto && !Gbl.Usrs.ClassPhoto.AllGroups) { HTM_BR (); @@ -1785,8 +1783,8 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, { if (!PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"CLASSPHOTO_TITLE\"", - Deg.WWW); - Lgo_DrawLogo (Hie_Lvl_DEG,Deg.DegCod,Deg.ShrtName,40,NULL,true); + Hie.Deg.WWW); + Lgo_DrawLogo (Hie_Lvl_DEG,Hie.Deg.DegCod,Hie.Deg.ShrtName,40,NULL,true); if (!PrintView) HTM_A_End (); } diff --git a/swad_log.c b/swad_log.c index 1c2414d5..87d7eb81 100644 --- a/swad_log.c +++ b/swad_log.c @@ -34,6 +34,7 @@ #include "swad_database.h" #include "swad_exam_log.h" #include "swad_global.h" +#include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_log.h" #include "swad_profile.h" @@ -262,10 +263,7 @@ void Log_GetAndShowLastClicks (void) Act_Action_t Action; const char *ClassRow; time_t TimeDiff; - struct Cty_Countr Cty; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; + struct Hie_Hierarchy Hie; /***** Get last clicks from database *****/ NumRows = DB_QuerySELECT (&mysql_res,"can not get last clicks", @@ -319,56 +317,56 @@ void Log_GetAndShowLastClicks (void) TimeDiff = (time_t) 0; /* Get country code (row[4]) */ - Cty.CtyCod = Str_ConvertStrCodToLongCod (row[4]); - Cty_GetCountryName (Cty.CtyCod,Gbl.Prefs.Language, - Cty.Name[Gbl.Prefs.Language]); + Hie.Cty.CtyCod = Str_ConvertStrCodToLongCod (row[4]); + Cty_GetCountryName (Hie.Cty.CtyCod,Gbl.Prefs.Language, + Hie.Cty.Name[Gbl.Prefs.Language]); /* Get institution code (row[5]) */ - Ins.InsCod = Str_ConvertStrCodToLongCod (row[5]); - Ins_GetShortNameOfInstitution (&Ins); + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[5]); + Ins_GetShortNameOfInstitution (&Hie.Ins); /* Get centre code (row[6]) */ - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[6]); - Ctr_GetShortNameOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[6]); + Ctr_GetShortNameOfCentreByCod (&Hie.Ctr); /* Get degree code (row[7]) */ - Deg.DegCod = Str_ConvertStrCodToLongCod (row[7]); - Deg_GetShortNameOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[7]); + Deg_GetShortNameOfDegreeByCod (&Hie.Deg); /* Print table row */ HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"LC_CLK %s\"",ClassRow); - HTM_Txt (row[0]); // Click + HTM_Txt (row[0]); // Click HTM_TD_End (); - HTM_TD_Begin ("class=\"LC_TIM %s\"",ClassRow); // Elapsed time + HTM_TD_Begin ("class=\"LC_TIM %s\"",ClassRow); // Elapsed time Dat_WriteHoursMinutesSecondsFromSeconds (TimeDiff); HTM_TD_End (); HTM_TD_Begin ("class=\"LC_ROL %s\"",ClassRow); - HTM_Txt ( // Role + HTM_Txt ( // Role Txt_ROLES_SINGUL_Abc[Rol_ConvertUnsignedStrToRole (row[3])][Usr_SEX_UNKNOWN]); HTM_TD_End (); HTM_TD_Begin ("class=\"LC_CTY %s\"",ClassRow); - HTM_Txt (Cty.Name[Gbl.Prefs.Language]); // Country + HTM_Txt (Hie.Cty.Name[Gbl.Prefs.Language]); // Country HTM_TD_End (); HTM_TD_Begin ("class=\"LC_INS %s\"",ClassRow); - HTM_Txt (Ins.ShrtName); // Institution + HTM_Txt (Hie.Ins.ShrtName); // Institution HTM_TD_End (); HTM_TD_Begin ("class=\"LC_CTR %s\"",ClassRow); - HTM_Txt (Ctr.ShrtName); // Centre + HTM_Txt (Hie.Ctr.ShrtName); // Centre HTM_TD_End (); HTM_TD_Begin ("class=\"LC_DEG %s\"",ClassRow); - HTM_Txt (Deg.ShrtName); // Degree + HTM_Txt (Hie.Deg.ShrtName); // Degree HTM_TD_End (); HTM_TD_Begin ("class=\"LC_ACT %s\"",ClassRow); - HTM_Txt (Act_GetActionText (Action)); // Action + HTM_Txt (Act_GetActionText (Action)); // Action HTM_TD_End (); HTM_TR_End (); diff --git a/swad_notification.c b/swad_notification.c index f02be0da..cf51b365 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -43,6 +43,7 @@ #include "swad_form.h" #include "swad_forum.h" #include "swad_global.h" +#include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_mark.h" #include "swad_message.h" @@ -323,10 +324,7 @@ void Ntf_ShowMyNotifications (void) bool AllNotifications; Ntf_NotifyEvent_t NotifyEvent = (Ntf_NotifyEvent_t) 0; // Initialized to avoid warning struct UsrData UsrDat; - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; long Cod; struct For_Forums Forums; char ForumName[For_MAX_BYTES_FORUM_NAME + 1]; @@ -414,20 +412,20 @@ void Ntf_ShowMyNotifications (void) Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS); // Get user's data from the database /* Get institution code (row[2]) */ - Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /* Get centre code (row[3]) */ - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); - Ctr_GetDataOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); + Ctr_GetDataOfCentreByCod (&Hie.Ctr); /* Get degree code (row[4]) */ - Deg.DegCod = Str_ConvertStrCodToLongCod (row[4]); - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[4]); + Deg_GetDataOfDegreeByCod (&Hie.Deg); /* Get course code (row[5]) */ - Crs.CrsCod = Str_ConvertStrCodToLongCod (row[5]); - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Str_ConvertStrCodToLongCod (row[5]); + Crs_GetDataOfCourseByCod (&Hie.Crs); /* Get message/post/... code (row[6]) */ Cod = Str_ConvertStrCodToLongCod (row[6]); @@ -481,7 +479,7 @@ void Ntf_ShowMyNotifications (void) HTM_TD_Begin ("class=\"%s LT\" style=\"width:25px;\"",ClassBackground); if (PutLink) - PutLink = Ntf_StartFormGoToAction (NotifyEvent,Crs.CrsCod,&UsrDat,Cod,&Forums); + PutLink = Ntf_StartFormGoToAction (NotifyEvent,Hie.Crs.CrsCod,&UsrDat,Cod,&Forums); if (PutLink) { @@ -498,7 +496,7 @@ void Ntf_ShowMyNotifications (void) HTM_TD_Begin ("class=\"%s LT\"",ClassBackground); if (PutLink) { - PutLink = Ntf_StartFormGoToAction (NotifyEvent,Crs.CrsCod,&UsrDat,Cod,&Forums); + PutLink = Ntf_StartFormGoToAction (NotifyEvent,Hie.Crs.CrsCod,&UsrDat,Cod,&Forums); HTM_BUTTON_SUBMIT_Begin (Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent],ClassLink,NULL); HTM_Txt (Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent]); HTM_BUTTON_End (); @@ -523,7 +521,7 @@ void Ntf_ShowMyNotifications (void) NotifyEvent == Ntf_EVENT_FORUM_REPLY) { if (PutLink) - PutLink = Ntf_StartFormGoToAction (NotifyEvent,Crs.CrsCod,&UsrDat,Cod,&Forums); + PutLink = Ntf_StartFormGoToAction (NotifyEvent,Hie.Crs.CrsCod,&UsrDat,Cod,&Forums); if (PutLink) HTM_BUTTON_SUBMIT_Begin (Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent],ClassLink,NULL); @@ -541,21 +539,21 @@ void Ntf_ShowMyNotifications (void) else { if (PutLink) - PutLink = Ntf_StartFormGoToAction (NotifyEvent,Crs.CrsCod,&UsrDat,Cod,&Forums); + PutLink = Ntf_StartFormGoToAction (NotifyEvent,Hie.Crs.CrsCod,&UsrDat,Cod,&Forums); if (PutLink) HTM_BUTTON_SUBMIT_Begin (Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent],ClassLink,NULL); else HTM_SPAN_Begin ("class=\"%s\"",ClassText); - if (Crs.CrsCod > 0) - HTM_TxtF ("%s: %s",Txt_Course,Crs.ShrtName); - else if (Deg.DegCod > 0) - HTM_TxtF ("%s: %s",Txt_Degree,Deg.ShrtName); - else if (Ctr.CtrCod > 0) - HTM_TxtF ("%s: %s",Txt_Centre,Ctr.ShrtName); - else if (Ins.InsCod > 0) - HTM_TxtF ("%s: %s",Txt_Institution,Ins.ShrtName); + if (Hie.Crs.CrsCod > 0) + HTM_TxtF ("%s: %s",Txt_Course,Hie.Crs.ShrtName); + else if (Hie.Deg.DegCod > 0) + HTM_TxtF ("%s: %s",Txt_Degree,Hie.Deg.ShrtName); + else if (Hie.Ctr.CtrCod > 0) + HTM_TxtF ("%s: %s",Txt_Centre,Hie.Ctr.ShrtName); + else if (Hie.Ins.InsCod > 0) + HTM_TxtF ("%s: %s",Txt_Institution,Hie.Ins.ShrtName); else HTM_Hyphen (); @@ -585,7 +583,7 @@ void Ntf_ShowMyNotifications (void) ContentStr = NULL; Ntf_GetNotifSummaryAndContent (SummaryStr,&ContentStr,NotifyEvent, - Cod,Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod, + Cod,Hie.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod, false); HTM_TR_Begin (NULL); @@ -1586,10 +1584,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign Lan_Language_t ToUsrLanguage; struct UsrData FromUsrDat; Ntf_NotifyEvent_t NotifyEvent = (Ntf_NotifyEvent_t) 0; // Initialized to avoid warning - struct Ins_Instit Ins; - struct Ctr_Centre Ctr; - struct Deg_Degree Deg; - struct Crs_Course Crs; + struct Hie_Hierarchy Hie; long Cod; struct For_Forum ForumSelected; char ForumName[For_MAX_BYTES_FORUM_NAME + 1]; @@ -1665,20 +1660,20 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&FromUsrDat,Usr_DONT_GET_PREFS); // Get origin user's data from the database /* Get institution code (row[2]) */ - Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins); + Hie.Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); + Ins_GetDataOfInstitutionByCod (&Hie.Ins); /* Get centre code (row[3]) */ - Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); - Ctr_GetDataOfCentreByCod (&Ctr); + Hie.Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); + Ctr_GetDataOfCentreByCod (&Hie.Ctr); /* Get degree code (row[4]) */ - Deg.DegCod = Str_ConvertStrCodToLongCod (row[4]); - Deg_GetDataOfDegreeByCod (&Deg); + Hie.Deg.DegCod = Str_ConvertStrCodToLongCod (row[4]); + Deg_GetDataOfDegreeByCod (&Hie.Deg); /* Get course code (row[5]) */ - Crs.CrsCod = Str_ConvertStrCodToLongCod (row[5]); - Crs_GetDataOfCourseByCod (&Crs); + Hie.Crs.CrsCod = Str_ConvertStrCodToLongCod (row[5]); + Crs_GetDataOfCourseByCod (&Hie.Crs); /* Get message/post/... code (row[6]) */ Cod = Str_ConvertStrCodToLongCod (row[6]); @@ -1716,10 +1711,10 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign case Ntf_EVENT_NOTICE: case Ntf_EVENT_MESSAGE: case Ntf_EVENT_SURVEY: - if (Crs.CrsCod > 0) + if (Hie.Crs.CrsCod > 0) fprintf (FileMail,"%s: %s\n", Txt_Course_NO_HTML[ToUsrLanguage], - Crs.FullName); + Hie.Crs.FullName); break; case Ntf_EVENT_FORUM_POST_COURSE: case Ntf_EVENT_FORUM_REPLY: @@ -1782,7 +1777,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign *NumMails = 1; /* Update statistics about notifications */ - Ntf_UpdateNumNotifSent (Deg.DegCod,Crs.CrsCod,NotifyEvent,*NumNotif,*NumMails); + Ntf_UpdateNumNotifSent (Hie.Deg.DegCod,Hie.Crs.CrsCod,NotifyEvent,*NumNotif,*NumMails); } /***** Mark all the pending notifications of this user as 'sent' *****/ diff --git a/swad_system_config.c b/swad_system_config.c index 603419ab..b57e193a 100644 --- a/swad_system_config.c +++ b/swad_system_config.c @@ -229,8 +229,8 @@ static void SysCfg_Map (void) unsigned Zoom; unsigned NumCtrs; unsigned NumCtr; - struct Ctr_Centre Ctr; struct Ins_Instit Ins; + struct Ctr_Centre Ctr; /***** Leaflet CSS *****/ Map_LeafletCSS (); diff --git a/swad_user.c b/swad_user.c index 266d0deb..1bbcabe6 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3864,12 +3864,12 @@ static void Usr_WriteRowTchAllData (struct UsrData *UsrDat) char PhotoURL[PATH_MAX + 1]; bool ShowPhoto; struct Ins_Instit Ins; + struct Ctr_Centre Ctr; + struct Dpt_Department Dpt; bool ItsMe = Usr_ItsMe (UsrDat->UsrCod); bool ShowData = (ItsMe || UsrDat->Accepted || Gbl.Usrs.Me.Role.Logged == Rol_DEG_ADM || Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM); - struct Ctr_Centre Ctr; - struct Dpt_Department Dpt; /***** Start row *****/ HTM_TR_Begin (NULL);