Version 20.91.1: Jun 10, 2021 Queries moved to module swad_enrolment_database.

This commit is contained in:
acanas 2021-06-10 13:50:23 +02:00
parent b40c74e613
commit f5d59b104d
17 changed files with 297 additions and 191 deletions

View File

@ -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 **************************/
/*****************************************************************************/

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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 **********/
/*****************************************************************************/

View File

@ -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);

View File

@ -133,7 +133,7 @@ void Err_WrongDepartmentExit (void)
void Err_WrongPlaceExit (void)
{
Err_ShowErrorAndExit ("Wrong department.");
Err_ShowErrorAndExit ("Wrong place.");
}
/*****************************************************************************/

View File

@ -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);
}

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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);
}

View File

@ -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