diff --git a/Makefile b/Makefile index 12eaeeb6..8f0fea47 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \ swad_game.o swad_global.o swad_group.o \ swad_help.o swad_hierarchy.o swad_holiday.o swad_HTML.o \ swad_icon.o swad_ID.o swad_indicator.o swad_info.o swad_institution.o \ - swad_language.o swad_layout.o swad_link.o swad_logo.o \ + swad_language.o swad_layout.o swad_link.o swad_log.o swad_logo.o \ swad_mail.o swad_main.o swad_mark.o swad_match.o swad_match_result.o \ swad_media.o swad_menu.o swad_message.o swad_MFU.o \ swad_network.o swad_nickname.o swad_notice.o swad_notification.o \ diff --git a/swad_action.c b/swad_action.c index 5cb97c08..7b78b7fc 100644 --- a/swad_action.c +++ b/swad_action.c @@ -53,6 +53,7 @@ #include "swad_ID.h" #include "swad_indicator.h" #include "swad_language.h" +#include "swad_log.h" #include "swad_mail.h" #include "swad_mark.h" #include "swad_match.h" @@ -3138,7 +3139,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActSeeAccCrs ] = { 119,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_SeeCrsAccesses ,NULL}, [ActSeeAllStaCrs ] = { 768,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Ind_ShowIndicatorsCourses ,NULL}, - [ActLstClk ] = { 989,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_ShowLastClicks ,NULL}, + [ActLstClk ] = { 989,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Log_ShowLastClicks ,NULL}, [ActRefLstClk ] = { 994,-1,TabUnk,ActRefLstClk ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_AJAX_RFRESH,NULL ,Lay_RefreshLastClicks ,NULL}, [ActSeeMyUsgRep ] = {1582,-1,TabUnk,ActReqMyUsgRep ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rep_ShowMyUsageReport ,NULL}, diff --git a/swad_centre.c b/swad_centre.c index dc122fc0..a3e6fd86 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -252,7 +252,7 @@ void Ctr_DrawCentreLogoAndNameWithLink (struct Centre *Ctr,Act_Action_t Action, HTM_BUTTON_SUBMIT_Begin (Gbl.Title,ClassLink,NULL); /***** Centre logo and name *****/ - Log_DrawLogo (Hie_CTR,Ctr->CtrCod,Ctr->ShrtName,16,ClassLogo,true); + Lgo_DrawLogo (Hie_CTR,Ctr->CtrCod,Ctr->ShrtName,16,ClassLogo,true); HTM_TxtF (" %s",Ctr->FullName); /***** End link *****/ @@ -343,7 +343,7 @@ static void Ctr_Configuration (bool PrintView) " class=\"FRAME_TITLE_BIG\" title=\"%s\"", Gbl.Hierarchy.Ctr.WWW, Gbl.Hierarchy.Ctr.FullName); - Log_DrawLogo (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod, + Lgo_DrawLogo (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.ShrtName,64,NULL,true); HTM_BR (); HTM_Txt (Gbl.Hierarchy.Ctr.FullName); @@ -697,7 +697,7 @@ static void Ctr_PutIconsCtrConfig (void) // have permission to upload logo and photo of the centre { /***** Put icon to upload logo of centre *****/ - Log_PutIconToChangeLogo (Hie_CTR); + Lgo_PutIconToChangeLogo (Hie_CTR); /***** Put icon to upload photo of centre *****/ Ctr_PutIconToChangePhoto (); @@ -1500,7 +1500,7 @@ static void Ctr_ListCentresForEdition (void) /* Centre logo */ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Ctr->FullName); - Log_DrawLogo (Hie_CTR,Ctr->CtrCod,Ctr->ShrtName,20,NULL,true); + Lgo_DrawLogo (Hie_CTR,Ctr->CtrCod,Ctr->ShrtName,20,NULL,true); HTM_TD_End (); /* Place */ @@ -2244,7 +2244,7 @@ static void Ctr_PutParamGoToCtr (void) void Ctr_RequestLogo (void) { - Log_RequestLogo (Hie_CTR); + Lgo_RequestLogo (Hie_CTR); } /*****************************************************************************/ @@ -2253,7 +2253,7 @@ void Ctr_RequestLogo (void) void Ctr_ReceiveLogo (void) { - Log_ReceiveLogo (Hie_CTR); + Lgo_ReceiveLogo (Hie_CTR); } /*****************************************************************************/ @@ -2262,7 +2262,7 @@ void Ctr_ReceiveLogo (void) void Ctr_RemoveLogo (void) { - Log_RemoveLogo (Hie_CTR); + Lgo_RemoveLogo (Hie_CTR); } /*****************************************************************************/ @@ -2488,7 +2488,7 @@ static void Ctr_PutFormToCreateCentre (void) /***** Centre logo *****/ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Ctr_EditingCtr->FullName); - Log_DrawLogo (Hie_CTR,-1L,"",20,NULL,true); + Lgo_DrawLogo (Hie_CTR,-1L,"",20,NULL,true); HTM_TD_End (); /***** Place *****/ diff --git a/swad_changelog.h b/swad_changelog.h index 24d22e96..a4e18c20 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -490,13 +490,14 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.91.2 (2019-12-14)" +#define Log_PLATFORM_VERSION "SWAD 19.92 (2019-12-14)" #define CSS_FILE "swad19.90.1.css" #define JS_FILE "swad19.91.1.js" /* // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Impedir la creación y edición de proyectos si no son editables. + Version 19.92: Dec 14, 2019 New module for log database tables. (248625 lines) Version 19.91.2: Dec 14, 2019 Code refactoring related to doubles. (248538 lines) Version 19.91.1: Dec 14, 2019 Changes in match layout. (248533 lines) Version 19.91: Dec 13, 2019 Changes in match countdown. diff --git a/swad_chat.c b/swad_chat.c index 17a18ed2..edca6cf8 100644 --- a/swad_chat.c +++ b/swad_chat.c @@ -190,7 +190,7 @@ void Cht_ShowListOfAvailableChatRooms (void) "%s %s", Txt_Degree,Deg.ShrtName); Cht_WriteLinkToChat1 (ThisRoomCode,ThisRoomShrtName,ThisRoomFullName,1,IsLastItemInLevel); - Log_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,16,NULL,true); + Lgo_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,16,NULL,true); Cht_WriteLinkToChat2 (ThisRoomCode,ThisRoomFullName); /* Get my courses in this degree from database */ diff --git a/swad_connected.c b/swad_connected.c index 9c7a4496..f2ba7146 100644 --- a/swad_connected.c +++ b/swad_connected.c @@ -37,6 +37,7 @@ #include "swad_global.h" #include "swad_hierarchy.h" #include "swad_HTML.h" +#include "swad_log.h" #include "swad_parameter.h" #include "swad_photo.h" #include "swad_role.h" @@ -87,7 +88,7 @@ void Con_ShowConnectedUsrs (void) if (Gbl.Usrs.Me.Logged) { Mnu_ContextMenuBegin (); - Sta_PutLinkToLastClicks (); // Show last clicks in real time + Log_PutLinkToLastClicks (); // Show last clicks in real time Mnu_ContextMenuEnd (); } diff --git a/swad_course.c b/swad_course.c index ec9236c5..b2ed3aa1 100644 --- a/swad_course.c +++ b/swad_course.c @@ -223,7 +223,7 @@ static void Crs_Configuration (bool PrintView) " class=\"FRAME_TITLE_BIG\" title=\"%s\"", Gbl.Hierarchy.Deg.WWW, Gbl.Hierarchy.Deg.FullName); - Log_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, + Lgo_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.ShrtName,64,NULL,true); if (PutLink) HTM_A_End (); @@ -638,7 +638,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) Highlight ? ClassHighlight : ClassNormal, NULL); - Log_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName,16,NULL,true); + Lgo_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName,16,NULL,true); HTM_TxtF (" %s",Ins.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); @@ -672,7 +672,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) Highlight ? ClassHighlight : ClassNormal, NULL); - Log_DrawLogo (Hie_CTR,Ctr.CtrCod,Ctr.ShrtName,16,NULL,true); + Lgo_DrawLogo (Hie_CTR,Ctr.CtrCod,Ctr.ShrtName,16,NULL,true); HTM_TxtF (" %s",Ctr.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); @@ -706,7 +706,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) Highlight ? ClassHighlight : ClassNormal, NULL); - Log_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,16,NULL,true); + Lgo_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,16,NULL,true); HTM_TxtF (" %s",Deg.ShrtName); HTM_BUTTON_End (); Frm_EndForm (); @@ -3183,7 +3183,7 @@ static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnA Txt_Go_to_X, row[2]); HTM_BUTTON_SUBMIT_Begin (Gbl.Title,ClassLink,NULL); - Log_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,20,"CT",true); + Lgo_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,20,"CT",true); HTM_TxtF (" %s (%s)",row[2],row[6]); HTM_BUTTON_End (); Frm_EndForm (); diff --git a/swad_degree.c b/swad_degree.c index 593b4537..9b1f9c52 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -256,7 +256,7 @@ void Deg_DrawDegreeLogoAndNameWithLink (struct Degree *Deg,Act_Action_t Action, HTM_BUTTON_SUBMIT_Begin (Gbl.Title,ClassLink,NULL); /***** Degree logo and name *****/ - Log_DrawLogo (Hie_DEG,Deg->DegCod,Deg->ShrtName,16,ClassLogo,true); + Lgo_DrawLogo (Hie_DEG,Deg->DegCod,Deg->ShrtName,16,ClassLogo,true); HTM_TxtF (" %s",Deg->FullName); /***** End link *****/ @@ -327,7 +327,7 @@ static void Deg_Configuration (bool PrintView) " class=\"FRAME_TITLE_BIG\" title=\"%s\"", Gbl.Hierarchy.Deg.WWW, Gbl.Hierarchy.Deg.FullName); - Log_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, + Lgo_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.ShrtName,64,NULL,true); HTM_BR (); HTM_Txt (Gbl.Hierarchy.Deg.FullName); @@ -549,7 +549,7 @@ static void Deg_PutIconsToPrintAndUpload (void) // Only degree admins, centre admins, institution admins and system admins // have permission to upload logo of the degree /***** Link to upload logo of degree *****/ - Log_PutIconToChangeLogo (Hie_DEG); + Lgo_PutIconToChangeLogo (Hie_DEG); } /*****************************************************************************/ @@ -725,7 +725,7 @@ static void Deg_ListDegreesForEdition (void) /* Degree logo */ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Deg->FullName); - Log_DrawLogo (Hie_DEG,Deg->DegCod,Deg->ShrtName,20,NULL,true); + Lgo_DrawLogo (Hie_DEG,Deg->DegCod,Deg->ShrtName,20,NULL,true); HTM_TD_End (); /* Degree short name */ @@ -943,7 +943,7 @@ static void Deg_PutFormToCreateDegree (void) /***** Degree logo *****/ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Deg_EditingDeg->FullName); - Log_DrawLogo (Hie_DEG,-1L,"",20,NULL,true); + Lgo_DrawLogo (Hie_DEG,-1L,"",20,NULL,true); HTM_TD_End (); /***** Degree short name *****/ @@ -2286,7 +2286,7 @@ static void Deg_PutParamGoToDeg (void) void Deg_RequestLogo (void) { - Log_RequestLogo (Hie_DEG); + Lgo_RequestLogo (Hie_DEG); } /*****************************************************************************/ @@ -2295,7 +2295,7 @@ void Deg_RequestLogo (void) void Deg_ReceiveLogo (void) { - Log_ReceiveLogo (Hie_DEG); + Lgo_ReceiveLogo (Hie_DEG); } /*****************************************************************************/ @@ -2304,7 +2304,7 @@ void Deg_ReceiveLogo (void) void Deg_RemoveLogo (void) { - Log_RemoveLogo (Hie_DEG); + Lgo_RemoveLogo (Hie_DEG); } /*****************************************************************************/ diff --git a/swad_exam.c b/swad_exam.c index a873d5e0..c69cf912 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -1047,7 +1047,7 @@ static void Exa_ShowExamAnnouncement (long ExaCod, else HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"%s\"", Ins.WWW,StyleTitle); - Log_DrawLogo (Hie_INS,Ins.InsCod,Ins.FullName,64,NULL,true); + Lgo_DrawLogo (Hie_INS,Ins.InsCod,Ins.FullName,64,NULL,true); HTM_BR (); HTM_Txt (Ins.FullName); if (TypeViewExamAnnouncement == Exa_PRINT_VIEW) diff --git a/swad_figure.c b/swad_figure.c index b6f20d1d..8b889fd9 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -1476,7 +1476,7 @@ static void Fig_ShowInss (MYSQL_RES **mysql_res,unsigned NumInss, HTM_BUTTON_SUBMIT_Begin (Ins.ShrtName,The_ClassFormLinkInBox[Gbl.Prefs.Theme],NULL); if (Gbl.Usrs.Listing.WithPhotos) { - Log_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName, + Lgo_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName, 40,NULL,true); HTM_NBSP (); } diff --git a/swad_file_browser.c b/swad_file_browser.c index b3d7643b..5a56f2c5 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -11959,7 +11959,7 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row) Txt_Go_to_X, InsShortName); HTM_BUTTON_SUBMIT_Begin (Gbl.Title,"BT_LINK LT DAT",NULL); - Log_DrawLogo (Hie_INS,InsCod,InsShortName,20,"BT_LINK LT",true); + Lgo_DrawLogo (Hie_INS,InsCod,InsShortName,20,"BT_LINK LT",true); HTM_TxtF (" %s",InsShortName); HTM_BUTTON_End (); Frm_EndForm (); @@ -11976,7 +11976,7 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row) Txt_Go_to_X, CtrShortName); HTM_BUTTON_SUBMIT_Begin (Gbl.Title,"BT_LINK LT DAT",NULL); - Log_DrawLogo (Hie_CTR,CtrCod,CtrShortName,20,"LT",true); + Lgo_DrawLogo (Hie_CTR,CtrCod,CtrShortName,20,"LT",true); HTM_TxtF (" %s",CtrShortName); HTM_BUTTON_End (); Frm_EndForm (); @@ -11993,7 +11993,7 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row) Txt_Go_to_X, DegShortName); HTM_BUTTON_SUBMIT_Begin (Gbl.Title,"BT_LINK LT DAT",NULL); - Log_DrawLogo (Hie_DEG,DegCod,DegShortName,20,"LT",true); + Lgo_DrawLogo (Hie_DEG,DegCod,DegShortName,20,"LT",true); HTM_TxtF (" %s",DegShortName); HTM_BUTTON_End (); Frm_EndForm (); diff --git a/swad_forum.c b/swad_forum.c index 5edc6dda..bdde894d 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -2084,15 +2084,15 @@ static void For_WriteLinkToForum (struct Forum *Forum, break; case For_FORUM_INSTIT_USRS: case For_FORUM_INSTIT_TCHS: - Log_DrawLogo (Hie_INS,Forum->Location,ForumName,16,NULL,true); + Lgo_DrawLogo (Hie_INS,Forum->Location,ForumName,16,NULL,true); break; case For_FORUM_CENTRE_USRS: case For_FORUM_CENTRE_TCHS: - Log_DrawLogo (Hie_CTR,Forum->Location,ForumName,16,NULL,true); + Lgo_DrawLogo (Hie_CTR,Forum->Location,ForumName,16,NULL,true); break; case For_FORUM_DEGREE_USRS: case For_FORUM_DEGREE_TCHS: - Log_DrawLogo (Hie_DEG,Forum->Location,ForumName,16,NULL,true); + Lgo_DrawLogo (Hie_DEG,Forum->Location,ForumName,16,NULL,true); break; case For_FORUM_COURSE_USRS: case For_FORUM_COURSE_TCHS: diff --git a/swad_hierarchy.c b/swad_hierarchy.c index c555f1bc..967af21c 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -439,16 +439,16 @@ void Hie_WriteBigNameCtyInsCtrDegCrs (void) Cty_DrawCountryMap (&Gbl.Hierarchy.Cty,"COUNTRY_MAP_TITLE"); break; case Hie_INS: // Institution - Log_DrawLogo (Hie_INS,Gbl.Hierarchy.Ins.InsCod, + Lgo_DrawLogo (Hie_INS,Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.ShrtName,40,"TOP_LOGO",false); break; case Hie_CTR: // Centre - Log_DrawLogo (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod, + Lgo_DrawLogo (Hie_CTR,Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.ShrtName,40,"TOP_LOGO",false); break; case Hie_DEG: // Degree case Hie_CRS: // Course - Log_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, + Lgo_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.ShrtName,40,"TOP_LOGO",false); break; default: diff --git a/swad_institution.c b/swad_institution.c index 9ef88911..f121d80e 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -237,7 +237,7 @@ void Ins_DrawInstitutionLogoWithLink (struct Instit *Ins,unsigned Size) Ins_PutParamInsCod (Ins->InsCod); HTM_BUTTON_SUBMIT_Begin (Ins->FullName,"BT_LINK",NULL); } - Log_DrawLogo (Hie_INS,Ins->InsCod,Ins->FullName, + Lgo_DrawLogo (Hie_INS,Ins->InsCod,Ins->FullName, Size,NULL,true); if (PutLink) { @@ -266,7 +266,7 @@ void Ins_DrawInstitutionLogoAndNameWithLink (struct Instit *Ins,Act_Action_t Act HTM_BUTTON_SUBMIT_Begin (Gbl.Title,ClassLink,NULL); /***** Institution logo and name *****/ - Log_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName,16,ClassLogo,true); + Lgo_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName,16,ClassLogo,true); HTM_TxtF (" %s",Ins->FullName); /***** End link *****/ @@ -340,7 +340,7 @@ static void Ins_Configuration (bool PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"FRAME_TITLE_BIG\" title=\"%s\"", Gbl.Hierarchy.Ins.WWW, Gbl.Hierarchy.Ins.FullName); - Log_DrawLogo (Hie_INS,Gbl.Hierarchy.Ins.InsCod, + Lgo_DrawLogo (Hie_INS,Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.ShrtName,64,NULL,true); HTM_BR (); HTM_Txt (Gbl.Hierarchy.Ins.FullName); @@ -613,7 +613,7 @@ static void Ins_PutIconsToPrintAndUpload (void) if (Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) /***** Icon to upload logo of institution *****/ - Log_PutIconToChangeLogo (Hie_INS); + Lgo_PutIconToChangeLogo (Hie_INS); /***** Put icon to view places *****/ Plc_PutIconToViewPlaces (); @@ -1475,7 +1475,7 @@ static void Ins_ListInstitutionsForEdition (void) /* Institution logo */ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Ins->FullName); - Log_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName,20,NULL,true); + Lgo_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName,20,NULL,true); HTM_TD_End (); /* Institution short name */ @@ -2141,7 +2141,7 @@ static void Ins_PutParamGoToIns (void) void Ins_RequestLogo (void) { - Log_RequestLogo (Hie_INS); + Lgo_RequestLogo (Hie_INS); } /*****************************************************************************/ @@ -2150,7 +2150,7 @@ void Ins_RequestLogo (void) void Ins_ReceiveLogo (void) { - Log_ReceiveLogo (Hie_INS); + Lgo_ReceiveLogo (Hie_INS); } /*****************************************************************************/ @@ -2159,7 +2159,7 @@ void Ins_ReceiveLogo (void) void Ins_RemoveLogo (void) { - Log_RemoveLogo (Hie_INS); + Lgo_RemoveLogo (Hie_INS); } /*****************************************************************************/ @@ -2198,7 +2198,7 @@ static void Ins_PutFormToCreateInstitution (void) /***** Institution logo *****/ HTM_TD_Begin ("title=\"%s\" class=\"HIE_LOGO\"",Ins_EditingIns->FullName); - Log_DrawLogo (Hie_INS,-1L,"",20,NULL,true); + Lgo_DrawLogo (Hie_INS,-1L,"",20,NULL,true); HTM_TD_End (); /***** Institution short name *****/ diff --git a/swad_layout.c b/swad_layout.c index 9d68a1e8..fb8519c4 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -46,6 +46,7 @@ #include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_language.h" +#include "swad_log.h" #include "swad_logo.h" #include "swad_MFU.h" #include "swad_notice.h" @@ -1337,7 +1338,7 @@ void Lay_ShowErrorAndExit (const char *Txt) { /***** Log access *****/ Gbl.TimeSendInMicroseconds = 0L; - Sta_LogAccess (Txt); + Log_LogAccess (Txt); } else { @@ -1354,7 +1355,7 @@ void Lay_ShowErrorAndExit (const char *Txt) Sta_ComputeTimeToSendPage (); /***** Log access *****/ - Sta_LogAccess (Txt); + Log_LogAccess (Txt); /***** Update last data for next time *****/ if (Gbl.Usrs.Me.Logged) @@ -1463,7 +1464,7 @@ void Lay_RefreshNotifsAndConnected (void) else if (!(Gbl.PID % 103)) Set_RemoveOldSettingsFromIP (); // Remove old settings from IP else if (!(Gbl.PID % 107)) - Sta_RemoveOldEntriesRecentLog (); // Remove old entries in recent log table, it's a slow query + Log_RemoveOldEntriesRecentLog (); // Remove old entries in recent log table, it's a slow query else if (!(Gbl.PID % 109)) Fil_RemoveOldTmpFiles (Cfg_PATH_OUT_PRIVATE ,Cfg_TIME_TO_DELETE_HTML_OUTPUT ,false); else if (!(Gbl.PID % 113)) @@ -1514,7 +1515,7 @@ void Lay_RefreshLastClicks (void) HTM_TxtF ("%lu|",Cfg_TIME_TO_REFRESH_LAST_CLICKS); /***** Get and show last clicks *****/ - Sta_GetAndShowLastClicks (); + Log_GetAndShowLastClicks (); } } @@ -1572,7 +1573,7 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, { if (!PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\"",Ins.WWW); - Log_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName,40,NULL,true); + Lgo_DrawLogo (Hie_INS,Ins.InsCod,Ins.ShrtName,40,NULL,true); if (!PrintView) HTM_A_End (); } @@ -1619,7 +1620,7 @@ void Lay_WriteHeaderClassPhoto (bool PrintView,bool DrawingClassPhoto, if (!PrintView) HTM_A_Begin ("href=\"%s\" target=\"_blank\" class=\"CLASSPHOTO_TITLE\"", Deg.WWW); - Log_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,40,NULL,true); + Lgo_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,40,NULL,true); if (!PrintView) HTM_A_End (); } diff --git a/swad_log.c b/swad_log.c new file mode 100644 index 00000000..f254634c --- /dev/null +++ b/swad_log.c @@ -0,0 +1,357 @@ +// swad_log.c: access log stored in database + +/* + SWAD (Shared Workspace At a Distance), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2019 Antonio Cañas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General 3 License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*****************************************************************************/ +/*********************************** Headers *********************************/ +/*****************************************************************************/ + +#include "swad_action.h" +#include "swad_config.h" +#include "swad_database.h" +#include "swad_global.h" +#include "swad_HTML.h" +#include "swad_log.h" +#include "swad_profile.h" +#include "swad_role.h" +#include "swad_statistic.h" + +/*****************************************************************************/ +/****************************** Public constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private constants *****************************/ +/*****************************************************************************/ + +#define Log_SECONDS_IN_RECENT_LOG ((time_t) (Cfg_DAYS_IN_RECENT_LOG * 24UL * 60UL * 60UL)) // Remove entries in recent log oldest than this time + +/*****************************************************************************/ +/****************************** Private types ********************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/************** External global variables from others modules ****************/ +/*****************************************************************************/ + +extern struct Globals Gbl; + +/*****************************************************************************/ +/************************* Private global variables **************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private prototypes ****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/**************************** Log access in database *************************/ +/*****************************************************************************/ + +void Log_LogAccess (const char *Comments) + { + long LogCod; + long ActCod = Act_GetActCod (Gbl.Action.Act); + Rol_Role_t RoleToStore = (Gbl.Action.Act == ActLogOut) ? Gbl.Usrs.Me.Role.LoggedBeforeCloseSession : + Gbl.Usrs.Me.Role.Logged; + + /***** Insert access into database *****/ + /* Log access in historical log (log_full) */ + LogCod = + DB_QueryINSERTandReturnCode ("can not log access (full)", + "INSERT INTO log_full " + "(ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod," + "Role,ClickTime,TimeToGenerate,TimeToSend,IP)" + " VALUES " + "(%ld,%ld,%ld,%ld,%ld,%ld,%ld," + "%u,NOW(),%ld,%ld,'%s')", + ActCod, + Gbl.Hierarchy.Cty.CtyCod, + Gbl.Hierarchy.Ins.InsCod, + Gbl.Hierarchy.Ctr.CtrCod, + Gbl.Hierarchy.Deg.DegCod, + Gbl.Hierarchy.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) RoleToStore, + Gbl.TimeGenerationInMicroseconds, + Gbl.TimeSendInMicroseconds, + Gbl.IP); + + /* Log access in recent log (log_recent) */ + DB_QueryINSERT ("can not log access (recent)", + "INSERT INTO log_recent " + "(LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod," + "Role,ClickTime,TimeToGenerate,TimeToSend,IP)" + " VALUES " + "(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld," + "%u,NOW(),%ld,%ld,'%s')", + LogCod,ActCod, + Gbl.Hierarchy.Cty.CtyCod, + Gbl.Hierarchy.Ins.InsCod, + Gbl.Hierarchy.Ctr.CtrCod, + Gbl.Hierarchy.Deg.DegCod, + Gbl.Hierarchy.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) RoleToStore, + Gbl.TimeGenerationInMicroseconds, + Gbl.TimeSendInMicroseconds, + Gbl.IP); + + /* Log comments */ + if (Comments) + DB_QueryINSERT ("can not log access (comments)", + "INSERT INTO log_comments" + " (LogCod,Comments)" + " VALUES" + " (%ld,'%s')", + LogCod,Comments); + + /* Log search string */ + if (Gbl.Search.LogSearch && Gbl.Search.Str[0]) + DB_QueryINSERT ("can not log access (search)", + "INSERT INTO log_search" + " (LogCod,SearchStr)" + " VALUES" + " (%ld,'%s')", + LogCod,Gbl.Search.Str); + + if (Gbl.WebService.IsWebService) + /* Log web service plugin and function */ + DB_QueryINSERT ("can not log access (comments)", + "INSERT INTO log_ws" + " (LogCod,PlgCod,FunCod)" + " VALUES" + " (%ld,%ld,%u)", + LogCod,Gbl.WebService.PlgCod, + (unsigned) Gbl.WebService.Function); + else if (Gbl.Banners.BanCodClicked > 0) + /* Log banner clicked */ + DB_QueryINSERT ("can not log banner clicked", + "INSERT INTO log_banners" + " (LogCod,BanCod)" + " VALUES" + " (%ld,%ld)", + LogCod,Gbl.Banners.BanCodClicked); + + /***** Increment my number of clicks *****/ + if (Gbl.Usrs.Me.Logged) + Prf_IncrementNumClicksUsr (Gbl.Usrs.Me.UsrDat.UsrCod); + } + +/*****************************************************************************/ +/************ Sometimes, we delete old entries in recent log table ***********/ +/*****************************************************************************/ + +void Log_RemoveOldEntriesRecentLog (void) + { + /***** Remove all expired clipboards *****/ + DB_QueryDELETE ("can not remove old entries from recent log", + "DELETE LOW_PRIORITY FROM log_recent" + " WHERE ClickTime. +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Public constants ******************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/******************************* Public types ********************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Public prototypes *****************************/ +/*****************************************************************************/ + +void Log_LogAccess (const char *Comments); +void Log_RemoveOldEntriesRecentLog (void); + +void Log_PutLinkToLastClicks (void); +void Log_ShowLastClicks (void); +void Log_GetAndShowLastClicks (void); + +#endif diff --git a/swad_logo.c b/swad_logo.c index 4cc60906..656fa53e 100644 --- a/swad_logo.c +++ b/swad_logo.c @@ -68,7 +68,7 @@ extern struct Globals Gbl; /****************************** Draw degree logo *****************************/ /*****************************************************************************/ -void Log_DrawLogo (Hie_Level_t Scope,long Cod,const char *AltText, +void Lgo_DrawLogo (Hie_Level_t Scope,long Cod,const char *AltText, unsigned Size,const char *Class,bool PutIconIfNotExists) { static const char *HieIcon[Hie_NUM_LEVELS] = @@ -195,7 +195,7 @@ void Log_DrawLogo (Hie_Level_t Scope,long Cod,const char *AltText, /************* the logo of institution, centre or degree ***************/ /*****************************************************************************/ -void Log_PutIconToChangeLogo (Hie_Level_t Scope) +void Lgo_PutIconToChangeLogo (Hie_Level_t Scope) { extern const char *Txt_Change_logo; extern const char *Txt_Upload_logo; @@ -247,7 +247,7 @@ void Log_PutIconToChangeLogo (Hie_Level_t Scope) /**** Show a form for sending a logo of the institution, centre or degree ****/ /*****************************************************************************/ -void Log_RequestLogo (Hie_Level_t Scope) +void Lgo_RequestLogo (Hie_Level_t Scope) { extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *Txt_Remove_logo; @@ -330,7 +330,7 @@ void Log_RequestLogo (Hie_Level_t Scope) /******* Receive the logo of the current institution, centre or degree *******/ /*****************************************************************************/ -void Log_ReceiveLogo (Hie_Level_t Scope) +void Lgo_ReceiveLogo (Hie_Level_t Scope) { extern const char *Txt_The_file_is_not_X; long Cod; @@ -416,7 +416,7 @@ void Log_ReceiveLogo (Hie_Level_t Scope) /******* Remove the logo of the current institution, centre or degree ********/ /*****************************************************************************/ -void Log_RemoveLogo (Hie_Level_t Scope) +void Lgo_RemoveLogo (Hie_Level_t Scope) { long Cod; const char *Folder; diff --git a/swad_logo.h b/swad_logo.h index b47d918a..79405398 100644 --- a/swad_logo.h +++ b/swad_logo.h @@ -1,7 +1,7 @@ // swad_logo.h: logo of institution, centre or degree -#ifndef _SWAD_LOG -#define _SWAD_LOG +#ifndef _SWAD_LGO +#define _SWAD_LGO /* SWAD (Shared Workspace At a Distance in Spanish), is a web platform developed at the University of Granada (Spain), @@ -39,11 +39,11 @@ /***************************** Public prototypes *****************************/ /*****************************************************************************/ -void Log_DrawLogo (Hie_Level_t Scope,long Cod,const char *AltText, +void Lgo_DrawLogo (Hie_Level_t Scope,long Cod,const char *AltText, unsigned Size,const char *Class,bool PutIconIfNotExists); -void Log_PutIconToChangeLogo (Hie_Level_t Scope); -void Log_RequestLogo (Hie_Level_t Scope); -void Log_ReceiveLogo (Hie_Level_t Scope); -void Log_RemoveLogo (Hie_Level_t Scope); +void Lgo_PutIconToChangeLogo (Hie_Level_t Scope); +void Lgo_RequestLogo (Hie_Level_t Scope); +void Lgo_ReceiveLogo (Hie_Level_t Scope); +void Lgo_RemoveLogo (Hie_Level_t Scope); #endif diff --git a/swad_photo.c b/swad_photo.c index ea51d7fb..eeaf09b5 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -2266,7 +2266,7 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) "BT_LINK DAT","CT"); else // Pho_DEGREES_PRINT { - Log_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,20,"CT",true); + Lgo_DrawLogo (Hie_DEG,Deg.DegCod,Deg.ShrtName,20,"CT",true); HTM_TxtF (" %s",Deg.FullName); } HTM_TD_End (); diff --git a/swad_record.c b/swad_record.c index f319d31d..786b321e 100644 --- a/swad_record.c +++ b/swad_record.c @@ -1750,7 +1750,7 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"LM\" style=\"width:%upx;\"",Rec_DEGREE_LOGO_SIZE); - Log_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, + Lgo_DrawLogo (Hie_DEG,Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.ShrtName,Rec_DEGREE_LOGO_SIZE,NULL,true); HTM_TD_End (); @@ -2699,7 +2699,7 @@ static void Rec_ShowInstitutionInHead (struct Instit *Ins,bool PutFormLinks) Ins_PutParamInsCod (Ins->InsCod); HTM_BUTTON_SUBMIT_Begin (Ins->FullName,"BT_LINK",NULL); } - Log_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName, + Lgo_DrawLogo (Hie_INS,Ins->InsCod,Ins->ShrtName, Rec_INSTITUTION_LOGO_SIZE,NULL,true); if (PutFormLinks) { diff --git a/swad_statistic.c b/swad_statistic.c index 12cf4b32..cd7ac8be 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -37,6 +37,7 @@ #include "swad_global.h" #include "swad_HTML.h" #include "swad_ID.h" +#include "swad_log.h" #include "swad_profile.h" #include "swad_role.h" #include "swad_statistic.h" @@ -51,8 +52,6 @@ extern struct Globals Gbl; /***************************** Private constants *****************************/ /*****************************************************************************/ -#define Sta_SECONDS_IN_RECENT_LOG ((time_t) (Cfg_DAYS_IN_RECENT_LOG * 24UL * 60UL * 60UL)) // Remove entries in recent log oldest than this time - static const unsigned Sta_CellPadding[Sta_NUM_CLICKS_GROUPED_BY] = { [Sta_CLICKS_CRS_DETAILED_LIST ] = 2, @@ -101,9 +100,6 @@ typedef enum /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Sta_PutLinkToCourseHits (void); -static void Sta_PutLinkToGlobalHits (void); - static void Sta_WriteSelectorCountType (void); static void Sta_WriteSelectorAction (void); static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse); @@ -174,113 +170,6 @@ void Sta_GetRemoteAddr (void) Gbl.IP[0] = '\0'; } -/*****************************************************************************/ -/**************************** Log access in database *************************/ -/*****************************************************************************/ - -void Sta_LogAccess (const char *Comments) - { - long LogCod; - long ActCod = Act_GetActCod (Gbl.Action.Act); - Rol_Role_t RoleToStore = (Gbl.Action.Act == ActLogOut) ? Gbl.Usrs.Me.Role.LoggedBeforeCloseSession : - Gbl.Usrs.Me.Role.Logged; - - /***** Insert access into database *****/ - /* Log access in historical log (log_full) */ - LogCod = - DB_QueryINSERTandReturnCode ("can not log access (full)", - "INSERT INTO log_full " - "(ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod," - "Role,ClickTime,TimeToGenerate,TimeToSend,IP)" - " VALUES " - "(%ld,%ld,%ld,%ld,%ld,%ld,%ld," - "%u,NOW(),%ld,%ld,'%s')", - ActCod, - Gbl.Hierarchy.Cty.CtyCod, - Gbl.Hierarchy.Ins.InsCod, - Gbl.Hierarchy.Ctr.CtrCod, - Gbl.Hierarchy.Deg.DegCod, - Gbl.Hierarchy.Crs.CrsCod, - Gbl.Usrs.Me.UsrDat.UsrCod, - (unsigned) RoleToStore, - Gbl.TimeGenerationInMicroseconds, - Gbl.TimeSendInMicroseconds, - Gbl.IP); - - /* Log access in recent log (log_recent) */ - DB_QueryINSERT ("can not log access (recent)", - "INSERT INTO log_recent " - "(LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod," - "Role,ClickTime,TimeToGenerate,TimeToSend,IP)" - " VALUES " - "(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld," - "%u,NOW(),%ld,%ld,'%s')", - LogCod,ActCod, - Gbl.Hierarchy.Cty.CtyCod, - Gbl.Hierarchy.Ins.InsCod, - Gbl.Hierarchy.Ctr.CtrCod, - Gbl.Hierarchy.Deg.DegCod, - Gbl.Hierarchy.Crs.CrsCod, - Gbl.Usrs.Me.UsrDat.UsrCod, - (unsigned) RoleToStore, - Gbl.TimeGenerationInMicroseconds, - Gbl.TimeSendInMicroseconds, - Gbl.IP); - - /* Log comments */ - if (Comments) - DB_QueryINSERT ("can not log access (comments)", - "INSERT INTO log_comments" - " (LogCod,Comments)" - " VALUES" - " (%ld,'%s')", - LogCod,Comments); - - /* Log search string */ - if (Gbl.Search.LogSearch && Gbl.Search.Str[0]) - DB_QueryINSERT ("can not log access (search)", - "INSERT INTO log_search" - " (LogCod,SearchStr)" - " VALUES" - " (%ld,'%s')", - LogCod,Gbl.Search.Str); - - if (Gbl.WebService.IsWebService) - /* Log web service plugin and function */ - DB_QueryINSERT ("can not log access (comments)", - "INSERT INTO log_ws" - " (LogCod,PlgCod,FunCod)" - " VALUES" - " (%ld,%ld,%u)", - LogCod,Gbl.WebService.PlgCod, - (unsigned) Gbl.WebService.Function); - else if (Gbl.Banners.BanCodClicked > 0) - /* Log banner clicked */ - DB_QueryINSERT ("can not log banner clicked", - "INSERT INTO log_banners" - " (LogCod,BanCod)" - " VALUES" - " (%ld,%ld)", - LogCod,Gbl.Banners.BanCodClicked); - - /***** Increment my number of clicks *****/ - if (Gbl.Usrs.Me.Logged) - Prf_IncrementNumClicksUsr (Gbl.Usrs.Me.UsrDat.UsrCod); - } - -/*****************************************************************************/ -/************ Sometimes, we delete old entries in recent log table ***********/ -/*****************************************************************************/ - -void Sta_RemoveOldEntriesRecentLog (void) - { - /***** Remove all expired clipboards *****/ - DB_QueryDELETE ("can not remove old entries from recent log", - "DELETE LOW_PRIORITY FROM log_recent" - " WHERE ClickTime