diff --git a/Makefile b/Makefile index 4d6582f2..e6308c34 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,9 @@ # # ############################################################################### -OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \ - swad_announcement.o swad_API.o swad_assignment.o swad_attendance.o \ +OBJS = swad_account.o swad_account_database.o swad_action.o swad_agenda.o \ + swad_alert.o swad_announcement.o swad_API.o swad_assignment.o \ + swad_attendance.o \ swad_banner.o swad_box.o swad_building.o swad_button.o \ swad_calendar.o swad_call_for_exam.o swad_center.o \ swad_center_config.o swad_chat.o swad_config.o swad_connected.o \ diff --git a/swad_ID.c b/swad_ID.c index a5a1b082..04f6323a 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -861,6 +861,18 @@ static void ID_RemoveUsrIDFromDB (long UsrCod,const char *UsrID) UsrID); } +/*****************************************************************************/ +/****************************** Remove user's IDs ****************************/ +/*****************************************************************************/ + +void ID_DB_RemoveUsrIDs (long UsrCod) + { + DB_QueryDELETE ("can not remove user's IDs", + "DELETE FROM usr_ids" + " WHERE UsrCod=%ld", + UsrCod); + } + /*****************************************************************************/ /************************* New user's ID for me ******************************/ /*****************************************************************************/ diff --git a/swad_ID.h b/swad_ID.h index 5d4816dd..8617e795 100644 --- a/swad_ID.h +++ b/swad_ID.h @@ -77,6 +77,7 @@ void ID_ShowFormChangeOtherUsrID (void); void ID_RemoveMyUsrID (void); void ID_RemoveOtherUsrID (void); +void ID_DB_RemoveUsrIDs (long UsrCod); void ID_NewMyUsrID (void); void ID_NewOtherUsrID (void); diff --git a/swad_account.c b/swad_account.c index 3aa11a8e..e6f21903 100644 --- a/swad_account.c +++ b/swad_account.c @@ -28,6 +28,7 @@ #include // For string functions #include "swad_account.h" +#include "swad_account_database.h" #include "swad_agenda.h" #include "swad_announcement.h" #include "swad_attendance.h" @@ -47,12 +48,14 @@ #include "swad_language.h" #include "swad_match.h" #include "swad_message.h" +#include "swad_network.h" #include "swad_nickname.h" #include "swad_notification.h" #include "swad_parameter.h" #include "swad_profile.h" #include "swad_project.h" #include "swad_report.h" +#include "swad_setting.h" #include "swad_test_print.h" #include "swad_timeline.h" @@ -87,7 +90,7 @@ static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrD static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], const char *NewEmail); static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], - char *NewEmail, + char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1], char *NewEncryptedPassword); static void Acc_CreateNewEncryptedUsrCod (struct UsrData *UsrDat); @@ -97,7 +100,6 @@ static void Acc_AskIfRemoveUsrAccount (bool ItsMe); static void Acc_AskIfRemoveOtherUsrAccount (void); static void Acc_RemoveUsrBriefcase (struct UsrData *UsrDat); -static void Acc_RemoveUsr (struct UsrData *UsrDat); /*****************************************************************************/ /******************** Put link to create a new account ***********************/ @@ -211,16 +213,7 @@ void Acc_CheckIfEmptyAccountExists (void) /***** Check if there are users with this user's ID *****/ if (ID_CheckIfUsrIDIsValid (ID)) { - NumUsrs = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get user's codes", - "SELECT usr_ids.UsrCod" // row[0] - " FROM usr_ids," - "usr_data" - " WHERE usr_ids.UsrID='%s'" - " AND usr_ids.UsrCod=usr_data.UsrCod" - " AND usr_data.Password=''", - ID); - if (NumUsrs) + if ((NumUsrs = Acc_DB_GetUsrsWithID (&mysql_res,ID))) { /***** Begin box and table *****/ Box_BoxTableBegin (NULL, @@ -233,7 +226,7 @@ void Acc_CheckIfEmptyAccountExists (void) Usr_UsrDataConstructor (&UsrDat); /***** List users found *****/ - for (NumUsr = 1, Gbl.RowEvenOdd = 0; + for (NumUsr = 1, Gbl.RowEvenOdd = 0; NumUsr <= NumUsrs; NumUsr++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd) { @@ -286,51 +279,57 @@ static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrD extern const char *Txt_yet_unnamed; extern const char *Txt_Its_me; - /***** Write number of user in the list *****/ + /***** Begin 1st table row *****/ HTM_TR_Begin (NULL); - HTM_TD_Begin ("rowspan=\"2\" class=\"USR_LIST_NUM_N RT COLOR%u\"",Gbl.RowEvenOdd); - HTM_Unsigned (NumUsr); - HTM_TD_End (); + /***** Write number of user in the list *****/ + HTM_TD_Begin ("rowspan=\"2\" class=\"USR_LIST_NUM_N RT COLOR%u\"", + Gbl.RowEvenOdd); + HTM_Unsigned (NumUsr); + HTM_TD_End (); - /***** Write user's ID and name *****/ - HTM_TD_Begin ("class=\"DAT_N LT COLOR%u\"",Gbl.RowEvenOdd); - HTM_TxtF ("%s: %s",Txt_ID,ID); - HTM_BR (); - HTM_TxtColonNBSP (Txt_Name); - if (UsrDat->FullName[0]) - { - HTM_STRONG_Begin (); - HTM_Txt (UsrDat->FullName); - HTM_STRONG_End (); - } - else - { - HTM_EM_Begin (); - HTM_Txt (Txt_yet_unnamed); - HTM_EM_End (); - } - HTM_TD_End (); + /***** Write user's ID and name *****/ + HTM_TD_Begin ("class=\"DAT_N LT COLOR%u\"",Gbl.RowEvenOdd); + HTM_TxtF ("%s: %s",Txt_ID,ID); + HTM_BR (); + HTM_TxtColonNBSP (Txt_Name); + if (UsrDat->FullName[0]) + { + HTM_STRONG_Begin (); + HTM_Txt (UsrDat->FullName); + HTM_STRONG_End (); + } + else + { + HTM_EM_Begin (); + HTM_Txt (Txt_yet_unnamed); + HTM_EM_End (); + } + HTM_TD_End (); - /***** Button to login with this account *****/ - HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd); - Frm_BeginForm (ActLogInNew); - Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod); - Btn_PutCreateButtonInline (Txt_Its_me); - Frm_EndForm (); - HTM_TD_End (); + /***** Button to login with this account *****/ + HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd); + Frm_BeginForm (ActLogInNew); + Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod); + Btn_PutCreateButtonInline (Txt_Its_me); + Frm_EndForm (); + HTM_TD_End (); + /***** End 1st table row *****/ HTM_TR_End (); + + /***** Begin 2nd table row *****/ HTM_TR_Begin (NULL); /***** Courses of this user *****/ HTM_TD_Begin ("colspan=\"2\" class=\"LT COLOR%u\"",Gbl.RowEvenOdd); - UsrDat->Sex = Usr_SEX_UNKNOWN; - Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_TCH); - Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_NET); - Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_STD); + UsrDat->Sex = Usr_SEX_UNKNOWN; + Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_TCH); + Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_NET); + Crs_GetAndWriteCrssOfAUsr (UsrDat,Rol_STD); HTM_TD_End (); + /***** End 2nd table row *****/ HTM_TR_End (); } @@ -370,52 +369,54 @@ static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutAr /***** Begin form to enter some data of the new user *****/ Frm_BeginForm (ActCreUsrAcc); - /***** Begin box and table *****/ - Box_BoxTableBegin (NULL,Txt_Create_account, - NULL,NULL, - Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE,2); + /***** Begin box and table *****/ + Box_BoxTableBegin (NULL,Txt_Create_account, + NULL,NULL, + Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE,2); - /***** Nickname *****/ - if (NewNickWithoutArr[0]) - snprintf (NewNickWithArr,sizeof (NewNickWithArr),"@%s", - NewNickWithoutArr); - else - NewNickWithArr[0] = '\0'; - HTM_TR_Begin (NULL); + /***** Nickname *****/ + if (NewNickWithoutArr[0]) + snprintf (NewNickWithArr,sizeof (NewNickWithArr),"@%s", + NewNickWithoutArr); + else + NewNickWithArr[0] = '\0'; + HTM_TR_Begin (NULL); - /* Label */ - Frm_LabelColumn ("RT","NewNick",Txt_Nickname); + /* Label */ + Frm_LabelColumn ("RT","NewNick",Txt_Nickname); - /* Data */ - HTM_TD_Begin ("class=\"LT\""); - HTM_INPUT_TEXT ("NewNick",1 + Nck_MAX_CHARS_NICK_WITHOUT_ARROBA, - NewNickWithArr,HTM_DONT_SUBMIT_ON_CHANGE, - "id=\"NewNick\" size=\"18\" placeholder=\"%s\" required=\"required\"", - Txt_HELP_nickname); - HTM_TD_End (); + /* Data */ + HTM_TD_Begin ("class=\"LT\""); + HTM_INPUT_TEXT ("NewNick",1 + Nck_MAX_CHARS_NICK_WITHOUT_ARROBA, + NewNickWithArr,HTM_DONT_SUBMIT_ON_CHANGE, + "id=\"NewNick\" size=\"18\" placeholder=\"%s\"" + " required=\"required\"", + Txt_HELP_nickname); + HTM_TD_End (); - HTM_TR_End (); + HTM_TR_End (); - /***** Email *****/ - HTM_TR_Begin (NULL); + /***** Email *****/ + HTM_TR_Begin (NULL); - /* Label */ - Frm_LabelColumn ("RT","NewEmail",Txt_Email); + /* Label */ + Frm_LabelColumn ("RT","NewEmail",Txt_Email); - /* Data */ - HTM_TD_Begin ("class=\"LT\""); - HTM_INPUT_EMAIL ("NewEmail",Cns_MAX_CHARS_EMAIL_ADDRESS,NewEmail, - "id=\"NewEmail\" size=\"18\" placeholder=\"%s\" required=\"required\"", - Txt_HELP_email); - HTM_TD_End (); + /* Data */ + HTM_TD_Begin ("class=\"LT\""); + HTM_INPUT_EMAIL ("NewEmail",Cns_MAX_CHARS_EMAIL_ADDRESS,NewEmail, + "id=\"NewEmail\" size=\"18\" placeholder=\"%s\"" + " required=\"required\"", + Txt_HELP_email); + HTM_TD_End (); - HTM_TR_End (); + HTM_TR_End (); - /***** Password *****/ - Pwd_PutFormToGetNewPasswordOnce (); + /***** Password *****/ + Pwd_PutFormToGetNewPasswordOnce (); - /***** End table, send button and end box *****/ - Box_BoxTableWithButtonEnd (Btn_CREATE_BUTTON,Txt_Create_account); + /***** End table, send button and end box *****/ + Box_BoxTableWithButtonEnd (Btn_CREATE_BUTTON,Txt_Create_account); /***** End form *****/ Frm_EndForm (); @@ -440,7 +441,7 @@ void Acc_ShowFormGoToRequestNewAccount (void) /***** Button to go to request the creation of a new account *****/ Frm_BeginForm (ActFrmMyAcc); - Btn_PutCreateButton (Txt_Create_account); + Btn_PutCreateButton (Txt_Create_account); Frm_EndForm (); /***** End box *****/ @@ -493,17 +494,17 @@ void Acc_ShowFormChgMyAccount (void) /***** Begin container for this user *****/ HTM_DIV_Begin ("class=\"REC_USR\""); - /***** Show form to change my password and my nickname ****/ - HTM_DIV_Begin ("class=\"REC_LEFT\""); - Pwd_ShowFormChgMyPwd (); - Nck_ShowFormChangeMyNickname (IMustCreateMyNicknameNow); - HTM_DIV_End (); + /***** Show form to change my password and my nickname ****/ + HTM_DIV_Begin ("class=\"REC_LEFT\""); + Pwd_ShowFormChgMyPwd (); + Nck_ShowFormChangeMyNickname (IMustCreateMyNicknameNow); + HTM_DIV_End (); - /***** Show form to change my email and my ID *****/ - HTM_DIV_Begin ("class=\"REC_RIGHT\""); - Mai_ShowFormChangeMyEmail (IMustFillInMyEmailNow,IShouldConfirmMyEmailNow); - ID_ShowFormChangeMyID (IShouldFillInMyIDNow); - HTM_DIV_End (); + /***** Show form to change my email and my ID *****/ + HTM_DIV_Begin ("class=\"REC_RIGHT\""); + Mai_ShowFormChangeMyEmail (IMustFillInMyEmailNow,IShouldConfirmMyEmailNow); + ID_ShowFormChangeMyID (IShouldFillInMyIDNow); + HTM_DIV_End (); /***** Begin container for this user *****/ HTM_DIV_End (); @@ -532,17 +533,17 @@ void Acc_ShowFormChgOtherUsrAccount (void) /***** Begin container for this user *****/ HTM_DIV_Begin ("class=\"REC_USR\""); - /***** Show form to change password and nickname *****/ - HTM_DIV_Begin ("class=\"REC_LEFT\""); - Pwd_ShowFormChgOtherUsrPwd (); - Nck_ShowFormChangeOtherUsrNickname (); - HTM_DIV_End (); + /***** Show form to change password and nickname *****/ + HTM_DIV_Begin ("class=\"REC_LEFT\""); + Pwd_ShowFormChgOtherUsrPwd (); + Nck_ShowFormChangeOtherUsrNickname (); + HTM_DIV_End (); - /***** Show form to change email and ID *****/ - HTM_DIV_Begin ("class=\"REC_RIGHT\""); - Mai_ShowFormChangeOtherUsrEmail (); - ID_ShowFormChangeOtherUsrID (); - HTM_DIV_End (); + /***** Show form to change email and ID *****/ + HTM_DIV_Begin ("class=\"REC_RIGHT\""); + Mai_ShowFormChangeOtherUsrEmail (); + ID_ShowFormChangeOtherUsrID (); + HTM_DIV_End (); /***** Begin container for this user *****/ HTM_DIV_End (); @@ -633,8 +634,8 @@ bool Acc_CreateMyNewAccountAndLogIn (void) // Return false on error static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], - char *NewEmail, - char *NewEncryptedPassword) + char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1], + char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]) { extern const char *Txt_The_nickname_X_had_been_registered_by_another_user; extern const char *Txt_The_nickname_entered_X_is_not_valid_; @@ -659,13 +660,7 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F { /* Check if the new nickname matches any of the nicknames of other users */ - if (DB_QueryCOUNT ("can not check if nickname already existed", - "SELECT COUNT(*)" - " FROM usr_nicknames" - " WHERE Nickname='%s'" - " AND UsrCod<>%ld", - NewNickWithoutArr, - Gbl.Usrs.Me.UsrDat.UsrCod)) // A nickname of another user is the same that this nickname + if (Acc_DB_CheckIfNicknameAlreadyExists (NewNickWithoutArr)) { Error = true; Ale_ShowAlert (Ale_WARNING,Txt_The_nickname_X_had_been_registered_by_another_user, @@ -688,12 +683,7 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F { /* Check if the new email matches any of the confirmed emails of other users */ - if (DB_QueryCOUNT ("can not check if email already existed", - "SELECT COUNT(*)" - " FROM usr_emails" - " WHERE E_mail='%s'" - " AND Confirmed='Y'", - NewEmail)) // An email of another user is the same that my email + if (Acc_DB_CheckIfEmailAlreadyExists (NewEmail)) // An email of another user is the same that my email { Error = true; Ale_ShowAlert (Ale_WARNING,Txt_The_email_address_X_had_been_registered_by_another_user, @@ -727,13 +717,6 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount) { - extern const char *The_ThemeId[The_NUM_THEMES]; - extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; - extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY]; - extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; - extern const char *Usr_StringsSexDB[Usr_NUM_SEXS]; - char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]; - size_t CommentsLength; char PathRelUsr[PATH_MAX + 1]; unsigned NumID; @@ -749,54 +732,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount) /***** Insert new user in database *****/ /* Insert user's data */ - Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes - if (UsrDat->Comments) - CommentsLength = strlen (UsrDat->Comments); - else - CommentsLength = 0; - - UsrDat->UsrCod = - DB_QueryINSERTandReturnCode ("can not create user", - "INSERT INTO usr_data" - " (EncryptedUsrCod,Password," - "Surname1,Surname2,FirstName,Sex," - "Theme,IconSet,Language,FirstDayOfWeek,DateFormat," - "PhotoVisibility,BaPrfVisibility,ExPrfVisibility," - "CtyCod," - "LocalPhone,FamilyPhone," - "Birthday,Comments," - "Menu,SideCols,NotifNtfEvents,EmailNtfEvents)" - " VALUES" - " ('%s','%s'," - "'%s','%s','%s','%s'," - "'%s','%s','%s',%u,%u," - "'%s','%s','%s'," - "%ld," - "'%s','%s'," - "%s,'%s'," - "%u,%u,-1,0)", - UsrDat->EnUsrCod, - UsrDat->Password, - UsrDat->Surname1, - UsrDat->Surname2, - UsrDat->FrstName, - Usr_StringsSexDB[UsrDat->Sex], - The_ThemeId[UsrDat->Prefs.Theme], - Ico_IconSetId[UsrDat->Prefs.IconSet], - Lan_STR_LANG_ID[UsrDat->Prefs.Language], - Cal_FIRST_DAY_OF_WEEK_DEFAULT, - (unsigned) Dat_FORMAT_DEFAULT, - Pri_VisibilityDB[UsrDat->PhotoVisibility], - Pri_VisibilityDB[UsrDat->BaPrfVisibility], - Pri_VisibilityDB[UsrDat->ExPrfVisibility], - UsrDat->CtyCod, - UsrDat->Phone[0], - UsrDat->Phone[1], - BirthdayStrDB, - CommentsLength ? UsrDat->Comments : - "", - (unsigned) Mnu_MENU_DEFAULT, - (unsigned) Cfg_DEFAULT_COLUMNS); + Acc_DB_CreateNewUsr (UsrDat); /* Insert user's IDs as confirmed */ for (NumID = 0; @@ -804,15 +740,9 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount) NumID++) { Str_ConvertToUpperText (UsrDat->IDs.List[NumID].ID); - DB_QueryINSERT ("can not store user's ID when creating user", - "INSERT INTO usr_ids" - " (UsrCod,UsrID,CreatTime,Confirmed)" - " VALUES" - " (%ld,'%s',NOW(),'%c')", - UsrDat->UsrCod, - UsrDat->IDs.List[NumID].ID, - UsrDat->IDs.List[NumID].Confirmed ? 'Y' : - 'N'); + Acc_DB_CreateNewUsrID (UsrDat->UsrCod, + UsrDat->IDs.List[NumID].ID, + UsrDat->IDs.List[NumID].Confirmed); } /***** Create directory for the user, if not exists *****/ @@ -1035,52 +965,40 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat, Brw_RemoveUsrWorksInAllCrss (UsrDat); // Make this before of removing the user from the courses /***** Remove the fields of course record in all courses *****/ - Rec_RemoveFieldsCrsRecordAll (UsrDat->UsrCod); + Rec_DB_RemoveFieldsCrsRecordAll (UsrDat->UsrCod); /***** Remove user from all his/her projects *****/ Prj_RemoveUsrFromProjects (UsrDat->UsrCod); /***** Remove user from all the attendance events *****/ - Att_RemoveUsrFromAllAttEvents (UsrDat->UsrCod); + Att_DB_RemoveUsrFromAllAttEvents (UsrDat->UsrCod); /***** Remove user from all the groups of all courses *****/ Grp_RemUsrFromAllGrps (UsrDat->UsrCod); - /***** Remove user's requests for inscription *****/ - DB_QueryDELETE ("can not remove user's requests for inscription", - "DELETE FROM crs_requests" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); + /***** Remove user's requests for enrolment *****/ + Enr_DB_RemUsrRequests (UsrDat->UsrCod); /***** Remove user from possible duplicate users *****/ - Dup_RemoveUsrFromDuplicated (UsrDat->UsrCod); + Dup_DB_RemoveUsrFromDuplicated (UsrDat->UsrCod); /***** Remove user from the tables of courses and users *****/ - DB_QueryDELETE ("can not remove a user from all courses", - "DELETE FROM crs_user_settings" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - DB_QueryDELETE ("can not remove a user from all courses", - "DELETE FROM crs_users" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); + Set_DB_RemCrsUsrSettings (UsrDat->UsrCod); + Enr_DB_RemUsrFromAllCrss (UsrDat->UsrCod); if (QuietOrVerbose == Cns_VERBOSE) Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_from_all_his_her_courses, UsrDat->FullName); - /***** Remove user as administrator of any degree *****/ - DB_QueryDELETE ("can not remove a user as administrator", - "DELETE FROM usr_admins" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); + /***** Remove user as administrator of any degree/center/institution *****/ + Enr_DB_RemUsrAsAdmin (UsrDat->UsrCod); if (QuietOrVerbose == Cns_VERBOSE) Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator, UsrDat->FullName); /***** Remove user's clipboard in forums *****/ - For_RemoveUsrFromThrClipboard (UsrDat->UsrCod); + For_DB_RemoveUsrFromThrClipboard (UsrDat->UsrCod); /***** Remove some files of the user's from database *****/ Brw_RemoveUsrFilesFromDB (UsrDat->UsrCod); @@ -1097,7 +1015,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat, Mch_RemoveMatchesMadeByUsrInAllCrss (UsrDat->UsrCod); /***** Remove user's notifications *****/ - Ntf_RemoveUsrNtfs (UsrDat->UsrCod); + Ntf_DB_RemoveUsrNtfs (UsrDat->UsrCod); /***** Delete user's messages sent and received *****/ Msg_DelAllRecAndSntMsgsUsr (UsrDat->UsrCod); @@ -1106,32 +1024,26 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat, UsrDat->FullName); /***** Remove user from tables of banned users *****/ - Usr_RemoveUsrFromUsrBanned (UsrDat->UsrCod); - Msg_RemoveUsrFromBanned (UsrDat->UsrCod); + Usr_DB_RemoveUsrFromBanned (UsrDat->UsrCod); + Msg_DB_RemoveUsrFromBanned (UsrDat->UsrCod); /***** Delete thread read status for this user *****/ - For_RemoveUsrFromReadThrs (UsrDat->UsrCod); + For_DB_RemoveUsrFromReadThrs (UsrDat->UsrCod); /***** Remove user from table of seen announcements *****/ - Ann_RemoveUsrFromSeenAnnouncements (UsrDat->UsrCod); + Ann_DB_RemoveUsrFromSeenAnnouncements (UsrDat->UsrCod); /***** Remove user from table of connected users *****/ - DB_QueryDELETE ("can not remove a user from table of connected users", - "DELETE FROM usr_connected" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); + Con_DB_RemoveUsrFromConnected (UsrDat->UsrCod); /***** Remove all sessions of this user *****/ - DB_QueryDELETE ("can not remove sessions of a user", - "DELETE FROM ses_sessions" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); + Ses_DB_RemoveUsrSessions (UsrDat->UsrCod); /***** Remove social content associated to the user *****/ Tml_Usr_RemoveUsrContent (UsrDat->UsrCod); /***** Remove user's figures *****/ - Prf_RemoveUsrFigures (UsrDat->UsrCod); + Prf_DB_RemoveUsrFigures (UsrDat->UsrCod); /***** Remove user from table of followers *****/ Fol_RemoveUsrFromUsrFollow (UsrDat->UsrCod); @@ -1140,10 +1052,10 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat, Rep_RemoveUsrUsageReports (UsrDat->UsrCod); /***** Remove user's agenda *****/ - Agd_RemoveUsrEvents (UsrDat->UsrCod); + Agd_DB_RemoveUsrEvents (UsrDat->UsrCod); /***** Remove the user from the list of users without photo *****/ - Pho_RemoveUsrFromTableClicksWithoutPhoto (UsrDat->UsrCod); + Pho_DB_RemoveUsrFromTableClicksWithoutPhoto (UsrDat->UsrCod); /***** Remove user's photo *****/ PhotoRemoved = Pho_RemovePhoto (UsrDat); @@ -1151,8 +1063,25 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat, Ale_ShowAlert (Ale_SUCCESS,Txt_Photo_of_THE_USER_X_has_been_removed, UsrDat->FullName); - /***** Remove user *****/ - Acc_RemoveUsr (UsrDat); + /***** Remove user's webs / social networks *****/ + Net_DB_RemoveUsrWebs (UsrDat->UsrCod); + + /***** Remove user's nicknames *****/ + Nck_DB_RemoveUsrNicknames (UsrDat->UsrCod); + + /***** Remove user's emails *****/ + Mai_DB_RemoveUsrPendingEmails (UsrDat->UsrCod); + Mai_DB_RemoveUsrEmails (UsrDat->UsrCod); + + /***** Remove user's IDs *****/ + ID_DB_RemoveUsrIDs (UsrDat->UsrCod); + + /***** Remove user's last data *****/ + Usr_DB_RemoveUsrLastData (UsrDat->UsrCod); + + /***** Remove user's data *****/ + Usr_DB_RemoveUsrData (UsrDat->UsrCod); + if (QuietOrVerbose == Cns_VERBOSE) Ale_ShowAlert (Ale_SUCCESS,Txt_Record_card_of_THE_USER_X_has_been_removed, UsrDat->FullName); @@ -1171,54 +1100,6 @@ static void Acc_RemoveUsrBriefcase (struct UsrData *UsrDat) Fil_RemoveTree (PathRelUsr); } -/*****************************************************************************/ -/************************ Remove a user from database ************************/ -/*****************************************************************************/ - -static void Acc_RemoveUsr (struct UsrData *UsrDat) - { - /***** Remove user's webs / social networks *****/ - DB_QueryDELETE ("can not remove user's webs / social networks", - "DELETE FROM usr_webs" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - /***** Remove user's nicknames *****/ - DB_QueryDELETE ("can not remove user's nicknames", - "DELETE FROM usr_nicknames" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - /***** Remove user's emails *****/ - DB_QueryDELETE ("can not remove pending user's emails", - "DELETE FROM usr_pending_emails" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - DB_QueryDELETE ("can not remove user's emails", - "DELETE FROM usr_emails" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - /***** Remove user's IDs *****/ - DB_QueryDELETE ("can not remove user's IDs", - "DELETE FROM usr_ids" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - /***** Remove user's last data *****/ - DB_QueryDELETE ("can not remove user's last data", - "DELETE FROM usr_last" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - - /***** Remove user's data *****/ - DB_QueryDELETE ("can not remove user's data", - "DELETE FROM usr_data" - " WHERE UsrCod=%ld", - UsrDat->UsrCod); - } - /*****************************************************************************/ /********* Put an icon to the action used to manage user's account ***********/ /*****************************************************************************/ diff --git a/swad_account_database.c b/swad_account_database.c new file mode 100644 index 00000000..70539564 --- /dev/null +++ b/swad_account_database.c @@ -0,0 +1,214 @@ +// swad_account_database.c: user's account operations with database + +/* + SWAD (Shared Workspace At a Distance), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2021 Antonio Cañas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General 3 License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*****************************************************************************/ +/*********************************** Headers *********************************/ +/*****************************************************************************/ + +// #include // For string functions + +#include "swad_account.h" +#include "swad_account_database.h" +// #include "swad_agenda.h" +// #include "swad_announcement.h" +// #include "swad_attendance.h" +// #include "swad_box.h" +#include "swad_calendar.h" +// #include "swad_database.h" +// #include "swad_duplicate.h" +// #include "swad_enrolment.h" +// #include "swad_error.h" +// #include "swad_exam_print.h" +// #include "swad_follow.h" +// #include "swad_form.h" +// #include "swad_forum.h" +#include "swad_global.h" +// #include "swad_HTML.h" +// #include "swad_ID.h" +// #include "swad_language.h" +// #include "swad_match.h" +// #include "swad_message.h" +// #include "swad_nickname.h" +// #include "swad_notification.h" +// #include "swad_parameter.h" +// #include "swad_profile.h" +// #include "swad_project.h" +// #include "swad_report.h" +// #include "swad_test_print.h" +// #include "swad_timeline.h" + +/*****************************************************************************/ +/****************************** Public constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/****************************** Private types ********************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/************** External global variables from others modules ****************/ +/*****************************************************************************/ + +extern struct Globals Gbl; + +/*****************************************************************************/ +/************************* Private global variables **************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private prototypes ****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/*************** Check if there are users with this user's ID ****************/ +/*****************************************************************************/ +// Returns the number of users got + +unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res, + const char ID[ID_MAX_BYTES_USR_ID + 1]) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get user's codes", + "SELECT usr_ids.UsrCod" // row[0] + " FROM usr_ids," + "usr_data" + " WHERE usr_ids.UsrID='%s'" + " AND usr_ids.UsrCod=usr_data.UsrCod" + " AND usr_data.Password=''", + ID); + } + +/*****************************************************************************/ +/****** Check if a nickname matches any of the nicknames of other users ******/ +/*****************************************************************************/ + +bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]) + { + return (DB_QueryCOUNT ("can not check if nickname already existed", + "SELECT COUNT(*)" + " FROM usr_nicknames" + " WHERE Nickname='%s'" + " AND UsrCod<>%ld", + NewNickWithoutArr, + Gbl.Usrs.Me.UsrDat.UsrCod) != 0); // A nickname of another user is the same that this nickname + } + +/*****************************************************************************/ +/******** Check if an email matches any of the emails of other users *********/ +/*****************************************************************************/ + +bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]) + { + return (DB_QueryCOUNT ("can not check if email already existed", + "SELECT COUNT(*)" + " FROM usr_emails" + " WHERE E_mail='%s'" + " AND Confirmed='Y'", + NewEmail) != 0); // An email of another user is the same that my email + } + + +/*****************************************************************************/ +/****************************** Create new user ******************************/ +/*****************************************************************************/ + +void Acc_DB_CreateNewUsr (struct UsrData *UsrDat) + { + extern const char *The_ThemeId[The_NUM_THEMES]; + extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; + extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY]; + extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; + extern const char *Usr_StringsSexDB[Usr_NUM_SEXS]; + char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]; + + /***** Create birthday string *****/ + Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes + + /***** Create new user *****/ + UsrDat->UsrCod = + DB_QueryINSERTandReturnCode ("can not create user", + "INSERT INTO usr_data" + " (EncryptedUsrCod,Password," + "Surname1,Surname2,FirstName,Sex," + "Theme,IconSet,Language,FirstDayOfWeek,DateFormat," + "PhotoVisibility,BaPrfVisibility,ExPrfVisibility," + "CtyCod," + "LocalPhone,FamilyPhone," + "Birthday,Comments," + "Menu,SideCols,NotifNtfEvents,EmailNtfEvents)" + " VALUES" + " ('%s','%s'," + "'%s','%s','%s','%s'," + "'%s','%s','%s',%u,%u," + "'%s','%s','%s'," + "%ld," + "'%s','%s'," + "%s,'%s'," + "%u,%u,-1,0)", + UsrDat->EnUsrCod, + UsrDat->Password, + UsrDat->Surname1, + UsrDat->Surname2, + UsrDat->FrstName, + Usr_StringsSexDB[UsrDat->Sex], + The_ThemeId[UsrDat->Prefs.Theme], + Ico_IconSetId[UsrDat->Prefs.IconSet], + Lan_STR_LANG_ID[UsrDat->Prefs.Language], + Cal_FIRST_DAY_OF_WEEK_DEFAULT, + (unsigned) Dat_FORMAT_DEFAULT, + Pri_VisibilityDB[UsrDat->PhotoVisibility], + Pri_VisibilityDB[UsrDat->BaPrfVisibility], + Pri_VisibilityDB[UsrDat->ExPrfVisibility], + UsrDat->CtyCod, + UsrDat->Phone[0], + UsrDat->Phone[1], + BirthdayStrDB, + UsrDat->Comments ? UsrDat->Comments : + "", + (unsigned) Mnu_MENU_DEFAULT, + (unsigned) Cfg_DEFAULT_COLUMNS); + } + + +/*****************************************************************************/ +/*************************** Create new user's ID ****************************/ +/*****************************************************************************/ + +void Acc_DB_CreateNewUsrID (long UsrCod, + const char ID[ID_MAX_BYTES_USR_ID + 1], + bool Confirmed) + { + DB_QueryINSERT ("can not store user's ID when creating user", + "INSERT INTO usr_ids" + " (UsrCod,UsrID,CreatTime,Confirmed)" + " VALUES" + " (%ld,'%s',NOW(),'%c')", + UsrCod, + ID, + Confirmed ? 'Y' : + 'N'); + } diff --git a/swad_account_database.h b/swad_account_database.h new file mode 100644 index 00000000..c66d42a2 --- /dev/null +++ b/swad_account_database.h @@ -0,0 +1,60 @@ +// swad_account_database.h: user's account operations with database + +#ifndef _SWAD_ACC_DB +#define _SWAD_ACC_DB +/* + SWAD (Shared Workspace At a Distance in Spanish), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2021 Antonio Cañas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*****************************************************************************/ +/********************************** Headers **********************************/ +/*****************************************************************************/ + +// #include // For boolean type + +// #include "swad_constant.h" +#include "swad_database.h" +#include "swad_ID.h" +// #include "swad_user.h" + +/*****************************************************************************/ +/****************************** Public constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/******************************** Public types *******************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/****************************** Public prototypes ****************************/ +/*****************************************************************************/ + +unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res, + const char ID[ID_MAX_BYTES_USR_ID + 1]); + +bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]); +bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]); + +void Acc_DB_CreateNewUsr (struct UsrData *UsrDat); +void Acc_DB_CreateNewUsrID (long UsrCod, + const char ID[ID_MAX_BYTES_USR_ID + 1], + bool Confirmed); + +#endif diff --git a/swad_agenda.c b/swad_agenda.c index 2c1f6f5d..5a55c6ac 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -1827,9 +1827,8 @@ static void Agd_UpdateEvent (struct Agd_Event *AgdEvent,const char *Txt) /********************** Remove all the events of a user **********************/ /*****************************************************************************/ -void Agd_RemoveUsrEvents (long UsrCod) +void Agd_DB_RemoveUsrEvents (long UsrCod) { - /***** Remove events *****/ DB_QueryDELETE ("can not remove all the events of a user", "DELETE FROM agd_agendas" " WHERE UsrCod=%ld", diff --git a/swad_agenda.h b/swad_agenda.h index 830b8499..f2cbd63d 100644 --- a/swad_agenda.h +++ b/swad_agenda.h @@ -125,7 +125,7 @@ void Agd_MakeEventPublic (void); void Agd_ReceiveFormEvent (void); -void Agd_RemoveUsrEvents (long UsrCod); +void Agd_DB_RemoveUsrEvents (long UsrCod); unsigned Agd_GetNumEventsFromUsr (long UsrCod); unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope); diff --git a/swad_announcement.c b/swad_announcement.c index d8bea8a0..b5044072 100644 --- a/swad_announcement.c +++ b/swad_announcement.c @@ -630,9 +630,8 @@ void Ann_MarkAnnouncementAsSeen (void) /******************** Remove user from seen announcements ********************/ /*****************************************************************************/ -void Ann_RemoveUsrFromSeenAnnouncements (long UsrCod) +void Ann_DB_RemoveUsrFromSeenAnnouncements (long UsrCod) { - /***** Remove user from seen announcements *****/ DB_QueryDELETE ("can not remove user from seen announcements", "DELETE FROM ann_seen" " WHERE UsrCod=%ld", diff --git a/swad_announcement.h b/swad_announcement.h index e423570f..badb8a9e 100644 --- a/swad_announcement.h +++ b/swad_announcement.h @@ -55,6 +55,6 @@ void Ann_HideActiveAnnouncement (void); void Ann_RevealHiddenAnnouncement (void); void Ann_RemoveAnnouncement (void); void Ann_MarkAnnouncementAsSeen (void); -void Ann_RemoveUsrFromSeenAnnouncements (long UsrCod); +void Ann_DB_RemoveUsrFromSeenAnnouncements (long UsrCod); #endif diff --git a/swad_attendance.c b/swad_attendance.c index 31943082..60629ac4 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -119,7 +119,7 @@ static void Att_CreateGrps (long AttCod); static void Att_GetAndWriteNamesOfGrpsAssociatedToAttEvent (struct Att_Event *Event); static void Att_RemoveAllUsrsFromAnAttEvent (long AttCod); -static void Att_RemoveAttEventFromCurrentCrs (long AttCod); +static void Att_DB_RemoveAttEventFromCurrentCrs (long AttCod); static void Att_ShowEvent (struct Att_Events *Events); @@ -986,7 +986,7 @@ void Att_RemoveAttEventFromDB (long AttCod) Att_RemoveAllTheGrpsAssociatedToAnAttEvent (AttCod); /***** Remove attendance event *****/ - Att_RemoveAttEventFromCurrentCrs (AttCod); + Att_DB_RemoveAttEventFromCurrentCrs (AttCod); } /*****************************************************************************/ @@ -1615,9 +1615,8 @@ static void Att_RemoveAllUsrsFromAnAttEvent (long AttCod) /* Remove one user from all the attendance events where he/she is registered */ /*****************************************************************************/ -void Att_RemoveUsrFromAllAttEvents (long UsrCod) +void Att_DB_RemoveUsrFromAllAttEvents (long UsrCod) { - /***** Remove group from all the attendance events *****/ DB_QueryDELETE ("can not remove user from all attendance events", "DELETE FROM att_users" " WHERE UsrCod=%ld", @@ -1628,9 +1627,8 @@ void Att_RemoveUsrFromAllAttEvents (long UsrCod) /*********** Remove one student from all the attendance events ***************/ /*****************************************************************************/ -void Att_RemoveUsrFromCrsAttEvents (long UsrCod,long CrsCod) +void Att_DB_RemoveUsrFromCrsAttEvents (long UsrCod,long CrsCod) { - /***** Remove group from all the attendance events *****/ DB_QueryDELETE ("can not remove user from attendance events of a course", "DELETE FROM att_users" " USING att_events," @@ -1645,7 +1643,7 @@ void Att_RemoveUsrFromCrsAttEvents (long UsrCod,long CrsCod) /*********************** Remove an attendance event **************************/ /*****************************************************************************/ -static void Att_RemoveAttEventFromCurrentCrs (long AttCod) +static void Att_DB_RemoveAttEventFromCurrentCrs (long AttCod) { DB_QueryDELETE ("can not remove attendance event", "DELETE FROM att_events" @@ -1690,7 +1688,7 @@ void Att_RemoveCrsAttEvents (long CrsCod) /*************** Get number of attendance events in a course *****************/ /*****************************************************************************/ -unsigned Att_GetNumAttEventsInCrs (long CrsCod) +unsigned Att_DB_GetNumAttEventsInCrs (long CrsCod) { /***** Get number of attendance events in a course from database *****/ return (unsigned) @@ -1707,7 +1705,7 @@ unsigned Att_GetNumAttEventsInCrs (long CrsCod) // Returns the number of courses with attendance events // in this location (all the platform, current degree or current course) -unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope) +unsigned Att_DB_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope) { /***** Get number of courses with attendance events from database *****/ switch (Scope) @@ -1924,46 +1922,47 @@ static void Att_ListAttOnlyMeAsStudent (struct Att_Event *Event) /***** Get my setting about photos in users' list for current course *****/ Usr_GetMyPrefAboutListWithPhotosFromDB (); - /***** Begin form *****/ - if (Event->Open) - { - Frm_BeginForm (ActRecAttMe); - Att_PutParamAttCod (Event->AttCod); - } - /***** List students (only me) *****/ /* Begin box */ Box_BoxBegin (NULL,Txt_Attendance, NULL,NULL, Hlp_USERS_Attendance,Box_NOT_CLOSABLE); - /* Begin table */ - HTM_TABLE_BeginWideMarginPadding (2); + /***** Begin form *****/ + if (Event->Open) + { + Frm_BeginForm (ActRecAttMe); + Att_PutParamAttCod (Event->AttCod); + } - /* Header */ - HTM_TR_Begin (NULL); + /***** List students (only me) *****/ + /* Begin table */ + HTM_TABLE_BeginWideMarginPadding (2); - HTM_TH_Empty (3); - if (Gbl.Usrs.Listing.WithPhotos) - HTM_TH_Empty (1); - HTM_TH (1,2,"TIT_TBL LM",Txt_ROLES_SINGUL_Abc[Rol_STD][Usr_SEX_UNKNOWN]); - HTM_TH (1,1,"LM",Txt_Student_comment); - HTM_TH (1,1,"LM",Txt_Teachers_comment); + /* Header */ + HTM_TR_Begin (NULL); - HTM_TR_End (); + HTM_TH_Empty (3); + if (Gbl.Usrs.Listing.WithPhotos) + HTM_TH_Empty (1); + HTM_TH (1,2,"TIT_TBL LM",Txt_ROLES_SINGUL_Abc[Rol_STD][Usr_SEX_UNKNOWN]); + HTM_TH (1,1,"LM",Txt_Student_comment); + HTM_TH (1,1,"LM",Txt_Teachers_comment); - /* List of students (only me) */ - Att_WriteRowUsrToCallTheRoll (1,&Gbl.Usrs.Me.UsrDat,Event); + HTM_TR_End (); - /* End table */ - HTM_TABLE_End (); + /* List of students (only me) */ + Att_WriteRowUsrToCallTheRoll (1,&Gbl.Usrs.Me.UsrDat,Event); - /* Send button */ - if (Event->Open) - { - Btn_PutConfirmButton (Txt_Save_changes); - Frm_EndForm (); - } + /* End table */ + HTM_TABLE_End (); + + /* Send button */ + if (Event->Open) + { + Btn_PutConfirmButton (Txt_Save_changes); + Frm_EndForm (); + } /* End box */ Box_BoxEnd (); diff --git a/swad_attendance.h b/swad_attendance.h index d0e0c677..fde0bf04 100644 --- a/swad_attendance.h +++ b/swad_attendance.h @@ -103,14 +103,14 @@ void Att_UpdateAttEvent (struct Att_Event *Event,const char *Description); void Att_RemoveGroupsOfType (long GrpTypCod); void Att_RemoveGroup (long GrpCod); -void Att_RemoveUsrFromAllAttEvents (long UsrCod); -void Att_RemoveUsrFromCrsAttEvents (long UsrCod,long CrsCod); +void Att_DB_RemoveUsrFromAllAttEvents (long UsrCod); +void Att_DB_RemoveUsrFromCrsAttEvents (long UsrCod,long CrsCod); void Att_RemoveCrsAttEvents (long CrsCod); -unsigned Att_GetNumAttEventsInCrs(long CrsCod); +unsigned Att_DB_GetNumAttEventsInCrs(long CrsCod); -unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope); +unsigned Att_DB_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope); unsigned Att_GetNumAttEvents (Hie_Lvl_Level_t Scope,unsigned *NumNotif); void Att_SeeOneAttEvent (void); diff --git a/swad_changelog.h b/swad_changelog.h index bf20832e..d7c4e901 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -600,13 +600,14 @@ 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.71 (2021-05-10)" +#define Log_PLATFORM_VERSION "SWAD 20.72 (2021-05-10)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 20.72: May 10, 2021 New module swad_account_database for database queries related to user's account. (310328 lines) Version 20.71: May 10, 2021 New module swad_media_database for database queries related to media. (310080 lines) Version 20.70: May 07, 2021 New module swad_follow_database for database queries related to following/followers. (309943 lines) Version 20.69.2: May 04, 2021 Fixed bug in removal of timeline favs. (309778 lines) diff --git a/swad_connected.c b/swad_connected.c index 15608f8e..e839cc18 100644 --- a/swad_connected.c +++ b/swad_connected.c @@ -444,9 +444,8 @@ void Con_UpdateMeInConnectedList (void) /************************** Remove old connected uses ************************/ /*****************************************************************************/ -void Con_RemoveOldConnected (void) +void Con_DB_RemoveOldConnected (void) { - /***** Remove old users from connected list *****/ DB_QueryDELETE ("can not remove old users from list of connected users", "DELETE FROM usr_connected" " WHERE UsrCod NOT IN" @@ -454,6 +453,18 @@ void Con_RemoveOldConnected (void) " FROM ses_sessions)"); } +/*****************************************************************************/ +/************* Remove a given user from list of connected users **************/ +/*****************************************************************************/ + +void Con_DB_RemoveUsrFromConnected (long UsrCod) + { + DB_QueryDELETE ("can not remove a user from table of connected users", + "DELETE FROM usr_connected" + " WHERE UsrCod=%ld", + UsrCod); + } + /*****************************************************************************/ /********************* Get connected users with a role ***********************/ /*****************************************************************************/ diff --git a/swad_connected.h b/swad_connected.h index 60543429..93dcfe93 100644 --- a/swad_connected.h +++ b/swad_connected.h @@ -55,7 +55,8 @@ void Con_ShowGlobalConnectedUsrs (void); void Con_ComputeConnectedUsrsBelongingToCurrentCrs (void); void Con_ShowConnectedUsrsBelongingToCurrentCrs (void); void Con_UpdateMeInConnectedList (void); -void Con_RemoveOldConnected (void); +void Con_DB_RemoveOldConnected (void); +void Con_DB_RemoveUsrFromConnected (long UsrCod); void Con_WriteScriptClockConnected (void); diff --git a/swad_duplicate.c b/swad_duplicate.c index dc502717..ec813ad3 100644 --- a/swad_duplicate.c +++ b/swad_duplicate.c @@ -227,7 +227,7 @@ void Dup_ListDuplicateUsrs (void) } else // User does not exists ==> // remove user from table of possible duplicate users - Dup_RemoveUsrFromDuplicated (UsrDat.UsrCod); + Dup_DB_RemoveUsrFromDuplicated (UsrDat.UsrCod); } /***** End table *****/ @@ -471,7 +471,7 @@ void Dup_RemoveUsrFromListDupUsrs (void) if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) { /* Remove entry from database */ - Dup_RemoveUsrFromDuplicated (Gbl.Usrs.Other.UsrDat.UsrCod); + Dup_DB_RemoveUsrFromDuplicated (Gbl.Usrs.Other.UsrDat.UsrCod); /* Show list of similar users again */ // Dup_ListSimilarUsrsInternal (); @@ -487,9 +487,8 @@ void Dup_RemoveUsrFromListDupUsrs (void) /******* Remove user from list of possible duplicate users in database *******/ /*****************************************************************************/ -void Dup_RemoveUsrFromDuplicated (long UsrCod) +void Dup_DB_RemoveUsrFromDuplicated (long UsrCod) { - /***** Remove user from list of duplicated users *****/ DB_QueryDELETE ("can not remove a user from possible duplicates", "DELETE FROM usr_duplicated" " WHERE UsrCod=%ld", diff --git a/swad_duplicate.h b/swad_duplicate.h index a9d520cb..e915a5e9 100644 --- a/swad_duplicate.h +++ b/swad_duplicate.h @@ -47,6 +47,6 @@ void Dup_ListDuplicateUsrs (void); void Dup_GetUsrCodAndListSimilarUsrs (void); void Dup_RemoveUsrFromListDupUsrs (void); -void Dup_RemoveUsrFromDuplicated (long UsrCod); +void Dup_DB_RemoveUsrFromDuplicated (long UsrCod); #endif diff --git a/swad_enrolment.c b/swad_enrolment.c index a6978eb3..f3d08a0f 100644 --- a/swad_enrolment.c +++ b/swad_enrolment.c @@ -4221,7 +4221,7 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat, if (Usr_CheckIfUsrBelongsToCurrentCrs (UsrDat)) { /***** Remove user from all the attendance events in course *****/ - Att_RemoveUsrFromCrsAttEvents (UsrDat->UsrCod,Crs->CrsCod); + Att_DB_RemoveUsrFromCrsAttEvents (UsrDat->UsrCod,Crs->CrsCod); /***** Remove user from all the groups in course *****/ Grp_RemUsrFromAllGrpsInCrs (UsrDat->UsrCod,Crs->CrsCod); @@ -4242,7 +4242,7 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat, } /***** Remove fields of this user in its course record *****/ - Rec_RemoveFieldsCrsRecordInCrs (UsrDat->UsrCod,Crs); + Rec_DB_RemoveFieldsCrsRecordInCrs (UsrDat->UsrCod,Crs); /***** Remove some information about files in course and groups *****/ Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (UsrDat->UsrCod,Crs->CrsCod); @@ -4308,6 +4308,30 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat, Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); } +/*****************************************************************************/ +/************************ Remove a user from a course ************************/ +/*****************************************************************************/ + +void Enr_DB_RemUsrRequests (long UsrCod) + { + DB_QueryDELETE ("can not remove user's requests for inscription", + "DELETE FROM crs_requests" + " WHERE UsrCod=%ld", + UsrCod); + } + +/*****************************************************************************/ +/************************ Remove a user from a course ************************/ +/*****************************************************************************/ + +void Enr_DB_RemUsrFromAllCrss (long UsrCod) + { + DB_QueryDELETE ("can not remove a user from all courses", + "DELETE FROM crs_users" + " WHERE UsrCod=%ld", + UsrCod); + } + /*****************************************************************************/ /** Ask if really wanted to remove an administrator from current institution */ /*****************************************************************************/ @@ -4381,3 +4405,15 @@ static void Enr_EffectivelyRemAdm (struct UsrData *UsrDat,Hie_Lvl_Level_t Scope, Ale_ShowAlert (Ale_ERROR,Txt_THE_USER_X_is_not_an_administrator_of_Y, UsrDat->FullName,InsCtrDegName); } + +/*****************************************************************************/ +/******* Remove user as administrator of any degree/center/institution *******/ +/*****************************************************************************/ + +void Enr_DB_RemUsrAsAdmin (long UsrCod) + { + DB_QueryDELETE ("can not remove a user as administrator", + "DELETE FROM usr_admins" + " WHERE UsrCod=%ld", + UsrCod); + } diff --git a/swad_enrolment.h b/swad_enrolment.h index c746a2a5..3860907e 100644 --- a/swad_enrolment.h +++ b/swad_enrolment.h @@ -145,4 +145,8 @@ void Enr_ModifyUsr2 (void); void Enr_AcceptUsrInCrs (long UsrCod); +void Enr_DB_RemUsrRequests (long UsrCod); +void Enr_DB_RemUsrFromAllCrss (long UsrCod); +void Enr_DB_RemUsrAsAdmin (long UsrCod); + #endif diff --git a/swad_forum.c b/swad_forum.c index 6bca2e32..9666106e 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -402,17 +402,18 @@ static void For_RestrictAccess (const struct For_Forums *Forums); static void For_WriteFormForumPst (struct For_Forums *Forums, bool IsReply,const char *Subject); -static void For_UpdateNumUsrsNotifiedByEMailAboutPost (long PstCod,unsigned NumUsrsToBeNotifiedByEMail); +static void For_DB_UpdateNumUsrsNotifiedByEMailAboutPost (long PstCod, + unsigned NumUsrsToBeNotifiedByEMail); static void For_PutAllHiddenParamsRemThread (void *Forums); static bool For_CheckIfICanMoveThreads (void); -static long For_GetThrInMyClipboard (void); -static bool For_CheckIfThrBelongsToForum (long ThrCod,const struct For_Forum *Forum); -static void For_MoveThrToCurrentForum (const struct For_Forums *Forums); +static long For_DB_GetThrInMyClipboard (void); +static bool For_DB_CheckIfThrBelongsToForum (long ThrCod,const struct For_Forum *Forum); +static void For_DB_MoveThrToCurrentForum (const struct For_Forums *Forums); static void For_InsertThrInClipboard (long ThrCod); -static void For_RemoveExpiredThrsClipboards (void); -static void For_RemoveThrCodFromThrClipboard (long ThrCod); +static void For_DB_RemoveExpiredThrsClipboards (void); +static void For_DB_RemoveThrCodFromThrClipboard (long ThrCod); /*****************************************************************************/ /********************************** Reset forum ******************************/ @@ -692,7 +693,7 @@ static void For_RemoveThreadOnly (long ThrCod) For_DeleteThrFromReadThrs (ThrCod); /***** Remove thread code from thread clipboard *****/ - For_RemoveThrCodFromThrClipboard (ThrCod); + For_DB_RemoveThrCodFromThrClipboard (ThrCod); /***** Delete thread from forum thread table *****/ DB_QueryDELETE ("can not remove a thread from a forum", @@ -995,12 +996,11 @@ static void For_DeleteThrFromReadThrs (long ThrCod) } /*****************************************************************************/ -/********************** Delete thread read status for an user ****************/ +/********************** Remove thread read status for a user *****************/ /*****************************************************************************/ -void For_RemoveUsrFromReadThrs (long UsrCod) +void For_DB_RemoveUsrFromReadThrs (long UsrCod) { - /***** Delete pairs ThrCod-UsrCod in for_read for a user *****/ DB_QueryDELETE ("can not remove the status of reading by a user" " of all the threads of a forum", "DELETE FROM for_read" @@ -1039,7 +1039,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, /***** Get if there is a thread ready to be moved *****/ if (For_CheckIfICanMoveThreads ()) - Forums->Thread.ToMove = For_GetThrInMyClipboard (); + Forums->Thread.ToMove = For_DB_GetThrInMyClipboard (); /***** Get thread read time for the current user *****/ ReadTimeUTC = For_GetThrReadTime (Thread.ThrCod); @@ -1602,7 +1602,7 @@ static void For_ShowForumList (struct For_Forums *Forums) /***** Get if there is a thread ready to be moved *****/ if (For_CheckIfICanMoveThreads ()) - Forums->Thread.ToMove = For_GetThrInMyClipboard (); + Forums->Thread.ToMove = For_DB_GetThrInMyClipboard (); /***** Fill the list with the institutions I belong to *****/ Usr_GetMyInstits (); @@ -2097,7 +2097,7 @@ static void For_WriteLinkToForum (const struct For_Forums *Forums, if (Forums->Thread.ToMove >= 0) // If I have permission to paste threads and there is a thread ready to be pasted... { /* Check if thread to move is yet in current forum */ - if (For_CheckIfThrBelongsToForum (Forums->Thread.ToMove,Forum)) + if (For_DB_CheckIfThrBelongsToForum (Forums->Thread.ToMove,Forum)) Ico_PutIcon ("paste.svg",Txt_Copy_not_allowed,"CONTEXT_OPT ICO_HIDDEN ICO16x16"); else { @@ -3501,7 +3501,7 @@ static void For_ListForumThrs (struct For_Forums *Forums, /***** Get if there is a thread ready to be moved *****/ if ((ICanMoveThreads = For_CheckIfICanMoveThreads ())) - ThreadInMyClipboard = For_GetThrInMyClipboard (); + ThreadInMyClipboard = For_DB_GetThrInMyClipboard (); /***** Initialize structure with user's data *****/ Usr_UsrDataConstructor (&UsrDat); @@ -4187,7 +4187,7 @@ void For_ReceiveForumPost (void) case For_FORUM_COURSE_USRS: case For_FORUM_COURSE_TCHS: if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_FORUM_POST_COURSE,PstCod))) - For_UpdateNumUsrsNotifiedByEMailAboutPost (PstCod,NumUsrsToBeNotifiedByEMail); + For_DB_UpdateNumUsrsNotifiedByEMailAboutPost (PstCod,NumUsrsToBeNotifiedByEMail); break; default: break; @@ -4196,7 +4196,7 @@ void For_ReceiveForumPost (void) /***** Notify the new post to previous writers in this thread *****/ if (IsReply) if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_FORUM_REPLY,PstCod))) - For_UpdateNumUsrsNotifiedByEMailAboutPost (PstCod,NumUsrsToBeNotifiedByEMail); + For_DB_UpdateNumUsrsNotifiedByEMailAboutPost (PstCod,NumUsrsToBeNotifiedByEMail); /***** Insert forum post into public social activity *****/ switch (Forums.Forum.Type) // Only if forum is public for any logged user @@ -4223,9 +4223,9 @@ void For_ReceiveForumPost (void) /********* Update number of users notified in table of forum posts **********/ /*****************************************************************************/ -static void For_UpdateNumUsrsNotifiedByEMailAboutPost (long PstCod,unsigned NumUsrsToBeNotifiedByEMail) +static void For_DB_UpdateNumUsrsNotifiedByEMailAboutPost (long PstCod, + unsigned NumUsrsToBeNotifiedByEMail) { - /***** Update number of users notified *****/ DB_QueryUPDATE ("can not update the number of notifications of a post", "UPDATE for_posts" " SET NumNotif=NumNotif+%u" @@ -4478,7 +4478,7 @@ void For_PasteThread (void) For_GetThrSubject (Forums.Thread.Current,Subject); /***** Check if paste (move) the thread to current forum has sense *****/ - if (For_CheckIfThrBelongsToForum (Forums.Thread.Current,&Forums.Forum)) + if (For_DB_CheckIfThrBelongsToForum (Forums.Thread.Current,&Forums.Forum)) { /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4496,7 +4496,7 @@ void For_PasteThread (void) else { /***** Paste (move) the thread to current forum *****/ - For_MoveThrToCurrentForum (&Forums); + For_DB_MoveThrToCurrentForum (&Forums); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4526,9 +4526,8 @@ static bool For_CheckIfICanMoveThreads (void) /**************** Get if there is a thread ready to be moved *****************/ /*****************************************************************************/ -static long For_GetThrInMyClipboard (void) +static long For_DB_GetThrInMyClipboard (void) { - /***** Get if there is a thread ready to move in my clipboard from database *****/ return DB_QuerySELECTCode ("can not check if there is" " any thread ready to be moved", "SELECT ThrCod" @@ -4541,7 +4540,7 @@ static long For_GetThrInMyClipboard (void) /***************** Get if a thread belongs to current forum ******************/ /*****************************************************************************/ -static bool For_CheckIfThrBelongsToForum (long ThrCod,const struct For_Forum *Forum) +static bool For_DB_CheckIfThrBelongsToForum (long ThrCod,const struct For_Forum *Forum) { char SubQuery[256]; @@ -4565,7 +4564,7 @@ static bool For_CheckIfThrBelongsToForum (long ThrCod,const struct For_Forum *Fo /************************ Move a thread to current forum *********************/ /*****************************************************************************/ -static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) +static void For_DB_MoveThrToCurrentForum (const struct For_Forums *Forums) { /***** Move a thread to current forum *****/ switch (Forums->Forum.Type) @@ -4639,7 +4638,7 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) static void For_InsertThrInClipboard (long ThrCod) { /***** Remove expired thread clipboards *****/ - For_RemoveExpiredThrsClipboards (); + For_DB_RemoveExpiredThrsClipboards (); /***** Add thread to my clipboard *****/ DB_QueryREPLACE ("can not add thread to clipboard", @@ -4655,9 +4654,8 @@ static void For_InsertThrInClipboard (long ThrCod) /************* Remove expired thread clipboards (from all users) *************/ /*****************************************************************************/ -static void For_RemoveExpiredThrsClipboards (void) +static void For_DB_RemoveExpiredThrsClipboards (void) { - /***** Remove all expired clipboards *****/ DB_QueryDELETE ("can not remove old threads from clipboards", "DELETE LOW_PRIORITY FROM for_clipboards" " WHERE TimeInsertUsrCod); + Pho_DB_RemoveUsrFromTableClicksWithoutPhoto (UsrDat->UsrCod); Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_Photo_has_been_updated); @@ -981,7 +981,7 @@ unsigned Pho_UpdateMyClicksWithoutPhoto (void) /******** Remove user from table with number of clicks without photo *********/ /*****************************************************************************/ -void Pho_RemoveUsrFromTableClicksWithoutPhoto (long UsrCod) +void Pho_DB_RemoveUsrFromTableClicksWithoutPhoto (long UsrCod) { DB_QueryDELETE ("can not remove a user from the list of users without photo", "DELETE FROM usr_clicks_without_photo" diff --git a/swad_photo.h b/swad_photo.h index 2a6ea96e..daefa727 100644 --- a/swad_photo.h +++ b/swad_photo.h @@ -114,7 +114,7 @@ void Pho_UpdateUsrPhoto1 (void); void Pho_UpdateUsrPhoto2 (void); unsigned Pho_UpdateMyClicksWithoutPhoto (void); -void Pho_RemoveUsrFromTableClicksWithoutPhoto (long UsrCod); +void Pho_DB_RemoveUsrFromTableClicksWithoutPhoto (long UsrCod); void Pho_ShowUsrPhotoIfAllowed (struct UsrData *UsrDat, const char *ClassPhoto,Pho_Zoom_t Zoom, diff --git a/swad_profile.c b/swad_profile.c index 3e526d4b..eb9cca2e 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -436,7 +436,7 @@ void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) /***** Right list *****/ HTM_DIV_Begin ("class=\"PRF_FIG_RIGHT_CONT\""); - UsrIsBannedFromRanking = Usr_CheckIfUsrBanned (UsrDat->UsrCod); + UsrIsBannedFromRanking = Usr_DB_CheckIfUsrBanned (UsrDat->UsrCod); if (!UsrIsBannedFromRanking) { /* Start right list */ @@ -1322,9 +1322,8 @@ static void Prf_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigure /**************************** Remove user's figures **************************/ /*****************************************************************************/ -void Prf_RemoveUsrFigures (long UsrCod) +void Prf_DB_RemoveUsrFigures (long UsrCod) { - /***** Remove user's figures *****/ DB_QueryDELETE ("can not delete user's figures", "DELETE FROM usr_figures" " WHERE UsrCod=%ld", diff --git a/swad_profile.h b/swad_profile.h index 62fc03bb..20f5a3cd 100644 --- a/swad_profile.h +++ b/swad_profile.h @@ -69,7 +69,7 @@ void Prf_CalculateFigures (void); bool Prf_GetAndStoreAllUsrFigures (long UsrCod,struct UsrFigures *UsrFigures); void Prf_CreateNewUsrFigures (long UsrCod,bool CreatingMyOwnAccount); -void Prf_RemoveUsrFigures (long UsrCod); +void Prf_DB_RemoveUsrFigures (long UsrCod); void Prf_IncrementNumClicksUsr (long UsrCod); void Prf_IncrementNumPubsUsr (long UsrCod); void Prf_IncrementNumFileViewsUsr (long UsrCod); diff --git a/swad_record.c b/swad_record.c index c919ba98..7a56c23e 100644 --- a/swad_record.c +++ b/swad_record.c @@ -1809,7 +1809,8 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, HTM_TD_End (); /* Get the text of the field */ - if (Rec_GetFieldFromCrsRecord (UsrDat->UsrCod,Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod,&mysql_res)) + if (Rec_DB_GetFieldFromCrsRecord (&mysql_res,UsrDat->UsrCod, + Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod)) { ThisFieldHasText = true; row = mysql_fetch_row (mysql_res); @@ -1868,9 +1869,8 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, /************** Get the text of a field of a record of course ****************/ /*****************************************************************************/ -unsigned Rec_GetFieldFromCrsRecord (long UsrCod,long FieldCod,MYSQL_RES **mysql_res) +unsigned Rec_DB_GetFieldFromCrsRecord (MYSQL_RES **mysql_res,long UsrCod,long FieldCod) { - /***** Get the text of a field of a record from database *****/ return DB_QuerySELECT (mysql_res,"can not get the text" " of a field of a record", "SELECT Txt" // row[0] @@ -1918,7 +1918,8 @@ void Rec_UpdateCrsRecord (long UsrCod) if (Rec_CheckIfICanEditField (Gbl.Crs.Records.LstFields.Lst[NumField].Visibility)) { /***** Check if already exists this field for this user in database *****/ - FieldAlreadyExists = (Rec_GetFieldFromCrsRecord (UsrCod,Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod,&mysql_res) != 0); + FieldAlreadyExists = (Rec_DB_GetFieldFromCrsRecord (&mysql_res,UsrCod, + Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod) != 0); DB_FreeMySQLResult (&mysql_res); if (FieldAlreadyExists) { @@ -1958,9 +1959,8 @@ void Rec_UpdateCrsRecord (long UsrCod) /************ Remove fields of record of a user in current course ************/ /*****************************************************************************/ -void Rec_RemoveFieldsCrsRecordInCrs (long UsrCod,struct Crs_Course *Crs) +void Rec_DB_RemoveFieldsCrsRecordInCrs (long UsrCod,struct Crs_Course *Crs) { - /***** Remove text of the field of record course *****/ DB_QueryDELETE ("can not remove user's record in a course", "DELETE FROM crs_records" " WHERE UsrCod=%ld" @@ -1975,9 +1975,8 @@ void Rec_RemoveFieldsCrsRecordInCrs (long UsrCod,struct Crs_Course *Crs) /************* Remove fields of record of a user in all courses **************/ /*****************************************************************************/ -void Rec_RemoveFieldsCrsRecordAll (long UsrCod) +void Rec_DB_RemoveFieldsCrsRecordAll (long UsrCod) { - /***** Remove text of the field of record course *****/ DB_QueryDELETE ("can not remove user's records in all courses", "DELETE FROM crs_records" " WHERE UsrCod=%ld", diff --git a/swad_record.h b/swad_record.h index f884096d..49d0d6f7 100644 --- a/swad_record.h +++ b/swad_record.h @@ -150,11 +150,11 @@ void Rec_ListRecordsTchsPrint (void); void Rec_UpdateAndShowMyCrsRecord (void); void Rec_UpdateAndShowOtherCrsRecord (void); -unsigned Rec_GetFieldFromCrsRecord (long UsrCod,long FieldCod,MYSQL_RES **mysql_res); +unsigned Rec_DB_GetFieldFromCrsRecord (MYSQL_RES **mysql_res,long UsrCod,long FieldCod); void Rec_GetFieldsCrsRecordFromForm (void); void Rec_UpdateCrsRecord (long UsrCod); -void Rec_RemoveFieldsCrsRecordInCrs (long UsrCod,struct Crs_Course *Crs); -void Rec_RemoveFieldsCrsRecordAll (long UsrCod); +void Rec_DB_RemoveFieldsCrsRecordInCrs (long UsrCod,struct Crs_Course *Crs); +void Rec_DB_RemoveFieldsCrsRecordAll (long UsrCod); void Rec_AllocMemFieldsRecordsCrs (void); void Rec_FreeMemFieldsRecordsCrs (void); diff --git a/swad_report.c b/swad_report.c index b0eb1489..e68214c8 100644 --- a/swad_report.c +++ b/swad_report.c @@ -143,7 +143,7 @@ static void Rep_DrawBarNumHits (unsigned long HitsNum,unsigned long HitsMax, static void Rep_WriteDouble (double Num); static void Rep_RemoveUsrReportsFiles (long UsrCod); -static void Rep_RemoveUsrReportsFromDB (long UsrCod); +static void Rep_DB_RemoveUsrReports (long UsrCod); /*****************************************************************************/ /******* Request my usage report (report on my use of the platform) **********/ @@ -1414,7 +1414,7 @@ void Rep_RemoveUsrUsageReports (long UsrCod) Rep_RemoveUsrReportsFiles (UsrCod); /***** Remove all user's usage reports of a user from database *****/ - Rep_RemoveUsrReportsFromDB (UsrCod); + Rep_DB_RemoveUsrReports (UsrCod); } /*****************************************************************************/ @@ -1460,9 +1460,8 @@ static void Rep_RemoveUsrReportsFiles (long UsrCod) /********** Remove all user's usage reports of a user from database **********/ /*****************************************************************************/ -static void Rep_RemoveUsrReportsFromDB (long UsrCod) +static void Rep_DB_RemoveUsrReports (long UsrCod) { - /***** Insert a new user's usage report into database *****/ DB_QueryDELETE ("can not remove user's usage reports", "DELETE FROM usr_reports" " WHERE UsrCod=%ld", diff --git a/swad_session.c b/swad_session.c index cf572a98..bdbe7d8b 100644 --- a/swad_session.c +++ b/swad_session.c @@ -131,7 +131,7 @@ void Ses_CloseSession (void) Gbl.Session.Id[0] = '\0'; /***** If there are no more sessions for current user ==> remove user from connected list *****/ - Con_RemoveOldConnected (); + Con_DB_RemoveOldConnected (); /***** Remove unused data associated to expired sessions *****/ Ses_RemoveParamsFromExpiredSessions (); @@ -266,6 +266,18 @@ void Ses_RemoveExpiredSessions (void) Cfg_TIME_TO_CLOSE_SESSION_FROM_LAST_REFRESH); } +/*****************************************************************************/ +/******************* Remove all sessions of a given user *********************/ +/*****************************************************************************/ + +void Ses_DB_RemoveUsrSessions (long UsrCod) + { + DB_QueryDELETE ("can not remove sessions of a user", + "DELETE FROM ses_sessions" + " WHERE UsrCod=%ld", + UsrCod); + } + /*****************************************************************************/ /******* Get the data (user code and password) of an initiated session *******/ /*****************************************************************************/ diff --git a/swad_session.h b/swad_session.h index d581fa4b..7b507012 100644 --- a/swad_session.h +++ b/swad_session.h @@ -45,6 +45,7 @@ void Ses_InsertSessionInDB (void); void Ses_UpdateSessionDataInDB (void); void Ses_UpdateSessionLastRefreshInDB (void); void Ses_RemoveExpiredSessions (void); +void Ses_DB_RemoveUsrSessions (long UsrCod); bool Ses_GetSessionData (void); void Ses_InsertParamInDB (const char *ParamName,const char *ParamValue); diff --git a/swad_setting.c b/swad_setting.c index f260546c..f96718c1 100644 --- a/swad_setting.c +++ b/swad_setting.c @@ -371,3 +371,15 @@ void Set_EndOneSettingSelector (void) { HTM_DIV_End (); } + +/*****************************************************************************/ +/************************ Remove a user from a course ************************/ +/*****************************************************************************/ + +void Set_DB_RemCrsUsrSettings (long UsrCod) + { + DB_QueryDELETE ("can not remove a user from all courses", + "DELETE FROM crs_user_settings" + " WHERE UsrCod=%ld", + UsrCod); + } diff --git a/swad_setting.h b/swad_setting.h index de3e7712..e14158a7 100644 --- a/swad_setting.h +++ b/swad_setting.h @@ -53,4 +53,6 @@ void Set_EndSettingsHead (void); void Set_BeginOneSettingSelector (void); void Set_EndOneSettingSelector (void); +void Set_DB_RemCrsUsrSettings (long UsrCod); + #endif diff --git a/swad_user.c b/swad_user.c index b61b378f..bb725e7d 100644 --- a/swad_user.c +++ b/swad_user.c @@ -3622,6 +3622,31 @@ static void Usr_InsertMyLastData (void) (long) (time_t) 0); // The user never accessed to notifications } +/*****************************************************************************/ +/*************************** Remove user's last data *************************/ +/*****************************************************************************/ + +void Usr_DB_RemoveUsrLastData (long UsrCod) + { + DB_QueryDELETE ("can not remove user's last data", + "DELETE FROM usr_last" + " WHERE UsrCod=%ld", + UsrCod); + } + +/*****************************************************************************/ +/****************************** Remove user's data ***************************/ +/*****************************************************************************/ + +void Usr_DB_RemoveUsrData (long UsrCod) + { + /***** Remove user's data *****/ + DB_QueryDELETE ("can not remove user's data", + "DELETE FROM usr_data" + " WHERE UsrCod=%ld", + UsrCod); + } + /*****************************************************************************/ /*********** Write a row of a table with the main data of a user *************/ /*****************************************************************************/ @@ -3871,7 +3896,8 @@ static void Usr_WriteRowStdAllData (struct UsrData *UsrDat,char *GroupNames) NumField++) { /* Get the text of the field */ - if (Rec_GetFieldFromCrsRecord (UsrDat->UsrCod,Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod,&mysql_res)) + if (Rec_DB_GetFieldFromCrsRecord (&mysql_res,UsrDat->UsrCod, + Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod)) { row = mysql_fetch_row (mysql_res); Str_Copy (Text,row[0],sizeof (Text) - 1); @@ -10097,7 +10123,7 @@ double Usr_GetCachedNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Rol /****************** Check if a user is banned in ranking *********************/ /*****************************************************************************/ -bool Usr_CheckIfUsrBanned (long UsrCod) +bool Usr_DB_CheckIfUsrBanned (long UsrCod) { return (DB_QueryCOUNT ("can not check if user is banned", "SELECT COUNT(*)" @@ -10110,7 +10136,7 @@ bool Usr_CheckIfUsrBanned (long UsrCod) /**************** Remove user from banned users in ranking *******************/ /*****************************************************************************/ -void Usr_RemoveUsrFromUsrBanned (long UsrCod) +void Usr_DB_RemoveUsrFromBanned (long UsrCod) { DB_QueryDELETE ("can not remove user from users banned", "DELETE FROM usr_banned" diff --git a/swad_user.h b/swad_user.h index 0ffe5744..33e0878d 100644 --- a/swad_user.h +++ b/swad_user.h @@ -408,6 +408,9 @@ bool Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (struct UsrData *UsrDat, void Usr_UpdateMyLastData (void); void Usr_InsertMyLastCrsTabAndTime (void); +void Usr_DB_RemoveUsrLastData (long UsrCod); +void Usr_DB_RemoveUsrData (long UsrCod); + void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat, bool PutCheckBoxToSelectUsr,Rol_Role_t Role, struct SelectedUsrs *SelectedUsrs); @@ -535,8 +538,8 @@ unsigned Usr_GetCachedNumUsrsNotBelongingToAnyCrs (void); double Usr_GetCachedNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role); double Usr_GetCachedNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role); -bool Usr_CheckIfUsrBanned (long UsrCod); -void Usr_RemoveUsrFromUsrBanned (long UsrCod); +bool Usr_DB_CheckIfUsrBanned (long UsrCod); +void Usr_DB_RemoveUsrFromBanned (long UsrCod); void Usr_PrintUsrQRCode (void);