Version 16.2.5

This commit is contained in:
Antonio Cañas Vargas 2016-09-26 11:49:18 +02:00
parent e9a609b9eb
commit b368b60563
3 changed files with 147 additions and 140 deletions

View File

@ -68,7 +68,7 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void Acc_ShowFormCheckIfIHaveAccount (void);
static void Acc_ShowFormCheckIfIHaveAccount (const char *Title);
static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba,
const char *NewEmail);
static bool Acc_GetParamsNewAccount (char *NewNicknameWithoutArroba,
@ -114,14 +114,13 @@ void Acc_ShowFormAccount (void)
/* Links to log in and to change language */
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
Usr_PutLinkToLogin ();
Pwd_PutLinkToSendNewPasswd ();
Pre_PutLinkToChangeLanguage ();
fprintf (Gbl.F.Out,"</div>");
/**** Show form to check if I have an account *****/
Acc_ShowFormCheckIfIHaveAccount ();
/**** Show form to create a new account *****/
Acc_ShowFormRequestNewAccountWithParams ("","");
Acc_ShowFormCheckIfIHaveAccount ("Antes de crear una cuenta nueva"
" compruebe si ya le han inscrito con su ID"); // TODO: Need translation!!!
}
}
@ -129,13 +128,13 @@ void Acc_ShowFormAccount (void)
/***************** Show form to check if I have an account *******************/
/*****************************************************************************/
static void Acc_ShowFormCheckIfIHaveAccount (void)
static void Acc_ShowFormCheckIfIHaveAccount (const char *Title)
{
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_ID;
/***** Start frame *****/
Lay_StartRoundFrame (NULL,"Es posible que ya le hayan inscrito con su ID (DNI/c&eacute;dula)",NULL); // TODO: Need translation!!!
Lay_StartRoundFrame (NULL,Title,NULL);
/***** Form to request user's ID for possible account already created *****/
Act_FormStart (ActChkUsrAcc);
@ -160,7 +159,7 @@ static void Acc_ShowFormCheckIfIHaveAccount (void)
void Acc_CheckIfEmptyAccountExists (void)
{
extern const char *Txt_Name;
char NewID[ID_MAX_LENGTH_USR_ID+1];
char ID[ID_MAX_LENGTH_USR_ID+1];
unsigned NumUsrs;
unsigned NumUsr;
struct UsrData UsrDat;
@ -168,51 +167,52 @@ void Acc_CheckIfEmptyAccountExists (void)
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Links to other actions *****/
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
Usr_PutLinkToLogin ();
Pwd_PutLinkToSendNewPasswd ();
Pre_PutLinkToChangeLanguage ();
fprintf (Gbl.F.Out,"</div>");
/***** Get new user's ID from form *****/
Par_GetParToText ("ID",NewID,ID_MAX_LENGTH_USR_ID);
Par_GetParToText ("ID",ID,ID_MAX_LENGTH_USR_ID);
// Users' IDs are always stored internally in capitals and without leading zeros
Str_RemoveLeadingZeros (NewID);
Str_ConvertToUpperText (NewID);
Str_RemoveLeadingZeros (ID);
Str_ConvertToUpperText (ID);
/***** Check if there are users with this user's ID *****/
if (ID_CheckIfUsrIDIsValid (NewID))
if (ID_CheckIfUsrIDIsValid (ID))
{
sprintf (Query,"SELECT usr_data.UsrCod,usr_data.EncryptedUsrCod,"
"UPPER(usr_data.FirstName),"
"UPPER(usr_data.Surname1),"
"UPPER(usr_data.Surname2)"
sprintf (Query,"SELECT usr_IDs.UsrCod"
" FROM usr_IDs,usr_data"
" WHERE usr_IDs.UsrID='%s'"
" AND usr_IDs.UsrCod=usr_data.UsrCod"
" AND usr_data.Password=''",
NewID);
ID);
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's codes");
if (NumUsrs)
{
/***** Start frame and write message with number of accounts found *****/
if (NumUsrs == 1)
Lay_StartRoundFrameTable (NULL,5,"&iquest;Cree que usted es el siguiente usuario?"); // TODO: Need translation!!!
else
{
sprintf (Gbl.Title,"&iquest;Cree que usted es uno de los siguientes %u usuarios?",
NumUsrs);
Lay_StartRoundFrameTable (NULL,5,Gbl.Title); // TODO: Need translation!!!
}
Lay_StartRoundFrameTable (NULL,5,(NumUsrs == 1) ? "&iquest;Cree que usted es este usuario/a?" : // TODO: Need translation!!!
"&iquest;Cree que usted es uno de estos usuarios?"); // TODO: Need translation!!!
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat);
/***** List users found *****/
for (NumUsr = 1, Gbl.RowEvenOdd = 0;
NumUsr <= NumUsrs;
NumUsr++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd)
{
/***** Get user's data from query result *****/
row = mysql_fetch_row (mysql_res);
/* Get user's code */
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get encrypted user's code */
strncpy (UsrDat.EncryptedUsrCod,row[1],sizeof (UsrDat.EncryptedUsrCod) - 1);
UsrDat.EncryptedUsrCod[sizeof (UsrDat.EncryptedUsrCod) - 1] = '\0';
/* Get user's data */
Usr_GetAllUsrDataFromUsrCod (&UsrDat);
/***** Write number of user in the list *****/
fprintf (Gbl.F.Out,"<tr>"
@ -222,28 +222,19 @@ void Acc_CheckIfEmptyAccountExists (void)
"</td>",
Gbl.RowEvenOdd,NumUsr);
fprintf (Gbl.F.Out,"<td class=\"DAT_N LEFT_TOP COLOR%u\">%s: ",
Gbl.RowEvenOdd,Txt_Name);
if (row[2][0] ||
row[3][0] ||
row[4][0])
{
if (row[2][0])
fprintf (Gbl.F.Out,"%c.",row[2][0]);
if (row[3][0])
fprintf (Gbl.F.Out,"%c.",row[3][0]);
if (row[4][0])
fprintf (Gbl.F.Out,"%c.",row[4][0]);
}
else
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out,"</td>");
/***** Write user's name *****/
fprintf (Gbl.F.Out,"<td class=\"DAT_N LEFT_TOP COLOR%u\">"
"%s: %s"
"</td>",
Gbl.RowEvenOdd,Txt_Name,
UsrDat.FullName[0] ? UsrDat.FullName :
"?");
/* Button to login with this account */
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP COLOR%u\">",
Gbl.RowEvenOdd);
Act_FormStart (ActAutUsrNew);
Usr_PutParamUsrCodEncrypted (Gbl.Usrs.Me.UsrDat.EncryptedUsrCod);
Usr_PutParamUsrCodEncrypted (UsrDat.EncryptedUsrCod);
Lay_PutCreateButtonInline ("&iexcl;Soy yo!"); // TODO: Need translation!!!
Act_FormEnd ();
fprintf (Gbl.F.Out,"</td>"
@ -260,25 +251,39 @@ void Acc_CheckIfEmptyAccountExists (void)
"</tr>");
}
/***** Free memory used for user's data *****/
Usr_UsrDataDestructor (&UsrDat);
/***** End frame *****/
Lay_EndRoundFrameTable ();
}
else
{
sprintf (Gbl.Message,"No hay ninguna cuenta vac&iacute;a asociada a su ID %s.", // TODO: Need translation!!!
NewID);
sprintf (Gbl.Message,"No existe ninguna cuenta &quot;vac&iacute;a&quot;"
" (a&uacute;n no usada) asociada a su ID %s.<br />"
" Si cree que puede haber sido inscrito/a"
" con otro ID, compru&eacute;belo, por favor.", // TODO: Need translation!!!
ID);
Lay_ShowAlert (Lay_INFO,Gbl.Message);
/**** Show form to check if I have an account *****/
Acc_ShowFormCheckIfIHaveAccount ();
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/**** Show form to create a new account *****/
Acc_ShowFormRequestNewAccountWithParams ("","");
/**** Show form to check if I have an account *****/
Acc_ShowFormCheckIfIHaveAccount ("Comprobar otro ID"); // TODO: Need translation!!!
/**** Show form to create a new account *****/
Acc_ShowFormRequestNewAccountWithParams ("","");
}
else // ID not valid
{
/**** Show again form to check if I have an account *****/
Lay_ShowAlert (Lay_WARNING,"Escriba su ID (DNI/c&eacute;dula&hellip;).");
Acc_ShowFormCheckIfIHaveAccount ("Antes de crear una cuenta nueva"
" compruebe si ya le han inscrito con su ID"); // TODO: Need translation!!!
}
}
/*****************************************************************************/
@ -293,14 +298,12 @@ static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWith
extern const char *Txt_HELP_nickname;
extern const char *Txt_HELP_email;
extern const char *Txt_Email;
extern const char *Txt_New_on_PLATFORM_Sign_up;
extern const char *Txt_Create_account;
char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1];
/***** Form to enter some data of the new user *****/
Act_FormStart (ActCreUsrAcc);
sprintf (Gbl.Title,Txt_New_on_PLATFORM_Sign_up,Cfg_PLATFORM_SHORT_NAME);
Lay_StartRoundFrameTable (NULL,2,Gbl.Title);
Lay_StartRoundFrameTable (NULL,2,"Crear una nueva cuenta"); // TODO: Need translation!!!!
/***** Nickname *****/
if (NewNicknameWithoutArroba[0])

View File

@ -135,17 +135,21 @@
// TODO: FIX BUG: Passwords with % do not work
// TODO: Send a message to the user when rejecting a requesto for enrollment. Suggested by Javier Fernández Baldomero.
// TODO: Fix bug: database error when a not logged user searches users. "Database error: can not check if a user shares any course with you (Table 'swad.my_courses_tmp' doesn't exist).
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.2.4 (2016-09-22)"
#define Log_PLATFORM_VERSION "SWAD 16.2.5 (2016-09-26)"
#define CSS_FILE "swad15.229.css"
#define JS_FILE "swad15.238.1.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.2.5: Sep 26, 2016 Check if an account already exists. Not finished. (205019 lines)
Version 16.2.4: Sep 22, 2016 Check if an account already exists. Not finished. (205016 lines)
Version 16.2.3: Sep 22, 2016 Check if an account already exists. Not finished. (204984 lines)
Version 16.2.2: Sep 22, 2016 Fixed bug in photo visibility. (204951 lines)

View File

@ -940,7 +940,7 @@ const char *Txt_The_following_password_has_been_assigned_to_you_to_log_in_X_NO_H
#elif L==6
"Se le ha asignado la siguiente contraseña para entrar en %s: %s\n"
"Si desea activar esta nueva contraseña,"
" debe entrar en %s con su ID (DNI/c&eacute;dula), apodo o dirección de correo"
" debe entrar en %s con su ID (DNI/c&eacute;dula&hellip;), apodo o dirección de correo"
" y esta nueva contraseña antes de %u días."
" Una vez que haya entrado, puede cambiar la contraseña por otra.\n"
"Si no accede con esta nueva contraseña,"
@ -1552,11 +1552,11 @@ const char *Txt_A_user_can_not_have_more_than_X_IDs =
#elif L==3
"A user can not have more than %u IDs.";
#elif L==4
"Un usuario no puede tener m&aacute;s de %u ID (DNI/c&eacute;dulas).";
"Un usuario no puede tener m&aacute;s de %u ID (DNI/c&eacute;dulas&hellip;).";
#elif L==5
"Un utilisateur ne peut pas avoir plus de %u IDs.";
#elif L==6
"Un usuario no puede tener m&aacute;s de %u ID (DNI/c&eacute;dulas)."; // Okoteve traducción
"Un usuario no puede tener m&aacute;s de %u ID (DNI/c&eacute;dulas&hellip;)."; // Okoteve traducción
#elif L==7
"Un utente non pu&ograve; avere pi&ugrave; di %u ID.";
#elif L==8
@ -2581,11 +2581,11 @@ const char *Txt_Another_ID =
#elif L==3
"Another ID";
#elif L==4
"Otro ID (DNI/c&eacute;dula)";
"Otro ID (DNI/c&eacute;dula&hellip;)";
#elif L==5
"Un autre num&eacute;ro d'identit&eacute;";
#elif L==6
"Otro ID (DNI/c&eacute;dula)"; // Okoteve traducción
"Otro ID (DNI/c&eacute;dula&hellip;)"; // Okoteve traducción
#elif L==7
"Un'altra carta d'identit&agrave;";
#elif L==8
@ -9210,11 +9210,11 @@ const char *Txt_Do_you_want_to_confirm_the_ID_X = // Warning: it is very importa
#elif L==3
"Do you want to confirm the ID (identity number/passport) <strong>%s</strong>?";
#elif L==4
"&iquest;Desea confirmar el ID (DNI/c&eacute;dula) <strong>%s</strong>?";
"&iquest;Desea confirmar el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>?";
#elif L==5
"Voulez-vous confirmer l'ID <strong>%s</strong>?";
#elif L==6
"&iquest;Desea confirmar el ID (DNI/c&eacute;dula) <strong>%s</strong>?"; // Okoteve traducción
"&iquest;Desea confirmar el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>?"; // Okoteve traducción
#elif L==7
"Vuoi confermare l'ID <strong>%s</strong>?";
#elif L==8
@ -11968,7 +11968,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ =
" seleccionando la parte deseada de la tabla y guard&aacute;ndola como p&aacute;gina web.<br />"
" Una tabla puede tener <strong>varias filas de cabecera y varias filas de pie</strong>."
" Entre ellas debe haber <strong>una &uacute;nica fila para cada estudiante</strong>,"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula) del estudiante</strong>.<br />"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula&hellip;) del estudiante</strong>.<br />"
" Un estudiante ver&aacute; una tabla con las filas de cabecera,"
" seguidas por la fila con sus calificaciones,"
" y por las filas de pie."; // Necessita traduccio
@ -11994,7 +11994,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ =
" seleccionando la parte deseada de la tabla y guard&aacute;ndola como p&aacute;gina web.<br />"
" Una tabla puede tener <strong>varias filas de cabecera y varias filas de pie</strong>."
" Entre ellas debe haber <strong>una &uacute;nica fila para cada estudiante</strong>,"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula) del estudiante</strong>.<br />"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula&hellip;) del estudiante</strong>.<br />"
" Un estudiante ver&aacute; una tabla con las filas de cabecera,"
" seguidas por la fila con sus calificaciones,"
" y por las filas de pie.";
@ -12014,7 +12014,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ =
" seleccionando la parte deseada de la tabla y guard&aacute;ndola como p&aacute;gina web.<br />"
" Una tabla puede tener <strong>varias filas de cabecera y varias filas de pie</strong>."
" Entre ellas debe haber <strong>una &uacute;nica fila para cada estudiante</strong>,"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula) del estudiante</strong>.<br />"
" con cualquier n&uacute;mero de columnas, conteniendo <strong>la primera columna el ID (DNI/c&eacute;dula&hellip;) del estudiante</strong>.<br />"
" Un estudiante ver&aacute; una tabla con las filas de cabecera,"
" seguidas por la fila con sus calificaciones,"
" y por las filas de pie."; // Okoteve traducción
@ -14226,11 +14226,11 @@ const char *Txt_ID =
#elif L==3
"ID (identity number/passport)";
#elif L==4
"ID (DNI/c&eacute;dula)";
"ID (DNI/c&eacute;dula&hellip;)";
#elif L==5
"Num. d'identit&eacute;";
#elif L==6
"ID (DNI/c&eacute;dula)"; // Okoteve traducción
"ID (DNI/c&eacute;dula&hellip;)"; // Okoteve traducción
#elif L==7
"Numero carta d'identit&agrave;";
#elif L==8
@ -14241,17 +14241,17 @@ const char *Txt_ID =
const char *Txt_ID_X_had_already_been_confirmed = // Warning: it is very important to include %s in the following sentences
#if L==1
"El ID (DNI/c&eacute;dula) %s ja havia estat confirmat.";
"El ID (DNI/c&eacute;dula&hellip;) %s ja havia estat confirmat.";
#elif L==2
"ID %s hatte bereits best&auml;tigt worden.";
#elif L==3
"ID %s had already been confirmed.";
#elif L==4
"El ID (DNI/c&eacute;dula) %s ya hab&iacute;a sido confirmado.";
"El ID (DNI/c&eacute;dula&hellip;) %s ya hab&iacute;a sido confirmado.";
#elif L==5
"L'ID %s avait d&eacute;j&agrave; &eacute;t&eacute; confirm&eacute;e.";
#elif L==6
"El ID (DNI/c&eacute;dula) %s ya hab&iacute;a sido confirmado."; // Okoteve traducción
"El ID (DNI/c&eacute;dula&hellip;) %s ya hab&iacute;a sido confirmado."; // Okoteve traducción
#elif L==7
"L'ID %s era gi&agrave; stato confermato.";
#elif L==8
@ -14262,17 +14262,17 @@ const char *Txt_ID_X_had_already_been_confirmed = // Warning: it is very importa
const char *Txt_ID_X_confirmed = // Warning: it is very important to include %s in the following sentences
#if L==1
"ID (DNI/c&eacute;dula) %s confirmat";
"ID (DNI/c&eacute;dula&hellip;) %s confirmat";
#elif L==2
"ID %s best&auml;tigt";
#elif L==3
"ID %s confirmed";
#elif L==4
"ID (DNI/c&eacute;dula) %s confirmado";
"ID (DNI/c&eacute;dula&hellip;) %s confirmado";
#elif L==5
"ID %s confirm&eacute;";
#elif L==6
"ID (DNI/c&eacute;dula) %s confirmado"; // Okoteve traducción
"ID (DNI/c&eacute;dula&hellip;) %s confirmado"; // Okoteve traducción
#elif L==7
"ID %s confermato";
#elif L==8
@ -14283,17 +14283,17 @@ const char *Txt_ID_X_confirmed = // Warning: it is very important to include %s
const char *Txt_ID_X_not_confirmed = // Warning: it is very important to include %s in the following sentences
#if L==1
"ID (DNI/c&eacute;dula) %s no confirmat";
"ID (DNI/c&eacute;dula&hellip;) %s no confirmat";
#elif L==2
"ID %s nicht best&auml;tigt";
#elif L==3
"ID %s not confirmed";
#elif L==4
"ID (DNI/c&eacute;dula) %s no confirmado";
"ID (DNI/c&eacute;dula&hellip;) %s no confirmado";
#elif L==5
"ID %s pas confirm&eacute;";
#elif L==6
"ID (DNI/c&eacute;dula) %s no confirmado"; // Okoteve traducción
"ID (DNI/c&eacute;dula&hellip;) %s no confirmado"; // Okoteve traducción
#elif L==7
"ID %s non confermato";
#elif L==8
@ -14304,17 +14304,17 @@ const char *Txt_ID_X_not_confirmed = // Warning: it is very important to include
const char *Txt_ID_X_removed = // Warning: it is very important to include %s in the following sentences
#if L==1
"ID (DNI/c&eacute;dula) <strong>%s</strong> eliminat.";
"ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> eliminat.";
#elif L==2
"ID <strong>%s</strong> entfernt.";
#elif L==3
"ID <strong>%s</strong> removed.";
#elif L==4
"ID (DNI/c&eacute;dula) <strong>%s</strong> eliminado.";
"ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> eliminado.";
#elif L==5
"ID <strong>%s</strong> supprim&eacute;.";
#elif L==6
"ID (DNI/c&eacute;dula) <strong>%s</strong> eliminado."; // Okoteve traducción
"ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> eliminado."; // Okoteve traducción
#elif L==7
"ID <strong>%s</strong> rimosso.";
#elif L==8
@ -14386,7 +14386,7 @@ const char *Txt_If_there_are_multiple_versions_of_the_ID_ =
const char *Txt_If_this_is_a_new_user_in_X_you_should_indicate_her_his_ID = // Warning: it is very important to include %s in the following sentences
#if L==1
"Si se trata de un usuario nuevo en %s,"
" debe indicar el ID (DNI/c&eacute;dula)."; // Necessita traduccio
" debe indicar el ID (DNI/c&eacute;dula&hellip;)."; // Necessita traduccio
#elif L==2
"If this is a new user in %s,"
" you should indicate her/his ID."; // Übersetzung notwendig
@ -14395,13 +14395,13 @@ const char *Txt_If_this_is_a_new_user_in_X_you_should_indicate_her_his_ID = // W
" you should indicate her/his ID.";
#elif L==4
"Si se trata de un usuario nuevo en %s,"
" debe indicar el ID (DNI/c&eacute;dula).";
" debe indicar el ID (DNI/c&eacute;dula&hellip;).";
#elif L==5
"If this is a new user in %s,"
" you should indicate her/his ID."; // Besoin de traduction
#elif L==6
"Si se trata de un usuario nuevo en %s,"
" debe indicar el ID (DNI/c&eacute;dula)."; // Okoteve traducción
" debe indicar el ID (DNI/c&eacute;dula&hellip;)."; // Okoteve traducción
#elif L==7
"If this is a new user in %s,"
" you should indicate her/his ID."; // Bisogno di traduzione
@ -14513,7 +14513,7 @@ const char *Txt_If_you_have_forgotten_your_password_ =
const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ =
#if L==1
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula),"
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula&hellip;),"
" y el correo en su ficha es correcto,"
" recibir&aacute; un mensaje con una nueva contrase&ntilde;a."; // Necessita traduccio
#elif L==2
@ -14525,7 +14525,7 @@ const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ =
" and the e-mail address on your record is correct,"
" you will receive an e-mail with a new password.";
#elif L==4
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula),"
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula&hellip;),"
" y el correo en su ficha es correcto,"
" recibir&aacute; un mensaje con una nueva contrase&ntilde;a.";
#elif L==5
@ -14533,7 +14533,7 @@ const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ =
" ainsi que l'adresse e-mail sur votre carte est correct,"
" vous recevrez un e-mail avec un nouveau mot de passe.";
#elif L==6
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula),"
"Si usted ha escrito correctamente su @apodo, correo o ID (DNI/c&eacute;dula&hellip;),"
" y el correo en su ficha es correcto,"
" recibir&aacute; un mensaje con una nueva contrase&ntilde;a."; // Okoteve traducción
#elif L==7
@ -16536,17 +16536,17 @@ const char *Txt_List_of_detailed_clicks =
const char *Txt_List_of_nicks_emails_or_IDs =
#if L==1
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas)"; // Necessita traduccio
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)"; // Necessita traduccio
#elif L==2
"Liste von @Benutzernamen, E-mails oder Ausweis-Nr.";
#elif L==3
"List of @nicks, e-mails or IDs";
#elif L==4
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas)";
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)";
#elif L==5
"Liste de num&eacute;ros d'identit&eacute;";
#elif L==6
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas)"; // Okoteve traducción
"Lista de @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)"; // Okoteve traducción
#elif L==7
"Lista di @nomi-utenti, e-mail o numero carte d'identit&agrave;";
#elif L==8
@ -23543,11 +23543,11 @@ const char *Txt_nick_email_or_ID =
#elif L==3
"@nick, e-mail or ID";
#elif L==4
"@apodo, correo o ID (DNI/c&eacute;dula)";
"@apodo, correo o ID (DNI/c&eacute;dula&hellip;)";
#elif L==5
"@surnom, courrier ou num&eacute;ro d'identit&eacute;";
#elif L==6
"@apodo, correo o ID (DNI/c&eacute;dula)"; // Okoteve traducción
"@apodo, correo o ID (DNI/c&eacute;dula&hellip;)"; // Okoteve traducción
#elif L==7
"@nome-utente, e-mail o numero carta d'identit&agrave;";
#elif L==8
@ -23558,17 +23558,17 @@ const char *Txt_nick_email_or_ID =
const char *Txt_nicks_emails_or_IDs_separated_by_commas =
#if L==1
"@apodos, correos o ID (DNI/c&eacute;dulas) separados por comas"; // Necessita traduccio
"@apodos, correos o ID (DNI/c&eacute;dulas&hellip;) separados por comas"; // Necessita traduccio
#elif L==2
"@Benutzernamen, E-mails oder Ausweis-Nr. durch Kommas getrennt";
#elif L==3
"@nicks, e-mails or IDs separated by commas";
#elif L==4
"@apodos, correos o ID (DNI/c&eacute;dulas) separados por comas";
"@apodos, correos o ID (DNI/c&eacute;dulas&hellip;) separados por comas";
#elif L==5
"@surnoms, courriers ou num&eacute;ros d'identit&eacute; s&eacute;par&eacute;s par des virgules";
#elif L==6
"@apodos, correos o ID (DNI/c&eacute;dulas) separados por comas"; // Okoteve traducción
"@apodos, correos o ID (DNI/c&eacute;dulas&hellip;) separados por comas"; // Okoteve traducción
#elif L==7
"@nomi-utenti, e-mail o numero carte d'identit&agrave; separati da virgole";
#elif L==8
@ -28082,7 +28082,7 @@ const char *Txt_Please_fill_in_your_ID =
" because it facilitates the registration process"
" of users in the courses.";
#elif L==4
"Por favor, rellene su ID (DNI/c&eacute;dula)."
"Por favor, rellene su ID (DNI/c&eacute;dula&hellip;)."
" Es un dato opcional,"
" pero es recomendable que lo rellene"
" porque facilita el proceso de inscripci&oacute;n"
@ -28094,7 +28094,7 @@ const char *Txt_Please_fill_in_your_ID =
" parce qu'il facilite le processus d'enregistrement"
" des utilisateurs dans les mati&egrave;res.";
#elif L==6
"Por favor, rellene su ID (DNI/c&eacute;dula)."
"Por favor, rellene su ID (DNI/c&eacute;dula&hellip;)."
" Es un dato opcional,"
" pero es recomendable que lo rellene"
" porque facilita el proceso de inscripci&oacute;n"
@ -42449,7 +42449,7 @@ const char *Txt_The_HTML_file_has_been_received_successfully =
const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important to include %s in the following sentences
#if L==1
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" ha sido confirmado."; // Necessita traduccio
#elif L==2
"The ID <strong>%s</strong>"
@ -42458,13 +42458,13 @@ const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important t
"The ID <strong>%s</strong>"
" has been confirmed.";
#elif L==4
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" ha sido confirmado.";
#elif L==5
"The ID <strong>%s</strong>"
" has been confirmed."; // Besoin de traduction
#elif L==6
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" ha sido confirmado."; // Okoteve traducción
#elif L==7
"Il ID <strong>%s</strong>"
@ -42479,7 +42479,7 @@ const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important t
const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences
#if L==1
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" se ha registrado correctamente."; // Necessita traduccio
#elif L==2
"The ID <strong>%s</strong>"
@ -42488,13 +42488,13 @@ const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is ve
"The ID <strong>%s</strong>"
" has been registered successfully.";
#elif L==4
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" se ha registrado correctamente.";
#elif L==5
"The ID <strong>%s</strong>"
" has been registered successfully."; // Besoin de traduction
#elif L==6
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" se ha registrado correctamente."; // Okoteve traducción
#elif L==7
"Il ID <strong>%s</strong>"
@ -42509,7 +42509,7 @@ const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is ve
const char *Txt_The_ID_X_is_not_valid = // Warning: it is very important to include %s in the following sentences
#if L==1
"El ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido."
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido."
" Solo puede contener n&uacute;meros (al menos uno) y letras."; // Necessita traduccio
#elif L==2
"The ID <strong>%s</strong> is not valid."
@ -42518,13 +42518,13 @@ const char *Txt_The_ID_X_is_not_valid = // Warning: it is very important to incl
"The ID <strong>%s</strong> is not valid."
" It can only contain numbers (at least one) and letters.";
#elif L==4
"El ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido."
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido."
" Solo puede contener n&uacute;meros (al menos uno) y letras.";
#elif L==5
"The ID <strong>%s</strong> is not valid."
" It can only contain numbers (at least one) and letters."; // Besoin de traduction
#elif L==6
"El ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido."
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido."
" Solo puede contener n&uacute;meros (al menos uno) y letras."; // Okoteve traducción
#elif L==7
"L'ID <strong>%s</strong> non &egrave; valido."
@ -42578,17 +42578,17 @@ const char *Txt_The_ID_is_used_in_order_to_facilitate_ =
const char *Txt_The_ID_nickname_or_email_X_is_not_valid = // Warning: it is very important to include %s in the following sentences
#if L==1
"El @apodo, correo o ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido."; // Necessita traduccio
"El @apodo, correo o ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido."; // Necessita traduccio
#elif L==2
"The @nick, e-mail or ID <strong>%s</strong> is not valid."; // Need Übersetzung
#elif L==3
"The @nick, e-mail or ID <strong>%s</strong> is not valid.";
#elif L==4
"El @apodo, correo o ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido.";
"El @apodo, correo o ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido.";
#elif L==5
"The @nick, e-mail or ID <strong>%s</strong> is not valid."; // Besoin de traduction
#elif L==6
"El @apodo, correo o ID (DNI/c&eacute;dula) <strong>%s</strong> no es v&aacute;lido."; // Okoteve traducción
"El @apodo, correo o ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong> no es v&aacute;lido."; // Okoteve traducción
#elif L==7
"Il @nome-utente, e-mail o ID <strong>%s</strong> non &egrave; valido.";
#elif L==8
@ -42599,7 +42599,7 @@ const char *Txt_The_ID_nickname_or_email_X_is_not_valid = // Warning: it is very
const char *Txt_The_ID_X_matches_one_of_the_existing = // Warning: it is very important to include %s in the following sentences
#if L==1
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" coincide con uno de los existentes."; // Necessita traduccio
#elif L==2
"The ID <strong>%s</strong>"
@ -42608,13 +42608,13 @@ const char *Txt_The_ID_X_matches_one_of_the_existing = // Warning: it is very im
"The ID <strong>%s</strong>"
" matches one of the existing.";
#elif L==4
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" coincide con uno de los existentes.";
#elif L==5
"The ID <strong>%s</strong>"
" matches one of the existing."; // Besoin de traduction
#elif L==6
"El ID (DNI/c&eacute;dula) <strong>%s</strong>"
"El ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>"
" coincide con uno de los existentes."; // Okoteve traducción
#elif L==7
"The ID <strong>%s</strong>"
@ -46079,17 +46079,17 @@ const char *Txt_There_are_no_types_of_group_in_the_course_X = // Warning: it is
const char *Txt_There_are_X_users_with_the_ID_Y = // Warning: it is very important to include %u and %s in the following sentences
#if L==1
"Hi ha %u usuaris amb el ID (DNI/c&eacute;dula) <strong>%s</strong>.";
"Hi ha %u usuaris amb el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>.";
#elif L==2
"There are %u users with the ID <strong>%s</strong>."; // Need Übersetzung
#elif L==3
"There are %u users with the ID <strong>%s</strong>.";
#elif L==4
"Hay %u usuarios con el ID (DNI/c&eacute;dula) <strong>%s</strong>.";
"Hay %u usuarios con el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>.";
#elif L==5
"Il y a %u utilisateurs avec le ID <strong>%s</strong>.";
#elif L==6
"Hay %u usuarios con el ID (DNI/c&eacute;dula) <strong>%s</strong>."; // Okoteve traducción
"Hay %u usuarios con el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Ci sono %u utenti con il ID <strong>%s</strong>.";
#elif L==8
@ -46299,7 +46299,7 @@ const char *Txt_There_is_no_user_with_email_X = // Warning: it is very important
const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_on_Z_ = // Warning: it is very important to include three %s in the following sentences
#if L==1
"No existe ning&uacute;n usuario en %s"
" con el ID (DNI/c&eacute;dula) <strong>%s</strong>."
" con el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>."
" Si usted ya tiene cuenta en %s,"
" inicie sesi&oacute;n y a&ntilde;ada este ID a su cuenta."
" Si no tiene cuenta, puede crear una nueva."; // Necessita traduccio
@ -46317,7 +46317,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o
" If you have no account, you can create a new one.";
#elif L==4
"No existe ning&uacute;n usuario en %s"
" con el ID (DNI/c&eacute;dula) <strong>%s</strong>."
" con el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>."
" Si usted ya tiene cuenta en %s,"
" inicie sesi&oacute;n y a&ntilde;ada este ID a su cuenta."
" Si no tiene cuenta, puede crear una nueva.";
@ -46329,7 +46329,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o
" Si vous n'avez pas de compte, vous pouvez en cr&eacute;er un nouveau.";
#elif L==6
"No existe ning&uacute;n usuario en %s"
" con el ID (DNI/c&eacute;dula) <strong>%s</strong>."
" con el ID (DNI/c&eacute;dula&hellip;) <strong>%s</strong>."
" Si usted ya tiene cuenta en %s,"
" inicie sesi&oacute;n y a&ntilde;ada este ID a su cuenta."
" Si no tiene cuenta, puede crear una nueva."; // Okoteve traducción
@ -46356,7 +46356,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o
const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>."; // Necessita traduccio
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"There is no user"
" with ID, nick or e-mail <strong>%s</strong>."; // Übersetzung notwendig
@ -46365,13 +46365,13 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is ve
" with ID, nick or e-mail <strong>%s</strong>.";
#elif L==4
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>.";
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>.";
#elif L==5
"There is no user"
" with ID, nick or e-mail <strong>%s</strong>."; // Besoin de traduction
#elif L==6
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>."; // Okoteve traducción
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Non c'&egrave; alcun utente"
" con ID, nome utente o e-mail <strong>%s</strong>.";
@ -46386,7 +46386,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is ve
const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>"
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>"
" en la asignatura <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"There is no user"
@ -46398,7 +46398,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // W
" in the course <strong>%s</strong>.";
#elif L==4
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>"
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>"
" en la asignatura <strong>%s</strong>.";
#elif L==5
"There is no user"
@ -46406,7 +46406,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // W
" in the course <strong>%s</strong>."; // Besoin de traduction
#elif L==6
"No existe ning&uacute;n usuario"
" con ID (DNI/c&eacute;dula), apodo o correo <strong>%s</strong>"
" con ID (DNI/c&eacute;dula&hellip;), apodo o correo <strong>%s</strong>"
" en la asignatura <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Non c'&egrave; alcun utente"
@ -48108,12 +48108,12 @@ const char *Txt_Type_of_group_X_removed = // Warning: it is very important to in
const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ =
#if L==1
"Escriba o pegue una lista"
" con @apodos, correos o ID (DNI/c&eacute;dulas)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" con @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas&hellip;);"
" el resto del texto se ignorar&aacute;."; // Necessita traduccio
#elif L==2
"Type or paste a list"
@ -48135,12 +48135,12 @@ const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ =
" the rest of the text will be ignored.";
#elif L==4
"Escriba o pegue una lista"
" con @apodos, correos o ID (DNI/c&eacute;dulas)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" con @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas&hellip;);"
" el resto del texto se ignorar&aacute;.";
#elif L==5
"Type or paste a list"
@ -48153,12 +48153,12 @@ const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ =
" the rest of the text will be ignored."; // Besoin de traduction
#elif L==6
"Escriba o pegue una lista"
" con @apodos, correos o ID (DNI/c&eacute;dulas)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" con @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas&hellip;)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas&hellip;);"
" el resto del texto se ignorar&aacute;."; // Okoteve traducción
#elif L==7
"Scrivi o incolla la lista"
@ -49141,11 +49141,11 @@ const char *Txt_User_ID =
#elif L==3
"User ID";
#elif L==4
"ID (DNI/c&eacute;dula) del usuario";
"ID (DNI/c&eacute;dula&hellip;) del usuario";
#elif L==5
"Num&eacute;ro d'identit&eacute; d'utilisateur";
#elif L==6
"ID (DNI/c&eacute;dula) del usuario"; // Okoteve traducción
"ID (DNI/c&eacute;dula&hellip;) del usuario"; // Okoteve traducción
#elif L==7
"Numero carta d'identit&agrave; utente";
#elif L==8
@ -51320,17 +51320,17 @@ const char *Txt_You_can_not_delete_your_current_nickname =
const char *Txt_You_can_not_delete_this_ID =
#if L==1
"No puede eliminar este ID (DNI/c&eacute;dula)."; // Necessita traduccio
"No puede eliminar este ID (DNI/c&eacute;dula&hellip;)."; // Necessita traduccio
#elif L==2
"You can not delete this ID."; // Need Übersetzung
#elif L==3
"You can not delete this ID.";
#elif L==4
"No puede eliminar este ID (DNI/c&eacute;dula).";
"No puede eliminar este ID (DNI/c&eacute;dula&hellip;).";
#elif L==5
"You can not delete this ID."; // Besoin de traduction
#elif L==6
"No puede eliminar este ID (DNI/c&eacute;dula)."; // Okoteve traducción
"No puede eliminar este ID (DNI/c&eacute;dula&hellip;)."; // Okoteve traducción
#elif L==7
"Non puoi cancellare questo ID.";
#elif L==8
@ -52925,11 +52925,11 @@ const char *Txt_You_must_enter_your_nick_email_or_ID =
#elif L==3
"You must enter your @nick, e-mail or ID.";
#elif L==4
"Debe escribir su @apodo, correo o ID (DNI/c&eacute;dula).";
"Debe escribir su @apodo, correo o ID (DNI/c&eacute;dula&hellip;).";
#elif L==5
"Vous devez entrer votre @surnom, courrier ou num&eacute;ro d'identit&eacute;.";
#elif L==6
"Debe escribir su @apodo, correo o ID (DNI/c&eacute;dula)."; // Okoteve traducción
"Debe escribir su @apodo, correo o ID (DNI/c&eacute;dula&hellip;)."; // Okoteve traducción
#elif L==7
"Devi inserire il tuo @nome-utente, e-mail o numero carta d'identit&agrave;.";
#elif L==8