From aa43a66552131c7b20d4874b2678229ce40c62e9 Mon Sep 17 00:00:00 2001 From: acanas Date: Sat, 29 Oct 2022 12:20:54 +0200 Subject: [PATCH] Version 22.57: Oct 29, 2022 Code refactoring in search. --- swad_API.c | 10 +++-- swad_changelog.h | 3 +- swad_global.c | 4 -- swad_global.h | 2 + swad_log.c | 30 ++++++++++++- swad_log.h | 2 + swad_log_database.c | 5 +-- swad_log_database.h | 2 +- swad_record.c | 2 +- swad_search.c | 99 +++++++++++++++++++++++++++++------------ swad_search.h | 9 ++++ swad_session.c | 19 +++++--- swad_session_database.c | 13 +++--- swad_session_database.h | 4 +- swad_user.c | 4 +- swad_user_database.c | 4 +- swad_user_database.h | 2 +- 17 files changed, 149 insertions(+), 65 deletions(-) diff --git a/swad_API.c b/swad_API.c index c9a9cff6..c444be6d 100644 --- a/swad_API.c +++ b/swad_API.c @@ -1634,6 +1634,7 @@ int swad__findUsers (struct soap *soap, struct swad__getUsersOutput *getUsersOut) // output { int ReturnCode; + struct Sch_Search Search; char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]; Rol_Role_t Role; bool FilterTooShort = false; @@ -1689,13 +1690,14 @@ int swad__findUsers (struct soap *soap, Role = API_SvcRole_to_RolRole[userRole]; /***** Query users beloging to course or group from database *****/ - Str_Copy (Gbl.Search.Str,filter,sizeof (Gbl.Search.Str) - 1); + Search.WhatToSearch = Sch_SEARCH_USERS; + Str_Copy (Search.Str,filter,sizeof (Search.Str) - 1); - if (Gbl.Search.Str[0]) // Search some users + if (Search.Str[0]) // Search some users { Gbl.Scope.Current = (Gbl.Hierarchy.Level == HieLvl_CRS) ? HieLvl_CRS : - HieLvl_SYS; - if (Sch_BuildSearchQuery (SearchQuery, + HieLvl_SYS; + if (Sch_BuildSearchQuery (SearchQuery,&Search, "CONCAT_WS(' ',FirstName,Surname1,Surname2)", NULL,NULL)) { diff --git a/swad_changelog.h b/swad_changelog.h index d7c7ffad..982f2782 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -605,7 +605,7 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate TODO: Attach pdf files in multimedia. */ -#define Log_PLATFORM_VERSION "SWAD 22.56 (2022-10-29)" +#define Log_PLATFORM_VERSION "SWAD 22.57 (2022-10-29)" #define CSS_FILE "swad22.49.4.css" #define JS_FILE "swad22.49.js" /* @@ -616,6 +616,7 @@ Que al subir un fichero por defecto est Al subir cosas para los grupos, en documentos, resltar más los grupos porque no son conscientes... Exportar listas en CSV. + Version 22.57: Oct 29, 2022 Code refactoring in search. (333762 lines) Version 22.56: Oct 29, 2022 Code refactoring in user record. (333696 lines) Version 22.55: Oct 28, 2022 Code refactoring in degree types. (333694 lines) Version 22.54: Oct 28, 2022 Code refactoring and bug fixing in institutional links. (333614 lines) diff --git a/swad_global.c b/swad_global.c index 3c32b5c4..426aed32 100644 --- a/swad_global.c +++ b/swad_global.c @@ -221,10 +221,6 @@ void Gbl_InitializeGlobals (void) Gbl.Crs.Records.LstFields.Num = 0; Gbl.Crs.Records.LstFields.NestedCalls = 0; - Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; - Gbl.Search.Str[0] = '\0'; - Gbl.Search.LogSearch = false; - Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_UNKNOWN; Gbl.Usrs.Listing.RecsPerPag = Rec_DEF_RECORDS_PER_PAGE; Gbl.Usrs.Listing.WithPhotos = Usr_LIST_WITH_PHOTOS_DEF; diff --git a/swad_global.h b/swad_global.h index 09464db8..99be159e 100644 --- a/swad_global.h +++ b/swad_global.h @@ -100,12 +100,14 @@ struct Globals struct Crs_ListCourses Crss; // List of courses in current degree struct Crs_Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs. } Hierarchy; + /* struct { Sch_WhatToSearch_t WhatToSearch; char Str[Sch_MAX_BYTES_STRING_TO_FIND + 1]; bool LogSearch; } Search; + */ struct { bool IsWebService; // Must generate HTML output (IsWebService==false) or SOAP-XML output (IsWebService==true)? diff --git a/swad_log.c b/swad_log.c index ecc52b62..8f3ad022 100644 --- a/swad_log.c +++ b/swad_log.c @@ -53,6 +53,32 @@ extern struct Globals Gbl; +/*****************************************************************************/ +/************************* Private global variables **************************/ +/*****************************************************************************/ + +static bool Log_Search = false; // Log search in database? + +/*****************************************************************************/ +/***************************** Private prototypes ****************************/ +/*****************************************************************************/ + +static bool Log_GetLogSearch (void); + +/*****************************************************************************/ +/******************** Set/get logging search in database *********************/ +/*****************************************************************************/ + +void Log_SetLogSearch (bool Search) + { + Log_Search = Search; + } + +static bool Log_GetLogSearch (void) + { + return Log_Search; + } + /*****************************************************************************/ /**************************** Log access in database *************************/ /*****************************************************************************/ @@ -92,8 +118,8 @@ void Log_LogAccess (const char *Comments) } /* Log search string */ - if (Gbl.Search.LogSearch && Gbl.Search.Str[0]) - Log_DB_LogSearchString (LogCod); + if (Log_GetLogSearch ()) + Log_DB_LogSearchString (LogCod,Sch_GetSearch ()); if (Gbl.WebService.IsWebService) /* Log web service plugin and API function */ diff --git a/swad_log.h b/swad_log.h index 72cbf633..98ab121b 100644 --- a/swad_log.h +++ b/swad_log.h @@ -33,6 +33,8 @@ /***************************** Public prototypes *****************************/ /*****************************************************************************/ +void Log_SetLogSearch (bool Search); + void Log_LogAccess (const char *Comments); void Log_PutLinkToLastClicks (void); diff --git a/swad_log_database.c b/swad_log_database.c index b8dbe002..bf6c4c02 100644 --- a/swad_log_database.c +++ b/swad_log_database.c @@ -114,15 +114,14 @@ void Log_DB_LogComments (long LogCod,const char *CommentsDB) /****************************** Log search string ****************************/ /*****************************************************************************/ -void Log_DB_LogSearchString (long LogCod) +void Log_DB_LogSearchString (long LogCod,const struct Sch_Search *Search) { DB_QueryINSERT ("can not log access (search)", "INSERT INTO log_search" " (LogCod,SearchStr)" " VALUES" " (%ld,'%s')", - LogCod, - Gbl.Search.Str); + LogCod,Search->Str); } /*****************************************************************************/ diff --git a/swad_log_database.h b/swad_log_database.h index f16487fc..ea8b79ef 100644 --- a/swad_log_database.h +++ b/swad_log_database.h @@ -30,7 +30,7 @@ long Log_DB_LogAccessInHistoricalLog (long ActCod,Rol_Role_t RoleToStore); void Log_DB_LogAccessInRecentLog (long LogCod,long ActCod,Rol_Role_t RoleToStore); void Log_DB_LogComments (long LogCod,const char *CommentsDB); -void Log_DB_LogSearchString (long LogCod); +void Log_DB_LogSearchString (long LogCod,const struct Sch_Search *Search); void Log_DB_LogAPI (long LogCod); void Log_DB_LogBanner (long LogCod,long BanCodClicked); diff --git a/swad_record.c b/swad_record.c index 956d8999..43fe0f52 100644 --- a/swad_record.c +++ b/swad_record.c @@ -89,7 +89,7 @@ extern struct Globals Gbl; /************************* Private global variables **************************/ /*****************************************************************************/ -struct +static struct { struct Usr_Data *UsrDat; Rec_SharedRecordViewType_t TypeOfView; diff --git a/swad_search.c b/swad_search.c index 56f33034..b28eae36 100644 --- a/swad_search.c +++ b/swad_search.c @@ -40,6 +40,7 @@ #include "swad_HTML.h" #include "swad_institution_database.h" #include "swad_layout.h" +#include "swad_log.h" #include "swad_parameter.h" #include "swad_session_database.h" #include "swad_user.h" @@ -58,13 +59,22 @@ extern struct Globals Gbl; +/*****************************************************************************/ +/************************* Private global variables **************************/ +/*****************************************************************************/ + +static struct Sch_Search Sch_Search = + { + .WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT, + }; + /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ static void Sch_PutFormToSearchWithWhatToSearchAndScope (HieLvl_Level_t DefaultScope); static bool Sch_CheckIfIHavePermissionToSearch (Sch_WhatToSearch_t WhatToSearch); -static void Sch_GetParamSearch (void); +static void Sch_GetParamSearchStr (void); static void Sch_SearchInDB (void); static unsigned Sch_SearchCountrsInDB (const char *RangeQuery); @@ -81,6 +91,16 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery); static void Sch_SaveLastSearchIntoSession (void); + +/*****************************************************************************/ +/*********************** Get pointer to global search ************************/ +/*****************************************************************************/ + +struct Sch_Search *Sch_GetSearch (void) + { + return &Sch_Search; + } + /*****************************************************************************/ /*********************** Request search in system tab ************************/ /*****************************************************************************/ @@ -132,6 +152,7 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (HieLvl_Level_t DefaultS }; Sch_WhatToSearch_t WhatToSearch; unsigned WTS; + const struct Sch_Search *Search = Sch_GetSearch (); /***** Begin container *****/ HTM_DIV_Begin ("class=\"CM\""); @@ -178,7 +199,7 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (HieLvl_Level_t DefaultS { WTS = (unsigned) WhatToSearch; HTM_OPTION (HTM_Type_UNSIGNED,&WTS, - Gbl.Search.WhatToSearch == WhatToSearch,false, + Search->WhatToSearch == WhatToSearch,false, "%s",*Titles[WhatToSearch]); } HTM_SELECT_End (); @@ -252,10 +273,11 @@ void Sch_PutFormToSearchInPageTopHeading (void) void Sch_PutInputStringToSearch (const char *IdInputText) { extern const char *Txt_Search; + const struct Sch_Search *Search = Sch_GetSearch (); /***** String to find *****/ // Input field not required, because it can be hidden (display:none) - HTM_INPUT_SEARCH ("Search",Sch_MAX_CHARS_STRING_TO_FIND,Gbl.Search.Str, + HTM_INPUT_SEARCH ("Search",Sch_MAX_CHARS_STRING_TO_FIND,Search->Str, "id=\"%s\" size=\"18\" class=\"INPUT_%s\"" " placeholder=\"%s…\"", IdInputText, @@ -279,6 +301,7 @@ void Sch_PutMagnifyingGlassButton (Ico_Color_t Color) void Sch_GetParamWhatToSearch (void) { Sch_WhatToSearch_t WhatToSearch; + struct Sch_Search *Search = Sch_GetSearch (); /***** Get what to search from form *****/ WhatToSearch = (Sch_WhatToSearch_t) @@ -290,17 +313,19 @@ void Sch_GetParamWhatToSearch (void) /***** If parameter WhatToSearch is not present, use parameter from session *****/ if (WhatToSearch != Sch_SEARCH_UNKNOWN) - Gbl.Search.WhatToSearch = WhatToSearch; + Search->WhatToSearch = WhatToSearch; } /*****************************************************************************/ /*********************** Get string from search form *************************/ /*****************************************************************************/ -static void Sch_GetParamSearch (void) +static void Sch_GetParamSearchStr (void) { + struct Sch_Search *Search = Sch_GetSearch (); + /***** Get string to search *****/ - Par_GetParToText ("Search",Gbl.Search.Str,Sch_MAX_BYTES_STRING_TO_FIND); + Par_GetParToText ("Search",Search->Str,Sch_MAX_BYTES_STRING_TO_FIND); } /*****************************************************************************/ @@ -313,7 +338,7 @@ void Sch_GetParamsSearch (void) Sch_GetParamWhatToSearch (); /***** Get search string *****/ - Sch_GetParamSearch (); + Sch_GetParamSearchStr (); /***** Save my search in order to show it in current session *****/ if (Gbl.Usrs.Me.Logged) @@ -326,8 +351,13 @@ void Sch_GetParamsSearch (void) void Sch_SysSearch (void) { - if (Gbl.Search.Str[0]) + const struct Sch_Search *Search = Sch_GetSearch (); + + if (Search->Str[0]) { + /***** Activate logging search in database *****/ + Log_SetLogSearch (true); + /***** Show search form again *****/ Sch_PutFormToSearchWithWhatToSearchAndScope (HieLvl_SYS); @@ -348,8 +378,7 @@ static void Sch_SearchInDB (void) extern const char *Txt_No_results; char RangeQuery[256]; unsigned NumResults = 0; // Initialized to avoid warning - - Gbl.Search.LogSearch = true; + struct Sch_Search *Search = Sch_GetSearch (); /***** Select courses in all degrees or in current degree *****/ switch (Gbl.Scope.Current) @@ -381,9 +410,9 @@ static void Sch_SearchInDB (void) break; } - if (Gbl.Search.WhatToSearch == Sch_SEARCH_UNKNOWN) - Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; - switch (Gbl.Search.WhatToSearch) + if (Search->WhatToSearch == Sch_SEARCH_UNKNOWN) + Search->WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; + switch (Search->WhatToSearch) { case Sch_SEARCH_ALL: NumResults = Sch_SearchCountrsInDB (RangeQuery); @@ -467,7 +496,8 @@ static unsigned Sch_SearchCountrsInDB (const char *RangeQuery) /***** Split countries string into words *****/ snprintf (FieldName,sizeof (FieldName),"Name_%s", Lan_STR_LANG_ID[Gbl.Prefs.Language]); - if (Sch_BuildSearchQuery (SearchQuery,FieldName,NULL,NULL)) + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + FieldName,NULL,NULL)) { /***** Query database and list countries found *****/ NumCtys = Cty_DB_SearchCtys (&mysql_res,SearchQuery,RangeQuery); @@ -498,7 +528,8 @@ static unsigned Sch_SearchInstitsInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_INSTITS)) /***** Split institutions string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"ins_instits.FullName",NULL,NULL)) + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "ins_instits.FullName",NULL,NULL)) { /***** Query database and list institutions found *****/ NumInss = Ins_DB_SearchInss (&mysql_res,SearchQuery,RangeQuery); @@ -526,7 +557,8 @@ static unsigned Sch_SearchCentersInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_CENTERS)) /***** Split center string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"ctr_centers.FullName",NULL,NULL)) + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "ctr_centers.FullName",NULL,NULL)) { /***** Query database and list centers found *****/ NumCtrs = Ctr_DB_SearchCtrs (&mysql_res,SearchQuery,RangeQuery); @@ -553,7 +585,8 @@ static unsigned Sch_SearchDegreesInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_DEGREES)) /***** Split degree string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"deg_degrees.FullName",NULL,NULL)) + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "deg_degrees.FullName",NULL,NULL)) { /***** Query database and list degrees found *****/ NumDegs = Deg_DB_SearchDegs (&mysql_res,SearchQuery,RangeQuery); @@ -578,7 +611,8 @@ static unsigned Sch_SearchCoursesInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_COURSES)) /***** Split course string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"crs_courses.FullName",NULL,NULL)) + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "crs_courses.FullName",NULL,NULL)) { /***** Query database and list courses found *****/ NumCrss = Crs_DB_SearchCrss (&mysql_res,SearchQuery,RangeQuery); @@ -601,7 +635,7 @@ static unsigned Sch_SearchUsrsInDB (Rol_Role_t Role) char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]; /***** Split user string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery, + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), "CONCAT_WS(' ',FirstName,Surname1,Surname2)", NULL,NULL)) /***** Query database and list users found *****/ @@ -633,7 +667,8 @@ static unsigned Sch_SearchOpenDocumentsInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_OPEN_DOCUMENTS)) /***** Split document string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"SUBSTRING_INDEX(brw_files.Path,'/',-1)", + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "SUBSTRING_INDEX(brw_files.Path,'/',-1)", "_latin1 "," COLLATE latin1_general_ci")) { /***** Query database *****/ @@ -665,7 +700,8 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_DOCUM_IN_MY_COURSES)) /***** Split document string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"SUBSTRING_INDEX(brw_files.Path,'/',-1)", + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "SUBSTRING_INDEX(brw_files.Path,'/',-1)", "_latin1 "," COLLATE latin1_general_ci")) { /***** Query database *****/ @@ -697,7 +733,8 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery) /***** Check user's permission *****/ if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_MY_DOCUMENTS)) /***** Split document string into words *****/ - if (Sch_BuildSearchQuery (SearchQuery,"SUBSTRING_INDEX(brw_files.Path,'/',-1)", + if (Sch_BuildSearchQuery (SearchQuery,Sch_GetSearch (), + "SUBSTRING_INDEX(brw_files.Path,'/',-1)", "_latin1 "," COLLATE latin1_general_ci")) { /***** Query database *****/ @@ -721,6 +758,7 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery) // Returns false when no valid search query bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], + const struct Sch_Search *Search, const char *FieldName, const char *CharSet,const char *Collate) { @@ -733,10 +771,10 @@ bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], char SearchWords[Sch_MAX_WORDS_IN_SEARCH][Sch_MAX_BYTES_SEARCH_WORD + 1]; bool SearchWordIsValid = true; - if (Gbl.Search.Str[0]) + if (Search->Str[0]) { SearchQuery[0] = '\0'; - Ptr = Gbl.Search.Str; + Ptr = Search->Str; for (NumWords = 0; NumWords < Sch_MAX_WORDS_IN_SEARCH && *Ptr; NumWords++) @@ -745,7 +783,7 @@ bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], Str_GetNextStringUntilSpace (&Ptr,SearchWords[NumWords],Sch_MAX_BYTES_SEARCH_WORD); /* Is this word valid? */ - switch (Gbl.Search.WhatToSearch) + switch (Search->WhatToSearch) { case Sch_SEARCH_OPEN_DOCUMENTS: case Sch_SEARCH_DOCUM_IN_MY_COURSES: @@ -807,18 +845,21 @@ bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], static void Sch_SaveLastSearchIntoSession (void) { + struct Sch_Search *Search; + if (Gbl.Usrs.Me.Logged) { - if (Gbl.Search.WhatToSearch == Sch_SEARCH_UNKNOWN) - Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; + Search = Sch_GetSearch (); + if (Search->WhatToSearch == Sch_SEARCH_UNKNOWN) + Search->WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; /***** Save last search in session *****/ - Ses_DB_SaveLastSearchIntoSession (); + Ses_DB_SaveLastSearchIntoSession (Search); /***** Update my last type of search *****/ // WhatToSearch is stored in usr_last for next time I log in // In other existing sessions distinct to this, WhatToSearch will remain unchanged - Usr_DB_UpdateMyLastWhatToSearch (); + Usr_DB_UpdateMyLastWhatToSearch (Search->WhatToSearch); } } diff --git a/swad_search.h b/swad_search.h index 62ad94b3..512574a8 100644 --- a/swad_search.h +++ b/swad_search.h @@ -67,10 +67,18 @@ typedef enum } Sch_WhatToSearch_t; #define Sch_WHAT_TO_SEARCH_DEFAULT Sch_SEARCH_ALL +struct Sch_Search + { + Sch_WhatToSearch_t WhatToSearch; + char Str[Sch_MAX_BYTES_STRING_TO_FIND + 1]; + }; + /*****************************************************************************/ /****************************** Public prototypes ****************************/ /*****************************************************************************/ +struct Sch_Search *Sch_GetSearch (void); + void Sch_ReqSysSearch (void); void Sch_PutFormToSearchInPageTopHeading (void); @@ -82,6 +90,7 @@ void Sch_GetParamsSearch (void); void Sch_SysSearch (void); bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], + const struct Sch_Search *Search, const char *FieldName, const char *CharSet,const char *Collate); diff --git a/swad_session.c b/swad_session.c index 2456da35..d7435688 100644 --- a/swad_session.c +++ b/swad_session.c @@ -74,6 +74,8 @@ void Ses_GetNumSessions (void) void Ses_CreateSession (void) { + struct Sch_Search *Search = Sch_GetSearch (); + /***** Create a unique name for the session *****/ Str_Copy (Gbl.Session.Id,Cry_GetUniqueNameEncrypted (),sizeof (Gbl.Session.Id) - 1); @@ -82,7 +84,9 @@ void Ses_CreateSession (void) Err_ShowErrorAndExit ("Can not create session."); /***** Add session to database *****/ - Ses_DB_InsertSession (); + if (Search->WhatToSearch == Sch_SEARCH_UNKNOWN) + Search->WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; + Ses_DB_InsertSession (Search->WhatToSearch); /***** Update time and course in connected list *****/ Con_DB_UpdateMeInConnectedList (); @@ -155,6 +159,7 @@ bool Ses_GetSessionData (void) MYSQL_ROW row; unsigned UnsignedNum; bool Result = false; + struct Sch_Search *Search; /***** Check if the session existed in the database *****/ if (Ses_DB_GetSessionData (&mysql_res)) @@ -186,16 +191,18 @@ bool Ses_GetSessionData (void) /***** Get last search *****/ if (Gbl.Action.Act != ActLogOut) // When closing session, last search will not be needed { + Search = Sch_GetSearch (); + /* Get what to search (row[8]) */ - Gbl.Search.WhatToSearch = Sch_SEARCH_UNKNOWN; + Search->WhatToSearch = Sch_SEARCH_UNKNOWN; if (sscanf (row[8],"%u",&UnsignedNum) == 1) if (UnsignedNum < Sch_NUM_WHAT_TO_SEARCH) - Gbl.Search.WhatToSearch = (Sch_WhatToSearch_t) UnsignedNum; - if (Gbl.Search.WhatToSearch == Sch_SEARCH_UNKNOWN) - Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; + Search->WhatToSearch = (Sch_WhatToSearch_t) UnsignedNum; + if (Search->WhatToSearch == Sch_SEARCH_UNKNOWN) + Search->WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; /* Get search string (row[9]) */ - Str_Copy (Gbl.Search.Str,row[9],sizeof (Gbl.Search.Str) - 1); + Str_Copy (Search->Str,row[9],sizeof (Search->Str) - 1); } Result = true; diff --git a/swad_session_database.c b/swad_session_database.c index aa8b59ad..19528f7f 100644 --- a/swad_session_database.c +++ b/swad_session_database.c @@ -40,11 +40,8 @@ extern struct Globals Gbl; /******************** Insert new session in the database *********************/ /*****************************************************************************/ -void Ses_DB_InsertSession (void) +void Ses_DB_InsertSession (Sch_WhatToSearch_t WhatToSearch) { - if (Gbl.Search.WhatToSearch == Sch_SEARCH_UNKNOWN) - Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; - DB_QueryINSERT ("can not create session", "INSERT INTO ses_sessions" " (SessionId,UsrCod,Password,Role," @@ -61,7 +58,7 @@ void Ses_DB_InsertSession (void) Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Crs.CrsCod, - Gbl.Search.WhatToSearch); + WhatToSearch); } /*****************************************************************************/ @@ -98,15 +95,15 @@ void Ses_DB_UpdateSession (void) /********************** Save last search into session ************************/ /*****************************************************************************/ -void Ses_DB_SaveLastSearchIntoSession (void) +void Ses_DB_SaveLastSearchIntoSession (const struct Sch_Search *Search) { DB_QueryUPDATE ("can not update last search in session", "UPDATE ses_sessions" " SET WhatToSearch=%u," "SearchStr='%s'" " WHERE SessionId='%s'", - (unsigned) Gbl.Search.WhatToSearch, - Gbl.Search.Str, + (unsigned) Search->WhatToSearch, + Search->Str, Gbl.Session.Id); } diff --git a/swad_session_database.h b/swad_session_database.h index 9c85575e..82a0da31 100644 --- a/swad_session_database.h +++ b/swad_session_database.h @@ -33,9 +33,9 @@ /***************************** Public prototypes *****************************/ /*****************************************************************************/ //---------------------------------- Sessions --------------------------------- -void Ses_DB_InsertSession (void); +void Ses_DB_InsertSession (Sch_WhatToSearch_t WhatToSearch); void Ses_DB_UpdateSession (void); -void Ses_DB_SaveLastSearchIntoSession (void); +void Ses_DB_SaveLastSearchIntoSession (const struct Sch_Search *Search); void Ses_DB_SaveLastPageMsgIntoSession (Pag_WhatPaginate_t WhatPaginate,unsigned NumPage); void Ses_DB_UpdateSessionLastRefresh (void); diff --git a/swad_user.c b/swad_user.c index 7168dbec..ec563606 100644 --- a/swad_user.c +++ b/swad_user.c @@ -1947,6 +1947,7 @@ static void Usr_ShowAlertThereAreMoreThanOneUsr (void) static void Usr_SetMyPrefsAndRoles (void) { extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; + struct Sch_Search *Search; bool GetRoleAndActionFromLastData; Act_Action_t LastSuperAction; bool JustAfterLogin = Gbl.Action.Act == ActLogIn || @@ -1981,7 +1982,8 @@ static void Usr_SetMyPrefsAndRoles (void) { /***** WhatToSearch is stored in session, but in login it is got from user's last data *****/ - Gbl.Search.WhatToSearch = Gbl.Usrs.Me.UsrLast.WhatToSearch; + Search = Sch_GetSearch (); + Search->WhatToSearch = Gbl.Usrs.Me.UsrLast.WhatToSearch; /***** Location in hierarchy and role are stored in session, but in login the are got from user's last data *****/ diff --git a/swad_user_database.c b/swad_user_database.c index 6c80fee6..8d5dbf80 100644 --- a/swad_user_database.c +++ b/swad_user_database.c @@ -1492,7 +1492,7 @@ void Usr_DB_UpdateMyLastData (void) /********************** Update my last type of search ************************/ /*****************************************************************************/ -void Usr_DB_UpdateMyLastWhatToSearch (void) +void Usr_DB_UpdateMyLastWhatToSearch (Sch_WhatToSearch_t WhatToSearch) { // WhatToSearch is stored in usr_last for next time I log in // In other existing sessions distinct to this, WhatToSearch will remain unchanged @@ -1500,7 +1500,7 @@ void Usr_DB_UpdateMyLastWhatToSearch (void) "UPDATE usr_last" " SET WhatToSearch=%u" " WHERE UsrCod=%ld", - (unsigned) Gbl.Search.WhatToSearch, + (unsigned) WhatToSearch, Gbl.Usrs.Me.UsrDat.UsrCod); } diff --git a/swad_user_database.h b/swad_user_database.h index f0f85863..5dc14ade 100644 --- a/swad_user_database.h +++ b/swad_user_database.h @@ -70,7 +70,7 @@ void Usr_DB_RemoveUsrData (long UsrCod); //------------------------------ User's last data ----------------------------- void Usr_DB_InsertMyLastData (void); void Usr_DB_UpdateMyLastData (void); -void Usr_DB_UpdateMyLastWhatToSearch (void); +void Usr_DB_UpdateMyLastWhatToSearch (Sch_WhatToSearch_t WhatToSearch); bool Usr_DB_CheckMyLastData (void); unsigned Usr_DB_GetMyLastData (MYSQL_RES **mysql_res);