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 bool ID_CheckIfConfirmed (long UsrCod,const char *UsrID);
|
||||||
static void ID_RemoveUsrIDFromDB (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_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 ****************************/
|
/********************** 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 *****/
|
/***** Save this new ID *****/
|
||||||
// It's me ==> ID not confirmed
|
// It's me ==> ID not confirmed
|
||||||
// Not me ==> ID 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,
|
Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID,
|
||||||
Txt_The_ID_X_has_been_registered_successfully,
|
Txt_The_ID_X_has_been_registered_successfully,
|
||||||
|
@ -998,24 +1016,6 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe)
|
||||||
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
|
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 **************************/
|
/************************ Confirm another user's ID **************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -55,6 +55,10 @@ struct ListIDs
|
||||||
/***************************** Public prototypes *****************************/
|
/***************************** 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_GetListIDsFromUsrCod (struct UsrData *UsrDat);
|
||||||
void ID_ReallocateListIDs (struct UsrData *UsrDat,unsigned NumIDs);
|
void ID_ReallocateListIDs (struct UsrData *UsrDat,unsigned NumIDs);
|
||||||
void ID_FreeListIDs (struct UsrData *UsrDat);
|
void ID_FreeListIDs (struct UsrData *UsrDat);
|
||||||
|
|
|
@ -733,11 +733,11 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
||||||
Acc_CreateNewEncryptedUsrCod (UsrDat);
|
Acc_CreateNewEncryptedUsrCod (UsrDat);
|
||||||
|
|
||||||
/***** Filter some user's data before inserting */
|
/***** Filter some user's data before inserting */
|
||||||
Enr_FilterUsrDat (UsrDat);
|
Usr_FilterUsrBirthday (&UsrDat->Birthday);
|
||||||
|
|
||||||
/***** Insert new user in database *****/
|
/***** Insert new user in database *****/
|
||||||
/* Insert user's data */
|
/* Insert user's data */
|
||||||
Acc_DB_CreateNewUsr (UsrDat);
|
UsrDat->UsrCod = Acc_DB_CreateNewUsr (UsrDat);
|
||||||
|
|
||||||
/* Insert user's IDs as confirmed */
|
/* Insert user's IDs as confirmed */
|
||||||
for (NumID = 0;
|
for (NumID = 0;
|
||||||
|
@ -745,7 +745,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
||||||
NumID++)
|
NumID++)
|
||||||
{
|
{
|
||||||
Str_ConvertToUpperText (UsrDat->IDs.List[NumID].ID);
|
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].ID,
|
||||||
UsrDat->IDs.List[NumID].Confirmed);
|
UsrDat->IDs.List[NumID].Confirmed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,8 +108,9 @@ bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_A
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Create new user ******************************/
|
/****************************** 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 *The_ThemeId[The_NUM_THEMES];
|
||||||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
||||||
|
@ -120,7 +121,7 @@ void Acc_DB_CreateNewUsr (struct UsrData *UsrDat)
|
||||||
|
|
||||||
/***** Create new user *****/
|
/***** Create new user *****/
|
||||||
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes
|
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes
|
||||||
UsrDat->UsrCod =
|
return
|
||||||
DB_QueryINSERTandReturnCode ("can not create user",
|
DB_QueryINSERTandReturnCode ("can not create user",
|
||||||
"INSERT INTO usr_data"
|
"INSERT INTO usr_data"
|
||||||
" (EncryptedUsrCod,Password,"
|
" (EncryptedUsrCod,Password,"
|
||||||
|
@ -164,22 +165,41 @@ void Acc_DB_CreateNewUsr (struct UsrData *UsrDat)
|
||||||
(unsigned) Cfg_DEFAULT_COLUMNS);
|
(unsigned) Cfg_DEFAULT_COLUMNS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*************************** Create new user's ID ****************************/
|
/***************************** Update user's data ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
// UsrDat->UsrCod must be > 0
|
||||||
|
|
||||||
void Acc_DB_CreateNewUsrID (long UsrCod,
|
void Acc_DB_UpdateUsrData (const struct UsrData *UsrDat)
|
||||||
const char ID[ID_MAX_BYTES_USR_ID + 1],
|
|
||||||
bool Confirmed)
|
|
||||||
{
|
{
|
||||||
DB_QueryINSERT ("can not store user's ID when creating user",
|
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
||||||
"INSERT INTO usr_ids"
|
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1];
|
||||||
" (UsrCod,UsrID,CreatTime,Confirmed)"
|
|
||||||
" VALUES"
|
/***** Update user's common data *****/
|
||||||
" (%ld,'%s',NOW(),'%c')",
|
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes
|
||||||
UsrCod,
|
DB_QueryUPDATE ("can not update user's data",
|
||||||
ID,
|
"UPDATE usr_data"
|
||||||
Confirmed ? 'Y' :
|
" SET Password='%s',"
|
||||||
'N');
|
"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 <mysql/mysql.h> // To access MySQL databases
|
||||||
|
|
||||||
#include "swad_ID.h"
|
#include "swad_ID.h"
|
||||||
|
#include "swad_user.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** 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_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]);
|
||||||
bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
|
bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
|
||||||
|
|
||||||
void Acc_DB_CreateNewUsr (struct UsrData *UsrDat);
|
long Acc_DB_CreateNewUsr (const struct UsrData *UsrDat);
|
||||||
void Acc_DB_CreateNewUsrID (long UsrCod,
|
void Acc_DB_UpdateUsrData (const struct UsrData *UsrDat);
|
||||||
const char ID[ID_MAX_BYTES_USR_ID + 1],
|
|
||||||
bool Confirmed);
|
|
||||||
|
|
||||||
#endif
|
#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.
|
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 CSS_FILE "swad20.45.css"
|
||||||
#define JS_FILE "swad20.69.1.js"
|
#define JS_FILE "swad20.69.1.js"
|
||||||
/*
|
/*
|
||||||
TODO: Rename CENTRE to CENTER in help wiki.
|
TODO: Rename CENTRE to CENTER in help wiki.
|
||||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
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.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.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)
|
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 <string.h> // For string functions
|
||||||
|
|
||||||
#include "swad_account.h"
|
#include "swad_account.h"
|
||||||
|
#include "swad_account_database.h"
|
||||||
#include "swad_announcement.h"
|
#include "swad_announcement.h"
|
||||||
#include "swad_attendance_database.h"
|
#include "swad_attendance_database.h"
|
||||||
#include "swad_box.h"
|
#include "swad_box.h"
|
||||||
|
@ -51,6 +52,7 @@
|
||||||
#include "swad_parameter.h"
|
#include "swad_parameter.h"
|
||||||
#include "swad_photo.h"
|
#include "swad_photo.h"
|
||||||
#include "swad_role.h"
|
#include "swad_role.h"
|
||||||
|
#include "swad_setting.h"
|
||||||
#include "swad_test_print.h"
|
#include "swad_test_print.h"
|
||||||
#include "swad_user.h"
|
#include "swad_user.h"
|
||||||
|
|
||||||
|
@ -211,7 +213,7 @@ void Enr_PutButtonInlineToRegisterStds (long CrsCod)
|
||||||
{
|
{
|
||||||
Frm_BeginForm (ActReqEnrSevStd);
|
Frm_BeginForm (ActReqEnrSevStd);
|
||||||
Crs_PutParamCrsCod (CrsCod);
|
Crs_PutParamCrsCod (CrsCod);
|
||||||
Btn_PutCreateButtonInline (Txt_Register_students);
|
Btn_PutCreateButtonInline (Txt_Register_students);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,7 +239,11 @@ void Enr_PutLinkToRequestSignUp (void)
|
||||||
|
|
||||||
void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole)
|
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)
|
switch (NewRole)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
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 *****/
|
/***** Update the role of a user in a course *****/
|
||||||
DB_QueryUPDATE ("can not modify user's role in course",
|
Rol_DB_UpdateUsrRoleInCurrentCrs (UsrDat->UsrCod,NewRole);
|
||||||
"UPDATE crs_users"
|
|
||||||
" SET Role=%u"
|
|
||||||
" WHERE CrsCod=%ld"
|
|
||||||
" AND UsrCod=%ld",
|
|
||||||
(unsigned) NewRole,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
|
||||||
UsrDat->UsrCod);
|
|
||||||
|
|
||||||
/***** Flush caches *****/
|
/***** Flush caches *****/
|
||||||
Usr_FlushCachesUsr ();
|
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,
|
void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole,
|
||||||
Enr_KeepOrSetAccepted_t KeepOrSetAccepted)
|
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)
|
switch (NewRole)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
|
@ -295,36 +296,10 @@ void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole,
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Register user in current course in database *****/
|
/***** Register user in current course in database *****/
|
||||||
DB_QueryINSERT ("can not register user in course",
|
Enr_DB_InsertUsrInCurrentCrs (UsrDat->UsrCod,NewRole,KeepOrSetAccepted);
|
||||||
"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');
|
|
||||||
|
|
||||||
/***** Register last prefs in current course in database *****/
|
/***** Register last prefs in current course in database *****/
|
||||||
DB_QueryINSERT ("can not register user in course",
|
Set_DB_InsertUsrInCurrentCrsSettings (UsrDat->UsrCod);
|
||||||
"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');
|
|
||||||
|
|
||||||
/***** Flush caches *****/
|
/***** Flush caches *****/
|
||||||
Usr_FlushCachesUsr ();
|
Usr_FlushCachesUsr ();
|
||||||
|
@ -522,12 +497,7 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
SummaryStr[0] = '\0'; // Return nothing on error
|
SummaryStr[0] = '\0'; // Return nothing on error
|
||||||
|
|
||||||
/***** Get user's role in course from database *****/
|
/***** Get user's role in course from database *****/
|
||||||
if (DB_QuerySELECT (&mysql_res,"can not get user's role in course",
|
if (Rol_DB_GetUsrRoleInCrs (&mysql_res,CrsCod,UsrCod) == 1) // Result should have a unique row
|
||||||
"SELECT Role" // row[0]
|
|
||||||
" FROM crs_users"
|
|
||||||
" WHERE CrsCod=%ld"
|
|
||||||
" AND UsrCod=%ld",
|
|
||||||
CrsCod,UsrCod) == 1) // Result should have a unique row
|
|
||||||
{
|
{
|
||||||
/***** Get user's role in course *****/
|
/***** Get user's role in course *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
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)
|
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 *****/
|
/***** Check if user's code is initialized *****/
|
||||||
if (UsrDat->UsrCod <= 0)
|
if (UsrDat->UsrCod <= 0)
|
||||||
Err_WrongUserExit ();
|
Err_WrongUserExit ();
|
||||||
|
|
||||||
/***** Filter some user's data before updating */
|
/***** Filter some user's data before updating */
|
||||||
Enr_FilterUsrDat (UsrDat);
|
Usr_FilterUsrBirthday (&UsrDat->Birthday);
|
||||||
|
|
||||||
/***** Update user's common data *****/
|
/***** Update user's common data *****/
|
||||||
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes
|
Acc_DB_UpdateUsrData (UsrDat);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -878,24 +806,7 @@ void Enr_RemoveOldUsrs (void)
|
||||||
SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH;
|
SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH;
|
||||||
|
|
||||||
/***** Get old users from database *****/
|
/***** Get old users from database *****/
|
||||||
NumUsrs = (unsigned)
|
if ((NumUsrs = Usr_DB_GetOldUsrs (&mysql_res,SecondsWithoutAccess)))
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
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,
|
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,
|
NumUsrs,
|
||||||
|
@ -2005,38 +1916,14 @@ void Enr_SignUpInCrs (void)
|
||||||
RoleFromForm == Rol_TCH))
|
RoleFromForm == Rol_TCH))
|
||||||
Err_WrongRoleExit ();
|
Err_WrongRoleExit ();
|
||||||
|
|
||||||
/***** Try to get and old request of the same user in the same course from database *****/
|
/***** Try to get and old request of the same user (me) in the current course *****/
|
||||||
ReqCod = DB_QuerySELECTCode ("can not get enrolment request",
|
ReqCod = Enr_DB_GetMyLastEnrolmentRequestInCurrentCrs ();
|
||||||
"SELECT ReqCod"
|
|
||||||
" FROM crs_requests"
|
|
||||||
" WHERE CrsCod=%ld"
|
|
||||||
" AND UsrCod=%ld",
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
|
||||||
|
|
||||||
/***** Request user in current course in database *****/
|
/***** Request user in current course in database *****/
|
||||||
if (ReqCod > 0) // Old request exists in database
|
if (ReqCod > 0) // Old request exists in database
|
||||||
DB_QueryUPDATE ("can not update enrolment request",
|
Enr_DB_UpdateMyEnrolmentRequestInCurrentCrs (ReqCod,RoleFromForm);
|
||||||
"UPDATE crs_requests"
|
else // No request in database for this user in this course
|
||||||
" SET Role=%u,"
|
ReqCod = Enr_DB_CreateMyEnrolmentRequestInCurrentCrs (RoleFromForm);
|
||||||
"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);
|
|
||||||
|
|
||||||
/***** Show confirmation message *****/
|
/***** Show confirmation message *****/
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_Your_request_for_enrolment_as_X_in_the_course_Y_has_been_accepted_for_processing,
|
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
|
SummaryStr[0] = '\0'; // Return nothing on error
|
||||||
|
|
||||||
/***** Get user and requested role from database *****/
|
/***** Get user and requested role from database *****/
|
||||||
if (DB_QuerySELECT (&mysql_res,"can not get enrolment request",
|
if (Enr_DB_GetEnrolmentRequestByCod (&mysql_res,ReqCod) == 1) // Result should have a unique row
|
||||||
"SELECT UsrCod," // row[0]
|
|
||||||
"Role" // row[1]
|
|
||||||
" FROM crs_requests"
|
|
||||||
" WHERE ReqCod=%ld",
|
|
||||||
ReqCod) == 1) // Result should have a unique row
|
|
||||||
{
|
{
|
||||||
/***** Get user and requested role *****/
|
/***** Get user and requested role *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
|
@ -86,7 +86,6 @@ void Enr_ReqAcceptRegisterInCrs (void);
|
||||||
void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
long CrsCod,long UsrCod);
|
long CrsCod,long UsrCod);
|
||||||
void Enr_UpdateUsrData (struct UsrData *UsrDat);
|
void Enr_UpdateUsrData (struct UsrData *UsrDat);
|
||||||
void Enr_FilterUsrDat (struct UsrData *UsrDat);
|
|
||||||
|
|
||||||
void Enr_ReqAdminStds (void);
|
void Enr_ReqAdminStds (void);
|
||||||
void Enr_ReqAdminNonEditingTchs (void);
|
void Enr_ReqAdminNonEditingTchs (void);
|
||||||
|
|
|
@ -80,6 +80,25 @@ extern struct Globals Gbl;
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** 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 ******************/
|
/**************** Update institution, center and department ******************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -116,6 +135,73 @@ void Enr_DB_AcceptUsrInCrs (long UsrCod)
|
||||||
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 **********/
|
/*********** Remove all users' requests for inscription in a course **********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
// #include "swad_course.h"
|
// #include "swad_course.h"
|
||||||
|
#include "swad_enrolment.h"
|
||||||
#include "swad_hierarchy.h"
|
#include "swad_hierarchy.h"
|
||||||
// #include "swad_notification.h"
|
// #include "swad_notification.h"
|
||||||
// #include "swad_user.h"
|
// #include "swad_user.h"
|
||||||
|
@ -44,10 +45,18 @@
|
||||||
/****************************** Public prototypes ****************************/
|
/****************************** Public prototypes ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Enr_DB_InsertUsrInCurrentCrs (long UsrCod,Rol_Role_t NewRole,
|
||||||
|
Enr_KeepOrSetAccepted_t KeepOrSetAccepted);
|
||||||
|
|
||||||
void Enr_DB_UpdateInstitutionCenterDepartment (void);
|
void Enr_DB_UpdateInstitutionCenterDepartment (void);
|
||||||
|
|
||||||
void Enr_DB_AcceptUsrInCrs (long UsrCod);
|
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_RemCrsRequests (long CrsCod);
|
||||||
void Enr_DB_RemUsrRequests (long UsrCod);
|
void Enr_DB_RemUsrRequests (long UsrCod);
|
||||||
void Enr_DB_RemAllUsrsFromCrsSettings (long CrsCod);
|
void Enr_DB_RemAllUsrsFromCrsSettings (long CrsCod);
|
||||||
|
|
|
@ -133,7 +133,7 @@ void Err_WrongDepartmentExit (void)
|
||||||
|
|
||||||
void Err_WrongPlaceExit (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,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
UsrCod);
|
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);
|
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
|
#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)
|
void Set_DB_RemCrsUsrSettings (long UsrCod)
|
||||||
|
|
|
@ -58,6 +58,7 @@ void Set_EndSettingsHead (void);
|
||||||
void Set_BeginOneSettingSelector (void);
|
void Set_BeginOneSettingSelector (void);
|
||||||
void Set_EndOneSettingSelector (void);
|
void Set_EndOneSettingSelector (void);
|
||||||
|
|
||||||
|
void Set_DB_InsertUsrInCurrentCrsSettings (long UsrCod);
|
||||||
void Set_DB_RemCrsUsrSettings (long UsrCod);
|
void Set_DB_RemCrsUsrSettings (long UsrCod);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
39
swad_user.c
39
swad_user.c
|
@ -2779,6 +2779,20 @@ static void Usr_InsertMyBirthday (void)
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
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 *************************/
|
/************************ Write form for user log in *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -10347,3 +10361,28 @@ Usr_Who_t Usr_GetHiddenParamWho (void)
|
||||||
Usr_NUM_WHO - 1,
|
Usr_NUM_WHO - 1,
|
||||||
Usr_WHO_UNKNOWN);
|
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,
|
void Usr_CreateBirthdayStrDB (const struct UsrData *UsrDat,
|
||||||
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]);
|
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1]);
|
||||||
|
void Usr_FilterUsrBirthday (struct Date *Birthday);
|
||||||
|
|
||||||
void Usr_PutFormLogIn (void);
|
void Usr_PutFormLogIn (void);
|
||||||
void Usr_WriteLoggedUsrHead (void);
|
void Usr_WriteLoggedUsrHead (void);
|
||||||
|
@ -551,4 +552,6 @@ void Usr_PutWhoIcon (Usr_Who_t Who);
|
||||||
void Usr_PutHiddenParamWho (Usr_Who_t Who);
|
void Usr_PutHiddenParamWho (Usr_Who_t Who);
|
||||||
Usr_Who_t Usr_GetHiddenParamWho (void);
|
Usr_Who_t Usr_GetHiddenParamWho (void);
|
||||||
|
|
||||||
|
unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue