diff --git a/css/swad15.203.css b/css/swad15.204.css similarity index 100% rename from css/swad15.203.css rename to css/swad15.204.css diff --git a/swad_ID.c b/swad_ID.c index 8cfc1a42b..2e26b2637 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -54,6 +54,12 @@ extern struct Globals Gbl; /******************************* Private types *******************************/ /*****************************************************************************/ +typedef enum + { + ID_REQUEST_CONFIRM_ID, + ID_CONFIRM_ID, + } ID_ReqConfOrConfID_t; + /*****************************************************************************/ /***************************** Private variables *****************************/ /*****************************************************************************/ @@ -74,6 +80,8 @@ static void ID_RemoveUsrIDFromDB (long UsrCod,const char *UsrID); static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe); static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed); +static void ID_ReqConfOrConfOtherUsrID (ID_ReqConfOrConfID_t ReqConfOrConfID); + /*****************************************************************************/ /********************** Get list of IDs of a user ****************************/ /*****************************************************************************/ @@ -820,7 +828,7 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) char NewID[ID_MAX_LENGTH_USR_ID+1]; unsigned NumID; bool AlreadyExists; - bool Confirmed; + unsigned NumIDFound; bool Error = false; if (Pwd_CheckIfICanChangeOtherUsrPassword (UsrDat->UsrCod)) @@ -837,14 +845,15 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) for (NumID = 0, AlreadyExists = false; NumID < UsrDat->IDs.Num && !AlreadyExists; NumID++) - { - AlreadyExists = !strcasecmp (UsrDat->IDs.List[NumID].ID,NewID); - Confirmed = UsrDat->IDs.List[NumID].Confirmed; - } + if (!strcasecmp (UsrDat->IDs.List[NumID].ID,NewID)) + { + AlreadyExists = true; + NumIDFound = NumID; + } if (AlreadyExists) // This new ID was already associated to this user { - if (ItsMe || Confirmed) + if (ItsMe || UsrDat->IDs.List[NumIDFound].Confirmed) { Error = true; sprintf (Gbl.Message,Txt_The_ID_X_matches_one_of_the_existing, @@ -853,7 +862,7 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) else // It's not me && !Confirmed { /***** Mark this ID as confirmed *****/ - ID_ConfirmUsrID (UsrDat->UsrCod,NewID); + ID_ConfirmUsrID (UsrDat,NewID); sprintf (Gbl.Message,Txt_The_ID_X_has_been_confirmed, NewID); } @@ -883,7 +892,7 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe) /***** Show message *****/ Lay_ShowAlert (Error ? Lay_WARNING : - Lay_INFO, + Lay_SUCCESS, Gbl.Message); } else @@ -913,9 +922,28 @@ static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed /*****************************************************************************/ void ID_RequestConfirmOtherUsrID (void) + { + ID_ReqConfOrConfOtherUsrID (ID_REQUEST_CONFIRM_ID); + } + +/*****************************************************************************/ +/************************ Confirm another user's ID **************************/ +/*****************************************************************************/ + +void ID_ConfirmOtherUsrID (void) + { + ID_ReqConfOrConfOtherUsrID (ID_CONFIRM_ID); + } + +/*****************************************************************************/ +/********** Request the confirmation or confirm another user's ID ************/ +/*****************************************************************************/ + +static void ID_ReqConfOrConfOtherUsrID (ID_ReqConfOrConfID_t ReqConfOrConfID) { extern const char *Txt_ID_X_had_already_been_confirmed; extern const char *Txt_Do_you_want_to_confirm_the_ID_X; + extern const char *Txt_The_ID_X_has_been_confirmed; extern const char *Txt_User_not_found_or_you_do_not_have_permission_; char UsrID[ID_MAX_LENGTH_USR_ID+1]; bool ICanConfirm = false; @@ -940,7 +968,7 @@ void ID_RequestConfirmOtherUsrID (void) for (NumID = 0, Found = false; NumID < Gbl.Usrs.Other.UsrDat.IDs.Num && !Found; NumID++) - if (!strcmp (UsrID,Gbl.Usrs.Other.UsrDat.IDs.List[NumID].ID)) + if (!strcasecmp (UsrID,Gbl.Usrs.Other.UsrDat.IDs.List[NumID].ID)) { Found = true; NumIDFound = NumID; @@ -957,13 +985,29 @@ void ID_RequestConfirmOtherUsrID (void) } else { - /***** Ask for confirmation *****/ - sprintf (Gbl.Message,Txt_Do_you_want_to_confirm_the_ID_X, - Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); - Lay_ShowAlert (Lay_INFO,Gbl.Message); + switch (ReqConfOrConfID) + { + case ID_REQUEST_CONFIRM_ID: // Ask if confirm ID + /***** Ask for confirmation *****/ + sprintf (Gbl.Message,Txt_Do_you_want_to_confirm_the_ID_X, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + Lay_ShowAlert (Lay_INFO,Gbl.Message); - /***** Put button to confirm ID *****/ - ID_PutButtonToConfirmID (&Gbl.Usrs.Other.UsrDat,NumIDFound); + /***** Put button to confirm ID *****/ + ID_PutButtonToConfirmID (&Gbl.Usrs.Other.UsrDat,NumIDFound); + break; + case ID_CONFIRM_ID: // Confirm ID + /***** Mark this ID as confirmed *****/ + ID_ConfirmUsrID (&Gbl.Usrs.Other.UsrDat, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].Confirmed = true; + + /***** Write success message *****/ + sprintf (Gbl.Message,Txt_The_ID_X_has_been_confirmed, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + break; + } } } else // User's ID not found @@ -976,26 +1020,17 @@ void ID_RequestConfirmOtherUsrID (void) Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); } -/*****************************************************************************/ -/************************ Confirm another user's ID **************************/ -/*****************************************************************************/ - -void ID_ConfirmOtherUsrID (void) - { - Lay_ShowAlert (Lay_SUCCESS,"Confirmado"); // TODO: Need translation!!!! - } - /*****************************************************************************/ /*********************** Set a user's ID as confirmed ************************/ /*****************************************************************************/ -void ID_ConfirmUsrID (long UsrCod,const char *UsrID) +void ID_ConfirmUsrID (const struct UsrData *UsrDat,const char *UsrID) { char Query[256+ID_MAX_LENGTH_USR_ID]; - /***** Update my nickname in database *****/ + /***** Update database *****/ sprintf (Query,"UPDATE usr_IDs SET Confirmed='Y'" " WHERE UsrCod='%ld' AND UsrID='%s' AND Confirmed<>'Y'", - UsrCod,UsrID); + UsrDat->UsrCod,UsrID); DB_QueryINSERT (Query,"can not confirm a user's ID"); } diff --git a/swad_ID.h b/swad_ID.h index eb87ad818..be7b37b9d 100644 --- a/swad_ID.h +++ b/swad_ID.h @@ -76,6 +76,6 @@ void ID_NewOtherUsrID (void); void ID_RequestConfirmOtherUsrID (void); void ID_ConfirmOtherUsrID (void); -void ID_ConfirmUsrID (long UsrCod,const char *UsrID); +void ID_ConfirmUsrID (const struct UsrData *UsrDat,const char *UsrID); #endif diff --git a/swad_changelog.h b/swad_changelog.h index 50b77ae5c..358197659 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -134,13 +134,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.203.6 (2016-04-24)" -#define CSS_FILE "swad15.203.css" +#define Log_PLATFORM_VERSION "SWAD 15.204 (2016-04-25)" +#define CSS_FILE "swad15.204.css" #define JS_FILE "swad15.197.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 15.204: Apr 25, 2016 New form to confirm another user's ID. (201326 lines) Version 15.203.6: Apr 24, 2016 New form to confirm another user's ID. Not finished. (201295 lines) Version 15.203.5: Apr 24, 2016 New form to confirm another user's ID. Not finished. (201230 lines) Version 15.203.4: Apr 23, 2016 New form to confirm another user's ID. Not finished. (201140 lines) diff --git a/swad_enrollment.c b/swad_enrollment.c index 8a54fbcef..65ba13845 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -3367,7 +3367,7 @@ static void Enr_ReqRemOrRemUsrFromCrs (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr) // An administrator can remove anyone ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod); ICanRemove = (Gbl.Usrs.Me.LoggedRole == Rol_STUDENT ? ItsMe : - (Gbl.Usrs.Me.LoggedRole >= Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB)); + (Gbl.Usrs.Me.LoggedRole >= Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB)); if (ICanRemove) switch (ReqDelOrDelUsr) { diff --git a/swad_import.c b/swad_import.c index 90b3acff9..328b5f659 100644 --- a/swad_import.c +++ b/swad_import.c @@ -227,7 +227,7 @@ void Imp_ImportStdsFromAnImpGrp (long ImpGrpCod,struct ListCodGrps *LstGrps,unsi Grp_RegisterUsrIntoGroups (&UsrDat,LstGrps); // Register student in the selected groups /* Confirm user's ID */ - ID_ConfirmUsrID (UsrDat.UsrCod,ImpStd.ExternalUsrID); + ID_ConfirmUsrID (&UsrDat,ImpStd.ExternalUsrID); (*NumUsrsRegistered)++; } diff --git a/swad_user.c b/swad_user.c index 38392d101..f0615c301 100644 --- a/swad_user.c +++ b/swad_user.c @@ -2258,7 +2258,7 @@ static bool Usr_ChkUsrAndGetUsrDataFromExternalLogin (void) Usr_FreeListUsrCods (&ListUsrCods); /* Mark user's ID as confirmed */ - ID_ConfirmUsrID (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Usrs.Me.UsrIdLogin); + ID_ConfirmUsrID (&Gbl.Usrs.Me.UsrDat,Gbl.Usrs.Me.UsrIdLogin); /* Get user's data */ Usr_GetAllUsrDataFromUsrCod (&Gbl.Usrs.Me.UsrDat);