mirror of https://github.com/acanas/swad-core.git
Version 23.76.1: Apr 19, 2024 Code refactoring related to don't belong/belong.
This commit is contained in:
parent
9309bf9580
commit
15046b8aff
|
@ -1401,8 +1401,8 @@ void Asg_ReceiveAssignment (void)
|
||||||
|
|
||||||
/***** Get folder name where to send works of the assignment *****/
|
/***** Get folder name where to send works of the assignment *****/
|
||||||
Par_GetParText ("Folder",Assignments.Asg.Folder,Brw_MAX_BYTES_FOLDER);
|
Par_GetParText ("Folder",Assignments.Asg.Folder,Brw_MAX_BYTES_FOLDER);
|
||||||
Assignments.Asg.SendWork = (Assignments.Asg.Folder[0]) ? Asg_SEND_WORK :
|
Assignments.Asg.SendWork = Assignments.Asg.Folder[0] ? Asg_SEND_WORK :
|
||||||
Asg_DONT_SEND_WORK;
|
Asg_DONT_SEND_WORK;
|
||||||
|
|
||||||
/***** Get assignment text *****/
|
/***** Get assignment text *****/
|
||||||
Par_GetParHTML ("Txt",Description,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
Par_GetParHTML ("Txt",Description,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
||||||
|
|
|
@ -659,7 +659,7 @@ void Att_DB_SetUsrsAsPresent (long AttCod,const char *ListUsrs,bool SetOthersAsA
|
||||||
if (Usr_DB_ChkIfUsrCodExists (UsrDat.UsrCod))
|
if (Usr_DB_ChkIfUsrCodExists (UsrDat.UsrCod))
|
||||||
// The user must belong to course,
|
// The user must belong to course,
|
||||||
// but it's not necessary he/she belongs to groups associated to the event
|
// but it's not necessary he/she belongs to groups associated to the event
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
{
|
{
|
||||||
/* Mark user as present */
|
/* Mark user as present */
|
||||||
if (Att_DB_CheckIfUsrIsInTableAttUsr (AttCod,UsrDat.UsrCod,&Present)) // User is in table att_users
|
if (Att_DB_CheckIfUsrIsInTableAttUsr (AttCod,UsrDat.UsrCod,&Present)) // User is in table att_users
|
||||||
|
|
|
@ -766,25 +766,26 @@ unsigned Ctr_DB_GetMyCtrs (MYSQL_RES **mysql_res,long PrtCod)
|
||||||
/******************* Check if a user belongs to a center *********************/
|
/******************* Check if a user belongs to a center *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Ctr_DB_CheckIfUsrBelongsToCtr (long UsrCod,long HieCod,
|
Usr_Belong_t Ctr_DB_CheckIfUsrBelongsToCtr (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses)
|
bool CountOnlyAcceptedCourses)
|
||||||
{
|
{
|
||||||
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
||||||
"");
|
"");
|
||||||
|
|
||||||
return (DB_QueryCOUNT ("can not check if a user belongs to a center",
|
return DB_QueryCOUNT ("can not check if a user belongs to a center",
|
||||||
"SELECT COUNT(DISTINCT deg_degrees.CtrCod)"
|
"SELECT COUNT(DISTINCT deg_degrees.CtrCod)"
|
||||||
" FROM crs_users,"
|
" FROM crs_users,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"deg_degrees"
|
"deg_degrees"
|
||||||
" WHERE crs_users.UsrCod=%ld"
|
" WHERE crs_users.UsrCod=%ld"
|
||||||
"%s"
|
"%s"
|
||||||
" AND crs_users.CrsCod=crs_courses.CrsCod"
|
" AND crs_users.CrsCod=crs_courses.CrsCod"
|
||||||
" AND crs_courses.DegCod=deg_degrees.DegCod"
|
" AND crs_courses.DegCod=deg_degrees.DegCod"
|
||||||
" AND deg_degrees.CtrCod=%ld",
|
" AND deg_degrees.CtrCod=%ld",
|
||||||
UsrCod,
|
UsrCod,
|
||||||
SubQuery,
|
SubQuery,
|
||||||
HieCod) != 0);
|
HieCod) ? Usr_BELONG :
|
||||||
|
Usr_DONT_BELONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -88,8 +88,8 @@ unsigned Ctr_DB_GetCtrsWithCoords (MYSQL_RES **mysql_res);
|
||||||
unsigned Ctr_DB_GetCtrsWithCoordsInCurrentIns (MYSQL_RES **mysql_res);
|
unsigned Ctr_DB_GetCtrsWithCoordsInCurrentIns (MYSQL_RES **mysql_res);
|
||||||
|
|
||||||
unsigned Ctr_DB_GetMyCtrs (MYSQL_RES **mysql_res,long PrtCod);
|
unsigned Ctr_DB_GetMyCtrs (MYSQL_RES **mysql_res,long PrtCod);
|
||||||
bool Ctr_DB_CheckIfUsrBelongsToCtr (long UsrCod,long HieCod,
|
Usr_Belong_t Ctr_DB_CheckIfUsrBelongsToCtr (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses);
|
bool CountOnlyAcceptedCourses);
|
||||||
unsigned Ctr_DB_GetNumUsrsWhoClaimToBelongToCtr (long HieCod);
|
unsigned Ctr_DB_GetNumUsrsWhoClaimToBelongToCtr (long HieCod);
|
||||||
|
|
||||||
void Ctr_DB_RemoveCenter (long HieCod);
|
void Ctr_DB_RemoveCenter (long HieCod);
|
||||||
|
|
|
@ -633,10 +633,11 @@ Me sale este error, no s
|
||||||
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 23.76 (2024-04-19)"
|
#define Log_PLATFORM_VERSION "SWAD 23.76.1 (2024-04-19)"
|
||||||
#define CSS_FILE "swad23.67.2.css"
|
#define CSS_FILE "swad23.67.2.css"
|
||||||
#define JS_FILE "swad23.53.6.js"
|
#define JS_FILE "swad23.53.6.js"
|
||||||
/*
|
/*
|
||||||
|
Version 23.76.1: Apr 19, 2024 Code refactoring related to don't belong/belong. (335570 lines)
|
||||||
Version 23.76: Apr 19, 2024 Code refactoring related to don't belong/belong. (335550 lines)
|
Version 23.76: Apr 19, 2024 Code refactoring related to don't belong/belong. (335550 lines)
|
||||||
Version 23.75: Apr 13, 2024 Code refactoring related to closed/open. (335484 lines)
|
Version 23.75: Apr 13, 2024 Code refactoring related to closed/open. (335484 lines)
|
||||||
Copy the following icons to icon public directory:
|
Copy the following icons to icon public directory:
|
||||||
|
|
|
@ -1550,19 +1550,19 @@ void Crs_ContEditAfterChgCrs (void)
|
||||||
PutButtonToRequestRegistration = true;
|
PutButtonToRequestRegistration = true;
|
||||||
break;
|
break;
|
||||||
case Rol_USR:
|
case Rol_USR:
|
||||||
PutButtonToRequestRegistration = !Hie_CheckIfUsrBelongsTo (Hie_CRS,
|
PutButtonToRequestRegistration = (Hie_CheckIfUsrBelongsTo (Hie_CRS,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Crs_EditingCrs->HieCod,
|
Crs_EditingCrs->HieCod,
|
||||||
false);
|
false) == Usr_DONT_BELONG);
|
||||||
break;
|
break;
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
if (Crs_EditingCrs->HieCod != Gbl.Hierarchy.Node[Hie_CRS].HieCod)
|
if (Crs_EditingCrs->HieCod != Gbl.Hierarchy.Node[Hie_CRS].HieCod)
|
||||||
PutButtonToRequestRegistration = !Hie_CheckIfUsrBelongsTo (Hie_CRS,
|
PutButtonToRequestRegistration = (Hie_CheckIfUsrBelongsTo (Hie_CRS,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Crs_EditingCrs->HieCod,
|
Crs_EditingCrs->HieCod,
|
||||||
false);
|
false) == Usr_DONT_BELONG);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -828,8 +828,8 @@ unsigned Deg_DB_GetUsrMainDeg (MYSQL_RES **mysql_res,long UsrCod)
|
||||||
/******************* Check if a user belongs to a degree *********************/
|
/******************* Check if a user belongs to a degree *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Deg_DB_CheckIfUsrBelongsToDeg (long UsrCod,long HieCod,
|
Usr_Belong_t Deg_DB_CheckIfUsrBelongsToDeg (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses)
|
bool CountOnlyAcceptedCourses)
|
||||||
{
|
{
|
||||||
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
||||||
"");
|
"");
|
||||||
|
@ -846,7 +846,8 @@ bool Deg_DB_CheckIfUsrBelongsToDeg (long UsrCod,long HieCod,
|
||||||
" AND crs_courses.DegCod=%ld)",
|
" AND crs_courses.DegCod=%ld)",
|
||||||
UsrCod,
|
UsrCod,
|
||||||
SubQuery,
|
SubQuery,
|
||||||
HieCod);
|
HieCod) ? Usr_BELONG :
|
||||||
|
Usr_DONT_BELONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -83,8 +83,8 @@ void Deg_DB_UpdateDegStatus (long DegCod,Hie_Status_t NewStatus);
|
||||||
|
|
||||||
unsigned Deg_DB_GetMyDegs (MYSQL_RES **mysql_res,long HieCod);
|
unsigned Deg_DB_GetMyDegs (MYSQL_RES **mysql_res,long HieCod);
|
||||||
unsigned Deg_DB_GetUsrMainDeg (MYSQL_RES **mysql_res,long UsrCod);
|
unsigned Deg_DB_GetUsrMainDeg (MYSQL_RES **mysql_res,long UsrCod);
|
||||||
bool Deg_DB_CheckIfUsrBelongsToDeg (long UsrCod,long HieCod,
|
Usr_Belong_t Deg_DB_CheckIfUsrBelongsToDeg (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses);
|
bool CountOnlyAcceptedCourses);
|
||||||
|
|
||||||
void Deg_DB_RemoveDegTyp (long DegTypCod);
|
void Deg_DB_RemoveDegTyp (long DegTypCod);
|
||||||
void Deg_DB_RemoveDeg (long DegCod);
|
void Deg_DB_RemoveDeg (long DegCod);
|
||||||
|
|
457
swad_enrolment.c
457
swad_enrolment.c
|
@ -114,7 +114,7 @@ static void Enr_PutActionsRegRemSeveralUsrs (void);
|
||||||
static void Enr_ReceiveUsrsCrs (Rol_Role_t Role);
|
static void Enr_ReceiveUsrsCrs (Rol_Role_t Role);
|
||||||
|
|
||||||
static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
|
static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
|
||||||
bool UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther);
|
Usr_Belong_t UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther);
|
||||||
static void Enr_PutActionRegOneDegAdm (bool *OptionChecked);
|
static void Enr_PutActionRegOneDegAdm (bool *OptionChecked);
|
||||||
static void Enr_PutActionRegOneCtrAdm (bool *OptionChecked);
|
static void Enr_PutActionRegOneCtrAdm (bool *OptionChecked);
|
||||||
static void Enr_PutActionRegOneInsAdm (bool *OptionChecked);
|
static void Enr_PutActionRegOneInsAdm (bool *OptionChecked);
|
||||||
|
@ -1315,7 +1315,7 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
|
||||||
bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
|
bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
|
||||||
{
|
{
|
||||||
bool OptionsShown = false;
|
bool OptionsShown = false;
|
||||||
bool UsrBelongsToCrs = false;
|
Usr_Belong_t UsrBelongsToCrs = Usr_DONT_BELONG;
|
||||||
bool UsrIsDegAdmin = false;
|
bool UsrIsDegAdmin = false;
|
||||||
bool UsrIsCtrAdmin = false;
|
bool UsrIsCtrAdmin = false;
|
||||||
bool UsrIsInsAdmin = false;
|
bool UsrIsInsAdmin = false;
|
||||||
|
@ -1390,7 +1390,7 @@ bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Remove user from the course *****/
|
/***** Remove user from the course *****/
|
||||||
if (UsrBelongsToCrs)
|
if (UsrBelongsToCrs == Usr_BELONG)
|
||||||
{
|
{
|
||||||
Enr_PutActionRemUsrFromCrs (&OptionChecked,MeOrOther);
|
Enr_PutActionRemUsrFromCrs (&OptionChecked,MeOrOther);
|
||||||
OptionsShown = true;
|
OptionsShown = true;
|
||||||
|
@ -1445,18 +1445,18 @@ bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
|
static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
|
||||||
bool UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther)
|
Usr_Belong_t UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Register_me_in_X;
|
extern const char *Txt_Register_me_in_X;
|
||||||
extern const char *Txt_Register_USER_in_the_course_X;
|
extern const char *Txt_Register_USER_in_the_course_X;
|
||||||
extern const char *Txt_Modify_me_in_the_course_X;
|
extern const char *Txt_Modify_me_in_the_course_X;
|
||||||
extern const char *Txt_Modify_user_in_the_course_X;
|
extern const char *Txt_Modify_user_in_the_course_X;
|
||||||
const char *Txt[2][Usr_NUM_ME_OR_OTHER] =
|
const char *Txt[Usr_NUM_BELONG][Usr_NUM_ME_OR_OTHER] =
|
||||||
{
|
{
|
||||||
[false][Usr_ME ] = Txt_Register_me_in_X,
|
[Usr_DONT_BELONG][Usr_ME ] = Txt_Register_me_in_X,
|
||||||
[false][Usr_OTHER] = Txt_Register_USER_in_the_course_X,
|
[Usr_DONT_BELONG][Usr_OTHER] = Txt_Register_USER_in_the_course_X,
|
||||||
[true ][Usr_ME ] = Txt_Modify_me_in_the_course_X,
|
[Usr_BELONG ][Usr_ME ] = Txt_Modify_me_in_the_course_X,
|
||||||
[true ][Usr_OTHER] = Txt_Modify_user_in_the_course_X,
|
[Usr_BELONG ][Usr_OTHER] = Txt_Modify_user_in_the_course_X,
|
||||||
};
|
};
|
||||||
|
|
||||||
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_MODIFY_ONE_USR_IN_CRS,OptionChecked);
|
Enr_RegRemOneUsrActionBegin (Enr_REGISTER_MODIFY_ONE_USR_IN_CRS,OptionChecked);
|
||||||
|
@ -1671,16 +1671,20 @@ static void Enr_RegisterUsr (struct Usr_Data *UsrDat,Rol_Role_t RegRemRole,
|
||||||
/***** Register user in current course in database *****/
|
/***** Register user in current course in database *****/
|
||||||
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
||||||
{
|
{
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
||||||
{
|
{
|
||||||
if (RegRemRole != UsrDat->Roles.InCurrentCrs) // The role must be updated
|
case Usr_BELONG:
|
||||||
/* Modify role */
|
if (RegRemRole != UsrDat->Roles.InCurrentCrs) // The role must be updated
|
||||||
Enr_ModifyRoleInCurrentCrs (UsrDat,RegRemRole);
|
/* Modify role */
|
||||||
|
Enr_ModifyRoleInCurrentCrs (UsrDat,RegRemRole);
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to this course
|
||||||
|
default:
|
||||||
|
/* Register user */
|
||||||
|
Enr_RegisterUsrInCurrentCrs (UsrDat,RegRemRole,
|
||||||
|
Enr_SET_ACCEPTED_TO_FALSE);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // User does not belong to this course
|
|
||||||
/* Register user */
|
|
||||||
Enr_RegisterUsrInCurrentCrs (UsrDat,RegRemRole,
|
|
||||||
Enr_SET_ACCEPTED_TO_FALSE);
|
|
||||||
|
|
||||||
/***** Register user in the selected groups *****/
|
/***** Register user in the selected groups *****/
|
||||||
if (Gbl.Crs.Grps.NumGrps) // If there are groups in the course
|
if (Gbl.Crs.Grps.NumGrps) // If there are groups in the course
|
||||||
|
@ -1955,47 +1959,47 @@ void Enr_AskIfRejectSignUp (void)
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_DONT_GET_ROLE_IN_CRS))
|
Usr_DONT_GET_ROLE_IN_CRS))
|
||||||
{
|
|
||||||
// User's data exist...
|
// User's data exist...
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
||||||
{
|
{
|
||||||
/* User already belongs to this course */
|
case Usr_BELONG:
|
||||||
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
/* User already belongs to this course */
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
|
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||||
|
|
||||||
/* Remove inscription request because it has not sense */
|
/* Remove inscription request because it has not sense */
|
||||||
Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod,
|
Enr_RemUsrEnrolmentRequestInCrs (Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].HieCod);
|
Gbl.Hierarchy.Node[Hie_CRS].HieCod);
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to this course
|
||||||
|
default:
|
||||||
|
Role = Rol_DB_GetRequestedRole (Gbl.Hierarchy.Node[Hie_CRS].HieCod,
|
||||||
|
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
|
if (Role == Rol_STD ||
|
||||||
|
Role == Rol_NET ||
|
||||||
|
Role == Rol_TCH)
|
||||||
|
{
|
||||||
|
/***** Show question and button to reject user's enrolment request *****/
|
||||||
|
/* Begin alert */
|
||||||
|
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_reject_the_enrolment_request_,
|
||||||
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Txt_ROLES_SINGUL_abc[Role][Gbl.Usrs.Other.UsrDat.Sex],
|
||||||
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
|
|
||||||
|
/* Show user's record */
|
||||||
|
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||||
|
|
||||||
|
/* End alert */
|
||||||
|
Ale_ShowAlertAndButtonEnd (ActRejSignUp,NULL,NULL,
|
||||||
|
Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
||||||
|
Btn_REMOVE_BUTTON,Txt_Reject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Err_WrongRoleExit ();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // User does not belong to this course
|
|
||||||
{
|
|
||||||
Role = Rol_DB_GetRequestedRole (Gbl.Hierarchy.Node[Hie_CRS].HieCod,
|
|
||||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
|
||||||
if (Role == Rol_STD ||
|
|
||||||
Role == Rol_NET ||
|
|
||||||
Role == Rol_TCH)
|
|
||||||
{
|
|
||||||
/***** Show question and button to reject user's enrolment request *****/
|
|
||||||
/* Begin alert */
|
|
||||||
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_reject_the_enrolment_request_,
|
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
|
||||||
Txt_ROLES_SINGUL_abc[Role][Gbl.Usrs.Other.UsrDat.Sex],
|
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
|
||||||
|
|
||||||
/* Show user's record */
|
|
||||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
|
||||||
|
|
||||||
/* End alert */
|
|
||||||
Ale_ShowAlertAndButtonEnd (ActRejSignUp,NULL,NULL,
|
|
||||||
Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
|
||||||
Btn_REMOVE_BUTTON,Txt_Reject);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Err_WrongRoleExit ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||||
}
|
}
|
||||||
|
@ -2017,7 +2021,7 @@ void Enr_RejectSignUp (void)
|
||||||
Usr_DONT_GET_ROLE_IN_CRS))
|
Usr_DONT_GET_ROLE_IN_CRS))
|
||||||
{
|
{
|
||||||
// User's data exist...
|
// User's data exist...
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat) == Usr_BELONG)
|
||||||
{
|
{
|
||||||
/* User already belongs to this course */
|
/* User already belongs to this course */
|
||||||
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
||||||
|
@ -2119,7 +2123,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
||||||
struct Hie_Node Crs;
|
struct Hie_Node Crs;
|
||||||
struct Usr_Data UsrDat;
|
struct Usr_Data UsrDat;
|
||||||
bool UsrExists;
|
bool UsrExists;
|
||||||
bool UsrBelongsToCrs;
|
Usr_Belong_t UsrBelongsToCrs;
|
||||||
Rol_Role_t DesiredRole;
|
Rol_Role_t DesiredRole;
|
||||||
static Act_Action_t NextAction[Rol_NUM_ROLES] =
|
static Act_Action_t NextAction[Rol_NUM_ROLES] =
|
||||||
{
|
{
|
||||||
|
@ -2230,10 +2234,10 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
||||||
Crs.HieCod,
|
Crs.HieCod,
|
||||||
false);
|
false);
|
||||||
else
|
else
|
||||||
UsrBelongsToCrs = false;
|
UsrBelongsToCrs = Usr_DONT_BELONG;
|
||||||
|
|
||||||
if (UsrExists &&
|
if (UsrExists &&
|
||||||
!UsrBelongsToCrs &&
|
UsrBelongsToCrs == Usr_DONT_BELONG &&
|
||||||
(DesiredRole == Rol_STD ||
|
(DesiredRole == Rol_STD ||
|
||||||
DesiredRole == Rol_NET ||
|
DesiredRole == Rol_NET ||
|
||||||
DesiredRole == Rol_TCH))
|
DesiredRole == Rol_TCH))
|
||||||
|
@ -2623,32 +2627,32 @@ static void Enr_ShowFormToEditOtherUsr (void)
|
||||||
{
|
{
|
||||||
/***** Show form to edit user *****/
|
/***** Show form to edit user *****/
|
||||||
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
||||||
{
|
|
||||||
/* Check if this user belongs to the current course */
|
/* Check if this user belongs to the current course */
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
||||||
{
|
{
|
||||||
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
|
case Usr_BELONG:
|
||||||
if (Gbl.Usrs.Other.UsrDat.Accepted)
|
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
if (Gbl.Usrs.Other.UsrDat.Accepted)
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_enroled_in_the_course_Y,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
else // Enrolment not yet accepted
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_in_the_course_Y_but_has_not_yet_accepted_the_enrolment,
|
else // Enrolment not yet accepted
|
||||||
|
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_in_the_course_Y_but_has_not_yet_accepted_the_enrolment,
|
||||||
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
|
|
||||||
|
Rec_ShowOtherSharedRecordEditable ();
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to the current course
|
||||||
|
default:
|
||||||
|
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_exists_in_Y_but_is_not_enroled_in_the_course_Z,
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Cfg_PLATFORM_SHORT_NAME,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
|
|
||||||
Rec_ShowOtherSharedRecordEditable ();
|
Rec_ShowOtherSharedRecordEditable ();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // User does not belong to the current course
|
|
||||||
{
|
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_exists_in_Y_but_is_not_enroled_in_the_course_Z,
|
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
|
||||||
Cfg_PLATFORM_SHORT_NAME,
|
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
|
||||||
|
|
||||||
Rec_ShowOtherSharedRecordEditable ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // No course selected
|
else // No course selected
|
||||||
{
|
{
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_already_exists_in_Y,
|
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_already_exists_in_Y,
|
||||||
|
@ -2817,34 +2821,36 @@ void Enr_CreateNewUsr1 (void)
|
||||||
/***** Register user in current course in database *****/
|
/***** Register user in current course in database *****/
|
||||||
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
||||||
{
|
{
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
||||||
{
|
{
|
||||||
OldRole = Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs; // Remember old role before changing it
|
case Usr_BELONG:
|
||||||
if (NewRole != OldRole) // The role must be updated
|
OldRole = Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs; // Remember old role before changing it
|
||||||
{
|
if (NewRole != OldRole) // The role must be updated
|
||||||
/* Modify role */
|
{
|
||||||
Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole);
|
/* Modify role */
|
||||||
|
Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole);
|
||||||
|
|
||||||
|
/* Success message */
|
||||||
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
|
Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B,
|
||||||
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Gbl.Hierarchy.Node[Hie_CRS].FullName,
|
||||||
|
Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex],
|
||||||
|
Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to current course
|
||||||
|
default:
|
||||||
|
/* Register user */
|
||||||
|
Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole,
|
||||||
|
Enr_SET_ACCEPTED_TO_FALSE);
|
||||||
|
|
||||||
/* Success message */
|
/* Success message */
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B,
|
Txt_THE_USER_X_has_been_enroled_in_the_course_Y,
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName,
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex],
|
break;
|
||||||
Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // User does not belong to current course
|
|
||||||
{
|
|
||||||
/* Register user */
|
|
||||||
Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole,
|
|
||||||
Enr_SET_ACCEPTED_TO_FALSE);
|
|
||||||
|
|
||||||
/* Success message */
|
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
|
||||||
Txt_THE_USER_X_has_been_enroled_in_the_course_Y,
|
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Change user's groups *****/
|
/***** Change user's groups *****/
|
||||||
|
@ -2928,34 +2934,36 @@ void Enr_ModifyUsr1 (void)
|
||||||
NewRole = Rec_GetRoleFromRecordForm ();
|
NewRole = Rec_GetRoleFromRecordForm ();
|
||||||
|
|
||||||
/***** Register user in current course in database *****/
|
/***** Register user in current course in database *****/
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Other.UsrDat))
|
||||||
{
|
{
|
||||||
OldRole = Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs; // Remember old role before changing it
|
case Usr_BELONG:
|
||||||
if (NewRole != OldRole) // The role must be updated
|
OldRole = Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs; // Remember old role before changing it
|
||||||
{
|
if (NewRole != OldRole) // The role must be updated
|
||||||
/* Modify role */
|
{
|
||||||
Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole);
|
/* Modify role */
|
||||||
|
Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole);
|
||||||
|
|
||||||
|
/* Set success message */
|
||||||
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
|
Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B,
|
||||||
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
|
Gbl.Hierarchy.Node[Hie_CRS].FullName,
|
||||||
|
Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex],
|
||||||
|
Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to current course
|
||||||
|
default:
|
||||||
|
/* Register user */
|
||||||
|
Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole,
|
||||||
|
Enr_SET_ACCEPTED_TO_FALSE);
|
||||||
|
|
||||||
/* Set success message */
|
/* Set success message */
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B,
|
Txt_THE_USER_X_has_been_enroled_in_the_course_Y,
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
Gbl.Usrs.Other.UsrDat.FullName,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName,
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex],
|
break;
|
||||||
Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // User does not belong to current course
|
|
||||||
{
|
|
||||||
/* Register user */
|
|
||||||
Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole,
|
|
||||||
Enr_SET_ACCEPTED_TO_FALSE);
|
|
||||||
|
|
||||||
/* Set success message */
|
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
|
||||||
Txt_THE_USER_X_has_been_enroled_in_the_course_Y,
|
|
||||||
Gbl.Usrs.Other.UsrDat.FullName,
|
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Change user's groups *****/
|
/***** Change user's groups *****/
|
||||||
|
@ -3113,34 +3121,38 @@ static void Enr_AskIfRemoveUsrFromCrs (struct Usr_Data *UsrDat)
|
||||||
[Usr_OTHER] = Txt_Remove_user_from_this_course
|
[Usr_OTHER] = Txt_Remove_user_from_this_course
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
||||||
{
|
{
|
||||||
MeOrOther = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
case Usr_BELONG:
|
||||||
|
MeOrOther = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
|
|
||||||
/***** Show question and button to remove user as administrator *****/
|
/***** Show question and button to remove user as administrator *****/
|
||||||
/* Begin alert */
|
/* Begin alert */
|
||||||
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[MeOrOther],
|
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[MeOrOther],
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
Gbl.Hierarchy.Node[Hie_CRS].FullName);
|
||||||
|
|
||||||
/* Show user's record */
|
/* Show user's record */
|
||||||
Rec_ShowSharedRecordUnmodifiable (UsrDat);
|
Rec_ShowSharedRecordUnmodifiable (UsrDat);
|
||||||
|
|
||||||
/* Show form to request confirmation */
|
/* Show form to request confirmation */
|
||||||
if (!NextAction[UsrDat->Roles.InCurrentCrs])
|
if (!NextAction[UsrDat->Roles.InCurrentCrs])
|
||||||
Err_WrongRoleExit ();
|
Err_WrongRoleExit ();
|
||||||
Frm_BeginForm (NextAction[UsrDat->Roles.InCurrentCrs]);
|
Frm_BeginForm (NextAction[UsrDat->Roles.InCurrentCrs]);
|
||||||
Usr_PutParUsrCodEncrypted (UsrDat->EnUsrCod);
|
Usr_PutParUsrCodEncrypted (UsrDat->EnUsrCod);
|
||||||
Pwd_AskForConfirmationOnDangerousAction ();
|
Pwd_AskForConfirmationOnDangerousAction ();
|
||||||
Btn_PutRemoveButton (TxtButton[MeOrOther]);
|
Btn_PutRemoveButton (TxtButton[MeOrOther]);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
|
|
||||||
/* End alert */
|
/* End alert */
|
||||||
Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,
|
Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,
|
||||||
NULL,NULL,
|
NULL,NULL,
|
||||||
Btn_NO_BUTTON,NULL);
|
Btn_NO_BUTTON,NULL);
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to current course
|
||||||
|
default:
|
||||||
|
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // User does not belong to current course
|
|
||||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3154,86 +3166,90 @@ static void Enr_EffectivelyRemUsrFromCrs (struct Usr_Data *UsrDat,
|
||||||
{
|
{
|
||||||
extern const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y;
|
extern const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y;
|
||||||
|
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
switch (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
||||||
{
|
{
|
||||||
/***** Remove user from all attendance events in course *****/
|
case Usr_BELONG:
|
||||||
Att_DB_RemoveUsrFromCrsEvents (UsrDat->UsrCod,Crs->HieCod);
|
/***** Remove user from all attendance events in course *****/
|
||||||
|
Att_DB_RemoveUsrFromCrsEvents (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Remove user from all groups in course *****/
|
/***** Remove user from all groups in course *****/
|
||||||
Grp_RemUsrFromAllGrpsInCrs (UsrDat->UsrCod,Crs->HieCod);
|
Grp_RemUsrFromAllGrpsInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Remove user's status about reading of course information *****/
|
/***** Remove user's status about reading of course information *****/
|
||||||
Inf_DB_RemoveUsrFromCrsInfoRead (UsrDat->UsrCod,Crs->HieCod);
|
Inf_DB_RemoveUsrFromCrsInfoRead (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Remove important production of this user in course *****/
|
/***** Remove important production of this user in course *****/
|
||||||
if (RemoveUsrWorks == Enr_REMOVE_USR_PRODUCTION)
|
if (RemoveUsrWorks == Enr_REMOVE_USR_PRODUCTION)
|
||||||
{
|
{
|
||||||
/* Remove works zone in course */
|
/* Remove works zone in course */
|
||||||
Brw_RemoveUsrWorksInCrs (UsrDat,Crs);
|
Brw_RemoveUsrWorksInCrs (UsrDat,Crs);
|
||||||
|
|
||||||
/* Remove tests, exams and matches results made by user in course */
|
/* Remove tests, exams and matches results made by user in course */
|
||||||
TstPrn_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
TstPrn_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
Exa_DB_RemovePrintQstsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
Exa_DB_RemovePrintQstsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
Exa_DB_RemoveAllPrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
Exa_DB_RemoveAllPrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
Mch_RemoveMatchesMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
Mch_RemoveMatchesMadeByUsrInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Remove fields of this user in its course record *****/
|
/***** Remove fields of this user in its course record *****/
|
||||||
Rec_DB_RemoveAllFieldContentsFromUsrRecordInCrs (UsrDat->UsrCod,Crs->HieCod);
|
Rec_DB_RemoveAllFieldContentsFromUsrRecordInCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Remove some information about files in course and groups *****/
|
/***** Remove some information about files in course and groups *****/
|
||||||
Brw_DB_RemoveSomeInfoAboutCrsUsrFiles (UsrDat->UsrCod,Crs->HieCod);
|
Brw_DB_RemoveSomeInfoAboutCrsUsrFiles (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Set all notifications for this user in this course as removed,
|
/***** Set all notifications for this user in this course as removed,
|
||||||
except notifications about new messages *****/
|
except notifications about new messages *****/
|
||||||
Ntf_DB_MarkNotifInCrsAsRemoved (UsrDat->UsrCod,Crs->HieCod);
|
Ntf_DB_MarkNotifInCrsAsRemoved (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Remove user from the tables of courses-users *****/
|
/***** Remove user from the tables of courses-users *****/
|
||||||
Set_DB_RemUsrFromCrsSettings (UsrDat->UsrCod,Crs->HieCod);
|
Set_DB_RemUsrFromCrsSettings (UsrDat->UsrCod,Crs->HieCod);
|
||||||
Enr_DB_RemUsrFromCrs (UsrDat->UsrCod,Crs->HieCod);
|
Enr_DB_RemUsrFromCrs (UsrDat->UsrCod,Crs->HieCod);
|
||||||
|
|
||||||
/***** Flush caches *****/
|
/***** Flush caches *****/
|
||||||
Usr_FlushCachesUsr ();
|
Usr_FlushCachesUsr ();
|
||||||
|
|
||||||
/***** If it's me, change my roles *****/
|
/***** If it's me, change my roles *****/
|
||||||
switch (Usr_ItsMe (UsrDat->UsrCod))
|
switch (Usr_ItsMe (UsrDat->UsrCod))
|
||||||
{
|
{
|
||||||
case Usr_ME:
|
case Usr_ME:
|
||||||
/* Now I don't belong to current course */
|
/* Now I don't belong to current course */
|
||||||
Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] = Usr_DONT_BELONG;
|
Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] = Usr_DONT_BELONG;
|
||||||
Gbl.Usrs.Me.UsrDat.Accepted = false;
|
Gbl.Usrs.Me.UsrDat.Accepted = false;
|
||||||
|
|
||||||
/* Fill the list with the courses I belong to */
|
/* Fill the list with the courses I belong to */
|
||||||
Gbl.Usrs.Me.Hierarchy[Hie_CRS].Filled = false;
|
Gbl.Usrs.Me.Hierarchy[Hie_CRS].Filled = false;
|
||||||
Hie_GetMyHierarchy (Hie_CRS);
|
Hie_GetMyHierarchy (Hie_CRS);
|
||||||
|
|
||||||
/* Set my roles */
|
/* Set my roles */
|
||||||
Gbl.Usrs.Me.Role.FromSession =
|
Gbl.Usrs.Me.Role.FromSession =
|
||||||
Gbl.Usrs.Me.Role.Logged =
|
Gbl.Usrs.Me.Role.Logged =
|
||||||
Gbl.Usrs.Me.Role.LoggedBeforeCloseSession =
|
Gbl.Usrs.Me.Role.LoggedBeforeCloseSession =
|
||||||
Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs =
|
Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs =
|
||||||
UsrDat->Roles.InCurrentCrs = Rol_UNK;
|
UsrDat->Roles.InCurrentCrs = Rol_UNK;
|
||||||
|
|
||||||
Gbl.Usrs.Me.UsrDat.Roles.InCrss =
|
Gbl.Usrs.Me.UsrDat.Roles.InCrss =
|
||||||
UsrDat->Roles.InCrss = -1; // not yet filled/calculated
|
UsrDat->Roles.InCrss = -1; // not yet filled/calculated
|
||||||
|
|
||||||
Rol_SetMyRoles ();
|
Rol_SetMyRoles ();
|
||||||
break;
|
break;
|
||||||
case Usr_OTHER:
|
case Usr_OTHER:
|
||||||
/* Now he/she does not belong to current course */
|
/* Now he/she does not belong to current course */
|
||||||
UsrDat->Accepted = false;
|
UsrDat->Accepted = false;
|
||||||
UsrDat->Roles.InCurrentCrs = Rol_USR;
|
UsrDat->Roles.InCurrentCrs = Rol_USR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QuietOrVerbose == Cns_VERBOSE)
|
if (QuietOrVerbose == Cns_VERBOSE)
|
||||||
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
Ale_CreateAlert (Ale_SUCCESS,NULL,
|
||||||
Txt_THE_USER_X_has_been_removed_from_the_course_Y,
|
Txt_THE_USER_X_has_been_removed_from_the_course_Y,
|
||||||
UsrDat->FullName,Crs->FullName);
|
UsrDat->FullName,Crs->FullName);
|
||||||
|
break;
|
||||||
|
case Usr_DONT_BELONG: // User does not belong to course
|
||||||
|
default:
|
||||||
|
if (QuietOrVerbose == Cns_VERBOSE)
|
||||||
|
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // User does not belong to course
|
|
||||||
if (QuietOrVerbose == Cns_VERBOSE)
|
|
||||||
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3246,12 +3262,12 @@ void Enr_FlushCacheUsrBelongsToCurrentCrs (void)
|
||||||
Gbl.Cache.UsrBelongsToCurrentCrs.Valid = false;
|
Gbl.Cache.UsrBelongsToCurrentCrs.Valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Enr_CheckIfUsrBelongsToCurrentCrs (const struct Usr_Data *UsrDat)
|
Usr_Belong_t Enr_CheckIfUsrBelongsToCurrentCrs (const struct Usr_Data *UsrDat)
|
||||||
{
|
{
|
||||||
/***** 1. Fast check: Trivial cases *****/
|
/***** 1. Fast check: Trivial cases *****/
|
||||||
if (UsrDat->UsrCod <= 0 ||
|
if (UsrDat->UsrCod <= 0 ||
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].HieCod <= 0)
|
Gbl.Hierarchy.Node[Hie_CRS].HieCod <= 0)
|
||||||
return false;
|
return Usr_DONT_BELONG;
|
||||||
|
|
||||||
/***** 2. Fast check: If cached... *****/
|
/***** 2. Fast check: If cached... *****/
|
||||||
if (Gbl.Cache.UsrBelongsToCurrentCrs.Valid &&
|
if (Gbl.Cache.UsrBelongsToCurrentCrs.Valid &&
|
||||||
|
@ -3262,9 +3278,10 @@ bool Enr_CheckIfUsrBelongsToCurrentCrs (const struct Usr_Data *UsrDat)
|
||||||
if (UsrDat->Roles.InCurrentCrs != Rol_UNK)
|
if (UsrDat->Roles.InCurrentCrs != Rol_UNK)
|
||||||
{
|
{
|
||||||
Gbl.Cache.UsrBelongsToCurrentCrs.UsrCod = UsrDat->UsrCod;
|
Gbl.Cache.UsrBelongsToCurrentCrs.UsrCod = UsrDat->UsrCod;
|
||||||
Gbl.Cache.UsrBelongsToCurrentCrs.Belongs = UsrDat->Roles.InCurrentCrs == Rol_STD ||
|
Gbl.Cache.UsrBelongsToCurrentCrs.Belongs = (UsrDat->Roles.InCurrentCrs == Rol_STD ||
|
||||||
UsrDat->Roles.InCurrentCrs == Rol_NET ||
|
UsrDat->Roles.InCurrentCrs == Rol_NET ||
|
||||||
UsrDat->Roles.InCurrentCrs == Rol_TCH;
|
UsrDat->Roles.InCurrentCrs == Rol_TCH) ? Usr_BELONG :
|
||||||
|
Usr_DONT_BELONG;
|
||||||
Gbl.Cache.UsrBelongsToCurrentCrs.Valid = true;
|
Gbl.Cache.UsrBelongsToCurrentCrs.Valid = true;
|
||||||
return Gbl.Cache.UsrBelongsToCurrentCrs.Belongs;
|
return Gbl.Cache.UsrBelongsToCurrentCrs.Belongs;
|
||||||
}
|
}
|
||||||
|
@ -3303,9 +3320,9 @@ bool Enr_CheckIfUsrHasAcceptedInCurrentCrs (const struct Usr_Data *UsrDat)
|
||||||
/***** 3. Fast / slow check: Get if user belongs to current course
|
/***** 3. Fast / slow check: Get if user belongs to current course
|
||||||
and has accepted *****/
|
and has accepted *****/
|
||||||
Gbl.Cache.UsrHasAcceptedInCurrentCrs.UsrCod = UsrDat->UsrCod;
|
Gbl.Cache.UsrHasAcceptedInCurrentCrs.UsrCod = UsrDat->UsrCod;
|
||||||
Gbl.Cache.UsrHasAcceptedInCurrentCrs.Accepted = Hie_CheckIfUsrBelongsTo (Hie_CRS,UsrDat->UsrCod,
|
Gbl.Cache.UsrHasAcceptedInCurrentCrs.Accepted = (Hie_CheckIfUsrBelongsTo (Hie_CRS,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_CRS].HieCod,
|
Gbl.Hierarchy.Node[Hie_CRS].HieCod,
|
||||||
true);
|
true) == Usr_BELONG);
|
||||||
Gbl.Cache.UsrHasAcceptedInCurrentCrs.Valid = true;
|
Gbl.Cache.UsrHasAcceptedInCurrentCrs.Valid = true;
|
||||||
return Gbl.Cache.UsrHasAcceptedInCurrentCrs.Accepted;
|
return Gbl.Cache.UsrHasAcceptedInCurrentCrs.Accepted;
|
||||||
}
|
}
|
||||||
|
@ -3340,7 +3357,7 @@ bool Enr_CheckIfUsrSharesAnyOfMyCrs (struct Usr_Data *UsrDat)
|
||||||
|
|
||||||
/***** 5. Fast check: Is course selected and we both belong to it? *****/
|
/***** 5. Fast check: Is course selected and we both belong to it? *****/
|
||||||
if (Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] == Usr_BELONG)
|
if (Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] == Usr_BELONG)
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat)) // Course selected and we both belong to it
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_BELONG) // Course selected and we both belong to it
|
||||||
{
|
{
|
||||||
Gbl.Cache.UsrSharesAnyOfMyCrs.UsrCod = UsrDat->UsrCod;
|
Gbl.Cache.UsrSharesAnyOfMyCrs.UsrCod = UsrDat->UsrCod;
|
||||||
Gbl.Cache.UsrSharesAnyOfMyCrs.SharesAnyOfMyCrs = true;
|
Gbl.Cache.UsrSharesAnyOfMyCrs.SharesAnyOfMyCrs = true;
|
||||||
|
|
|
@ -140,7 +140,7 @@ void Enr_ModifyUsr1 (void);
|
||||||
void Enr_ModifyUsr2 (void);
|
void Enr_ModifyUsr2 (void);
|
||||||
|
|
||||||
void Enr_FlushCacheUsrBelongsToCurrentCrs (void);
|
void Enr_FlushCacheUsrBelongsToCurrentCrs (void);
|
||||||
bool Enr_CheckIfUsrBelongsToCurrentCrs (const struct Usr_Data *UsrDat);
|
Usr_Belong_t Enr_CheckIfUsrBelongsToCurrentCrs (const struct Usr_Data *UsrDat);
|
||||||
void Enr_FlushCacheUsrHasAcceptedInCurrentCrs (void);
|
void Enr_FlushCacheUsrHasAcceptedInCurrentCrs (void);
|
||||||
bool Enr_CheckIfUsrHasAcceptedInCurrentCrs (const struct Usr_Data *UsrDat);
|
bool Enr_CheckIfUsrHasAcceptedInCurrentCrs (const struct Usr_Data *UsrDat);
|
||||||
void Enr_FlushCacheUsrSharesAnyOfMyCrs (void);
|
void Enr_FlushCacheUsrSharesAnyOfMyCrs (void);
|
||||||
|
|
|
@ -158,8 +158,8 @@ unsigned Enr_DB_GetMyCoursesNames (MYSQL_RES **mysql_res)
|
||||||
/******************** Check if a user belongs to a course ********************/
|
/******************** Check if a user belongs to a course ********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Enr_DB_CheckIfUsrBelongsToCrs (long UsrCod,long HieCod,
|
Usr_Belong_t Enr_DB_CheckIfUsrBelongsToCrs (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses)
|
bool CountOnlyAcceptedCourses)
|
||||||
{
|
{
|
||||||
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
||||||
"");
|
"");
|
||||||
|
@ -174,7 +174,8 @@ bool Enr_DB_CheckIfUsrBelongsToCrs (long UsrCod,long HieCod,
|
||||||
"%s)",
|
"%s)",
|
||||||
HieCod,
|
HieCod,
|
||||||
UsrCod,
|
UsrCod,
|
||||||
SubQuery);
|
SubQuery) ? Usr_BELONG :
|
||||||
|
Usr_DONT_BELONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -44,8 +44,8 @@ unsigned Enr_DB_GetMyCrss (MYSQL_RES **mysql_res,long PrtCod);
|
||||||
void Enr_DB_DropTmpTableMyCourses (void);
|
void Enr_DB_DropTmpTableMyCourses (void);
|
||||||
unsigned Enr_DB_GetMyCoursesNames (MYSQL_RES **mysql_res);
|
unsigned Enr_DB_GetMyCoursesNames (MYSQL_RES **mysql_res);
|
||||||
|
|
||||||
bool Enr_DB_CheckIfUsrBelongsToCrs (long UsrCod,long HieCod,
|
Usr_Belong_t Enr_DB_CheckIfUsrBelongsToCrs (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses);
|
bool CountOnlyAcceptedCourses);
|
||||||
bool Enr_DB_CheckIfUsrSharesAnyOfMyCrs (long UsrCod);
|
bool Enr_DB_CheckIfUsrSharesAnyOfMyCrs (long UsrCod);
|
||||||
bool Enr_DB_CheckIfUsrSharesAnyOfMyCrsWithDifferentRole (long UsrCod);
|
bool Enr_DB_CheckIfUsrSharesAnyOfMyCrsWithDifferentRole (long UsrCod);
|
||||||
long Enr_DB_GetRamdomStdFromCrs (long HieCod);
|
long Enr_DB_GetRamdomStdFromCrs (long HieCod);
|
||||||
|
|
|
@ -927,7 +927,7 @@ static void Fol_GetFollowedFromSelectedUsrs (unsigned *NumFollowed,
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_DONT_GET_ROLE_IN_CRS)) // Get from the database the data of the student
|
Usr_DONT_GET_ROLE_IN_CRS)) // Get from the database the data of the student
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
{
|
{
|
||||||
/* Check if I follow this user, and update number of users */
|
/* Check if I follow this user, and update number of users */
|
||||||
if (Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
if (Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
|
@ -975,7 +975,7 @@ void Fol_FollowUsrs ()
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_DONT_GET_ROLE_IN_CRS))
|
Usr_DONT_GET_ROLE_IN_CRS))
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
/* If I don't follow this user ==> follow him/her */
|
/* If I don't follow this user ==> follow him/her */
|
||||||
if (!Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
if (!Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
UsrDat.UsrCod))
|
UsrDat.UsrCod))
|
||||||
|
@ -1024,7 +1024,7 @@ void Fol_UnfollowUsrs (void)
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_DONT_GET_ROLE_IN_CRS))
|
Usr_DONT_GET_ROLE_IN_CRS))
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
/* If I follow this user ==> unfollow him/her */
|
/* If I follow this user ==> unfollow him/her */
|
||||||
if (Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
if (Fol_DB_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
UsrDat.UsrCod))
|
UsrDat.UsrCod))
|
||||||
|
|
|
@ -291,13 +291,13 @@ struct Globals
|
||||||
long UsrCod;
|
long UsrCod;
|
||||||
long HieCod;
|
long HieCod;
|
||||||
bool CountOnlyAcceptedCourses;
|
bool CountOnlyAcceptedCourses;
|
||||||
bool Belongs;
|
Usr_Belong_t Belongs;
|
||||||
bool Valid;
|
bool Valid;
|
||||||
} UsrBelongsTo[Hie_NUM_LEVELS];
|
} UsrBelongsTo[Hie_NUM_LEVELS];
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
long UsrCod;
|
long UsrCod;
|
||||||
bool Belongs;
|
Usr_Belong_t Belongs;
|
||||||
bool Valid;
|
bool Valid;
|
||||||
} UsrBelongsToCurrentCrs;
|
} UsrBelongsToCurrentCrs;
|
||||||
struct
|
struct
|
||||||
|
|
|
@ -3101,7 +3101,7 @@ bool Grp_CheckIfUsrSharesAnyOfMyGrpsInCurrentCrs (const struct Usr_Data *UsrDat)
|
||||||
return Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares;
|
return Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares;
|
||||||
|
|
||||||
/***** 7. Fast / slow check: Does he/she belong to the current course? *****/
|
/***** 7. Fast / slow check: Does he/she belong to the current course? *****/
|
||||||
if (!Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_DONT_BELONG)
|
||||||
{
|
{
|
||||||
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.UsrCod = UsrDat->UsrCod;
|
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.UsrCod = UsrDat->UsrCod;
|
||||||
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares = false;
|
Gbl.Cache.UsrSharesAnyOfMyGrpsInCurrentCrs.Shares = false;
|
||||||
|
|
|
@ -1036,11 +1036,11 @@ void Hie_FlushCacheUsrBelongsTo (Hie_Level_t Level)
|
||||||
/******************** Check if a user belongs to a course ********************/
|
/******************** Check if a user belongs to a course ********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Hie_CheckIfUsrBelongsTo (Hie_Level_t Level,long UsrCod,long HieCod,
|
Usr_Belong_t Hie_CheckIfUsrBelongsTo (Hie_Level_t Level,long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses)
|
bool CountOnlyAcceptedCourses)
|
||||||
{
|
{
|
||||||
static bool (*FunctionToGetIfUsrBelongsToFromDB[Hie_NUM_LEVELS]) (long UsrCod,long HieCod,
|
static Usr_Belong_t (*FunctionToGetIfUsrBelongsToFromDB[Hie_NUM_LEVELS]) (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses) =
|
bool CountOnlyAcceptedCourses) =
|
||||||
{
|
{
|
||||||
[Hie_INS] = Ins_DB_CheckIfUsrBelongsToIns,
|
[Hie_INS] = Ins_DB_CheckIfUsrBelongsToIns,
|
||||||
[Hie_CTR] = Ctr_DB_CheckIfUsrBelongsToCtr,
|
[Hie_CTR] = Ctr_DB_CheckIfUsrBelongsToCtr,
|
||||||
|
@ -1055,7 +1055,7 @@ bool Hie_CheckIfUsrBelongsTo (Hie_Level_t Level,long UsrCod,long HieCod,
|
||||||
/***** 1. Fast check: Trivial cases *****/
|
/***** 1. Fast check: Trivial cases *****/
|
||||||
if (UsrCod <= 0 ||
|
if (UsrCod <= 0 ||
|
||||||
HieCod <= 0)
|
HieCod <= 0)
|
||||||
return false;
|
return Usr_DONT_BELONG;
|
||||||
|
|
||||||
/***** 2. Fast check: If cached... *****/
|
/***** 2. Fast check: If cached... *****/
|
||||||
if (Gbl.Cache.UsrBelongsTo[Level].Valid &&
|
if (Gbl.Cache.UsrBelongsTo[Level].Valid &&
|
||||||
|
|
|
@ -70,8 +70,8 @@ void Hie_GetMyHierarchy (Hie_Level_t Level);
|
||||||
Usr_Belong_t Hie_CheckIfIBelongTo (Hie_Level_t Level,long HieCod);
|
Usr_Belong_t Hie_CheckIfIBelongTo (Hie_Level_t Level,long HieCod);
|
||||||
|
|
||||||
void Hie_FlushCacheUsrBelongsTo (Hie_Level_t Level);
|
void Hie_FlushCacheUsrBelongsTo (Hie_Level_t Level);
|
||||||
bool Hie_CheckIfUsrBelongsTo (Hie_Level_t Level,long UsrCod,long HieCod,
|
Usr_Belong_t Hie_CheckIfUsrBelongsTo (Hie_Level_t Level,long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses);
|
bool CountOnlyAcceptedCourses);
|
||||||
|
|
||||||
//-------------------------------- Figures ------------------------------------
|
//-------------------------------- Figures ------------------------------------
|
||||||
void Hie_GetAndShowHierarchyStats (void);
|
void Hie_GetAndShowHierarchyStats (void);
|
||||||
|
|
|
@ -807,27 +807,28 @@ unsigned Ins_DB_GetMyInss (MYSQL_RES **mysql_res,long PrtCod)
|
||||||
/**************** Check if a user belongs to an institution ******************/
|
/**************** Check if a user belongs to an institution ******************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Ins_DB_CheckIfUsrBelongsToIns (long UsrCod,long HieCod,
|
Usr_Belong_t Ins_DB_CheckIfUsrBelongsToIns (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses)
|
bool CountOnlyAcceptedCourses)
|
||||||
{
|
{
|
||||||
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
const char *SubQuery = (CountOnlyAcceptedCourses ? " AND crs_users.Accepted='Y'" : // Only if user accepted
|
||||||
"");
|
"");
|
||||||
|
|
||||||
return (DB_QueryCOUNT ("can not check if a user belongs to an institution",
|
return DB_QueryCOUNT ("can not check if a user belongs to an institution",
|
||||||
"SELECT COUNT(DISTINCT ctr_centers.InsCod)"
|
"SELECT COUNT(DISTINCT ctr_centers.InsCod)"
|
||||||
" FROM crs_users,"
|
" FROM crs_users,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"ctr_centers"
|
"ctr_centers"
|
||||||
" WHERE crs_users.UsrCod=%ld"
|
" WHERE crs_users.UsrCod=%ld"
|
||||||
"%s"
|
"%s"
|
||||||
" AND crs_users.CrsCod=crs_courses.CrsCod"
|
" AND crs_users.CrsCod=crs_courses.CrsCod"
|
||||||
" AND crs_courses.DegCod=deg_degrees.DegCod"
|
" AND crs_courses.DegCod=deg_degrees.DegCod"
|
||||||
" AND deg_degrees.CtrCod=ctr_centers.CtrCod"
|
" AND deg_degrees.CtrCod=ctr_centers.CtrCod"
|
||||||
" AND ctr_centers.InsCod=%ld",
|
" AND ctr_centers.InsCod=%ld",
|
||||||
UsrCod,
|
UsrCod,
|
||||||
SubQuery,
|
SubQuery,
|
||||||
HieCod) != 0);
|
HieCod) ? Usr_BELONG :
|
||||||
|
Usr_DONT_BELONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -79,8 +79,8 @@ unsigned Ins_DB_GetNumInnsWithUsrs (Rol_Role_t Role,
|
||||||
Hie_Level_t Level,long HieCod);
|
Hie_Level_t Level,long HieCod);
|
||||||
|
|
||||||
unsigned Ins_DB_GetMyInss (MYSQL_RES **mysql_res,long HieCod);
|
unsigned Ins_DB_GetMyInss (MYSQL_RES **mysql_res,long HieCod);
|
||||||
bool Ins_DB_CheckIfUsrBelongsToIns (long UsrCod,long HieCod,
|
Usr_Belong_t Ins_DB_CheckIfUsrBelongsToIns (long UsrCod,long HieCod,
|
||||||
bool CountOnlyAcceptedCourses);
|
bool CountOnlyAcceptedCourses);
|
||||||
unsigned Ins_DB_GetNumUsrsWhoClaimToBelongToIns (long HieCod);
|
unsigned Ins_DB_GetNumUsrsWhoClaimToBelongToIns (long HieCod);
|
||||||
|
|
||||||
void Ins_DB_RemoveInstitution (long HieCod);
|
void Ins_DB_RemoveInstitution (long HieCod);
|
||||||
|
|
28
swad_mail.c
28
swad_mail.c
|
@ -1698,30 +1698,30 @@ Usr_Can_t Mai_ICanSeeOtherUsrEmail (const struct Usr_Data *UsrDat)
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
/* If I am a teacher in the current course,
|
/* If I am a teacher in the current course,
|
||||||
I can see the email of confirmed students and teachers */
|
I can see the email of confirmed students and teachers */
|
||||||
return (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) && // A user belonging to the current course
|
return (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_BELONG && // A user belonging to the current course
|
||||||
UsrDat->Accepted) ? Usr_CAN : // who accepted registration
|
UsrDat->Accepted) ? Usr_CAN : // who accepted registration
|
||||||
Usr_CAN_NOT;
|
Usr_CAN_NOT;
|
||||||
case Rol_DEG_ADM:
|
case Rol_DEG_ADM:
|
||||||
/* If I am an administrator of current degree,
|
/* If I am an administrator of current degree,
|
||||||
I only can see the user's email of users from current degree */
|
I only can see the user's email of users from current degree */
|
||||||
return Hie_CheckIfUsrBelongsTo (Hie_DEG,UsrDat->UsrCod,
|
return (Hie_CheckIfUsrBelongsTo (Hie_DEG,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_DEG].HieCod,
|
Gbl.Hierarchy.Node[Hie_DEG].HieCod,
|
||||||
true) ? Usr_CAN : // count only accepted courses
|
true) == Usr_BELONG) ? Usr_CAN : // count only accepted courses
|
||||||
Usr_CAN_NOT;
|
Usr_CAN_NOT;
|
||||||
case Rol_CTR_ADM:
|
case Rol_CTR_ADM:
|
||||||
/* If I am an administrator of current center,
|
/* If I am an administrator of current center,
|
||||||
I only can see the user's email of users from current center */
|
I only can see the user's email of users from current center */
|
||||||
return Hie_CheckIfUsrBelongsTo (Hie_CTR,UsrDat->UsrCod,
|
return (Hie_CheckIfUsrBelongsTo (Hie_CTR,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_CTR].HieCod,
|
Gbl.Hierarchy.Node[Hie_CTR].HieCod,
|
||||||
true) ? Usr_CAN : // count only accepted courses
|
true) == Usr_BELONG) ? Usr_CAN : // count only accepted courses
|
||||||
Usr_CAN_NOT;
|
Usr_CAN_NOT;
|
||||||
case Rol_INS_ADM:
|
case Rol_INS_ADM:
|
||||||
/* If I am an administrator of current institution,
|
/* If I am an administrator of current institution,
|
||||||
I only can see the user's email of users from current institution */
|
I only can see the user's email of users from current institution */
|
||||||
return Hie_CheckIfUsrBelongsTo (Hie_INS,UsrDat->UsrCod,
|
return (Hie_CheckIfUsrBelongsTo (Hie_INS,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_INS].HieCod,
|
Gbl.Hierarchy.Node[Hie_INS].HieCod,
|
||||||
true) ? Usr_CAN : // count only accepted courses
|
true) == Usr_BELONG) ? Usr_CAN : // count only accepted courses
|
||||||
Usr_CAN_NOT;
|
Usr_CAN_NOT;
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1113,7 +1113,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get student's data from database
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get student's data from database
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_GET_ROLE_IN_CRS))
|
Usr_GET_ROLE_IN_CRS))
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
{
|
{
|
||||||
/* Check if this user has accepted
|
/* Check if this user has accepted
|
||||||
his/her inscription in the current course */
|
his/her inscription in the current course */
|
||||||
|
@ -1326,7 +1326,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get teacher's data from database
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get teacher's data from database
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_GET_ROLE_IN_CRS))
|
Usr_GET_ROLE_IN_CRS))
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
{
|
{
|
||||||
/* Check if this user has accepted
|
/* Check if this user has accepted
|
||||||
his/her inscription in the current course */
|
his/her inscription in the current course */
|
||||||
|
|
|
@ -128,9 +128,7 @@ void Rol_SetMyRoles (void)
|
||||||
/***** Check if I belong to current course *****/
|
/***** Check if I belong to current course *****/
|
||||||
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected
|
||||||
{
|
{
|
||||||
Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] =
|
Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS] = Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Me.UsrDat);
|
||||||
Enr_CheckIfUsrBelongsToCurrentCrs (&Gbl.Usrs.Me.UsrDat) ? Usr_BELONG :
|
|
||||||
Usr_DONT_BELONG;
|
|
||||||
switch (Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS])
|
switch (Gbl.Usrs.Me.IBelongToCurrent[Hie_CRS])
|
||||||
{
|
{
|
||||||
case Usr_BELONG:
|
case Usr_BELONG:
|
||||||
|
|
12
swad_user.c
12
swad_user.c
|
@ -820,7 +820,7 @@ Usr_Can_t Usr_CheckIfICanEditOtherUsr (const struct Usr_Data *UsrDat)
|
||||||
I only can edit users from current degree who have accepted */
|
I only can edit users from current degree who have accepted */
|
||||||
if (Hie_CheckIfUsrBelongsTo (Hie_DEG,UsrDat->UsrCod,
|
if (Hie_CheckIfUsrBelongsTo (Hie_DEG,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_DEG].HieCod,
|
Gbl.Hierarchy.Node[Hie_DEG].HieCod,
|
||||||
true)) // count only accepted courses
|
true) == Usr_BELONG) // count only accepted courses
|
||||||
// Degree admins can't edit superusers' data
|
// Degree admins can't edit superusers' data
|
||||||
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
|
@ -830,7 +830,7 @@ Usr_Can_t Usr_CheckIfICanEditOtherUsr (const struct Usr_Data *UsrDat)
|
||||||
I only can edit from current center who have accepted */
|
I only can edit from current center who have accepted */
|
||||||
if (Hie_CheckIfUsrBelongsTo (Hie_CTR,UsrDat->UsrCod,
|
if (Hie_CheckIfUsrBelongsTo (Hie_CTR,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_CTR].HieCod,
|
Gbl.Hierarchy.Node[Hie_CTR].HieCod,
|
||||||
true)) // count only accepted courses
|
true) == Usr_BELONG) // count only accepted courses
|
||||||
// Center admins can't edit superusers' data
|
// Center admins can't edit superusers' data
|
||||||
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
|
@ -840,7 +840,7 @@ Usr_Can_t Usr_CheckIfICanEditOtherUsr (const struct Usr_Data *UsrDat)
|
||||||
I only can edit from current institution who have accepted */
|
I only can edit from current institution who have accepted */
|
||||||
if (Hie_CheckIfUsrBelongsTo (Hie_INS,UsrDat->UsrCod,
|
if (Hie_CheckIfUsrBelongsTo (Hie_INS,UsrDat->UsrCod,
|
||||||
Gbl.Hierarchy.Node[Hie_INS].HieCod,
|
Gbl.Hierarchy.Node[Hie_INS].HieCod,
|
||||||
true)) // count only accepted courses
|
true) == Usr_BELONG) // count only accepted courses
|
||||||
// Institution admins can't edit superusers' data
|
// Institution admins can't edit superusers' data
|
||||||
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
if (!Usr_CheckIfUsrIsSuperuser (UsrDat->UsrCod))
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
|
@ -887,7 +887,7 @@ Usr_Can_t Usr_CheckIfICanViewRecordStd (const struct Usr_Data *UsrDat)
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
|
|
||||||
/***** 8. Fast / slow check: Does he/she belong to the current course? *****/
|
/***** 8. Fast / slow check: Does he/she belong to the current course? *****/
|
||||||
if (!Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_DONT_BELONG)
|
||||||
return Usr_CAN_NOT;
|
return Usr_CAN_NOT;
|
||||||
|
|
||||||
/***** 9. Fast / slow check depending on roles *****/
|
/***** 9. Fast / slow check depending on roles *****/
|
||||||
|
@ -962,7 +962,7 @@ Usr_Can_t Usr_CheckIfICanViewTstExaMchResult (const struct Usr_Data *UsrDat)
|
||||||
return Usr_CAN;
|
return Usr_CAN;
|
||||||
|
|
||||||
/***** 7. Fast check: Does he/she belong to the current course? *****/
|
/***** 7. Fast check: Does he/she belong to the current course? *****/
|
||||||
if (!Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_DONT_BELONG)
|
||||||
return Usr_CAN_NOT;
|
return Usr_CAN_NOT;
|
||||||
|
|
||||||
/***** 8. Fast / slow check depending on roles *****/
|
/***** 8. Fast / slow check depending on roles *****/
|
||||||
|
@ -998,7 +998,7 @@ Usr_Can_t Usr_CheckIfICanViewAsgWrk (const struct Usr_Data *UsrDat)
|
||||||
|
|
||||||
/***** 4. Fast check: Does he/she belong to the current course? *****/
|
/***** 4. Fast check: Does he/she belong to the current course? *****/
|
||||||
// Only users beloging to course can have files in assignments/works
|
// Only users beloging to course can have files in assignments/works
|
||||||
if (!Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (UsrDat) == Usr_DONT_BELONG)
|
||||||
return Usr_CAN_NOT;
|
return Usr_CAN_NOT;
|
||||||
|
|
||||||
/***** 5. Fast check: Am I a system admin? *****/
|
/***** 5. Fast check: Am I a system admin? *****/
|
||||||
|
|
|
@ -152,7 +152,7 @@ void ZIP_CreateZIPAsgWrk (void)
|
||||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get user's data from database
|
||||||
Usr_DONT_GET_PREFS,
|
Usr_DONT_GET_PREFS,
|
||||||
Usr_DONT_GET_ROLE_IN_CRS))
|
Usr_DONT_GET_ROLE_IN_CRS))
|
||||||
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat))
|
if (Enr_CheckIfUsrBelongsToCurrentCrs (&UsrDat) == Usr_BELONG)
|
||||||
ZIP_CreateDirCompressionUsr (&UsrDat);
|
ZIP_CreateDirCompressionUsr (&UsrDat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue