diff --git a/sql/swad.sql b/sql/swad.sql index 2449e40f..63f55baa 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -816,14 +816,6 @@ CREATE TABLE IF NOT EXISTS mch_times ( ElapsedTime TIME NOT NULL DEFAULT 0, UNIQUE INDEX(MchCod,QstInd)); -- --- Table hidden_params: stores some hidden parameters passed from a page to another using database instead of forms --- -CREATE TABLE IF NOT EXISTS hidden_params ( - SessionId CHAR(43) NOT NULL, - ParamName VARCHAR(255) NOT NULL, - ParamValue LONGTEXT NOT NULL, - INDEX(SessionId)); --- -- Table holidays: stores the holidays in each institution -- CREATE TABLE IF NOT EXISTS holidays ( @@ -1284,6 +1276,14 @@ CREATE TABLE IF NOT EXISTS room_check_in ( INDEX(UsrCod,CheckInTime), INDEX(CheckInTime)); -- +-- Table ses_params: stores some hidden parameters passed from a page to another using database instead of forms +-- +CREATE TABLE IF NOT EXISTS ses_params ( + SessionId CHAR(43) NOT NULL, + ParamName VARCHAR(255) NOT NULL, + ParamValue LONGTEXT NOT NULL, + INDEX(SessionId)); +-- -- Table sessions: stores the information of open sessions -- CREATE TABLE IF NOT EXISTS sessions ( diff --git a/swad_changelog.h b/swad_changelog.h index 4281a976..6a5c8953 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -600,13 +600,17 @@ TODO: Salvador Romero Cort TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. */ -#define Log_PLATFORM_VERSION "SWAD 20.51.12 (2021-03-18)" +#define Log_PLATFORM_VERSION "SWAD 20.51.13 (2021-03-18)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.6.2.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 20.51.13: Mar 18, 2021 Session parameters database table renamed. (307862 lines) + 1 change necessary in database: +RENAME TABLE hidden_params TO ses_params; + Version 20.51.12: Mar 18, 2021 Forum threads database tables renamed. (307859 lines) 3 changes necessary in database: RENAME TABLE forum_thr_clip TO for_clipboards; diff --git a/swad_database.c b/swad_database.c index df01f4f2..6f90dc43 100644 --- a/swad_database.c +++ b/swad_database.c @@ -1772,24 +1772,6 @@ mysql> DESCRIBE mch_times; "ElapsedTime TIME NOT NULL DEFAULT 0," "UNIQUE INDEX(MchCod,QstInd))"); - /***** Table hidden_params *****/ -/* -mysql> DESCRIBE hidden_params; -+------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+------------+--------------+------+-----+---------+-------+ -| SessionId | char(43) | NO | MUL | NULL | | -| ParamName | varchar(255) | NO | | NULL | | -| ParamValue | longtext | NO | | NULL | | -+------------+--------------+------+-----+---------+-------+ -3 rows in set (0.01 sec) -*/ - DB_CreateTable ("CREATE TABLE IF NOT EXISTS hidden_params (" - "SessionId CHAR(43) NOT NULL," // Cns_BYTES_SESSION_ID - "ParamName VARCHAR(255) NOT NULL," - "ParamValue LONGTEXT NOT NULL," - "INDEX(SessionId))"); - /***** Table holidays *****/ /* mysql> DESCRIBE holidays; @@ -2703,6 +2685,24 @@ mysql> DESCRIBE room_check_in; "INDEX(UsrCod,CheckInTime)," "INDEX(CheckInTime))"); + /***** Table ses_params *****/ +/* +mysql> DESCRIBE ses_params; ++------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++------------+--------------+------+-----+---------+-------+ +| SessionId | char(43) | NO | MUL | NULL | | +| ParamName | varchar(255) | NO | | NULL | | +| ParamValue | longtext | NO | | NULL | | ++------------+--------------+------+-----+---------+-------+ +3 rows in set (0.01 sec) +*/ + DB_CreateTable ("CREATE TABLE IF NOT EXISTS ses_params (" + "SessionId CHAR(43) NOT NULL," // Cns_BYTES_SESSION_ID + "ParamName VARCHAR(255) NOT NULL," + "ParamValue LONGTEXT NOT NULL," + "INDEX(SessionId))"); + /***** Table sessions *****/ /* mysql> DESCRIBE sessions; diff --git a/swad_global.c b/swad_global.c index c914ab3f..89d3e99d 100644 --- a/swad_global.c +++ b/swad_global.c @@ -136,8 +136,6 @@ void Gbl_InitializeGlobals (void) Gbl.DB.DatabaseIsOpen = false; Gbl.DB.LockedTables = false; - Gbl.HiddenParamsInsertedIntoDB = false; - Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language; Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week Gbl.Prefs.DateFormat = Dat_FORMAT_DEFAULT; // Default date format @@ -153,6 +151,7 @@ void Gbl_InitializeGlobals (void) Gbl.Session.IsOpen = false; Gbl.Session.HasBeenDisconnected = false; Gbl.Session.Id[0] = '\0'; + Gbl.Session.ParamsInsertedIntoDB = false; Gbl.Usrs.Me.UsrIdLogin[0] = '\0'; Gbl.Usrs.Me.LoginPlainPassword[0] = '\0'; @@ -160,7 +159,6 @@ void Gbl_InitializeGlobals (void) Gbl.Usrs.Me.UsrDat.UsrIDNickOrEmail[0] = '\0'; Usr_UsrDataConstructor (&Gbl.Usrs.Me.UsrDat); Usr_ResetMyLastData (); - Gbl.Session.Id[0] = '\0'; Gbl.Usrs.Me.Logged = false; Gbl.Usrs.Me.Role.Available = 0; Gbl.Usrs.Me.Role.FromSession = @@ -358,7 +356,7 @@ void Gbl_Cleanup (void) if (!Gbl.Action.UsesAJAX && !Gbl.WebService.IsWebService && Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB) - Ses_RemoveHiddenParFromThisSession (); + Ses_RemoveParamFromThisSession (); Usr_FreeMyCourses (); Usr_FreeMyDegrees (); Usr_FreeMyCenters (); diff --git a/swad_global.h b/swad_global.h index 048df868..f3ca53b3 100644 --- a/swad_global.h +++ b/swad_global.h @@ -132,8 +132,6 @@ struct Globals bool LockedTables; } DB; - bool HiddenParamsInsertedIntoDB; // If parameters are inserted in the database in this execution - /* To compute execution time of the program */ struct timeval tvStart; struct timeval tvPageCreated; @@ -165,6 +163,7 @@ struct Globals bool HasBeenDisconnected; char Id[Cns_BYTES_SESSION_ID + 1]; long UsrCod; + bool ParamsInsertedIntoDB; // If parameters are inserted in the database in this session } Session; struct diff --git a/swad_session.c b/swad_session.c index b4d3cb53..bb7372c1 100644 --- a/swad_session.c +++ b/swad_session.c @@ -52,7 +52,7 @@ extern struct Globals Gbl; static void Ses_RemoveSessionFromDB (void); -static bool Ses_CheckIfHiddenParIsAlreadyInDB (const char *ParamName); +static bool Ses_CheckIfParamIsAlreadyInDB (const char *ParamName); static void Ses_DeletePublicDirFromCache (const char *FullPathMediaPriv); @@ -131,7 +131,7 @@ void Ses_CloseSession (void) Con_RemoveOldConnected (); /***** Remove unused data associated to expired sessions *****/ - Ses_RemoveHiddenParFromExpiredSessions (); + Ses_RemoveParamsFromExpiredSessions (); Ses_RemovePublicDirsFromExpiredSessions (); /***** Now, user is not logged in *****/ @@ -332,24 +332,24 @@ bool Ses_GetSessionData (void) } /*****************************************************************************/ -/******************* Insert hidden parameter in the database *****************/ +/******************* Insert session parameter in the database ****************/ /*****************************************************************************/ -void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue) +void Ses_InsertParamInDB (const char *ParamName,const char *ParamValue) { - /***** Before of inserting the first hidden parameter passed to the next action, + /***** Before of inserting the first session parameter passed to the next action, delete all the parameters coming from the previous action *****/ - Ses_RemoveHiddenParFromThisSession (); + Ses_RemoveParamFromThisSession (); /***** For a unique session-parameter, don't insert a parameter more than one time *****/ if (ParamName) if (ParamName[0]) - if (!Ses_CheckIfHiddenParIsAlreadyInDB (ParamName)) + if (!Ses_CheckIfParamIsAlreadyInDB (ParamName)) { - /***** Insert parameter in the database *****/ - DB_QueryINSERT ("can not create hidden parameter", - "INSERT INTO hidden_params" + /***** Insert session parameter in the database *****/ + DB_QueryINSERT ("can not create session parameter", + "INSERT INTO ses_params" " (SessionId,ParamName,ParamValue)" " VALUES" " ('%s','%s','%s')", @@ -357,21 +357,22 @@ void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue) ParamName, ParamValue ? ParamValue : ""); - Gbl.HiddenParamsInsertedIntoDB = true; + Gbl.Session.ParamsInsertedIntoDB = true; } } /*****************************************************************************/ -/************ Remove hidden parameters of a session from database ************/ +/************ Remove session parameters of a session from database ***********/ /*****************************************************************************/ -void Ses_RemoveHiddenParFromThisSession (void) +void Ses_RemoveParamFromThisSession (void) { if (Gbl.Session.IsOpen && // There is an open session - !Gbl.HiddenParamsInsertedIntoDB) // No params just inserted - /***** Remove hidden parameters of this session *****/ - DB_QueryDELETE ("can not remove hidden parameters of current session", - "DELETE FROM hidden_params WHERE SessionId='%s'", + !Gbl.Session.ParamsInsertedIntoDB) // No params just inserted + /***** Remove session parameters of this session *****/ + DB_QueryDELETE ("can not remove session parameters of current session", + "DELETE FROM ses_params" + " WHERE SessionId='%s'", Gbl.Session.Id); } @@ -379,37 +380,38 @@ void Ses_RemoveHiddenParFromThisSession (void) /********* Remove expired hidden parameters (from expired sessions) **********/ /*****************************************************************************/ -void Ses_RemoveHiddenParFromExpiredSessions (void) +void Ses_RemoveParamsFromExpiredSessions (void) { - /***** Remove hidden parameters from expired sessions *****/ - DB_QueryDELETE ("can not remove hidden parameters of expired sessions", - "DELETE FROM hidden_params" + /***** Remove session parameters from expired sessions *****/ + DB_QueryDELETE ("can not remove session parameters of expired sessions", + "DELETE FROM ses_params" " WHERE SessionId NOT IN" - " (SELECT SessionId FROM sessions)"); + " (SELECT SessionId" + " FROM sessions)"); } /*****************************************************************************/ -/*************** Check if a hidden parameter existed in database *************/ +/************** Check if a session parameter existed in database *************/ /*****************************************************************************/ // Return true if the parameter already existed in database -static bool Ses_CheckIfHiddenParIsAlreadyInDB (const char *ParamName) +static bool Ses_CheckIfParamIsAlreadyInDB (const char *ParamName) { - return (DB_QueryCOUNT ("can not check if a hidden parameter" + return (DB_QueryCOUNT ("can not check if a session parameter" " is already in database", - "SELECT COUNT(*) FROM hidden_params" + "SELECT COUNT(*)" + " FROM ses_params" " WHERE SessionId='%s'" - " AND ParamName='%s'", + " AND ParamName='%s'", Gbl.Session.Id, ParamName) != 0); } /*****************************************************************************/ -/***************** Get hidden parameter from the database ********************/ +/***************** Get session parameter from the database *******************/ /*****************************************************************************/ -void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, - size_t MaxBytes) +void Ses_GetParamFromDB (const char *ParamName,char *ParamValue,size_t MaxBytes) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -420,12 +422,12 @@ void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, ParamValue[0] = '\0'; if (Gbl.Session.IsOpen) // If the session is open, get parameter from DB { - /***** Get a hidden parameter from database *****/ - NumRows = DB_QuerySELECT (&mysql_res,"can not get a hidden parameter", + /***** Get a session parameter from database *****/ + NumRows = DB_QuerySELECT (&mysql_res,"can not get a session parameter", "SELECT ParamValue" - " FROM hidden_params" + " FROM ses_params" " WHERE SessionId='%s'" - " AND ParamName='%s'", + " AND ParamName='%s'", Gbl.Session.Id, ParamName); @@ -447,7 +449,7 @@ void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, if (ParameterIsTooBig) { snprintf (ErrorTxt,sizeof (ErrorTxt), - "Hidden parameter %s too large," + "Session parameter %s too large," " it exceed the maximum allowed size (%lu bytes).", ParamName,(unsigned long) MaxBytes); Lay_ShowErrorAndExit (ErrorTxt); diff --git a/swad_session.h b/swad_session.h index 0f1bec8b..bff63364 100644 --- a/swad_session.h +++ b/swad_session.h @@ -47,11 +47,10 @@ void Ses_UpdateSessionLastRefreshInDB (void); void Ses_RemoveExpiredSessions (void); bool Ses_GetSessionData (void); -void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue); -void Ses_RemoveHiddenParFromThisSession (void); -void Ses_RemoveHiddenParFromExpiredSessions (void); -void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, - size_t MaxBytes); +void Ses_InsertParamInDB (const char *ParamName,const char *ParamValue); +void Ses_RemoveParamFromThisSession (void); +void Ses_RemoveParamsFromExpiredSessions (void); +void Ses_GetParamFromDB (const char *ParamName,char *ParamValue,size_t MaxBytes); bool Ses_GetPublicDirFromCache (const char *FullPathMediaPriv, char TmpPubDir[PATH_MAX + 1]); diff --git a/swad_user.c b/swad_user.c index 09edafea..e05c412a 100644 --- a/swad_user.c +++ b/swad_user.c @@ -5718,7 +5718,7 @@ void Usr_PutHiddenParSelectedUsrsCods (struct SelectedUsrs *SelectedUsrs) /* Put the parameter *****/ if (Gbl.Session.IsOpen) - Ses_InsertHiddenParInDB (ParamName,SelectedUsrs->List[Rol_UNK]); + Ses_InsertParamInDB (ParamName,SelectedUsrs->List[Rol_UNK]); else Par_PutHiddenParamString (NULL,ParamName,SelectedUsrs->List[Rol_UNK]); @@ -5748,7 +5748,7 @@ void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs) Usr_AllocateListSelectedEncryptedUsrCods (SelectedUsrs,Rol_UNK); if (Gbl.Session.IsOpen) // If the session is open, get parameter from DB { - Ses_GetHiddenParFromDB (ParamName,SelectedUsrs->List[Rol_UNK], + Ses_GetParamFromDB (ParamName,SelectedUsrs->List[Rol_UNK], Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); Str_ChangeFormat (Str_FROM_FORM,Str_TO_TEXT,SelectedUsrs->List[Rol_UNK], Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS,true);