From ea2aa6df16d4eed27915c83651dcf65425d1d917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 15 Jun 2016 14:42:28 +0200 Subject: [PATCH] Version 15.225.6 --- swad_changelog.h | 3 +- swad_enrollment.c | 1 + swad_test.c | 8 ++-- swad_text.c | 103 ++++++++++++++++++++++++++++++++++++++----- swad_user.c | 110 ++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 206 insertions(+), 19 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 21ad0979d..09a58d16a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -128,13 +128,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.225.5 (2016-06-15)" +#define Log_PLATFORM_VERSION "SWAD 15.225.6 (2016-06-15)" #define CSS_FILE "swad15.224.3.css" #define JS_FILE "swad15.216.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.225.6: Jun 15, 2016 Listing possible duplicate users. (202761 lines) Version 15.225.5: Jun 15, 2016 Simplification in texts (links) to view guests and admins. (202586 lines) Version 15.225.4: Jun 15, 2016 Listing possible duplicate users. Not finished. (202623 lines) 1 change necessary in database: diff --git a/swad_enrollment.c b/swad_enrollment.c index 0236062b8..a2c4f6ff5 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -2836,6 +2836,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected) /***** User name *****/ fprintf (Gbl.F.Out,""); Usr_RestrictLengthAndWriteName (&UsrDat,20); + fprintf (Gbl.F.Out,""); /***** Requested role (row[3]) *****/ fprintf (Gbl.F.Out,"" diff --git a/swad_test.c b/swad_test.c index 1d935e6cd..151095b94 100644 --- a/swad_test.c +++ b/swad_test.c @@ -4047,7 +4047,7 @@ static void Tst_WriteFloatAnsAssessExam (unsigned NumQst,MYSQL_RES *mysql_res, static void Tst_WriteHeadUserCorrect (void) { - extern const char *Txt_User; + extern const char *Txt_User[Usr_NUM_SEXS]; extern const char *Txt_TST_Correct_ANSWER; fprintf (Gbl.F.Out,"" @@ -4056,7 +4056,7 @@ static void Tst_WriteHeadUserCorrect (void) "" " %s " "", - Txt_User,Txt_TST_Correct_ANSWER); + Txt_User[Usr_SEX_UNKNOWN],Txt_TST_Correct_ANSWER); } /*****************************************************************************/ @@ -7006,7 +7006,7 @@ void Tst_ShowUsrsExams (void) static void Tst_ShowHeaderTestResults (void) { - extern const char *Txt_User; + extern const char *Txt_User[Usr_NUM_SEXS]; extern const char *Txt_Date; extern const char *Txt_Questions; extern const char *Txt_Non_blank_BR_questions; @@ -7039,7 +7039,7 @@ static void Tst_ShowHeaderTestResults (void) "" "" "", - Txt_User, + Txt_User[Usr_SEX_UNKNOWN], Txt_Date, Txt_Questions, Txt_Non_blank_BR_questions, diff --git a/swad_text.c b/swad_text.c index 9d597d9af..63c6bd745 100644 --- a/swad_text.c +++ b/swad_text.c @@ -15299,6 +15299,27 @@ const char *Txt_INFO_SRC_SHORT_TEXT[Inf_NUM_INFO_SOURCES] = #endif }; +const char *Txt_Informants = +#if L==1 + "Informadors"; +#elif L==2 + "Informanten"; +#elif L==3 + "Informants"; +#elif L==4 + "Informantes"; +#elif L==5 + "Informateurs"; +#elif L==6 + "Informantes"; // Okoteve traducción +#elif L==7 + "Informatori"; +#elif L==8 + "informatorów"; +#elif L==9 + "Informantes"; +#endif + const char *Txt_Inline_math = #if L==1 "Fórmula"; @@ -49018,26 +49039,88 @@ const char *Txt_Use_this_nickname = "Utilizar esta alcunha"; #endif -const char *Txt_User = +const char *Txt_User[Usr_NUM_SEXS] = + { // Usr_SEX_UNKNOWN #if L==1 - "Usuari"; + "Usuari/a" #elif L==2 - "Benutzer"; + "Benutzer" #elif L==3 - "User"; + "User" #elif L==4 - "Usuario"; + "Usuario/a" #elif L==5 - "Utilisateur"; + "Utilisateur/se" #elif L==6 - "Puruhára"; + "Puruhãra" #elif L==7 - "Utente"; + "Utente" #elif L==8 - "User"; // Potrzebujesz tlumaczenie + "Użytkownika" #elif L==9 - "Utilizador"; + "Utilizador/a" #endif + , // Usr_SEX_FEMALE +#if L==1 + "Usuaria" +#elif L==2 + "Benutzer" +#elif L==3 + "User" +#elif L==4 + "Usuaria" +#elif L==5 + "Utilisateuse" +#elif L==6 + "Puruhãra" +#elif L==7 + "Utente" +#elif L==8 + "Użytkownika" +#elif L==9 + "Utilizadora" +#endif + , // Usr_SEX_MALE +#if L==1 + "Usuari" +#elif L==2 + "Benutzer" +#elif L==3 + "User" +#elif L==4 + "Usuario" +#elif L==5 + "Utilisateur" +#elif L==6 + "Puruhãra" +#elif L==7 + "Utente" +#elif L==8 + "Użytkownika" +#elif L==9 + "Utilizador" +#endif + , // Usr_SEX_ALL +#if L==1 + "Usuari/a" +#elif L==2 + "Benutzer" +#elif L==3 + "User" +#elif L==4 + "Usuario/a" +#elif L==5 + "Utilisateur/se" +#elif L==6 + "Puruhãra" +#elif L==7 + "Utente" +#elif L==8 + "Użytkownika" +#elif L==9 + "Utilizador/a" +#endif + }; const char *Txt_user[Usr_NUM_SEXS] = { // Usr_SEX_UNKNOWN diff --git a/swad_user.c b/swad_user.c index f18077387..20e21a911 100644 --- a/swad_user.c +++ b/swad_user.c @@ -1486,7 +1486,7 @@ void Usr_PutLinkToLogin (void) void Usr_WriteFormLogin (void) { extern const char *Txt_Log_in; - extern const char *Txt_User; + extern const char *Txt_User[Usr_NUM_SEXS]; extern const char *Txt_nick_email_or_ID; extern const char *Txt_Password; extern const char *Txt_password; @@ -1530,8 +1530,8 @@ void Usr_WriteFormLogin (void) "" "", Gbl.Prefs.IconsURL, - Txt_User, - Txt_User, + Txt_User[Usr_SEX_UNKNOWN], + Txt_User[Usr_SEX_UNKNOWN], Usr_MAX_LENGTH_USR_LOGIN, Txt_nick_email_or_ID, Gbl.Usrs.Me.UsrIdLogin, @@ -7903,11 +7903,113 @@ void Usr_PutLinkToListDupUsrs (void) void Usr_ListDuplicateUsrs (void) { extern const char *Txt_Possibly_duplicate_users; + extern const char *Txt_User[Usr_NUM_SEXS]; + extern const char *Txt_Informants; + extern const char *Txt_Date; + extern const char *Txt_No_users_found[Rol_NUM_ROLES]; + char Query[1024]; + MYSQL_RES *mysql_res; + MYSQL_ROW row; + unsigned NumUsrs; + unsigned NumUsr; + struct UsrData UsrDat; + unsigned NumInformers; + bool ShowPhoto = false; + char PhotoURL[PATH_MAX+1]; /***** Start frame with list of possible duplicate users *****/ Lay_StartRoundFrame (NULL,Txt_Possibly_duplicate_users,NULL); - Lay_ShowAlert (Lay_INFO,"Option under development."); // TODO: Write listing of users + /***** Build query *****/ + sprintf (Query,"SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T" + " FROM usr_duplicated" + " GROUP BY UsrCod" + " ORDER BY N DESC,T DESC"); + NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get requests for enrollment"); + + /***** List possible duplicated users *****/ + if (NumUsrs) + { + /* Initialize structure with user's data */ + Usr_UsrDataConstructor (&UsrDat); + + /* Start table */ + fprintf (Gbl.F.Out,"" + "" + "" + "" + "" + "", + Txt_User[Usr_SEX_UNKNOWN], + Txt_Informants, + Txt_Date); + + /* List users */ + for (NumUsr = 0; + NumUsr < NumUsrs; + NumUsr++) + { + row = mysql_fetch_row (mysql_res); + + /* Get user code (row[0]) */ + UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]); + if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) + { + /***** Number *****/ + fprintf (Gbl.F.Out,"" + "", + NumUsrs - NumUsr); + + /***** User photo *****/ + fprintf (Gbl.F.Out,""); + + /***** User name *****/ + fprintf (Gbl.F.Out,""); + + /***** Number of informers (row[1]) *****/ + if (sscanf (row[1],"%u",&NumInformers) != 1) + Lay_ShowErrorAndExit ("Wrong number of informers."); + fprintf (Gbl.F.Out,"", + NumInformers); + + /***** Inform time (row[2]) *****/ + Msg_WriteMsgDate (Dat_GetUNIXTimeFromStr (row[2]),"DAT"); + + fprintf (Gbl.F.Out,""); + } + else // User does not exists or user already belongs to course ==> remove user from table of possible duplicate users + { + // TODO: Remove user from table of possible duplicate users + } + } + + /* End table */ + fprintf (Gbl.F.Out,"
" + "%s" + "" + "%s" + "" + "%s" + "
" + "%u" + ""); + ShowPhoto = Pho_ShowUsrPhotoIsAllowed (&UsrDat,PhotoURL); + Pho_ShowUsrPhoto (&UsrDat,ShowPhoto ? PhotoURL : + NULL, + "PHOTO21x28",Pho_ZOOM,false); + fprintf (Gbl.F.Out,""); + Usr_RestrictLengthAndWriteName (&UsrDat,20); + fprintf (Gbl.F.Out,"" + "%u" + "
"); + + /* Free memory used for user's data */ + Usr_UsrDataDestructor (&UsrDat); + } + else // There are no users + Lay_ShowAlert (Lay_INFO,Txt_No_users_found[Rol_UNKNOWN]); /***** End frame *****/ Lay_EndRoundFrame ();