mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-08 09:45:26 +02:00
Version 22.57: Oct 29, 2022 Code refactoring in search.
This commit is contained in:
parent
272fed1a69
commit
aa43a66552
10
swad_API.c
10
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))
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)?
|
||||
|
|
30
swad_log.c
30
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 */
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
/***************************** Public prototypes *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Log_SetLogSearch (bool Search);
|
||||
|
||||
void Log_LogAccess (const char *Comments);
|
||||
|
||||
void Log_PutLinkToLastClicks (void);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ extern struct Globals Gbl;
|
|||
/************************* Private global variables **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
struct
|
||||
static struct
|
||||
{
|
||||
struct Usr_Data *UsrDat;
|
||||
Rec_SharedRecordViewType_t TypeOfView;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 *****/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user