From f5d59b104de0e43a25453acc3e0813353078cbec Mon Sep 17 00:00:00 2001 From: acanas Date: Thu, 10 Jun 2021 13:50:23 +0200 Subject: [PATCH] Version 20.91.1: Jun 10, 2021 Queries moved to module swad_enrolment_database. --- swad_ID.c | 40 ++++----- swad_ID.h | 4 + swad_account.c | 6 +- swad_account_database.c | 52 ++++++++---- swad_account_database.h | 7 +- swad_changelog.h | 3 +- swad_enrolment.c | 170 ++++++-------------------------------- swad_enrolment.h | 1 - swad_enrolment_database.c | 86 +++++++++++++++++++ swad_enrolment_database.h | 9 ++ swad_error.c | 2 +- swad_role.c | 32 +++++++ swad_role.h | 3 + swad_setting.c | 30 ++++++- swad_setting.h | 1 + swad_user.c | 39 +++++++++ swad_user.h | 3 + 17 files changed, 297 insertions(+), 191 deletions(-) diff --git a/swad_ID.c b/swad_ID.c index 6ac63a00..22e2156b 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -83,7 +83,25 @@ static void ID_RemoveUsrID (const struct UsrData *UsrDat,bool ItsMe); static bool ID_CheckIfConfirmed (long UsrCod,const char *UsrID); static void ID_RemoveUsrIDFromDB (long UsrCod,const char *UsrID); static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe); -static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed); + +/*****************************************************************************/ +/*************************** Create new user's ID ****************************/ +/*****************************************************************************/ + +void ID_DB_InsertANewUsrID (long UsrCod, + const char ID[ID_MAX_BYTES_USR_ID + 1], + bool Confirmed) + { + DB_QueryINSERT ("can not create user's ID", + "INSERT INTO usr_ids" + " (UsrCod,UsrID,CreatTime,Confirmed)" + " VALUES" + " (%ld,'%s',NOW(),'%c')", + UsrCod, + ID, + Confirmed ? 'Y' : + 'N'); + } /*****************************************************************************/ /********************** Get list of IDs of a user ****************************/ @@ -982,7 +1000,7 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) /***** Save this new ID *****/ // It's me ==> ID not confirmed // Not me ==> ID confirmed - ID_InsertANewUsrIDInDB (UsrDat->UsrCod,NewID,!ItsMe); + ID_DB_InsertANewUsrID (UsrDat->UsrCod,NewID,!ItsMe); Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, Txt_The_ID_X_has_been_registered_successfully, @@ -998,24 +1016,6 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); } -/*****************************************************************************/ -/******************* Insert a new ID for me in database **********************/ -/*****************************************************************************/ - -static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed) - { - /***** Update my nickname in database *****/ - DB_QueryINSERT ("can not insert a new ID", - "INSERT INTO usr_ids" - " (UsrCod,UsrID,CreatTime,Confirmed)" - " VALUES" - " (%ld,'%s',NOW(),'%c')", - UsrCod, - NewID, - Confirmed ? 'Y' : - 'N'); - } - /*****************************************************************************/ /************************ Confirm another user's ID **************************/ /*****************************************************************************/ diff --git a/swad_ID.h b/swad_ID.h index 8617e795..0c01ce50 100644 --- a/swad_ID.h +++ b/swad_ID.h @@ -55,6 +55,10 @@ struct ListIDs /***************************** Public prototypes *****************************/ /*****************************************************************************/ +void ID_DB_InsertANewUsrID (long UsrCod, + const char ID[ID_MAX_BYTES_USR_ID + 1], + bool Confirmed); + void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat); void ID_ReallocateListIDs (struct UsrData *UsrDat,unsigned NumIDs); void ID_FreeListIDs (struct UsrData *UsrDat); diff --git a/swad_account.c b/swad_account.c index f3e714cf..34450804 100644 --- a/swad_account.c +++ b/swad_account.c @@ -733,11 +733,11 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount) Acc_CreateNewEncryptedUsrCod (UsrDat); /***** Filter some user's data before inserting */ - Enr_FilterUsrDat (UsrDat); + Usr_FilterUsrBirthday (&UsrDat->Birthday); /***** Insert new user in database *****/ /* Insert user's data */ - Acc_DB_CreateNewUsr (UsrDat); + UsrDat->UsrCod = Acc_DB_CreateNewUsr (UsrDat); /* Insert user's IDs as confirmed */ for (NumID = 0; @@ -745,7 +745,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount) NumID++) { Str_ConvertToUpperText (UsrDat->IDs.List[NumID].ID); - Acc_DB_CreateNewUsrID (UsrDat->UsrCod, + ID_DB_InsertANewUsrID (UsrDat->UsrCod, UsrDat->IDs.List[NumID].ID, UsrDat->IDs.List[NumID].Confirmed); } diff --git a/swad_account_database.c b/swad_account_database.c index 602a6c86..362e6ac2 100644 --- a/swad_account_database.c +++ b/swad_account_database.c @@ -108,8 +108,9 @@ bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_A /*****************************************************************************/ /****************************** Create new user ******************************/ /*****************************************************************************/ +// Return new user's code -void Acc_DB_CreateNewUsr (struct UsrData *UsrDat) +long Acc_DB_CreateNewUsr (const struct UsrData *UsrDat) { extern const char *The_ThemeId[The_NUM_THEMES]; extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; @@ -120,7 +121,7 @@ void Acc_DB_CreateNewUsr (struct UsrData *UsrDat) /***** Create new user *****/ Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes - UsrDat->UsrCod = + return DB_QueryINSERTandReturnCode ("can not create user", "INSERT INTO usr_data" " (EncryptedUsrCod,Password," @@ -164,22 +165,41 @@ void Acc_DB_CreateNewUsr (struct UsrData *UsrDat) (unsigned) Cfg_DEFAULT_COLUMNS); } - /*****************************************************************************/ -/*************************** Create new user's ID ****************************/ +/***************************** Update user's data ****************************/ /*****************************************************************************/ +// UsrDat->UsrCod must be > 0 -void Acc_DB_CreateNewUsrID (long UsrCod, - const char ID[ID_MAX_BYTES_USR_ID + 1], - bool Confirmed) +void Acc_DB_UpdateUsrData (const struct UsrData *UsrDat) { - 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'); + extern const char *Usr_StringsSexDB[Usr_NUM_SEXS]; + char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]; + + /***** Update user's common data *****/ + Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes + DB_QueryUPDATE ("can not update user's data", + "UPDATE usr_data" + " SET Password='%s'," + "Surname1='%s'," + "Surname2='%s'," + "FirstName='%s'," + "Sex='%s'," + "CtyCod=%ld," + "LocalPhone='%s'," + "FamilyPhone='%s'," + "Birthday=%s," + "Comments='%s'" + " WHERE UsrCod=%ld", + UsrDat->Password, + UsrDat->Surname1, + UsrDat->Surname2, + UsrDat->FrstName, + Usr_StringsSexDB[UsrDat->Sex], + UsrDat->CtyCod, + UsrDat->Phone[0], + UsrDat->Phone[1], + BirthdayStrDB, + UsrDat->Comments ? UsrDat->Comments : + "", + UsrDat->UsrCod); } diff --git a/swad_account_database.h b/swad_account_database.h index 20d41fee..9ea8fd2b 100644 --- a/swad_account_database.h +++ b/swad_account_database.h @@ -30,6 +30,7 @@ #include // To access MySQL databases #include "swad_ID.h" +#include "swad_user.h" /*****************************************************************************/ /****************************** Public constants *****************************/ @@ -49,9 +50,7 @@ unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res, 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); +long Acc_DB_CreateNewUsr (const struct UsrData *UsrDat); +void Acc_DB_UpdateUsrData (const struct UsrData *UsrDat); #endif diff --git a/swad_changelog.h b/swad_changelog.h index a6c61686..df6d25f6 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 20.91 (2021-06-09)" +#define Log_PLATFORM_VERSION "SWAD 20.91.1 (2021-06-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.91.1: Jun 10, 2021 Queries moved to module swad_enrolment_database. (313145 lines) Version 20.91: Jun 09, 2021 New module swad_enrolment_database for database queries related to user's enrolment. (313063 lines) Version 20.90.1: Jun 09, 2021 Queries moved to module swad_duplicate_database. (312962 lines) Version 20.90: Jun 05, 2021 New module swad_duplicate_database for database queries related to duplicate users. (? lines) diff --git a/swad_enrolment.c b/swad_enrolment.c index 02e21498..c17c28f8 100644 --- a/swad_enrolment.c +++ b/swad_enrolment.c @@ -31,6 +31,7 @@ #include // For string functions #include "swad_account.h" +#include "swad_account_database.h" #include "swad_announcement.h" #include "swad_attendance_database.h" #include "swad_box.h" @@ -51,6 +52,7 @@ #include "swad_parameter.h" #include "swad_photo.h" #include "swad_role.h" +#include "swad_setting.h" #include "swad_test_print.h" #include "swad_user.h" @@ -211,7 +213,7 @@ void Enr_PutButtonInlineToRegisterStds (long CrsCod) { Frm_BeginForm (ActReqEnrSevStd); Crs_PutParamCrsCod (CrsCod); - Btn_PutCreateButtonInline (Txt_Register_students); + Btn_PutCreateButtonInline (Txt_Register_students); Frm_EndForm (); } } @@ -237,7 +239,11 @@ void Enr_PutLinkToRequestSignUp (void) void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole) { - /***** Check if user's role is allowed *****/ + /***** Trivial check 1: current course code should be > 0 *****/ + if (Gbl.Hierarchy.Crs.CrsCod <= 0) + Err_WrongCourseExit (); + + /***** Trivial check 2: check if user's role is allowed *****/ switch (NewRole) { case Rol_STD: @@ -249,14 +255,7 @@ void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole) } /***** Update the role of a user in a course *****/ - DB_QueryUPDATE ("can not modify user's role in course", - "UPDATE crs_users" - " SET Role=%u" - " WHERE CrsCod=%ld" - " AND UsrCod=%ld", - (unsigned) NewRole, - Gbl.Hierarchy.Crs.CrsCod, - UsrDat->UsrCod); + Rol_DB_UpdateUsrRoleInCurrentCrs (UsrDat->UsrCod,NewRole); /***** Flush caches *****/ Usr_FlushCachesUsr (); @@ -281,9 +280,11 @@ void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole) void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole, Enr_KeepOrSetAccepted_t KeepOrSetAccepted) { - extern const char *Usr_StringsUsrListTypeInDB[Usr_NUM_USR_LIST_TYPES]; + /***** Trivial check 1: current course code should be > 0 *****/ + if (Gbl.Hierarchy.Crs.CrsCod <= 0) + Err_WrongCourseExit (); - /***** Check if user's role is allowed *****/ + /***** Trivial check 2: check if user's role is allowed *****/ switch (NewRole) { case Rol_STD: @@ -295,36 +296,10 @@ void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole, } /***** Register user in current course in database *****/ - DB_QueryINSERT ("can not register user in course", - "INSERT INTO crs_users" - " (CrsCod,UsrCod,Role,Accepted)" - " VALUES" - " (%ld,%ld,%u,'%c')", - Gbl.Hierarchy.Crs.CrsCod, - UsrDat->UsrCod, - (unsigned) NewRole, - KeepOrSetAccepted == Enr_SET_ACCEPTED_TO_TRUE ? 'Y' : - 'N'); + Enr_DB_InsertUsrInCurrentCrs (UsrDat->UsrCod,NewRole,KeepOrSetAccepted); /***** Register last prefs in current course in database *****/ - DB_QueryINSERT ("can not register user in course", - "INSERT INTO crs_user_settings" - " (UsrCod,CrsCod," - "LastDowGrpCod,LastComGrpCod,LastAssGrpCod," - "NumAccTst,LastAccTst,NumQstsLastTst," - "UsrListType,ColsClassPhoto,ListWithPhotos)" - " VALUES" - " (%ld,%ld," - "-1,-1,-1," - "0,FROM_UNIXTIME(%ld),0," - "'%s',%u,'%c')", - UsrDat->UsrCod, - Gbl.Hierarchy.Crs.CrsCod, - (long) (time_t) 0, // The user never accessed to tests in this course - Usr_StringsUsrListTypeInDB[Usr_SHOW_USRS_TYPE_DEFAULT], - Usr_CLASS_PHOTO_COLS_DEF, - Usr_LIST_WITH_PHOTOS_DEF ? 'Y' : - 'N'); + Set_DB_InsertUsrInCurrentCrsSettings (UsrDat->UsrCod); /***** Flush caches *****/ Usr_FlushCachesUsr (); @@ -522,12 +497,7 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], SummaryStr[0] = '\0'; // Return nothing on error /***** Get user's role in course from database *****/ - if (DB_QuerySELECT (&mysql_res,"can not get user's role in course", - "SELECT Role" // row[0] - " FROM crs_users" - " WHERE CrsCod=%ld" - " AND UsrCod=%ld", - CrsCod,UsrCod) == 1) // Result should have a unique row + if (Rol_DB_GetUsrRoleInCrs (&mysql_res,CrsCod,UsrCod) == 1) // Result should have a unique row { /***** Get user's role in course *****/ row = mysql_fetch_row (mysql_res); @@ -561,57 +531,15 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], void Enr_UpdateUsrData (struct UsrData *UsrDat) { - extern const char *Usr_StringsSexDB[Usr_NUM_SEXS]; - char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]; - /***** Check if user's code is initialized *****/ if (UsrDat->UsrCod <= 0) Err_WrongUserExit (); /***** Filter some user's data before updating */ - Enr_FilterUsrDat (UsrDat); + Usr_FilterUsrBirthday (&UsrDat->Birthday); /***** Update user's common data *****/ - Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes - DB_QueryUPDATE ("can not update user's data", - "UPDATE usr_data" - " SET Password='%s'," - "Surname1='%s'," - "Surname2='%s'," - "FirstName='%s'," - "Sex='%s'," - "CtyCod=%ld," - "LocalPhone='%s'," - "FamilyPhone='%s'," - "Birthday=%s," - "Comments='%s'" - " WHERE UsrCod=%ld", - UsrDat->Password, - UsrDat->Surname1, - UsrDat->Surname2, - UsrDat->FrstName, - Usr_StringsSexDB[UsrDat->Sex], - UsrDat->CtyCod, - UsrDat->Phone[0], - UsrDat->Phone[1], - BirthdayStrDB, - UsrDat->Comments ? UsrDat->Comments : - "", - UsrDat->UsrCod); - } - -/*****************************************************************************/ -/************************* Filter some user's data ***************************/ -/*****************************************************************************/ - -void Enr_FilterUsrDat (struct UsrData *UsrDat) - { - /***** Fix birthday *****/ - if (UsrDat->Birthday.Year < Gbl.Now.Date.Year-99 || - UsrDat->Birthday.Year > Gbl.Now.Date.Year-16) - UsrDat->Birthday.Year = - UsrDat->Birthday.Month = - UsrDat->Birthday.Day = 0; + Acc_DB_UpdateUsrData (UsrDat); } /*****************************************************************************/ @@ -878,24 +806,7 @@ void Enr_RemoveOldUsrs (void) SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH; /***** Get old users from database *****/ - NumUsrs = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get old users", - "SELECT UsrCod" - " FROM (SELECT UsrCod" - " FROM usr_last" - " WHERE LastTime 0) // Old request exists in database - DB_QueryUPDATE ("can not update enrolment request", - "UPDATE crs_requests" - " SET Role=%u," - "RequestTime=NOW()" - " WHERE ReqCod=%ld" - " AND CrsCod=%ld" - " AND UsrCod=%ld", - (unsigned) RoleFromForm, - ReqCod, - Gbl.Hierarchy.Crs.CrsCod, - Gbl.Usrs.Me.UsrDat.UsrCod); - else // No request in database for this user in this course - ReqCod = - DB_QueryINSERTandReturnCode ("can not save enrolment request", - "INSERT INTO crs_requests" - " (CrsCod,UsrCod,Role,RequestTime)" - " VALUES" - " (%ld,%ld,%u,NOW())", - Gbl.Hierarchy.Crs.CrsCod, - Gbl.Usrs.Me.UsrDat.UsrCod, - (unsigned) RoleFromForm); + if (ReqCod > 0) // Old request exists in database + Enr_DB_UpdateMyEnrolmentRequestInCurrentCrs (ReqCod,RoleFromForm); + else // No request in database for this user in this course + ReqCod = Enr_DB_CreateMyEnrolmentRequestInCurrentCrs (RoleFromForm); /***** Show confirmation message *****/ Ale_ShowAlert (Ale_SUCCESS,Txt_Your_request_for_enrolment_as_X_in_the_course_Y_has_been_accepted_for_processing, @@ -2073,12 +1960,7 @@ void Enr_GetNotifEnrolmentRequest (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], SummaryStr[0] = '\0'; // Return nothing on error /***** Get user and requested role from database *****/ - if (DB_QuerySELECT (&mysql_res,"can not get enrolment request", - "SELECT UsrCod," // row[0] - "Role" // row[1] - " FROM crs_requests" - " WHERE ReqCod=%ld", - ReqCod) == 1) // Result should have a unique row + if (Enr_DB_GetEnrolmentRequestByCod (&mysql_res,ReqCod) == 1) // Result should have a unique row { /***** Get user and requested role *****/ row = mysql_fetch_row (mysql_res); diff --git a/swad_enrolment.h b/swad_enrolment.h index 1135f566..695eb50a 100644 --- a/swad_enrolment.h +++ b/swad_enrolment.h @@ -86,7 +86,6 @@ void Enr_ReqAcceptRegisterInCrs (void); void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], long CrsCod,long UsrCod); void Enr_UpdateUsrData (struct UsrData *UsrDat); -void Enr_FilterUsrDat (struct UsrData *UsrDat); void Enr_ReqAdminStds (void); void Enr_ReqAdminNonEditingTchs (void); diff --git a/swad_enrolment_database.c b/swad_enrolment_database.c index 5e5f033d..ce59ac1a 100644 --- a/swad_enrolment_database.c +++ b/swad_enrolment_database.c @@ -80,6 +80,25 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ +/*****************************************************************************/ +/*************** Register user in current course in database *****************/ +/*****************************************************************************/ + +void Enr_DB_InsertUsrInCurrentCrs (long UsrCod,Rol_Role_t NewRole, + Enr_KeepOrSetAccepted_t KeepOrSetAccepted) + { + DB_QueryINSERT ("can not register user in course", + "INSERT INTO crs_users" + " (CrsCod,UsrCod,Role,Accepted)" + " VALUES" + " (%ld,%ld,%u,'%c')", + Gbl.Hierarchy.Crs.CrsCod, + UsrCod, + (unsigned) NewRole, + KeepOrSetAccepted == Enr_SET_ACCEPTED_TO_TRUE ? 'Y' : + 'N'); + } + /*****************************************************************************/ /**************** Update institution, center and department ******************/ /*****************************************************************************/ @@ -116,6 +135,73 @@ void Enr_DB_AcceptUsrInCrs (long UsrCod) UsrCod); } +/*****************************************************************************/ +/****** Get enrolment request (user and requested role) given its code *******/ +/*****************************************************************************/ + +unsigned Enr_DB_GetEnrolmentRequestByCod (MYSQL_RES **mysql_res,long ReqCod) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get enrolment request", + "SELECT UsrCod," // row[0] + "Role" // row[1] + " FROM crs_requests" + " WHERE ReqCod=%ld", + ReqCod); + } + +/*****************************************************************************/ +/*** Try to get and old request of me in the current course from database ****/ +/*****************************************************************************/ + +long Enr_DB_GetMyLastEnrolmentRequestInCurrentCrs (void) + { + return + DB_QuerySELECTCode ("can not get enrolment request", + "SELECT ReqCod" + " FROM crs_requests" + " WHERE CrsCod=%ld" + " AND UsrCod=%ld", + Gbl.Hierarchy.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod); + } + +/*****************************************************************************/ +/************ Create my enrolment request in the current course **************/ +/*****************************************************************************/ + +long Enr_DB_CreateMyEnrolmentRequestInCurrentCrs (Rol_Role_t NewRole) + { + return + DB_QueryINSERTandReturnCode ("can not save enrolment request", + "INSERT INTO crs_requests" + " (CrsCod,UsrCod,Role,RequestTime)" + " VALUES" + " (%ld,%ld,%u,NOW())", + Gbl.Hierarchy.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) NewRole); + } + +/*****************************************************************************/ +/************* Update my enrolment request in the current course *************/ +/*****************************************************************************/ + +void Enr_DB_UpdateMyEnrolmentRequestInCurrentCrs (long ReqCod,Rol_Role_t NewRole) + { + DB_QueryUPDATE ("can not update enrolment request", + "UPDATE crs_requests" + " SET Role=%u," + "RequestTime=NOW()" + " WHERE ReqCod=%ld" + " AND CrsCod=%ld" + " AND UsrCod=%ld", + (unsigned) NewRole, + ReqCod, + Gbl.Hierarchy.Crs.CrsCod, + Gbl.Usrs.Me.UsrDat.UsrCod); + } + /*****************************************************************************/ /*********** Remove all users' requests for inscription in a course **********/ /*****************************************************************************/ diff --git a/swad_enrolment_database.h b/swad_enrolment_database.h index 4d40ac2f..fa52f83c 100644 --- a/swad_enrolment_database.h +++ b/swad_enrolment_database.h @@ -28,6 +28,7 @@ /*****************************************************************************/ // #include "swad_course.h" +#include "swad_enrolment.h" #include "swad_hierarchy.h" // #include "swad_notification.h" // #include "swad_user.h" @@ -44,10 +45,18 @@ /****************************** Public prototypes ****************************/ /*****************************************************************************/ +void Enr_DB_InsertUsrInCurrentCrs (long UsrCod,Rol_Role_t NewRole, + Enr_KeepOrSetAccepted_t KeepOrSetAccepted); + void Enr_DB_UpdateInstitutionCenterDepartment (void); void Enr_DB_AcceptUsrInCrs (long UsrCod); +unsigned Enr_DB_GetEnrolmentRequestByCod (MYSQL_RES **mysql_res,long ReqCod); +long Enr_DB_GetMyLastEnrolmentRequestInCurrentCrs (void); +long Enr_DB_CreateMyEnrolmentRequestInCurrentCrs (Rol_Role_t NewRole); +void Enr_DB_UpdateMyEnrolmentRequestInCurrentCrs (long ReqCod,Rol_Role_t NewRole); + void Enr_DB_RemCrsRequests (long CrsCod); void Enr_DB_RemUsrRequests (long UsrCod); void Enr_DB_RemAllUsrsFromCrsSettings (long CrsCod); diff --git a/swad_error.c b/swad_error.c index fef217f4..a7908de9 100644 --- a/swad_error.c +++ b/swad_error.c @@ -133,7 +133,7 @@ void Err_WrongDepartmentExit (void) void Err_WrongPlaceExit (void) { - Err_ShowErrorAndExit ("Wrong department."); + Err_ShowErrorAndExit ("Wrong place."); } /*****************************************************************************/ diff --git a/swad_role.c b/swad_role.c index 7bb78ff4..6129dc82 100644 --- a/swad_role.c +++ b/swad_role.c @@ -648,3 +648,35 @@ Rol_Role_t Rol_GetRequestedRole (long UsrCod) Gbl.Hierarchy.Crs.CrsCod, UsrCod); } + +/*****************************************************************************/ +/******************* Get user's role in course from database *****************/ +/*****************************************************************************/ + +unsigned Rol_DB_GetUsrRoleInCrs (MYSQL_RES **mysql_res,long CrsCod,long UsrCod) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get user's role in course", + "SELECT Role" // row[0] + " FROM crs_users" + " WHERE CrsCod=%ld" + " AND UsrCod=%ld", + CrsCod, + UsrCod); + } + +/*****************************************************************************/ +/************* Update the role of a user in the current course ***************/ +/*****************************************************************************/ + +void Rol_DB_UpdateUsrRoleInCurrentCrs (long UsrCod,Rol_Role_t NewRole) + { + DB_QueryUPDATE ("can not modify user's role in course", + "UPDATE crs_users" + " SET Role=%u" + " WHERE CrsCod=%ld" + " AND UsrCod=%ld", + (unsigned) NewRole, + Gbl.Hierarchy.Crs.CrsCod, + UsrCod); + } diff --git a/swad_role.h b/swad_role.h index bf788e7a..497a28fa 100644 --- a/swad_role.h +++ b/swad_role.h @@ -64,4 +64,7 @@ unsigned Rol_GetSelectedRoles (void); Rol_Role_t Rol_GetRequestedRole (long UsrCod); +unsigned Rol_DB_GetUsrRoleInCrs (MYSQL_RES **mysql_res,long CrsCod,long UsrCod); +void Rol_DB_UpdateUsrRoleInCurrentCrs (long UsrCod,Rol_Role_t NewRole); + #endif diff --git a/swad_setting.c b/swad_setting.c index 027d0057..5a344252 100644 --- a/swad_setting.c +++ b/swad_setting.c @@ -401,7 +401,35 @@ void Set_EndOneSettingSelector (void) } /*****************************************************************************/ -/************************ Remove a user from a course ************************/ +/************ Register last prefs in current course in database **************/ +/*****************************************************************************/ + +void Set_DB_InsertUsrInCurrentCrsSettings (long UsrCod) + { + extern const char *Usr_StringsUsrListTypeInDB[Usr_NUM_USR_LIST_TYPES]; + + DB_QueryINSERT ("can not register user in course", + "INSERT INTO crs_user_settings" + " (UsrCod,CrsCod," + "LastDowGrpCod,LastComGrpCod,LastAssGrpCod," + "NumAccTst,LastAccTst,NumQstsLastTst," + "UsrListType,ColsClassPhoto,ListWithPhotos)" + " VALUES" + " (%ld,%ld," + "-1,-1,-1," + "0,FROM_UNIXTIME(%ld),0," + "'%s',%u,'%c')", + UsrCod, + Gbl.Hierarchy.Crs.CrsCod, + (long) (time_t) 0, // The user never accessed to tests in this course + Usr_StringsUsrListTypeInDB[Usr_SHOW_USRS_TYPE_DEFAULT], + Usr_CLASS_PHOTO_COLS_DEF, + Usr_LIST_WITH_PHOTOS_DEF ? 'Y' : + 'N'); + } + +/*****************************************************************************/ +/******************** Remove a user from course settings *********************/ /*****************************************************************************/ void Set_DB_RemCrsUsrSettings (long UsrCod) diff --git a/swad_setting.h b/swad_setting.h index b8c33aac..e9bc3b77 100644 --- a/swad_setting.h +++ b/swad_setting.h @@ -58,6 +58,7 @@ void Set_EndSettingsHead (void); void Set_BeginOneSettingSelector (void); void Set_EndOneSettingSelector (void); +void Set_DB_InsertUsrInCurrentCrsSettings (long UsrCod); void Set_DB_RemCrsUsrSettings (long UsrCod); #endif diff --git a/swad_user.c b/swad_user.c index 01c29da6..20b15de2 100644 --- a/swad_user.c +++ b/swad_user.c @@ -2779,6 +2779,20 @@ static void Usr_InsertMyBirthday (void) Gbl.Usrs.Me.UsrDat.UsrCod); } +/*****************************************************************************/ +/************************* Filter some user's data ***************************/ +/*****************************************************************************/ + +void Usr_FilterUsrBirthday (struct Date *Birthday) + { + /***** Fix birthday *****/ + if (Birthday->Year < Gbl.Now.Date.Year-99 || + Birthday->Year > Gbl.Now.Date.Year-16) + Birthday->Year = + Birthday->Month = + Birthday->Day = 0; + } + /*****************************************************************************/ /************************ Write form for user log in *************************/ /*****************************************************************************/ @@ -10347,3 +10361,28 @@ Usr_Who_t Usr_GetHiddenParamWho (void) Usr_NUM_WHO - 1, Usr_WHO_UNKNOWN); } + +/*****************************************************************************/ +/************************* Get old users from database ***********************/ +/*****************************************************************************/ + +unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get old users", + "SELECT UsrCod" + " FROM (SELECT UsrCod" + " FROM usr_last" + " WHERE LastTime