diff --git a/swad_account.c b/swad_account.c index ef56ad93b..2685ab619 100644 --- a/swad_account.c +++ b/swad_account.c @@ -819,39 +819,43 @@ void Acc_AfterCreationNewAccount (void) void Acc_GetUsrCodAndRemUsrGbl (void) { extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + bool Error = false; if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) - Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); + { + if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) + Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); + else + Error = true; + } else + Error = true; + + if (Error) Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); } /*****************************************************************************/ -/**************************** Removing of a user *****************************/ +/*************************** Remove a user account ***************************/ /*****************************************************************************/ void Acc_ReqRemAccountOrRemAccount (Acc_ReqOrRemUsr_t RequestOrRemove) { - extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + switch (RequestOrRemove) + { + case Acc_REQUEST_REMOVE_USR: // Ask if eliminate completely the user from the platform + Acc_AskIfRemoveUsrAccount (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod); + break; + case Acc_REMOVE_USR: // Eliminate completely the user from the platform + if (Pwd_GetConfirmationOnDangerousAction ()) + { + Acc_CompletelyEliminateAccount (&Gbl.Usrs.Other.UsrDat,Cns_VERBOSE); - if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) - switch (RequestOrRemove) - { - case Acc_REQUEST_REMOVE_USR: // Ask if eliminate completely the user from the platform - Acc_AskIfRemoveUsrAccount (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod); - break; - case Acc_REMOVE_USR: // Eliminate completely the user from the platform - if (Pwd_GetConfirmationOnDangerousAction ()) - { - Acc_CompletelyEliminateAccount (&Gbl.Usrs.Other.UsrDat,Cns_VERBOSE); - - /***** Move unused contents of messages to table of deleted contents of messages *****/ - Msg_MoveUnusedMsgsContentToDeleted (); - } - break; - } - else - Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + /***** Move unused contents of messages to table of deleted contents of messages *****/ + Msg_MoveUnusedMsgsContentToDeleted (); + } + break; + } } /*****************************************************************************/ diff --git a/swad_action.c b/swad_action.c index 3919468f6..eb5549e39 100644 --- a/swad_action.c +++ b/swad_action.c @@ -2440,9 +2440,9 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActCreStd */{1445,-1,TabUnk,ActLstStd ,0x1F0,0x1E0,0x1E0,Act_CONT_NORM,Act_THIS_WINDOW,Enr_CreateNewUsr1 ,Enr_CreateNewUsr2 ,NULL}, /* ActCreTch */{1446,-1,TabUnk,ActLstTch ,0x1F0,0x1E0,0x1E0,Act_CONT_NORM,Act_THIS_WINDOW,Enr_CreateNewUsr1 ,Enr_CreateNewUsr2 ,NULL}, - /* ActUpdOth */{1422,-1,TabUnk,ActLstOth ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ModifyUsr ,NULL}, - /* ActUpdStd */{1423,-1,TabUnk,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ModifyUsr ,NULL}, - /* ActUpdTch */{1424,-1,TabUnk,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ModifyUsr ,NULL}, + /* ActUpdOth */{1422,-1,TabUnk,ActLstOth ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Enr_ModifyUsr1 ,Enr_ModifyUsr2 ,NULL}, + /* ActUpdStd */{1423,-1,TabUnk,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Enr_ModifyUsr1 ,Enr_ModifyUsr2 ,NULL}, + /* ActUpdTch */{1424,-1,TabUnk,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Enr_ModifyUsr1 ,Enr_ModifyUsr2 ,NULL}, /* ActReqAccEnrStd */{1456,-1,TabUnk,ActLstStd ,0x1E8,0x000,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ReqAcceptRegisterInCrs ,NULL}, /* ActReqAccEnrTch */{1457,-1,TabUnk,ActLstTch ,0x1F0,0x000,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ReqAcceptRegisterInCrs ,NULL}, diff --git a/swad_changelog.h b/swad_changelog.h index 4f28f5ce5..4e208fe80 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -190,13 +190,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.103.4 (2016-12-17)" +#define Log_PLATFORM_VERSION "SWAD 16.103.5 (2016-12-17)" #define CSS_FILE "swad16.103.1.css" #define JS_FILE "swad16.101.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 16.103.5: Dec 17, 2016 Code refactoring in user enrollment. (211207 lines) Version 16.103.4: Dec 17, 2016 Code refactoring in user enrollment. (211170 lines) Version 16.103.3: Dec 17, 2016 Code refactoring in user enrollment. (211149 lines) Version 16.103.2: Dec 17, 2016 Code refactoring in user enrollment. (211133 lines) diff --git a/swad_enrollment.c b/swad_enrollment.c index c1be44479..8d817437c 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -3539,7 +3539,8 @@ void Enr_CreateNewUsr2 (void) if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected { /***** Show success message *****/ - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + if (Gbl.Message[0]) + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); /***** Change user's groups *****/ if (Gbl.CurrentCrs.Grps.NumGrps) // This course has groups? @@ -3555,19 +3556,20 @@ void Enr_CreateNewUsr2 (void) /**** Modify other user's data and register her/him in course and groups *****/ /*****************************************************************************/ -void Enr_ModifyUsr (void) +void Enr_ModifyUsr1 (void) { extern const char *Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B; extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_THE_USER_X_has_been_enrolled_in_the_course_Y; - extern const char *Txt_User_not_found_or_you_do_not_have_permission_; char UnsignedStr[10+1]; unsigned UnsignedNum; bool ItsMe; - Enr_RegRemOneUsrAction_t RegRemAction; Rol_Role_t OldRole; Rol_Role_t NewRole; - bool Error = false; + + /***** Initialize error and message *****/ + Gbl.Error = false; + Gbl.Message[0] = '\0'; /***** Get user from form *****/ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) @@ -3578,7 +3580,7 @@ void Enr_ModifyUsr (void) Par_GetParToText ("RegRemAction",UnsignedStr,1); if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) if (UnsignedNum < Enr_NUM_ACTIONS_REG_REM_ONE_USR) - switch ((RegRemAction = (Enr_RegRemOneUsrAction_t) UnsignedNum)) + switch ((Gbl.Usrs.RegRemAction = (Enr_RegRemOneUsrAction_t) UnsignedNum)) { case Enr_REGISTER_MODIFY_ONE_USR_IN_CRS: if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER) @@ -3611,7 +3613,6 @@ void Enr_ModifyUsr (void) Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName, Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex], Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); } } else @@ -3623,93 +3624,124 @@ void Enr_ModifyUsr (void) /* Show success message */ sprintf (Gbl.Message,Txt_THE_USER_X_has_been_enrolled_in_the_course_Y, Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); } - /***** Change user's groups *****/ - if (Gbl.CurrentCrs.Grps.NumGrps) // This course has groups? - { - if (ItsMe) - Grp_ChangeMyGrps (); - else - Grp_ChangeOtherUsrGrps (); - } + /***** Change current action *****/ + Gbl.Action.Act = (NewRole == Rol_STUDENT) ? ActUpdStd : + ((NewRole == Rol_TEACHER) ? ActUpdTch : + ActUpdOth); + Tab_SetCurrentTab (); } - - /***** Show user's record *****/ - Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); } else - Error = true; + Gbl.Error = true; break; case Enr_REGISTER_ONE_DEGREE_ADMIN: - if (Gbl.Usrs.Me.LoggedRole >= Rol_CTR_ADM) - Enr_ReqAddAdm (Sco_SCOPE_DEG,Gbl.CurrentDeg.Deg.DegCod, - Gbl.CurrentDeg.Deg.FullName); - else - Error = true; + if (Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) + Gbl.Error = true; break; case Enr_REGISTER_ONE_CENTRE_ADMIN: - if (Gbl.Usrs.Me.LoggedRole >= Rol_INS_ADM) - Enr_ReqAddAdm (Sco_SCOPE_CTR,Gbl.CurrentCtr.Ctr.CtrCod, - Gbl.CurrentCtr.Ctr.FullName); - else - Error = true; + if (Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) + Gbl.Error = true; break; case Enr_REGISTER_ONE_INSTITUTION_ADMIN: - if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) - Enr_ReqAddAdm (Sco_SCOPE_INS,Gbl.CurrentIns.Ins.InsCod, - Gbl.CurrentIns.Ins.FullName); - else - Error = true; + if (Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) + Gbl.Error = true; break; case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE: - if (!ItsMe && Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER) - Dup_ReportUsrAsPossibleDuplicate (); - else - Error = true; + if (ItsMe || Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) + Gbl.Error = true; break; case Enr_REMOVE_ONE_USR_FROM_CRS: - if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER) - Enr_ReqRemUsrFromCrs (); - else - Error = true; + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) + Gbl.Error = true; break; case Enr_REMOVE_ONE_DEGREE_ADMIN: - if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_CTR_ADM) - Enr_ReqRemAdmOfDeg (); - else - Error = true; + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) + Gbl.Error = true; break; case Enr_REMOVE_ONE_CENTRE_ADMIN: - if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_INS_ADM) - Enr_ReqRemAdmOfCtr (); - else - Error = true; + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) + Gbl.Error = true; break; case Enr_REMOVE_ONE_INSTITUTION_ADMIN: - if (ItsMe || Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) - Enr_ReqRemAdmOfIns (); - else - Error = true; + if (!ItsMe && Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) + Gbl.Error = true; break; case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: - Acc_ReqRemAccountOrRemAccount (Acc_REQUEST_REMOVE_USR); - break; - default: - Error = true; + if (!Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) + Gbl.Error = true; break; } else - Error = true; + Gbl.Error = true; else - Error = true; + Gbl.Error = true; } else - Error = true; + Gbl.Error = true; + } - if (Error) +void Enr_ModifyUsr2 (void) + { + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + + if (Gbl.Error) Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + else // No error + switch (Gbl.Usrs.RegRemAction) + { + case Enr_REGISTER_MODIFY_ONE_USR_IN_CRS: + if (Gbl.CurrentCrs.Crs.CrsCod > 0) + { + /***** Show success message *****/ + if (Gbl.Message[0]) + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + + /***** Change user's groups *****/ + if (Gbl.CurrentCrs.Grps.NumGrps) // This course has groups? + { + if (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me + Grp_ChangeMyGrps (); + else + Grp_ChangeOtherUsrGrps (); + } + } + + /***** Show user's record *****/ + Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); + break; + case Enr_REGISTER_ONE_DEGREE_ADMIN: + Enr_ReqAddAdm (Sco_SCOPE_DEG,Gbl.CurrentDeg.Deg.DegCod, + Gbl.CurrentDeg.Deg.FullName); + break; + case Enr_REGISTER_ONE_CENTRE_ADMIN: + Enr_ReqAddAdm (Sco_SCOPE_CTR,Gbl.CurrentCtr.Ctr.CtrCod, + Gbl.CurrentCtr.Ctr.FullName); + break; + case Enr_REGISTER_ONE_INSTITUTION_ADMIN: + Enr_ReqAddAdm (Sco_SCOPE_INS,Gbl.CurrentIns.Ins.InsCod, + Gbl.CurrentIns.Ins.FullName); + break; + case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE: + Dup_ReportUsrAsPossibleDuplicate (); + break; + case Enr_REMOVE_ONE_USR_FROM_CRS: + Enr_ReqRemUsrFromCrs (); + break; + case Enr_REMOVE_ONE_DEGREE_ADMIN: + Enr_ReqRemAdmOfDeg (); + break; + case Enr_REMOVE_ONE_CENTRE_ADMIN: + Enr_ReqRemAdmOfCtr (); + break; + case Enr_REMOVE_ONE_INSTITUTION_ADMIN: + Enr_ReqRemAdmOfIns (); + break; + case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: + Acc_ReqRemAccountOrRemAccount (Acc_REQUEST_REMOVE_USR); + break; + } } /*****************************************************************************/ diff --git a/swad_enrollment.h b/swad_enrollment.h index d48559427..4abc6d92e 100644 --- a/swad_enrollment.h +++ b/swad_enrollment.h @@ -133,7 +133,8 @@ void Enr_RemAdmDeg (void); void Enr_AcceptRegisterMeInCrs (void); void Enr_CreateNewUsr1 (void); void Enr_CreateNewUsr2 (void); -void Enr_ModifyUsr (void); +void Enr_ModifyUsr1 (void); +void Enr_ModifyUsr2 (void); void Enr_AcceptUsrInCrs (long UsrCod); #endif diff --git a/swad_global.h b/swad_global.h index 272e06d80..605bd1dac 100644 --- a/swad_global.h +++ b/swad_global.h @@ -44,6 +44,7 @@ #include "swad_cryptography.h" #include "swad_department.h" #include "swad_degree_type.h" +#include "swad_enrollment.h" #include "swad_exam.h" #include "swad_file.h" #include "swad_file_browser.h" @@ -398,6 +399,7 @@ struct Globals } Connected; char FileNamePhoto[NAME_MAX+1]; // File name (with no path and no .jpg) of the temporary file with the selected face bool Error; // To signal that an error has happened + Enr_RegRemOneUsrAction_t RegRemAction; // Enrollment action } Usrs; struct {