From 86260646729efe863d62a9909acf98f678f079a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 16 Nov 2015 14:54:12 +0100 Subject: [PATCH] Version 15.39 --- swad_ID.c | 6 +- swad_account.c | 4 +- swad_action.c | 50 +++++-- swad_action.h | 56 +++++--- swad_changelog.h | 15 +- swad_enrollment.c | 3 +- swad_mail.c | 354 ++++++++++++++++++++++++++++++++++------------ swad_mail.h | 15 +- swad_text.c | 106 +++++++------- swad_user.c | 2 +- 10 files changed, 417 insertions(+), 194 deletions(-) diff --git a/swad_ID.c b/swad_ID.c index d073c52c4..1a95d994f 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -408,7 +408,7 @@ void ID_ShowFormOthIDs (void) Rec_ShowSharedUsrRecord (Rec_RECORD_LIST,&Gbl.Usrs.Other.UsrDat); /***** Form with the user's ID *****/ - fprintf (Gbl.F.Out,""); + fprintf (Gbl.F.Out,"
"); ID_ShowFormChangeUsrID (&Gbl.Usrs.Other.UsrDat, (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod)); // It's me? fprintf (Gbl.F.Out,"
"); @@ -462,7 +462,7 @@ void ID_ShowFormChangeUsrID (const struct UsrData *UsrDat,bool ItsMe) { /* Form to remove user's ID */ if (ItsMe) - Act_FormStart (ActRemIDMe); + Act_FormStart (ActRemID_Me); else { Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActRemID_Std : @@ -684,7 +684,7 @@ void ID_NewOtherUsrID (void) /***** Get other user's code from form and get user's data *****/ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) { - /***** Remove user's ID *****/ + /***** New user's ID *****/ ID_NewUsrID (&Gbl.Usrs.Other.UsrDat, (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod)); // It's me? diff --git a/swad_account.c b/swad_account.c index 1f077146d..17e3478d9 100644 --- a/swad_account.c +++ b/swad_account.c @@ -194,7 +194,7 @@ void Acc_ShowFormChangeMyAccount (void) /***** Get current user's nickname and e-mail address It's necessary because current nickname or e-mail could be just updated *****/ Nck_GetNicknameFromUsrCod (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Usrs.Me.UsrDat.Nickname); - Mai_GetEmailFromUsrCod (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Usrs.Me.UsrDat.Email,&(Gbl.Usrs.Me.UsrDat.EmailConfirmed)); + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Me.UsrDat); /***** Check nickname and e-mail *****/ if (!Gbl.Usrs.Me.UsrDat.Nickname[0]) @@ -221,7 +221,7 @@ void Acc_ShowFormChangeMyAccount (void) Acc_PrintAccountSeparator (); /***** E-mail *****/ - Mai_ShowFormChangeUsrEmail (); + Mai_ShowFormChangeUsrEmail (&Gbl.Usrs.Me.UsrDat,true); /***** Separator *****/ Acc_PrintAccountSeparator (); diff --git a/swad_action.c b/swad_action.c index 8d0197e72..cef4d266d 100644 --- a/swad_action.c +++ b/swad_action.c @@ -980,6 +980,17 @@ Users: 813. ActChgPwdOth Change the password of another user 814. ActChgPwdStd Change the password of another user 815. ActChgPwdTch Change the password of another user + +------> 801. ActFrmMaiOth Show form to the change of the e-mail of another user +------> 802. ActFrmMaiStd Show form to the change of the e-mail of another user +------> 803. ActFrmMaiTch Show form to the change of the e-mail of another user +------> 804. ActRemMaiOth Remove one of the e-mail of another user +------> 805. ActRemMaiStd Remove one of the e-mail of another user +------> 806. ActRemMaiTch Remove one of the e-mail of another user +------> 807. ActNewMaiOth Create a new user's e-mail for another user +------> 808. ActNewMaiStd Create a new user's e-mail for another user +------> 809. ActNewMaiTch Create a new user's e-mail for another user + 816. ActRemStdCrs Remove a student from the current course 817. ActRemTchCrs Remove a teacher from the current course 818. ActRemUsrGbl Eliminate completely a user from the platform @@ -1224,12 +1235,12 @@ Profile: 1047. ActChgMyRol Change type of logged user 1048. ActCreUsrAcc Create new user account - 1049. ActRemIDMe Remove one of my user's IDs + 1049. ActRemID_Me Remove one of my user's IDs 1050. ActNewIDMe Create a new user's ID for me 1051. ActRemOldNic Remove one of my old nicknames 1052. ActChgNic Change my nickname - 1053. ActRemOldMai Remove one of my old e-mails - 1054. ActChgMai Change my e-mail address + 1053. ActRemMaiMe Remove one of my old e-mails + 1054. ActNewMaiMe Change my e-mail address 1055. ActCnfMai Confirm e-mail address 1056. ActFrmChgMyPwd Show form to the change of the password 1057. ActChgPwd Change the password @@ -2401,11 +2412,9 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActFrmIDsOth */{1447,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_ShowFormOthIDs ,NULL}, /* ActFrmIDsStd */{1448,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_ShowFormOthIDs ,NULL}, /* ActFrmIDsTch */{1449,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_ShowFormOthIDs ,NULL}, - /* ActRemID_Oth */{1450,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_RemoveOtherUsrID ,NULL}, /* ActRemID_Std */{1451,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_RemoveOtherUsrID ,NULL}, /* ActRemID_Tch */{1452,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_RemoveOtherUsrID ,NULL}, - /* ActNewID_Oth */{1453,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_NewOtherUsrID ,NULL}, /* ActNewID_Std */{1454,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_NewOtherUsrID ,NULL}, /* ActNewID_Tch */{1455,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_NewOtherUsrID ,NULL}, @@ -2417,6 +2426,16 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActChgPwdStd */{1468,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pwd_UpdateOtherPwd1 ,Pwd_UpdateOtherPwd2 ,NULL}, /* ActChgPwdTch */{1469,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pwd_UpdateOtherPwd1 ,Pwd_UpdateOtherPwd2 ,NULL}, + /* ActFrmMaiOth */{1475,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_ShowFormOthEmail ,NULL}, + /* ActFrmMaiStd */{1476,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_ShowFormOthEmail ,NULL}, + /* ActFrmMaiTch */{1477,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_ShowFormOthEmail ,NULL}, + /* ActRemMaiOth */{1478,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_RemoveOtherUsrEmail ,NULL}, + /* ActRemMaiStd */{1479,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_RemoveOtherUsrEmail ,NULL}, + /* ActRemMaiTch */{1480,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_RemoveOtherUsrEmail ,NULL}, + /* ActNewMaiOth */{1481,-1,TabUsr,ActLstOth ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_NewOtherUsrEmail ,NULL}, + /* ActNewMaiStd */{1482,-1,TabUsr,ActLstStd ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_NewOtherUsrEmail ,NULL}, + /* ActNewMaiTch */{1483,-1,TabUsr,ActLstTch ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_NewOtherUsrEmail ,NULL}, + /* ActRemStdCrs */{1462,-1,TabUsr,ActLstStd ,0x1F8,0x1E0,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemUsrFromCrs ,NULL}, /* ActRemTchCrs */{1463,-1,TabUsr,ActLstTch ,0x1F0,0x1E0,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemUsrFromCrs ,NULL}, @@ -2693,14 +2712,14 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActCreUsrAcc */{1163,-1,TabPrf,ActFrmUsrAcc ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Acc_AfterCreationNewAccount ,NULL}, - /* ActRemIDMe */{1147,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_RemoveMyUsrID ,NULL}, + /* ActRemID_Me */{1147,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_RemoveMyUsrID ,NULL}, /* ActNewIDMe */{1148,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,ID_NewMyUsrID ,NULL}, /* ActRemOldNic */{1089,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Nck_RemoveNick ,NULL}, /* ActChgNic */{ 37,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Nck_UpdateNick ,NULL}, - /* ActRemOldMai */{1090,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_RemoveEmail ,NULL}, - /* ActChgMai */{1088,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_UpdateEmail ,NULL}, + /* ActRemMaiMe */{1090,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_RemoveMyUsrEmail ,NULL}, + /* ActNewMaiMe */{1088,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,May_NewMyUsrEmail ,NULL}, /* ActCnfMai */{1091,-1,TabPrf,ActFrmUsrAcc ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_ConfirmEmail ,NULL}, /* ActFrmChgMyPwd */{ 34,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pwd_ShowFormChgPwd ,NULL}, @@ -3860,9 +3879,9 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActSeeOneTstExaMe, // #1085 ActReqDatSeeMrkCrs, // #1086 ActReqDatSeeMrkGrp, // #1087 - ActChgMai, // #1088 + ActNewMaiMe, // #1088 ActRemOldNic, // #1089 - ActRemOldMai, // #1090 + ActRemMaiMe, // #1090 ActCnfMai, // #1091 ActChgIco, // #1092 ActRchTxtEdiCrsInf, // #1093 @@ -3919,7 +3938,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActChgBanImg, // #1144 ActClkBan, // #1145 ActMrkNtfSee, // #1146 - ActRemIDMe, // #1147 + ActRemID_Me, // #1147 ActNewIDMe, // #1148 ActSeeDegInf, // #1149 ActPrnDegInf, // #1150 @@ -4250,6 +4269,15 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActReqRemNot, // #1472 ActSeeLstMyAtt, // #1473 ActPrnLstMyAtt, // #1474 + ActFrmMaiOth, // #1475 + ActFrmMaiStd, // #1476 + ActFrmMaiTch, // #1477 + ActRemMaiOth, // #1478 + ActRemMaiStd, // #1479 + ActRemMaiTch, // #1480 + ActNewMaiOth, // #1481 + ActNewMaiStd, // #1482 + ActNewMaiTch, // #1483 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 30c201c03..fa37a709b 100644 --- a/swad_action.h +++ b/swad_action.h @@ -70,9 +70,9 @@ typedef enum typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+145+171+27+79) +#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+154+171+27+79) -#define Act_MAX_ACTION_COD 1474 +#define Act_MAX_ACTION_COD 1483 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 @@ -1009,29 +1009,39 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica #define ActChgPwdOth (ActChgNumRowFooGrp+125) #define ActChgPwdStd (ActChgNumRowFooGrp+126) #define ActChgPwdTch (ActChgNumRowFooGrp+127) -#define ActRemStdCrs (ActChgNumRowFooGrp+128) -#define ActRemTchCrs (ActChgNumRowFooGrp+129) -#define ActRemUsrGbl (ActChgNumRowFooGrp+130) +#define ActFrmMaiOth (ActChgNumRowFooGrp+128) +#define ActFrmMaiStd (ActChgNumRowFooGrp+129) +#define ActFrmMaiTch (ActChgNumRowFooGrp+130) +#define ActRemMaiOth (ActChgNumRowFooGrp+131) +#define ActRemMaiStd (ActChgNumRowFooGrp+132) +#define ActRemMaiTch (ActChgNumRowFooGrp+133) +#define ActNewMaiOth (ActChgNumRowFooGrp+134) +#define ActNewMaiStd (ActChgNumRowFooGrp+135) +#define ActNewMaiTch (ActChgNumRowFooGrp+136) -#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+131) -#define ActRemAllStdCrs (ActChgNumRowFooGrp+132) +#define ActRemStdCrs (ActChgNumRowFooGrp+137) +#define ActRemTchCrs (ActChgNumRowFooGrp+138) +#define ActRemUsrGbl (ActChgNumRowFooGrp+139) -#define ActReqRemOldUsr (ActChgNumRowFooGrp+133) -#define ActRemOldUsr (ActChgNumRowFooGrp+134) +#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+140) +#define ActRemAllStdCrs (ActChgNumRowFooGrp+141) -#define ActLstClk (ActChgNumRowFooGrp+135) +#define ActReqRemOldUsr (ActChgNumRowFooGrp+142) +#define ActRemOldUsr (ActChgNumRowFooGrp+143) -#define ActSeePubPrf (ActChgNumRowFooGrp+136) -#define ActCal1stClkTim (ActChgNumRowFooGrp+137) -#define ActCalNumClk (ActChgNumRowFooGrp+138) -#define ActCalNumFilVie (ActChgNumRowFooGrp+139) -#define ActCalNumForPst (ActChgNumRowFooGrp+140) -#define ActCalNumMsgSnt (ActChgNumRowFooGrp+141) +#define ActLstClk (ActChgNumRowFooGrp+144) -#define ActFolUsr (ActChgNumRowFooGrp+142) -#define ActUnfUsr (ActChgNumRowFooGrp+143) -#define ActSeeFlg (ActChgNumRowFooGrp+144) -#define ActSeeFlr (ActChgNumRowFooGrp+145) +#define ActSeePubPrf (ActChgNumRowFooGrp+145) +#define ActCal1stClkTim (ActChgNumRowFooGrp+146) +#define ActCalNumClk (ActChgNumRowFooGrp+147) +#define ActCalNumFilVie (ActChgNumRowFooGrp+148) +#define ActCalNumForPst (ActChgNumRowFooGrp+149) +#define ActCalNumMsgSnt (ActChgNumRowFooGrp+150) + +#define ActFolUsr (ActChgNumRowFooGrp+151) +#define ActUnfUsr (ActChgNumRowFooGrp+152) +#define ActSeeFlg (ActChgNumRowFooGrp+153) +#define ActSeeFlr (ActChgNumRowFooGrp+154) /*****************************************************************************/ /******************************* Messages tab ********************************/ @@ -1266,12 +1276,12 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica #define ActSndNewPwd (ActSeeAllStaCrs+15) #define ActChgMyRol (ActSeeAllStaCrs+16) #define ActCreUsrAcc (ActSeeAllStaCrs+17) -#define ActRemIDMe (ActSeeAllStaCrs+18) +#define ActRemID_Me (ActSeeAllStaCrs+18) #define ActNewIDMe (ActSeeAllStaCrs+19) #define ActRemOldNic (ActSeeAllStaCrs+20) #define ActChgNic (ActSeeAllStaCrs+21) -#define ActRemOldMai (ActSeeAllStaCrs+22) -#define ActChgMai (ActSeeAllStaCrs+23) +#define ActRemMaiMe (ActSeeAllStaCrs+22) +#define ActNewMaiMe (ActSeeAllStaCrs+23) #define ActCnfMai (ActSeeAllStaCrs+24) #define ActFrmChgMyPwd (ActSeeAllStaCrs+25) #define ActChgPwd (ActSeeAllStaCrs+26) diff --git a/swad_changelog.h b/swad_changelog.h index 52228e7ce..ade131c7d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -107,16 +107,29 @@ // TODO: Show message indicating that mail could be in SPAM folder // TODO: Remove email address for recipients rejected (mailbox unavailable) // TODO: List institution and centre admins +// TODO: List of degrees administrated by a degree admin should be ordered by name /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.38.3 (2015/11/15)" +#define Log_PLATFORM_VERSION "SWAD 15.39 (2015/11/16)" // 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.39: Nov 16, 2015 Administrators can edit another user' e-mails. (187268 lines) + 9 changes necessary in database: +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1475','es','N','Solicitar edición dir. correo invitado'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1476','es','N','Solicitar edición dir. correo estudiante'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1477','es','N','Solicitar edición dir. correo profesor'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1478','es','N','Eliminar dir. correo invitado'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1479','es','N','Eliminar dir. correo estudiante'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1480','es','N','Eliminar dir. correo profesor'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1481','es','N','Cambiar dir. correo invitado'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1482','es','N','Cambiar dir. correo estudiante'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1483','es','N','Cambiar dir. correo profesor'); + Version 15.38.3: Nov 15, 2015 Changes in listing of places. (187073 lines) Version 15.38.2: Nov 15, 2015 Fixed bug in user's privacy preferences. (187071 lines) Version 15.38.1: Nov 14, 2015 Changes in permission to query the whole range of dates in stats, suggested by Francisco Ocaña Lara. (187073 lines) diff --git a/swad_enrollment.c b/swad_enrollment.c index e4cd993b1..ba42d066f 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -3000,8 +3000,9 @@ static void Enr_ShowFormToEditOtherUsr (void) fprintf (Gbl.F.Out,"
"); if (Pwd_CheckIfICanChangeOtherUsrPassword (Gbl.Usrs.Other.UsrDat.UsrCod)) { - ID_PutLinkToChangeUsrIDs (); // Put link (form) to change user's IDs Pwd_PutLinkToChangeOtherUsrPassword (); // Put link (form) to change user's password + Mai_PutLinkToChangeOtherUsrEmail (); // Put link (form) to change user's e-mail + ID_PutLinkToChangeUsrIDs (); // Put link (form) to change user's IDs } Pho_PutLinkToChangeOtherUsrPhoto (); // Put link (form) to change user's photo fprintf (Gbl.F.Out,"
"); diff --git a/swad_mail.c b/swad_mail.c index bd703a843..358c85f45 100644 --- a/swad_mail.c +++ b/swad_mail.c @@ -75,7 +75,9 @@ static void Mai_PutFormToCreateMailDomain (void); static void Mai_PutHeadMailDomains (void); static void Mai_CreateMailDomain (struct Mail *Mai); -static void Mai_RemoveEmailFromDB (const char *Email); +static void Mai_RemoveEmail (const struct UsrData *UsrDat); +static void Mai_RemoveEmailFromDB (long UsrCod,const char *Email); +static void Mai_NewUsrEmail (struct UsrData *UsrDat,bool ItsMe); static void Mai_InsertMailKey (const char *Email,const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY+1]); /*****************************************************************************/ @@ -825,7 +827,7 @@ bool Mai_CheckIfEmailIsValid (const char *Email) /********** Get e-mail address of a user from his/her user's code ************/ /*****************************************************************************/ -bool Mai_GetEmailFromUsrCod (long UsrCod,char *Email,bool *Confirmed) +bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat) { char Query[256]; MYSQL_RES *mysql_res; @@ -836,13 +838,13 @@ bool Mai_GetEmailFromUsrCod (long UsrCod,char *Email,bool *Confirmed) /***** Get current (last updated) user's nickname from database *****/ sprintf (Query,"SELECT E_mail,Confirmed FROM usr_emails" " WHERE UsrCod='%ld' ORDER BY CreatTime DESC LIMIT 1", - UsrCod); + UsrDat->UsrCod); NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get e-mail address"); if (NumRows == 0) { - *Email = '\0'; - *Confirmed = false; + UsrDat->Email[0] = '\0'; + UsrDat->EmailConfirmed = false; Found = false; } else @@ -850,9 +852,9 @@ bool Mai_GetEmailFromUsrCod (long UsrCod,char *Email,bool *Confirmed) row = mysql_fetch_row (mysql_res); /* Get e-mail */ - strcpy (Email,row[0]); + strcpy (UsrDat->Email,row[0]); - *Confirmed = (Str_ConvertToUpperLetter (row[1][0]) == 'Y'); + UsrDat->EmailConfirmed = (Str_ConvertToUpperLetter (row[1][0]) == 'Y'); Found = true; } @@ -907,11 +909,67 @@ long Mai_GetUsrCodFromEmail (const char *Email) return UsrCod; } +/*****************************************************************************/ +/********** Put a link to the action used to change user's e-mail ************/ +/*****************************************************************************/ + +void Mai_PutLinkToChangeOtherUsrEmail (void) + { + extern const char *Txt_Change_email; + + /***** Link for changing the password *****/ + if (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me + Act_PutContextualLink (ActFrmUsrAcc,NULL, + "msg",Txt_Change_email); + else // Not me + Act_PutContextualLink ( Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB == Rol_STUDENT ? ActFrmMaiStd : + (Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB == Rol_TEACHER ? ActFrmMaiTch : + ActFrmMaiOth), + Usr_PutParamOtherUsrCodEncrypted, + "msg",Txt_Change_email); + } + +/*****************************************************************************/ +/*********** Show form to the change the e-mail of another user **************/ +/*****************************************************************************/ + +void Mai_ShowFormOthEmail (void) + { + extern const char *Txt_Email; + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + + /***** Get user whose password must be changed *****/ + if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) + { + if (Pwd_CheckIfICanChangeOtherUsrPassword (Gbl.Usrs.Other.UsrDat.UsrCod)) + { + /***** Start frame *****/ + Lay_StartRoundFrame (NULL,Txt_Email); + + /***** Show user's record *****/ + Rec_ShowSharedUsrRecord (Rec_RECORD_LIST,&Gbl.Usrs.Other.UsrDat); + + /***** Form with the user's e-mail *****/ + fprintf (Gbl.F.Out,""); + Mai_ShowFormChangeUsrEmail (&Gbl.Usrs.Other.UsrDat, + (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod)); // It's me? + fprintf (Gbl.F.Out,"
"); + + /***** End frame *****/ + Lay_EndRoundFrame (); + } + else + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + } + else // User not found + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + } + /*****************************************************************************/ /*********************** Show form to change my e-mail ***********************/ /*****************************************************************************/ -void Mai_ShowFormChangeUsrEmail (void) +void Mai_ShowFormChangeUsrEmail (const struct UsrData *UsrDat,bool ItsMe) { extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *Txt_Current_email; @@ -934,7 +992,7 @@ void Mai_ShowFormChangeUsrEmail (void) sprintf (Query,"SELECT E_mail,Confirmed FROM usr_emails" " WHERE UsrCod='%ld'" " ORDER BY CreatTime DESC", - Gbl.Usrs.Me.UsrDat.UsrCod); + UsrDat->UsrCod); NumEmails = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get old e-mail addresses of a user"); /***** List my e-mails *****/ @@ -968,8 +1026,16 @@ void Mai_ShowFormChangeUsrEmail (void) "" "
"); - /* Form to remove old e-mail */ - Act_FormStart (ActRemOldMai); + /* Form to remove e-mail */ + if (ItsMe) + Act_FormStart (ActRemMaiMe); + else + { + Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActRemMaiStd : + (UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActRemMaiTch : + ActRemMaiOth)); // Guest, visitor or admin + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + } fprintf (Gbl.F.Out,"", row[0]); Lay_PutIconRemove (); @@ -993,20 +1059,24 @@ void Mai_ShowFormChangeUsrEmail (void) Gbl.Title,Gbl.Title); } - /* Link to QR code */ - // if (NumEmail == 1 && Gbl.Usrs.Me.UsrDat.Email[0] && Confirmed) - // QR_PutLinkToPrintMyQRCode (QR_EMAIL); - fprintf (Gbl.F.Out,"
"); - /* Form to change the email */ - if (NumEmail > 1 || !Confirmed) + /* Form to change user's e-mail */ + if (NumEmail > 1 || (ItsMe && !Confirmed)) { - Act_FormStart (ActChgMai); + if (ItsMe) + Act_FormStart (ActNewMaiMe); + else + { + Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActNewMaiStd : + (UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActNewMaiTch : + ActNewMaiOth)); // Guest, visitor or admin + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + } fprintf (Gbl.F.Out,"", row[0]); // E-mail - Lay_PutConfirmButtonInline (NumEmail == 1 ? Txt_Confirm_email : - Txt_Use_this_email); + Lay_PutConfirmButtonInline ((ItsMe && NumEmail == 1) ? Txt_Confirm_email : + Txt_Use_this_email); Act_FormEnd (); fprintf (Gbl.F.Out,""); } @@ -1024,127 +1094,223 @@ void Mai_ShowFormChangeUsrEmail (void) The_ClassForm[Gbl.Prefs.Theme], NumEmails ? Txt_New_email : // A new e-mail Txt_Email); // The first e-mail - Act_FormStart (ActChgMai); + if (ItsMe) + Act_FormStart (ActNewMaiMe); + else + { + Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActNewMaiStd : + (UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActNewMaiTch : + ActNewMaiOth)); // Guest, visitor or admin + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + } fprintf (Gbl.F.Out,"
" "" "
", Usr_MAX_BYTES_USR_EMAIL, Gbl.Usrs.Me.UsrDat.Email); - Lay_PutCreateButtonInline (NumEmails ? Txt_Change_email : // I already have an e-mail address - Txt_Save); // I have no e-mail address yet); + Lay_PutCreateButtonInline (NumEmails ? Txt_Change_email : // User already has an e-mail address + Txt_Save); // User has no e-mail address yet Act_FormEnd (); fprintf (Gbl.F.Out,"" ""); } /*****************************************************************************/ -/************************** Remove e-mail address ****************************/ +/******************* Remove one of my user's e-mails *************************/ /*****************************************************************************/ -void Mai_RemoveEmail (void) +void Mai_RemoveMyUsrEmail (void) { - extern const char *Txt_Email_X_removed; - extern const char *Txt_You_can_not_delete_your_current_email; - char Email[Usr_MAX_BYTES_USR_EMAIL+1]; + /***** Remove user's e-mail *****/ + Mai_RemoveEmail (&Gbl.Usrs.Me.UsrDat); - /***** Get new e-mail from form *****/ - Par_GetParToText ("Email",Email,Usr_MAX_BYTES_USR_EMAIL); - - if (strcasecmp (Email,Gbl.Usrs.Me.UsrDat.Email)) // Only if not my current e-mail - { - /***** Remove one of my old e-mail addresses *****/ - Mai_RemoveEmailFromDB (Email); - - /***** Show message *****/ - sprintf (Gbl.Message,Txt_Email_X_removed,Email); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); - } - else - Lay_ShowAlert (Lay_WARNING,Txt_You_can_not_delete_your_current_email); + /***** Update list of e-mails *****/ + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Me.UsrDat); /***** Show my account again *****/ Acc_ShowFormChangeMyAccount (); } +/*****************************************************************************/ +/**************** Remove one of the user's IDs of another user ***************/ +/*****************************************************************************/ + +void Mai_RemoveOtherUsrEmail (void) + { + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + + /***** Get other user's code from form and get user's data *****/ + if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) + { + /***** Remove user's e-mail *****/ + Mai_RemoveEmail (&Gbl.Usrs.Other.UsrDat); + + /***** Update list of e-mails *****/ + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Other.UsrDat); + + /***** Show user's record *****/ + Rec_ShowSharedUsrRecord (Rec_RECORD_LIST,&Gbl.Usrs.Other.UsrDat); + } + else // User not found + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + } + +/*****************************************************************************/ +/************************** Remove e-mail address ****************************/ +/*****************************************************************************/ + +static void Mai_RemoveEmail (const struct UsrData *UsrDat) + { + extern const char *Txt_Email_X_removed; + extern const char *Txt_You_can_not_delete_the_current_email; + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + char Email[Usr_MAX_BYTES_USR_EMAIL+1]; + + if (Pwd_CheckIfICanChangeOtherUsrPassword (UsrDat->UsrCod)) + { + /***** Get new e-mail from form *****/ + Par_GetParToText ("Email",Email,Usr_MAX_BYTES_USR_EMAIL); + + if (strcasecmp (Email,UsrDat->Email)) // Only if not user's current e-mail + { + /***** Remove one of user's old e-mail addresses *****/ + Mai_RemoveEmailFromDB (UsrDat->UsrCod,Email); + + /***** Show message *****/ + sprintf (Gbl.Message,Txt_Email_X_removed,Email); + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + } + else + Lay_ShowAlert (Lay_WARNING,Txt_You_can_not_delete_the_current_email); + } + else + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + } + /*****************************************************************************/ /*************** Remove an old e-mail address from database ******************/ /*****************************************************************************/ -static void Mai_RemoveEmailFromDB (const char *Email) +static void Mai_RemoveEmailFromDB (long UsrCod,const char *Email) { char Query[1024]; /***** Remove an old e-mail address *****/ sprintf (Query,"DELETE FROM usr_emails" " WHERE UsrCod='%ld' AND E_mail='%s'", - Gbl.Usrs.Me.UsrDat.UsrCod,Email); + UsrCod,Email); DB_QueryREPLACE (Query,"can not remove an old e-mail address"); } +/*****************************************************************************/ +/************************* New user's e-mail for me **************************/ +/*****************************************************************************/ + +void May_NewMyUsrEmail (void) + { + /***** Remove user's e-mail *****/ + Mai_NewUsrEmail (&Gbl.Usrs.Me.UsrDat,true); // It's me + + /***** Update list of e-mails *****/ + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Me.UsrDat); + + /***** Show my account again *****/ + Acc_ShowFormChangeMyAccount (); + } + +/*****************************************************************************/ +/******************** New user's e-mail for another user *********************/ +/*****************************************************************************/ + +void Mai_NewOtherUsrEmail (void) + { + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; + + /***** Get other user's code from form and get user's data *****/ + if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) + { + /***** New user's ID *****/ + Mai_NewUsrEmail (&Gbl.Usrs.Other.UsrDat, + (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod)); // It's me? + + /***** Update list of e-mails *****/ + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Other.UsrDat); + + /***** Show user's record *****/ + Rec_ShowSharedUsrRecord (Rec_RECORD_LIST,&Gbl.Usrs.Other.UsrDat); + } + else // User not found + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); + } + /*****************************************************************************/ /************************* Update my e-mail address **************************/ /*****************************************************************************/ -void Mai_UpdateEmail (void) +static void Mai_NewUsrEmail (struct UsrData *UsrDat,bool ItsMe) { - extern const char *Txt_The_email_address_X_matches_the_one_you_had_previously_registered; - extern const char *Txt_Your_email_address_X_has_been_registered_successfully; + extern const char *Txt_The_email_address_X_matches_one_previously_registered; + extern const char *Txt_The_email_address_X_has_been_registered_successfully; extern const char *Txt_A_message_has_been_sent_to_email_address_X_to_confirm_that_address; extern const char *Txt_The_email_address_X_had_been_registered_by_another_user; extern const char *Txt_The_email_address_entered_X_is_not_valid; + extern const char *Txt_User_not_found_or_you_do_not_have_permission_; char NewEmail[Usr_MAX_BYTES_USR_EMAIL+1]; - /***** Get new e-mail from form *****/ - Par_GetParToText ("NewEmail",NewEmail,Usr_MAX_BYTES_USR_EMAIL); - - if (Mai_CheckIfEmailIsValid (NewEmail)) // New e-mail is valid + if (Pwd_CheckIfICanChangeOtherUsrPassword (UsrDat->UsrCod)) { - /***** Check if new e-mail exists in database *****/ - if (Gbl.Usrs.Me.UsrDat.EmailConfirmed && - !strcmp (Gbl.Usrs.Me.UsrDat.Email,NewEmail)) // My current confirmed email match exactly the new email - { - sprintf (Gbl.Message,Txt_The_email_address_X_matches_the_one_you_had_previously_registered, - NewEmail); - Lay_ShowAlert (Lay_WARNING,Gbl.Message); - } - else + /***** Get new e-mail from form *****/ + Par_GetParToText ("NewEmail",NewEmail,Usr_MAX_BYTES_USR_EMAIL); + + if (Mai_CheckIfEmailIsValid (NewEmail)) // New e-mail is valid { - if (Mai_UpdateEmailInDB (&Gbl.Usrs.Me.UsrDat,NewEmail)) + /***** Check if new e-mail exists in database *****/ + if (UsrDat->EmailConfirmed && + !strcmp (UsrDat->Email,NewEmail)) // User's current confirmed email match exactly the new email { - /* E-mail updated sucessfully */ - strcpy (Gbl.Usrs.Me.UsrDat.Email,NewEmail); - Gbl.Usrs.Me.UsrDat.EmailConfirmed = false; - - sprintf (Gbl.Message,Txt_Your_email_address_X_has_been_registered_successfully, + sprintf (Gbl.Message,Txt_The_email_address_X_matches_one_previously_registered, NewEmail); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); - - /* Send message via email to confirm the new email address */ - if (Mai_SendMailMsgToConfirmEmail ()) - { - sprintf (Gbl.Message,Txt_A_message_has_been_sent_to_email_address_X_to_confirm_that_address, - Gbl.Usrs.Me.UsrDat.Email); - Lay_ShowAlert (Lay_INFO,Gbl.Message); - } - } - else - { - sprintf (Gbl.Message,Txt_The_email_address_X_had_been_registered_by_another_user, - NewEmail); Lay_ShowAlert (Lay_WARNING,Gbl.Message); } - } - } - else // New e-mail is not valid - { - sprintf (Gbl.Message,Txt_The_email_address_entered_X_is_not_valid, - NewEmail); - Lay_ShowAlert (Lay_WARNING,Gbl.Message); - } + else + { + if (Mai_UpdateEmailInDB (UsrDat,NewEmail)) + { + /* E-mail updated sucessfully */ + strcpy (UsrDat->Email,NewEmail); + UsrDat->EmailConfirmed = false; - /***** Show my account again *****/ - Acc_ShowFormChangeMyAccount (); + sprintf (Gbl.Message,Txt_The_email_address_X_has_been_registered_successfully, + NewEmail); + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + + if (ItsMe) + /* Send message via email to confirm the new email address */ + if (Mai_SendMailMsgToConfirmEmail ()) + { + sprintf (Gbl.Message,Txt_A_message_has_been_sent_to_email_address_X_to_confirm_that_address, + Gbl.Usrs.Me.UsrDat.Email); + Lay_ShowAlert (Lay_INFO,Gbl.Message); + } + } + else + { + sprintf (Gbl.Message,Txt_The_email_address_X_had_been_registered_by_another_user, + NewEmail); + Lay_ShowAlert (Lay_WARNING,Gbl.Message); + } + } + } + else // New e-mail is not valid + { + sprintf (Gbl.Message,Txt_The_email_address_entered_X_is_not_valid, + NewEmail); + Lay_ShowAlert (Lay_WARNING,Gbl.Message); + } + } + else + Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_); } /*****************************************************************************/ @@ -1153,7 +1319,7 @@ void Mai_UpdateEmail (void) // Return true if e-mail is successfully updated // Return false if e-mail can not be updated beacuse it is registered by another user -bool Mai_UpdateEmailInDB (struct UsrData *UsrDat,const char *NewEmail) +bool Mai_UpdateEmailInDB (const struct UsrData *UsrDat,const char *NewEmail) { char Query[1024]; @@ -1161,20 +1327,20 @@ bool Mai_UpdateEmailInDB (struct UsrData *UsrDat,const char *NewEmail) sprintf (Query,"SELECT COUNT(*) FROM usr_emails" " WHERE E_mail='%s' AND Confirmed='Y'" " AND UsrCod<>'%ld'", - NewEmail,Gbl.Usrs.Me.UsrDat.UsrCod); + NewEmail,UsrDat->UsrCod); if (DB_QueryCOUNT (Query,"can not check if e-mail already existed")) // An e-mail of another user is the same that my e-mail return false; // Don't update /***** Delete e-mail (not confirmed) for other users *****/ sprintf (Query,"DELETE FROM pending_emails" " WHERE E_mail='%s' AND UsrCod<>'%ld'", - NewEmail,Gbl.Usrs.Me.UsrDat.UsrCod); + NewEmail,UsrDat->UsrCod); DB_QueryDELETE (Query,"can not remove pending e-mail for other users"); sprintf (Query,"DELETE FROM usr_emails" " WHERE E_mail='%s' AND Confirmed='N'" " AND UsrCod<>'%ld'", - NewEmail,Gbl.Usrs.Me.UsrDat.UsrCod); + NewEmail,UsrDat->UsrCod); DB_QueryDELETE (Query,"can not remove not confirmed e-mail for other users"); /***** Update e-mail in database *****/ diff --git a/swad_mail.h b/swad_mail.h index d4b9339df..0c338fa7f 100644 --- a/swad_mail.h +++ b/swad_mail.h @@ -67,12 +67,17 @@ void Mai_RenameMailDomainFull (void); void Mai_RecFormNewMailDomain (void); bool Mai_CheckIfEmailIsValid (const char *Email); -bool Mai_GetEmailFromUsrCod (long UsrCod,char *Email,bool *Confirmed); +bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat); long Mai_GetUsrCodFromEmail (const char *Email); -void Mai_ShowFormChangeUsrEmail (void); -void Mai_RemoveEmail (void); -void Mai_UpdateEmail (void); -bool Mai_UpdateEmailInDB (struct UsrData *UsrDat,const char *NewEmail); + +void Mai_PutLinkToChangeOtherUsrEmail (void); +void Mai_ShowFormOthEmail (void); +void Mai_ShowFormChangeUsrEmail (const struct UsrData *UsrDat,bool ItsMe); +void Mai_RemoveMyUsrEmail (void); +void Mai_RemoveOtherUsrEmail (void); +void May_NewMyUsrEmail (void); +void Mai_NewOtherUsrEmail (void); +bool Mai_UpdateEmailInDB (const struct UsrData *UsrDat,const char *NewEmail); bool Mai_SendMailMsgToConfirmEmail (void); void Mai_ConfirmEmail (void); diff --git a/swad_text.c b/swad_text.c index 046ef0f3d..b3f254278 100644 --- a/swad_text.c +++ b/swad_text.c @@ -4100,17 +4100,17 @@ const char *Txt_Change_email = const char *Txt_Change_IDs = #if L==0 - "Canviar IDs (DNI/cèdulas)"; + "Canviar IDs"; #elif L==1 "Ausweis-Nr. ändern"; #elif L==2 "Change IDs"; #elif L==3 - "Cambiar ID (DNI/cédulas)"; + "Cambiar ID"; #elif L==4 "Changer IDs"; #elif L==5 - "Cambiar ID (DNI/cédulas)"; // Okoteve traducción + "Cambiar ID"; // Okoteve traducción #elif L==6 "Cambiare ID"; #elif L==7 @@ -39618,6 +39618,36 @@ const char *Txt_The_email_address_X_had_been_registered_by_another_user = // War " had been registered by another user."; // Necessita de tradução #endif +const char *Txt_The_email_address_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences +#if L==0 + "El correo %s" + " se ha registrado correctamente."; // Necessita traduccio +#elif L==1 + "The e-mail address %s" + " has been registered successfully."; // Need Übersetzung +#elif L==2 + "The e-mail address %s" + " has been registered successfully."; +#elif L==3 + "El correo %s" + " se ha registrado correctamente."; +#elif L==4 + "The e-mail address %s" + " has been registered successfully."; // Besoin de traduction +#elif L==5 + "El correo %s" + " se ha registrado correctamente."; // Okoteve traducción +#elif L==6 + "Il e-mail %s" + " è stato registrato con successo."; +#elif L==7 + "The e-mail address %s" + " has been registered successfully."; // Potrzebujesz tlumaczenie +#elif L==8 + "The e-mail address %s" + " has been registered successfully."; // Necessita de tradução +#endif + const char *Txt_The_email_address_has_not_been_confirmed = #if L==0 "La dirección de correo" @@ -39642,34 +39672,34 @@ const char *Txt_The_email_address_has_not_been_confirmed = "The email address has not been confirmed."; // Necessita de tradução #endif -const char *Txt_The_email_address_X_matches_the_one_you_had_previously_registered = // Warning: it is very important to include %s in the following sentences +const char *Txt_The_email_address_X_matches_one_previously_registered = // Warning: it is very important to include %s in the following sentences #if L==0 "La dirección de correo %s" - " coincide con la que ya tenía registrada previamente."; // Necessita traduccio + " coincide con una registrada previamente."; // Necessita traduccio #elif L==1 "The e-mail address %s" - " matches the one you had previously registered."; // Need Übersetzung + " matches one previously registered."; // Need Übersetzung #elif L==2 "The e-mail address %s" - " matches the one you had previously registered."; + " matches one previously registered."; #elif L==3 "La dirección de correo %s" - " coincide con la que ya tenía registrada previamente."; + " coincide con una registrada previamente."; #elif L==4 "The e-mail address %s" - " matches the one you had previously registered."; // Besoin de traduction + " matches one previously registered."; // Besoin de traduction #elif L==5 "La dirección de correo %s" - " coincide con la que ya tenía registrada previamente."; // Okoteve traducción + " coincide con una registrada previamente."; // Okoteve traducción #elif L==6 "Il e-mail %s" - " coincide con quellao che hai precedentemente registrato."; + " coincide con uno precedentemente registrato."; #elif L==7 "The e-mail address %s" - " matches the one you had previously registered."; // Potrzebujesz tlumaczenie + " matches one previously registered."; // Potrzebujesz tlumaczenie #elif L==8 "The e-mail address %s" - " matches the one you had previously registered."; // Necessita de tradução + " matches one previously registered."; // Necessita de tradução #endif const char *Txt_The_enrollment_of_students_into_groups_of_type_X_is_now_mandatory = // Warning: it is very important to include %s in the following sentences @@ -49131,25 +49161,25 @@ const char *Txt_You_can_not_create_links_here = "You can not create links here."; // Necessita de tradução #endif -const char *Txt_You_can_not_delete_your_current_email = +const char *Txt_You_can_not_delete_the_current_email = #if L==0 - "No puede eliminar su correo actual."; // Necessita traduccio + "No puede eliminar el correo actual."; // Necessita traduccio #elif L==1 - "You can not delete your current e-mail."; // Need Übersetzung + "You can not delete the current e-mail."; // Need Übersetzung #elif L==2 - "You can not delete your current e-mail."; + "You can not delete the current e-mail."; #elif L==3 - "No puede eliminar su correo actual."; + "No puede eliminar el correo actual."; #elif L==4 - "You can not delete your current e-mail."; // Besoin de traduction + "You can not delete the current e-mail."; // Besoin de traduction #elif L==5 - "No puede eliminar su correo actual."; // Okoteve traducción + "No puede eliminar el correo actual."; // Okoteve traducción #elif L==6 - "Non puoi cancellare il tuo e-mail attuale."; + "Non puoi cancellare il e-mail attuale."; #elif L==7 - "You can not delete your current e-mail."; // Potrzebujesz tlumaczenie + "You can not delete the current e-mail."; // Potrzebujesz tlumaczenie #elif L==8 - "You can not delete your current e-mail."; // Necessita de tradução + "You can not delete the current e-mail."; // Necessita de tradução #endif const char *Txt_You_can_not_delete_your_current_nickname = @@ -51949,36 +51979,6 @@ const char *Txt_Your_comment_has_been_updated = "O seu comentário foi atualizado."; #endif -const char *Txt_Your_email_address_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences -#if L==0 - "Su correo %s" - " se ha registrado correctamente."; // Necessita traduccio -#elif L==1 - "Your e-mail address %s" - " has been registered successfully."; // Need Übersetzung -#elif L==2 - "Your e-mail address %s" - " has been registered successfully."; -#elif L==3 - "Su correo %s" - " se ha registrado correctamente."; -#elif L==4 - "Your e-mail address %s" - " has been registered successfully."; // Besoin de traduction -#elif L==5 - "Su correo %s" - " se ha registrado correctamente."; // Okoteve traducción -#elif L==6 - "Il tuo e-mail %s" - " è stato registrato con successo."; -#elif L==7 - "Your e-mail address %s" - " has been registered successfully."; // Potrzebujesz tlumaczenie -#elif L==8 - "Your e-mail address %s" - " has been registered successfully."; // Necessita de tradução -#endif - const char *Txt_Your_language_has_changed_to_LANGUAGE = #if L==0 "El seu idioma ha canviat a català."; diff --git a/swad_user.c b/swad_user.c index c2ef3fa02..78fe658e8 100644 --- a/swad_user.c +++ b/swad_user.c @@ -559,7 +559,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat) Nck_GetNicknameFromUsrCod (UsrDat->UsrCod,UsrDat->Nickname); /***** Get e-mail *****/ - Mai_GetEmailFromUsrCod (UsrDat->UsrCod,UsrDat->Email,&(UsrDat->EmailConfirmed)); + Mai_GetEmailFromUsrCod (UsrDat); } /*****************************************************************************/