Version 22.57: Oct 29, 2022 Code refactoring in search.

This commit is contained in:
acanas 2022-10-29 12:20:54 +02:00
parent 272fed1a69
commit aa43a66552
17 changed files with 149 additions and 65 deletions

View File

@ -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))
{

View File

@ -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)

View File

@ -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;

View File

@ -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)?

View File

@ -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 */

View File

@ -33,6 +33,8 @@
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void Log_SetLogSearch (bool Search);
void Log_LogAccess (const char *Comments);
void Log_PutLinkToLastClicks (void);

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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);

View File

@ -89,7 +89,7 @@ extern struct Globals Gbl;
/************************* Private global variables **************************/
/*****************************************************************************/
struct
static struct
{
struct Usr_Data *UsrDat;
Rec_SharedRecordViewType_t TypeOfView;

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;

View File

@ -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);
}

View File

@ -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);

View File

@ -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 *****/

View File

@ -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);
}

View File

@ -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);