From c1c5b8004405dc425b0087b1edcd2b4b0b04ae75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 7 Jan 2020 00:09:30 +0100 Subject: [PATCH] Version19.112.16 --- swad_API.c | 2 +- swad_centre.c | 23 +++++++++++++-- swad_centre.h | 1 + swad_centre_config.c | 4 +-- swad_changelog.h | 4 ++- swad_country_config.c | 2 +- swad_course.c | 2 +- swad_department.c | 4 +-- swad_exam.c | 4 +-- swad_figure.c | 2 +- swad_file_browser.c | 6 ++-- swad_forum.c | 4 +-- swad_global.c | 32 +++++++++----------- swad_global.h | 5 ++++ swad_hierarchy.c | 5 ++-- swad_institution.c | 69 ++++++++++++++++++------------------------- swad_institution.h | 5 ++-- swad_layout.c | 2 +- swad_notification.c | 4 +-- swad_record.c | 6 ++-- swad_report.c | 2 +- swad_statistic.c | 2 +- swad_timeline.c | 2 +- swad_user.c | 10 +++---- 24 files changed, 105 insertions(+), 97 deletions(-) diff --git a/swad_API.c b/swad_API.c index da91db01..e49205eb 100644 --- a/swad_API.c +++ b/swad_API.c @@ -3062,7 +3062,7 @@ int swad__getNotifications (struct soap *soap, /* Get institution (row[4]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[4]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Get centre (row[5]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[5]); diff --git a/swad_centre.c b/swad_centre.c index fbe8108d..dbb35559 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -294,7 +294,7 @@ static void Ctr_ListCentres (void) { Frm_StartForm (ActEdiCtr); Btn_PutConfirmButton (Gbl.Hierarchy.Ins.Ctrs.Num ? Txt_Create_another_centre : - Txt_Create_centre); + Txt_Create_centre); Frm_EndForm (); } @@ -1843,14 +1843,31 @@ unsigned Ctr_GetNumCtrsInCty (long CtyCod) /**************** Get number of centres in an institution ********************/ /*****************************************************************************/ +void Ctr_FlushCacheNumCtrsInIns (void) + { + Gbl.Cache.NumCtrsInIns.InsCod = -1L; + Gbl.Cache.NumCtrsInIns.NumCtrs = 0; + } + unsigned Ctr_GetNumCtrsInIns (long InsCod) { - /***** Get number of centres of an institution from database *****/ - return + /***** 1. Fast check: Trivial case *****/ + if (InsCod <= 0) + return 0; + + /***** 2. Fast check: If cached... *****/ + if (InsCod == Gbl.Cache.NumCtrsInIns.InsCod) + return Gbl.Cache.NumCtrsInIns.NumCtrs; + + /***** 3. Slow: number of centres in an institution from database *****/ + Gbl.Cache.NumCtrsInIns.InsCod = InsCod; + Gbl.Cache.NumCtrsInIns.NumCtrs = (unsigned) DB_QueryCOUNT ("can not get number of centres in an institution", "SELECT COUNT(*) FROM centres" " WHERE InsCod=%ld", InsCod); + + return Gbl.Cache.NumCtrsInIns.NumCtrs; } /*****************************************************************************/ diff --git a/swad_centre.h b/swad_centre.h index ee7e60d1..ff8b0753 100644 --- a/swad_centre.h +++ b/swad_centre.h @@ -122,6 +122,7 @@ void Ctr_RecFormNewCtr (void); unsigned Ctr_GetNumCtrsTotal (void); unsigned Ctr_GetNumCtrsInCty (long CtyCod); +void Ctr_FlushCacheNumCtrsInIns (void); unsigned Ctr_GetNumCtrsInIns (long InsCod); unsigned Ctr_GetNumCtrsInPlc (long PlcCod); unsigned Ctr_GetNumCtrsWithDegs (const char *SubQuery); diff --git a/swad_centre_config.c b/swad_centre_config.c index 5c840fdd..bff02010 100644 --- a/swad_centre_config.c +++ b/swad_centre_config.c @@ -583,7 +583,7 @@ static void CtrCfg_Institution (bool PrintView,bool PutForm) if (PutForm) { /* Get list of institutions of the current country */ - Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod,Ins_GET_BASIC_DATA); + Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod); /* Put form to select institution */ Frm_StartForm (ActChgCtrInsCfg); @@ -1061,7 +1061,7 @@ void CtrCfg_ChangeCtrIns (void) if (NewIns.InsCod != Gbl.Hierarchy.Ctr.InsCod) { /***** Get data of new institution *****/ - Ins_GetDataOfInstitutionByCod (&NewIns,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&NewIns); /***** Check if it already exists a centre with the same name in the new institution *****/ if (Ctr_CheckIfCtrNameExistsInIns ("ShortName", diff --git a/swad_changelog.h b/swad_changelog.h index 1c2944d7..e68ced2e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -492,7 +492,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.112.15 (2020-01-06)" +#define Log_PLATFORM_VERSION "SWAD 19.112.16 (2020-01-06)" #define CSS_FILE "swad19.112.css" #define JS_FILE "swad19.91.1.js" /* @@ -501,7 +501,9 @@ ps2pdf source.ps destination.pdf // TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué? // TODO: Mapas más estrechos en móvil // TODO: Quitar todos los EXTRA_DATA. +Optimize Ins_GetNumInssInCty + Version 19.112.16:Jan 06, 2020 Optimization in number of centres in an institution. (? lines) Version 19.112.15:Jan 06, 2020 Optimization in number of degrees in an institution. (278567 lines) Version 19.112.14:Jan 06, 2020 Optimization in number of courses in an institution. (278555 lines) Version 19.112.13:Jan 06, 2020 Optimization in number of departments in an institution. (278535 lines) diff --git a/swad_country_config.c b/swad_country_config.c index ca17fc5e..562f34b3 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -335,7 +335,7 @@ static void CtyCfg_Map (void) /* Get data of institution */ Ins.InsCod = Ctr.InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Add marker */ Map_AddMarker (&Ctr.Coord); diff --git a/swad_course.c b/swad_course.c index d84ed48d..30930c49 100644 --- a/swad_course.c +++ b/swad_course.c @@ -241,7 +241,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) /***** Get data of this institution *****/ Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA)) + if (!Ins_GetDataOfInstitutionByCod (&Ins)) Lay_ShowErrorAndExit ("Institution not found."); /***** Write link to institution *****/ diff --git a/swad_department.c b/swad_department.c index 3322f12f..1ccac3fe 100644 --- a/swad_department.c +++ b/swad_department.c @@ -260,7 +260,7 @@ static void Dpt_EditDepartmentsInternal (void) return; /***** Get list of institutions *****/ - Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod,Ins_GET_BASIC_DATA); + Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod); /***** Get list of departments *****/ Dpt_GetListDepartments (Gbl.Hierarchy.Ins.InsCod); @@ -510,7 +510,7 @@ static void Dpt_ListDepartmentsForEdition (void) /* Get data of institution of this department */ Ins.InsCod = Dpt->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); HTM_TR_Begin (NULL); diff --git a/swad_exam.c b/swad_exam.c index be6f0f22..08755a5e 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -978,7 +978,7 @@ static void Exa_ShowExamAnnouncement (long ExaCod, /***** Get data of institution of this degree *****/ Ins.InsCod = Gbl.Hierarchy.Ins.InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /***** Build anchor string *****/ Frm_SetAnchorStr (ExaCod,&Anchor); @@ -1615,7 +1615,7 @@ static void Exa_GetNotifContentExamAnnouncement (char **ContentStr) /***** Get data of institution *****/ Ins.InsCod = Deg_GetInsCodOfDegreeByCod (Deg.DegCod); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /***** Convert struct date to a date string *****/ Dat_ConvDateToDateStr (&Gbl.ExamAnns.ExaDat.ExamDate,StrExamDate); diff --git a/swad_figure.c b/swad_figure.c index 803c3008..cb140080 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -1515,7 +1515,7 @@ static unsigned Fig_GetInsAndStat (struct Instit *Ins,MYSQL_RES *mysql_res) /***** Get data of this institution (row[0]) *****/ Ins->InsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA)) + if (!Ins_GetDataOfInstitutionByCod (Ins)) Lay_ShowErrorAndExit ("Institution not found."); /***** Get statistic (row[1]) *****/ diff --git a/swad_file_browser.c b/swad_file_browser.c index 5bb80fc7..412de2df 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -6850,7 +6850,7 @@ static void Brw_WriteCurrentClipboard (void) { case Brw_ADMI_DOC_INS: Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_documents_management_area, @@ -6858,7 +6858,7 @@ static void Brw_WriteCurrentClipboard (void) break; case Brw_ADMI_SHR_INS: Ins.InsCod = Gbl.FileBrowser.Clipboard.Cod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); snprintf (TxtClipboardZone,sizeof (TxtClipboardZone), "%s, %s %s", Txt_shared_files_area, @@ -7865,7 +7865,7 @@ 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,Ins_GET_BASIC_DATA)) + if (Ins_GetDataOfInstitutionByCod (&Ins)) snprintf (PathOrg,sizeof (PathOrg), "%s/%02u/%u/%s", Cfg_PATH_INS_PRIVATE, diff --git a/swad_forum.c b/swad_forum.c index 2a481bf5..b6e26828 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -2159,14 +2159,14 @@ void For_SetForumName (struct Forum *Forum, break; case For_FORUM_INSTIT_USRS: Ins.InsCod = Forum->Location; - if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA)) + if (!Ins_GetDataOfInstitutionByCod (&Ins)) Lay_ShowErrorAndExit ("Institution not found."); Str_Copy (ForumName,Ins.ShrtName, For_MAX_BYTES_FORUM_NAME); break; case For_FORUM_INSTIT_TCHS: Ins.InsCod = Forum->Location; - if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA)) + if (!Ins_GetDataOfInstitutionByCod (&Ins)) Lay_ShowErrorAndExit ("Institution not found."); snprintf (ForumName,For_MAX_BYTES_FORUM_NAME + 1, "%s%s",Ins.ShrtName, diff --git a/swad_global.c b/swad_global.c index af961258..21ba4e56 100644 --- a/swad_global.c +++ b/swad_global.c @@ -217,11 +217,20 @@ void Gbl_InitializeGlobals (void) /***** Reset current hierarchy *****/ Hie_ResetHierarchy (); + Gbl.Hierarchy.Sys.Ctys.Num = 0; + Gbl.Hierarchy.Sys.Ctys.Lst = NULL; + Gbl.Hierarchy.Sys.Ctys.SelectedOrder = Cty_ORDER_DEFAULT; + + Gbl.Hierarchy.Cty.Inss.Num = 0; + Gbl.Hierarchy.Cty.Inss.Lst = NULL; + Gbl.Hierarchy.Cty.Inss.SelectedOrder = Ins_ORDER_DEFAULT; + Gbl.Hierarchy.Ins.ShrtName[0] = '\0'; Gbl.Hierarchy.Ins.FullName[0] = '\0'; Gbl.Hierarchy.Ins.WWW[0] = '\0'; Gbl.Hierarchy.Ins.Ctrs.Num = 0; Gbl.Hierarchy.Ins.Ctrs.Lst = NULL; + Gbl.Hierarchy.Ins.Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT; Gbl.Hierarchy.Ctr.ShrtName[0] = '\0'; Gbl.Hierarchy.Ctr.FullName[0] = '\0'; @@ -231,20 +240,6 @@ void Gbl_InitializeGlobals (void) Gbl.Hierarchy.Deg.ShrtName[0] = Gbl.Hierarchy.Deg.FullName[0] = '\0'; Gbl.Hierarchy.Crs.ShrtName[0] = Gbl.Hierarchy.Crs.FullName[0] = '\0'; - Gbl.Crs.Info.ShowMsgMustBeRead = 0; - Gbl.Crs.Notices.HighlightNotCod = -1L; // No notice highlighted - - Gbl.Hierarchy.Cty.Inss.Num = 0; - Gbl.Hierarchy.Cty.Inss.Lst = NULL; - Gbl.Hierarchy.Cty.Inss.SelectedOrder = Ins_ORDER_DEFAULT; - - Gbl.Hierarchy.Sys.Ctys.Num = 0; - Gbl.Hierarchy.Sys.Ctys.Lst = NULL; - Gbl.Hierarchy.Sys.Ctys.SelectedOrder = Cty_ORDER_DEFAULT; - - Gbl.Hierarchy.Ins.Ctrs.Num = 0; - Gbl.Hierarchy.Ins.Ctrs.Lst = NULL; - Gbl.Hierarchy.Ins.Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT; Gbl.Dpts.Num = 0; Gbl.Dpts.Lst = NULL; @@ -262,6 +257,8 @@ void Gbl_InitializeGlobals (void) Gbl.DegTypes.Num = 0; Gbl.DegTypes.Lst = NULL; + Gbl.Crs.Info.ShowMsgMustBeRead = 0; + Gbl.Crs.Notices.HighlightNotCod = -1L; // No notice highlighted Gbl.Crs.Grps.NumGrps = 0; Gbl.Crs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT; Gbl.Crs.Grps.GrpTypes.LstGrpTypes = NULL; @@ -280,13 +277,9 @@ void Gbl_InitializeGlobals (void) Gbl.Crs.Grps.LstGrpsSel.GrpCods = NULL; Gbl.Crs.Grps.LstGrpsSel.NumGrps = 0; Gbl.Crs.Grps.LstGrpsSel.NestedCalls = 0; - - Gbl.Usrs.ClassPhoto.AllGroups = true; - Gbl.Crs.Records.Field.Name[0] = '\0'; Gbl.Crs.Records.Field.NumLines = Rec_MIN_LINES_IN_EDITION_FIELD; Gbl.Crs.Records.Field.Visibility = Rec_HIDDEN_FIELD; - Gbl.Crs.Records.LstFields.Lst = NULL; Gbl.Crs.Records.LstFields.Num = 0; Gbl.Crs.Records.LstFields.NestedCalls = 0; @@ -342,6 +335,7 @@ void Gbl_InitializeGlobals (void) Gbl.Usrs.Listing.RecsPerPag = Rec_DEF_RECORDS_PER_PAGE; Gbl.Usrs.Listing.WithPhotos = Usr_LIST_WITH_PHOTOS_DEF; + Gbl.Usrs.ClassPhoto.AllGroups = true; Gbl.Usrs.ClassPhoto.Cols = Usr_CLASS_PHOTO_COLS_DEF; /* Statistics */ @@ -413,6 +407,8 @@ void Gbl_InitializeGlobals (void) Ins_FlushCacheShortNameOfInstitution (); Ins_FlushCacheFullNameAndCtyOfInstitution (); Dpt_FlushCacheNumDptsInIns (); + Ctr_FlushCacheNumCtrsInIns (); + Deg_FlushCacheNumDegsInIns (); Deg_FlushCacheNumDegsInCtr (); Crs_FlushCacheNumCrssInIns (); Crs_FlushCacheNumCrssInCtr (); diff --git a/swad_global.h b/swad_global.h index 607f2424..9edcac34 100644 --- a/swad_global.h +++ b/swad_global.h @@ -777,6 +777,11 @@ struct Globals long InsCod; unsigned NumDpts; } NumDptsInIns; + struct + { + long InsCod; + unsigned NumCtrs; + } NumCtrsInIns; struct { long InsCod; diff --git a/swad_hierarchy.c b/swad_hierarchy.c index ec05292b..6016c908 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -555,8 +555,7 @@ void Hie_InitHierarchy (void) /***** If institution code is available, get institution data *****/ if (Gbl.Hierarchy.Ins.InsCod > 0) { - if (Ins_GetDataOfInstitutionByCod (&Gbl.Hierarchy.Ins, // Institution found - Ins_GET_EXTRA_DATA)) // Get extra data because they may be needed later + if (Ins_GetDataOfInstitutionByCod (&Gbl.Hierarchy.Ins)) // Institution found Gbl.Hierarchy.Cty.CtyCod = Gbl.Hierarchy.Ins.CtyCod; else Hie_ResetHierarchy (); @@ -736,7 +735,7 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan) if (Ins.InsCod > 0) { /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Write institution logo and name */ Ins_DrawInstitutionLogoAndNameWithLink (&Ins,ActSeeInsInf, diff --git a/swad_institution.c b/swad_institution.c index 6e4220d6..de087deb 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -175,7 +175,7 @@ void Ins_SeeInsWithPendingCtrs (void) Gbl.ColorRows[Gbl.RowEvenOdd]; /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Institution logo and name */ HTM_TR_Begin (NULL); @@ -265,7 +265,7 @@ void Ins_ShowInssOfCurrentCty (void) Ins_GetParamInsOrder (); /***** Get list of institutions *****/ - Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod,Ins_GET_EXTRA_DATA); + Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod); /***** Write menu to select country *****/ Hie_WriteMenuHierarchy (); @@ -407,7 +407,7 @@ static void Ins_ListOneInstitutionForSeeing (struct Instit *Ins,unsigned NumIns) /* Number of centres in this institution */ HTM_TD_Begin ("class=\"%s RM %s\"",TxtClassNormal,BgColor); - HTM_Unsigned (Ins->Ctrs.Num); + HTM_Unsigned (Ctr_GetNumCtrsInIns (Ins->InsCod)); HTM_TD_End (); /* Number of degrees in this institution */ @@ -533,7 +533,7 @@ static void Ins_EditInstitutionsInternal (void) extern const char *Txt_Institutions_of_COUNTRY_X; /***** Get list of institutions *****/ - Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod,Ins_GET_EXTRA_DATA); + Ins_GetListInstitutions (Gbl.Hierarchy.Cty.CtyCod); /***** Write menu to select country *****/ Hie_WriteMenuHierarchy (); @@ -549,7 +549,7 @@ static void Ins_EditInstitutionsInternal (void) Ins_PutFormToCreateInstitution (); /***** Forms to edit current institutions *****/ - if (Gbl.Hierarchy.Cty.Inss.Num) + if (Ins_GetNumInssInCty (Gbl.Hierarchy.Cty.CtyCod)) Ins_ListInstitutionsForEdition (); /***** End box *****/ @@ -591,7 +591,7 @@ static void Ins_PutIconToViewInstitutions (void) /*****************************************************************************/ // If CtyCod <= 0, get all institutions -void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) +void Ins_GetListInstitutions (long CtyCod) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -693,18 +693,6 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) /* Get the URL of the institution (row[6]) */ Str_Copy (Ins->WWW,row[6], Cns_MAX_BYTES_WWW); - - /* Get extra data */ - switch (GetExtraData) - { - case Ins_GET_BASIC_DATA: - Ins->Ctrs.Num = 0; - break; - case Ins_GET_EXTRA_DATA: - /* Get number of centres in this institution */ - Ins->Ctrs.Num = Ctr_GetNumCtrsInIns (Ins->InsCod); - break; - } } } else @@ -736,21 +724,23 @@ void Ins_WriteInstitutionNameAndCty (long InsCod) /************************* Get data of an institution ************************/ /*****************************************************************************/ -bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins, - Ins_GetExtraData_t GetExtraData) +bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins) { MYSQL_RES *mysql_res; MYSQL_ROW row; bool InsFound = false; /***** Clear data *****/ - Ins->CtyCod = -1L; - Ins->Status = (Ins_Status_t) 0; - Ins->RequesterUsrCod = -1L; - Ins->ShrtName[0] = - Ins->FullName[0] = - Ins->WWW[0] = '\0'; - Ins->Ctrs.Num = 0; + Ins->CtyCod = -1L; + Ins->Status = (Ins_Status_t) 0; + Ins->RequesterUsrCod = -1L; + Ins->ShrtName[0] = + Ins->FullName[0] = + Ins->WWW[0] = '\0'; + Ins->Ctrs.Num = 0; + Ins->Ctrs.Lst = NULL; + Ins->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT; + /***** Check if institution code is correct *****/ if (Ins->InsCod > 0) @@ -786,11 +776,6 @@ bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins, Str_Copy (Ins->WWW,row[5], Cns_MAX_BYTES_WWW); - /* Get extra data */ - if (GetExtraData == Ins_GET_EXTRA_DATA) - /* Get number of centres in this institution */ - Ins->Ctrs.Num = Ctr_GetNumCtrsInIns (Ins->InsCod); - /* Set return value */ InsFound = true; } @@ -1022,6 +1007,7 @@ static void Ins_ListInstitutionsForEdition (void) char WWW[Cns_MAX_BYTES_WWW + 1]; struct UsrData UsrDat; bool ICanEdit; + unsigned NumCtrss; unsigned NumUsrsInCrssOfIns; unsigned NumUsrsWhoClaimToBelongToIns; Ins_StatusTxt_t StatusTxt; @@ -1042,6 +1028,7 @@ static void Ins_ListInstitutionsForEdition (void) Ins = &Gbl.Hierarchy.Cty.Inss.Lst[NumIns]; ICanEdit = Ins_CheckIfICanEdit (Ins); + NumCtrss = Ctr_GetNumCtrsInIns (Ins->InsCod); NumUsrsInCrssOfIns = Usr_GetNumUsrsInCrssOfIns (Rol_UNK,Ins->InsCod); // Here Rol_UNK means "all users" NumUsrsWhoClaimToBelongToIns = Usr_GetNumUsrsWhoClaimToBelongToIns (Ins->InsCod); @@ -1050,7 +1037,7 @@ static void Ins_ListInstitutionsForEdition (void) /* Put icon to remove institution */ HTM_TD_Begin ("class=\"BM\""); if (!ICanEdit || - Ins->Ctrs.Num || // Institution has centres + NumCtrss || // Institution has centres NumUsrsInCrssOfIns || // Institution has users NumUsrsWhoClaimToBelongToIns) // Institution has users // Institution has centres or users ==> deletion forbidden @@ -1133,7 +1120,7 @@ static void Ins_ListInstitutionsForEdition (void) /* Number of centres */ HTM_TD_Begin ("class=\"DAT RM\""); - HTM_Unsigned (Ins->Ctrs.Num); + HTM_Unsigned (NumCtrss); HTM_TD_End (); /* Number of users in courses of this institution */ @@ -1298,12 +1285,12 @@ void Ins_RemoveInstitution (void) Ins_EditingIns->InsCod = Ins_GetAndCheckParamOtherInsCod (1); /***** Get data of the institution from database *****/ - Ins_GetDataOfInstitutionByCod (Ins_EditingIns,Ins_GET_EXTRA_DATA); + Ins_GetDataOfInstitutionByCod (Ins_EditingIns); /***** Check if this institution has users *****/ if (!Ins_CheckIfICanEdit (Ins_EditingIns)) Lay_NoPermissionExit (); - else if (Ins_EditingIns->Ctrs.Num) + else if (Ctr_GetNumCtrsInIns (Ins_EditingIns->InsCod)) // Institution has centres ==> don't remove Ale_CreateAlert (Ale_WARNING,NULL, Txt_To_remove_an_institution_you_must_first_remove_all_centres_and_users_in_the_institution); @@ -1343,6 +1330,8 @@ void Ins_RemoveInstitution (void) Ins_FlushCacheShortNameOfInstitution (); Ins_FlushCacheFullNameAndCtyOfInstitution (); Dpt_FlushCacheNumDptsInIns (); + Ctr_FlushCacheNumCtrsInIns (); + Deg_FlushCacheNumDegsInIns (); Crs_FlushCacheNumCrssInIns (); Usr_FlushCacheNumUsrsWhoClaimToBelongToIns (); Usr_FlushCacheNumUsrsInCrssOfIns (); @@ -1415,7 +1404,7 @@ void Ins_RenameInstitution (struct Instit *Ins,Cns_ShrtOrFullName_t ShrtOrFullNa Par_GetParToText (ParamName,NewInsName,MaxBytes); /***** Get from the database the old names of the institution *****/ - Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (Ins); /***** Check if new name is empty *****/ if (NewInsName[0]) @@ -1507,7 +1496,7 @@ void Ins_ChangeInsWWW (void) Par_GetParToText ("WWW",NewWWW,Cns_MAX_BYTES_WWW); /***** Get data of institution *****/ - Ins_GetDataOfInstitutionByCod (Ins_EditingIns,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (Ins_EditingIns); /***** Check if new WWW is empty *****/ if (NewWWW[0]) @@ -1568,7 +1557,7 @@ void Ins_ChangeInsStatus (void) Status = Ins_GetStatusBitsFromStatusTxt (StatusTxt); // New status /***** Get data of institution *****/ - Ins_GetDataOfInstitutionByCod (Ins_EditingIns,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (Ins_EditingIns); /***** Update status in table of institutions *****/ DB_QueryUPDATE ("can not update the status of an institution", @@ -1987,7 +1976,7 @@ void Ins_ListInssFound (MYSQL_RES **mysql_res,unsigned NumInss) Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]); /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_EXTRA_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Write data of this institution */ Ins_ListOneInstitutionForSeeing (&Ins,NumIns); diff --git a/swad_institution.h b/swad_institution.h index da09b8d6..11cb3b03 100644 --- a/swad_institution.h +++ b/swad_institution.h @@ -99,11 +99,10 @@ void Ins_DrawInstitutionLogoAndNameWithLink (struct Instit *Ins,Act_Action_t Act void Ins_ShowInssOfCurrentCty (void); void Ins_EditInstitutions (void); -void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData); +void Ins_GetListInstitutions (long CtyCod); void Ins_WriteInstitutionNameAndCty (long InsCod); -bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins, - Ins_GetExtraData_t GetExtraData); +bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins); void Ins_FlushCacheShortNameOfInstitution (void); void Ins_GetShortNameOfInstitution (struct Instit *Ins); void Ins_FlushCacheFullNameAndCtyOfInstitution (void); diff --git a/swad_layout.c b/swad_layout.c index e0d7755a..9cd992ff 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1553,7 +1553,7 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, /***** Get data of institution *****/ Ins.InsCod = InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /***** Get data of degree *****/ Deg.DegCod = DegCod; diff --git a/swad_notification.c b/swad_notification.c index 6be3cce5..3dbc5fdc 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -403,7 +403,7 @@ void Ntf_ShowMyNotifications (void) /* Get institution code (row[2]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Get centre code (row[3]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); @@ -1650,7 +1650,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign /* Get institution code (row[2]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /* Get centre code (row[3]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); diff --git a/swad_record.c b/swad_record.c index 9c0c5bec..738d7445 100644 --- a/swad_record.c +++ b/swad_record.c @@ -2199,7 +2199,7 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView, Ins.InsCod = UsrDat->InsCod; if (Ins.InsCod > 0) - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /***** Begin box and table *****/ sprintf (StrRecordWidth,"%upx",Rec_RECORD_WIDTH); @@ -3994,7 +3994,7 @@ static void Rec_ShowFormMyInsCtrDpt (bool IAmATeacher) /* Get list of institutions in this country */ Ins_FreeListInstitutions (); if (Gbl.Usrs.Me.UsrDat.InsCtyCod > 0) - Ins_GetListInstitutions (Gbl.Usrs.Me.UsrDat.InsCtyCod,Ins_GET_BASIC_DATA); + Ins_GetListInstitutions (Gbl.Usrs.Me.UsrDat.InsCtyCod); /* Begin form to select institution */ Frm_StartFormAnchor (ActChgMyIns,Rec_MY_INS_CTR_DPT_ID); @@ -4172,7 +4172,7 @@ void Rec_UpdateMyInstitution (void) /* Get country of institution */ if (Ins.InsCod > 0) { - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); if (Gbl.Usrs.Me.UsrDat.InsCtyCod != Ins.CtyCod) Gbl.Usrs.Me.UsrDat.InsCtyCod = Ins.CtyCod; } diff --git a/swad_report.c b/swad_report.c index 6578e204..3f54bff7 100644 --- a/swad_report.c +++ b/swad_report.c @@ -563,7 +563,7 @@ static void Rep_WriteSectionUsrInfo (void) /***** User's institution *****/ Ins.InsCod = Gbl.Usrs.Me.UsrDat.InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); fprintf (Gbl.F.Rep,"
  • %s: %s
  • ", Txt_Institution, Ins.FullName); diff --git a/swad_statistic.c b/swad_statistic.c index 33df701f..152bc02f 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -3368,7 +3368,7 @@ static void Sta_WriteInstitution (long InsCod) { /***** Get data of institution *****/ Ins.InsCod = InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); /***** Title in cell *****/ HTM_TD_Begin ("class=\"LOG LM\" title=\"%s\"",Ins.FullName); diff --git a/swad_timeline.c b/swad_timeline.c index 0ca7907b..eeca691b 100644 --- a/swad_timeline.c +++ b/swad_timeline.c @@ -1611,7 +1611,7 @@ static void TL_WriteNote (const struct TL_Note *SocNot, case TL_NOTE_INS_SHA_PUB_FILE: /* Get institution data */ Ins.InsCod = SocNot->HieCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); break; case TL_NOTE_CTR_DOC_PUB_FILE: case TL_NOTE_CTR_SHA_PUB_FILE: diff --git a/swad_user.c b/swad_user.c index 1b49d5c7..3d4a67af 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3716,7 +3716,7 @@ void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat, /***** Write rest of main user's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); Usr_WriteMainUsrDataExceptUsrID (UsrDat,BgColor); HTM_TD_Begin ("class=\"LM %s\"",BgColor); Ins_DrawInstitutionLogoWithLink (&Ins,25); @@ -3760,7 +3760,7 @@ static void Usr_WriteRowGstAllData (struct UsrData *UsrDat) /***** Write rest of guest's main data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteEmail (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteUsrData (Gbl.ColorRows[Gbl.RowEvenOdd], @@ -3864,7 +3864,7 @@ static void Usr_WriteRowStdAllData (struct UsrData *UsrDat,char *GroupNames) /***** Write rest of main student's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteEmail (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteUsrData (Gbl.ColorRows[Gbl.RowEvenOdd], @@ -3983,7 +3983,7 @@ static void Usr_WriteRowTchAllData (struct UsrData *UsrDat) /***** Write rest of main teacher's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteEmail (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); Usr_WriteUsrData (Gbl.ColorRows[Gbl.RowEvenOdd], @@ -4061,7 +4061,7 @@ static void Usr_WriteRowAdmData (unsigned NumUsr,struct UsrData *UsrDat) /***** Write rest of main administrator's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); + Ins_GetDataOfInstitutionByCod (&Ins); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd]); HTM_TD_Begin ("class=\"LM %s\"",Gbl.ColorRows[Gbl.RowEvenOdd]);