mirror of https://github.com/acanas/swad-core.git
Version 20.91.1: Jun 10, 2021 Queries moved to module swad_enrolment_database.
This commit is contained in:
parent
b40c74e613
commit
f5d59b104d
40
swad_ID.c
40
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 **************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <mysql/mysql.h> // 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
|
||||
|
|
|
@ -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)
|
||||
|
|
170
swad_enrolment.c
170
swad_enrolment.c
|
@ -31,6 +31,7 @@
|
|||
#include <string.h> // 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<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
|
||||
" UNION "
|
||||
"SELECT UsrCod"
|
||||
" FROM usr_data"
|
||||
" WHERE UsrCod NOT IN"
|
||||
" (SELECT UsrCod"
|
||||
" FROM usr_last)"
|
||||
") AS candidate_usrs"
|
||||
" WHERE UsrCod NOT IN"
|
||||
" (SELECT DISTINCT UsrCod"
|
||||
" FROM crs_users)",
|
||||
(unsigned long) SecondsWithoutAccess);
|
||||
if (NumUsrs)
|
||||
if ((NumUsrs = Usr_DB_GetOldUsrs (&mysql_res,SecondsWithoutAccess)))
|
||||
{
|
||||
Ale_ShowAlert (Ale_INFO,Txt_Eliminating_X_users_who_were_not_enroled_in_any_course_and_with_more_than_Y_months_without_access_to_Z,
|
||||
NumUsrs,
|
||||
|
@ -2005,38 +1916,14 @@ void Enr_SignUpInCrs (void)
|
|||
RoleFromForm == Rol_TCH))
|
||||
Err_WrongRoleExit ();
|
||||
|
||||
/***** Try to get and old request of the same user in the same course from database *****/
|
||||
ReqCod = 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);
|
||||
/***** Try to get and old request of the same user (me) in the current course *****/
|
||||
ReqCod = Enr_DB_GetMyLastEnrolmentRequestInCurrentCrs ();
|
||||
|
||||
/***** Request user in current course in database *****/
|
||||
if (ReqCod > 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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 **********/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -133,7 +133,7 @@ void Err_WrongDepartmentExit (void)
|
|||
|
||||
void Err_WrongPlaceExit (void)
|
||||
{
|
||||
Err_ShowErrorAndExit ("Wrong department.");
|
||||
Err_ShowErrorAndExit ("Wrong place.");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
32
swad_role.c
32
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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
39
swad_user.c
39
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<FROM_UNIXTIME(UNIX_TIMESTAMP()-%llu)"
|
||||
" UNION "
|
||||
"SELECT UsrCod"
|
||||
" FROM usr_data"
|
||||
" WHERE UsrCod NOT IN"
|
||||
" (SELECT UsrCod"
|
||||
" FROM usr_last)"
|
||||
") AS candidate_usrs"
|
||||
" WHERE UsrCod NOT IN"
|
||||
" (SELECT DISTINCT UsrCod"
|
||||
" FROM crs_users)",
|
||||
(unsigned long long) SecondsWithoutAccess);
|
||||
}
|
||||
|
|
|
@ -384,6 +384,7 @@ void Usr_WelcomeUsr (void);
|
|||
|
||||
void Usr_CreateBirthdayStrDB (const struct UsrData *UsrDat,
|
||||
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]);
|
||||
void Usr_FilterUsrBirthday (struct Date *Birthday);
|
||||
|
||||
void Usr_PutFormLogIn (void);
|
||||
void Usr_WriteLoggedUsrHead (void);
|
||||
|
@ -551,4 +552,6 @@ void Usr_PutWhoIcon (Usr_Who_t Who);
|
|||
void Usr_PutHiddenParamWho (Usr_Who_t Who);
|
||||
Usr_Who_t Usr_GetHiddenParamWho (void);
|
||||
|
||||
unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue